From 07db6c734bfa06ad2692c3893370366e25d25c1d Mon Sep 17 00:00:00 2001 From: Vladimir Date: Tue, 16 Jun 2020 00:59:22 +0200 Subject: [PATCH 01/13] code-format and remove L1Trigger/Vertex.h dependencies. --- L1Trigger/Phase2L1ParticleFlow/BuildFile.xml | 17 + L1Trigger/Phase2L1ParticleFlow/README.md | 37 + .../data/emcorr_barrel.root | Bin 0 -> 12537 bytes .../Phase2L1ParticleFlow/data/emcorr_hgc.root | Bin 0 -> 18566 bytes .../data/emcorr_hgc_106X.root | Bin 0 -> 20870 bytes .../data/emcorr_hgc_110X.root | Bin 0 -> 21302 bytes .../data/hadcorr_HGCal3D_TC.root | Bin 0 -> 78557 bytes .../data/hadcorr_HGCal3D_TC_106X.root | Bin 0 -> 88911 bytes .../data/hadcorr_HGCal3D_TC_110X.root | Bin 0 -> 90403 bytes .../data/hadcorr_barrel.root | Bin 0 -> 39161 bytes .../data/hadcorr_barrel_106X.root | Bin 0 -> 39397 bytes .../data/hadcorr_barrel_110X.root | Bin 0 -> 39605 bytes .../Phase2L1ParticleFlow/data/hfcorr.root | Bin 0 -> 15329 bytes .../data/hfcorr_106X.root | Bin 0 -> 24210 bytes .../data/hfcorr_110X.root | Bin 0 -> 24163 bytes .../Photon_Pion_vs_Neutrino_BDTweights.xml.gz | Bin 0 -> 144127 bytes .../Photon_vs_Pion_BDTweights.xml.gz | Bin 0 -> 142020 bytes .../data/jecs/jecs.PU200_106X.root | Bin 0 -> 234131 bytes .../data/jecs/jecs.PU200_110X.root | Bin 0 -> 234378 bytes .../interface/BitwisePFAlgo.h | 22 + .../Phase2L1ParticleFlow/interface/COEFile.h | 43 + .../interface/CaloClusterer.h | 297 ++++++ .../interface/DiscretePFInputs.h | 244 +++++ .../interface/DiscretePFInputsIO.h | 143 +++ .../interface/HGC3DClusterEgID.h | 91 ++ .../interface/L1TPFUtils.h | 13 + .../interface/LinearizedPuppiAlgo.h | 33 + .../interface/PFAlgo2HGC.h | 76 ++ .../Phase2L1ParticleFlow/interface/PFAlgo3.h | 109 +++ .../interface/PFAlgoBase.h | 38 + .../interface/PUAlgoBase.h | 34 + .../interface/ParametricResolution.h | 67 ++ .../interface/PuppiAlgo.h | 38 + .../Phase2L1ParticleFlow/interface/Region.h | 104 ++ .../interface/RegionMapper.h | 57 ++ .../interface/SimpleCalibrations.h | 174 ++++ .../plugins/BuildFile.xml | 12 + .../plugins/L1TCorrectedPFJetProducer.cc | 58 ++ .../plugins/L1TPFCaloProducer.cc | 296 ++++++ .../plugins/L1TPFCandMerger.cc | 7 + .../plugins/L1TPFCandMultiMerger.cc | 51 + .../plugins/L1TPFCandSelector.cc | 8 + .../plugins/L1TPFJetMetTreeProducer.cc | 321 +++++++ .../plugins/L1TPFProducer.cc | 381 ++++++++ .../PFClusterProducerFromHGC3DClusters.cc | 111 +++ .../PFClusterProducerFromL1EGClusters.cc | 60 ++ .../plugins/PFTrackProducerFromL1Tracks.cc | 86 ++ .../python/l1ParticleFlow_cff.py | 316 ++++++ .../python/l1pfJetMet_cff.py | 38 + .../python/l1pfProducer_cfi.py | 72 ++ .../python/pfClustersFromCombinedCalo_cfi.py | 57 ++ .../pfClustersFromHGC3DClustersEM_cfi.py | 38 + .../python/pfClustersFromHGC3DClusters_cfi.py | 65 ++ .../python/pfClustersFromL1EGClusters_cfi.py | 37 + .../python/pfTracksFromL1Tracks_cfi.py | 22 + .../Phase2L1ParticleFlow/src/BitwisePFAlgo.cc | 204 ++++ L1Trigger/Phase2L1ParticleFlow/src/COEFile.cc | 127 +++ .../Phase2L1ParticleFlow/src/CaloClusterer.cc | 640 ++++++++++++ .../src/DiscretePFInputsIO.cc | 1 + .../src/HGC3DClusterEgID.cc | 1 + .../Phase2L1ParticleFlow/src/L1TPFUtils.cc | 17 + .../src/LinearizedPuppiAlgo.cc | 141 +++ .../Phase2L1ParticleFlow/src/PFAlgo2HGC.cc | 648 +++++++++++++ L1Trigger/Phase2L1ParticleFlow/src/PFAlgo3.cc | 908 ++++++++++++++++++ .../Phase2L1ParticleFlow/src/PFAlgoBase.cc | 57 ++ .../Phase2L1ParticleFlow/src/PUAlgoBase.cc | 81 ++ .../src/ParametricResolution.cc | 1 + .../Phase2L1ParticleFlow/src/PuppiAlgo.cc | 265 +++++ L1Trigger/Phase2L1ParticleFlow/src/Region.cc | 124 +++ .../Phase2L1ParticleFlow/src/RegionMapper.cc | 341 +++++++ .../Phase2L1ParticleFlow/src/corrector.cc | 193 ++++ .../Phase2L1ParticleFlow/src/corrector.h | 65 ++ .../Phase2L1ParticleFlow/src/firmware/data.h | 209 ++++ .../src/firmware/pfalgo2hgc.h | 46 + .../src/firmware/pfalgo3.h | 56 ++ .../src/firmware/pfalgo_common.h | 16 + .../src/ref/pfalgo2hgc_ref.cpp | 196 ++++ .../src/ref/pfalgo2hgc_ref.h | 17 + .../src/ref/pfalgo3_ref.cpp | 485 ++++++++++ .../src/ref/pfalgo3_ref.h | 57 ++ .../src/ref/pfalgo_common_ref.cpp | 49 + .../src/ref/pfalgo_common_ref.h | 93 ++ .../src/utils/DiscretePF2Firmware.h | 69 ++ .../src/utils/Firmware2DiscretePF.h | 161 ++++ .../Phase2L1ParticleFlow/test/BuildFile.xml | 9 + .../test/l1pfJetMetTreeProducer.py | 31 + .../test/testOutputFiles.cpp | 611 ++++++++++++ 87 files changed, 9592 insertions(+) create mode 100644 L1Trigger/Phase2L1ParticleFlow/BuildFile.xml create mode 100644 L1Trigger/Phase2L1ParticleFlow/README.md create mode 100644 L1Trigger/Phase2L1ParticleFlow/data/emcorr_barrel.root create mode 100644 L1Trigger/Phase2L1ParticleFlow/data/emcorr_hgc.root create mode 100644 L1Trigger/Phase2L1ParticleFlow/data/emcorr_hgc_106X.root create mode 100644 L1Trigger/Phase2L1ParticleFlow/data/emcorr_hgc_110X.root create mode 100644 L1Trigger/Phase2L1ParticleFlow/data/hadcorr_HGCal3D_TC.root create mode 100644 L1Trigger/Phase2L1ParticleFlow/data/hadcorr_HGCal3D_TC_106X.root create mode 100644 L1Trigger/Phase2L1ParticleFlow/data/hadcorr_HGCal3D_TC_110X.root create mode 100644 L1Trigger/Phase2L1ParticleFlow/data/hadcorr_barrel.root create mode 100644 L1Trigger/Phase2L1ParticleFlow/data/hadcorr_barrel_106X.root create mode 100644 L1Trigger/Phase2L1ParticleFlow/data/hadcorr_barrel_110X.root create mode 100644 L1Trigger/Phase2L1ParticleFlow/data/hfcorr.root create mode 100644 L1Trigger/Phase2L1ParticleFlow/data/hfcorr_106X.root create mode 100644 L1Trigger/Phase2L1ParticleFlow/data/hfcorr_110X.root create mode 100644 L1Trigger/Phase2L1ParticleFlow/data/hgcal_egID/Photon_Pion_vs_Neutrino_BDTweights.xml.gz create mode 100644 L1Trigger/Phase2L1ParticleFlow/data/hgcal_egID/Photon_vs_Pion_BDTweights.xml.gz create mode 100644 L1Trigger/Phase2L1ParticleFlow/data/jecs/jecs.PU200_106X.root create mode 100644 L1Trigger/Phase2L1ParticleFlow/data/jecs/jecs.PU200_110X.root create mode 100644 L1Trigger/Phase2L1ParticleFlow/interface/BitwisePFAlgo.h create mode 100644 L1Trigger/Phase2L1ParticleFlow/interface/COEFile.h create mode 100644 L1Trigger/Phase2L1ParticleFlow/interface/CaloClusterer.h create mode 100644 L1Trigger/Phase2L1ParticleFlow/interface/DiscretePFInputs.h create mode 100644 L1Trigger/Phase2L1ParticleFlow/interface/DiscretePFInputsIO.h create mode 100644 L1Trigger/Phase2L1ParticleFlow/interface/HGC3DClusterEgID.h create mode 100644 L1Trigger/Phase2L1ParticleFlow/interface/L1TPFUtils.h create mode 100644 L1Trigger/Phase2L1ParticleFlow/interface/LinearizedPuppiAlgo.h create mode 100644 L1Trigger/Phase2L1ParticleFlow/interface/PFAlgo2HGC.h create mode 100644 L1Trigger/Phase2L1ParticleFlow/interface/PFAlgo3.h create mode 100644 L1Trigger/Phase2L1ParticleFlow/interface/PFAlgoBase.h create mode 100644 L1Trigger/Phase2L1ParticleFlow/interface/PUAlgoBase.h create mode 100644 L1Trigger/Phase2L1ParticleFlow/interface/ParametricResolution.h create mode 100644 L1Trigger/Phase2L1ParticleFlow/interface/PuppiAlgo.h create mode 100644 L1Trigger/Phase2L1ParticleFlow/interface/Region.h create mode 100644 L1Trigger/Phase2L1ParticleFlow/interface/RegionMapper.h create mode 100644 L1Trigger/Phase2L1ParticleFlow/interface/SimpleCalibrations.h create mode 100644 L1Trigger/Phase2L1ParticleFlow/plugins/BuildFile.xml create mode 100644 L1Trigger/Phase2L1ParticleFlow/plugins/L1TCorrectedPFJetProducer.cc create mode 100644 L1Trigger/Phase2L1ParticleFlow/plugins/L1TPFCaloProducer.cc create mode 100644 L1Trigger/Phase2L1ParticleFlow/plugins/L1TPFCandMerger.cc create mode 100644 L1Trigger/Phase2L1ParticleFlow/plugins/L1TPFCandMultiMerger.cc create mode 100644 L1Trigger/Phase2L1ParticleFlow/plugins/L1TPFCandSelector.cc create mode 100644 L1Trigger/Phase2L1ParticleFlow/plugins/L1TPFJetMetTreeProducer.cc create mode 100644 L1Trigger/Phase2L1ParticleFlow/plugins/L1TPFProducer.cc create mode 100644 L1Trigger/Phase2L1ParticleFlow/plugins/PFClusterProducerFromHGC3DClusters.cc create mode 100644 L1Trigger/Phase2L1ParticleFlow/plugins/PFClusterProducerFromL1EGClusters.cc create mode 100644 L1Trigger/Phase2L1ParticleFlow/plugins/PFTrackProducerFromL1Tracks.cc create mode 100644 L1Trigger/Phase2L1ParticleFlow/python/l1ParticleFlow_cff.py create mode 100644 L1Trigger/Phase2L1ParticleFlow/python/l1pfJetMet_cff.py create mode 100644 L1Trigger/Phase2L1ParticleFlow/python/l1pfProducer_cfi.py create mode 100644 L1Trigger/Phase2L1ParticleFlow/python/pfClustersFromCombinedCalo_cfi.py create mode 100644 L1Trigger/Phase2L1ParticleFlow/python/pfClustersFromHGC3DClustersEM_cfi.py create mode 100644 L1Trigger/Phase2L1ParticleFlow/python/pfClustersFromHGC3DClusters_cfi.py create mode 100644 L1Trigger/Phase2L1ParticleFlow/python/pfClustersFromL1EGClusters_cfi.py create mode 100644 L1Trigger/Phase2L1ParticleFlow/python/pfTracksFromL1Tracks_cfi.py create mode 100644 L1Trigger/Phase2L1ParticleFlow/src/BitwisePFAlgo.cc create mode 100644 L1Trigger/Phase2L1ParticleFlow/src/COEFile.cc create mode 100644 L1Trigger/Phase2L1ParticleFlow/src/CaloClusterer.cc create mode 100644 L1Trigger/Phase2L1ParticleFlow/src/DiscretePFInputsIO.cc create mode 100644 L1Trigger/Phase2L1ParticleFlow/src/HGC3DClusterEgID.cc create mode 100644 L1Trigger/Phase2L1ParticleFlow/src/L1TPFUtils.cc create mode 100644 L1Trigger/Phase2L1ParticleFlow/src/LinearizedPuppiAlgo.cc create mode 100644 L1Trigger/Phase2L1ParticleFlow/src/PFAlgo2HGC.cc create mode 100644 L1Trigger/Phase2L1ParticleFlow/src/PFAlgo3.cc create mode 100644 L1Trigger/Phase2L1ParticleFlow/src/PFAlgoBase.cc create mode 100644 L1Trigger/Phase2L1ParticleFlow/src/PUAlgoBase.cc create mode 100644 L1Trigger/Phase2L1ParticleFlow/src/ParametricResolution.cc create mode 100644 L1Trigger/Phase2L1ParticleFlow/src/PuppiAlgo.cc create mode 100644 L1Trigger/Phase2L1ParticleFlow/src/Region.cc create mode 100644 L1Trigger/Phase2L1ParticleFlow/src/RegionMapper.cc create mode 100644 L1Trigger/Phase2L1ParticleFlow/src/corrector.cc create mode 100644 L1Trigger/Phase2L1ParticleFlow/src/corrector.h create mode 100644 L1Trigger/Phase2L1ParticleFlow/src/firmware/data.h create mode 100644 L1Trigger/Phase2L1ParticleFlow/src/firmware/pfalgo2hgc.h create mode 100644 L1Trigger/Phase2L1ParticleFlow/src/firmware/pfalgo3.h create mode 100644 L1Trigger/Phase2L1ParticleFlow/src/firmware/pfalgo_common.h create mode 100644 L1Trigger/Phase2L1ParticleFlow/src/ref/pfalgo2hgc_ref.cpp create mode 100644 L1Trigger/Phase2L1ParticleFlow/src/ref/pfalgo2hgc_ref.h create mode 100644 L1Trigger/Phase2L1ParticleFlow/src/ref/pfalgo3_ref.cpp create mode 100644 L1Trigger/Phase2L1ParticleFlow/src/ref/pfalgo3_ref.h create mode 100644 L1Trigger/Phase2L1ParticleFlow/src/ref/pfalgo_common_ref.cpp create mode 100644 L1Trigger/Phase2L1ParticleFlow/src/ref/pfalgo_common_ref.h create mode 100644 L1Trigger/Phase2L1ParticleFlow/src/utils/DiscretePF2Firmware.h create mode 100644 L1Trigger/Phase2L1ParticleFlow/src/utils/Firmware2DiscretePF.h create mode 100644 L1Trigger/Phase2L1ParticleFlow/test/BuildFile.xml create mode 100644 L1Trigger/Phase2L1ParticleFlow/test/l1pfJetMetTreeProducer.py create mode 100644 L1Trigger/Phase2L1ParticleFlow/test/testOutputFiles.cpp diff --git a/L1Trigger/Phase2L1ParticleFlow/BuildFile.xml b/L1Trigger/Phase2L1ParticleFlow/BuildFile.xml new file mode 100644 index 0000000000000..80c5ef5582689 --- /dev/null +++ b/L1Trigger/Phase2L1ParticleFlow/BuildFile.xml @@ -0,0 +1,17 @@ + + + + + + + + + + + + + + + + + diff --git a/L1Trigger/Phase2L1ParticleFlow/README.md b/L1Trigger/Phase2L1ParticleFlow/README.md new file mode 100644 index 0000000000000..c308910cbdb1f --- /dev/null +++ b/L1Trigger/Phase2L1ParticleFlow/README.md @@ -0,0 +1,37 @@ +1) Basic Instructions + +``` +cmsrel CMSSW_10_1_0_pre3 +cd CMSSW_10_1_0_pre3/src +cmsenv +git cms-init +git remote add cms-l1t-offline git@github.com:cms-l1t-offline/cmssw.git +git fetch cms-l1t-offline phase2-l1t-integration-CMSSW_10_1_0_pre3 +git cms-merge-topic -u cms-l1t-offline:l1t-phase2-v2.7 + +# +# Tracklet Tracks +# +git remote add rekovic git@github.com:rekovic/cmssw.git +git fetch rekovic Tracklet-10_1_0_pre3 +git cms-merge-topic -u rekovic:Tracklet-10_1_0_pre3-from-skinnari + +# Remove tracklets from history +git reset --soft cms-l1t-offline/l1t-phase2-v2.7 +git reset HEAD L1Trigger + +# Get L1PF_CMSSW +git remote add p2l1pfp git@github.com:p2l1pfp/cmssw.git +git fetch p2l1pfp L1PF_CMSSW +echo -e '/DataFormats/L1TParticleFlow/\n/L1Trigger/Phase2L1ParticleFlow/' >> .git/info/sparse-checkout +git read-tree -mu HEAD +git checkout -b L1PF_CMSSW p2l1pfp/L1PF_CMSSW + +scram b -j8 +``` + +2) Ntuple for jets, jet HT and MET studies + +``` +cmsRun test/l1pfJetMetTreeProducer.py +``` diff --git a/L1Trigger/Phase2L1ParticleFlow/data/emcorr_barrel.root b/L1Trigger/Phase2L1ParticleFlow/data/emcorr_barrel.root new file mode 100644 index 0000000000000000000000000000000000000000..7ba33df55cad246639f5e2ba209964d40079f2c3 GIT binary patch literal 12537 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

0Td>!PeVt3en$g6%NSi`d|GNWSz4W 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 literal 0 HcmV?d00001 diff --git a/L1Trigger/Phase2L1ParticleFlow/data/hadcorr_HGCal3D_TC.root b/L1Trigger/Phase2L1ParticleFlow/data/hadcorr_HGCal3D_TC.root new file mode 100644 index 0000000000000000000000000000000000000000..2ac09e1418f504b7df38d33128c9a127c4e08a22 GIT binary patch literal 78557 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%0D~ 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 literal 0 HcmV?d00001 diff --git a/L1Trigger/Phase2L1ParticleFlow/data/hadcorr_barrel.root b/L1Trigger/Phase2L1ParticleFlow/data/hadcorr_barrel.root new file mode 100644 index 0000000000000000000000000000000000000000..48014f71ee080a2cccba9d96181c57c9146e60d5 GIT binary patch literal 39161 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

KpJzoq?OuO$Ifx=C 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 literal 0 HcmV?d00001 diff --git a/L1Trigger/Phase2L1ParticleFlow/data/hadcorr_barrel_106X.root b/L1Trigger/Phase2L1ParticleFlow/data/hadcorr_barrel_106X.root new file mode 100644 index 0000000000000000000000000000000000000000..c91860c833ab09e3cd76c010ad665f39a7539a3a GIT binary patch literal 39397 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%0AHD+B!PnUs&{635Bv;@n3;K{iWl zkvvzOr7-m`ng9_V$H6&tg;fj5#5yD;J}JD9mErcG8)@dMc?-FV#P zW*)ykdxa+Djzg0UO)}0n%o{%>L=C}sXiWejAU_>?z0owVYPboRUw9JO2rUeQ#z+xm z_i17>s47TjF;RE`*hE8e1sB8~P8IJ4KUpMR0cs33gPX(??-0NC$f+4@URY~-cA&7a ziEEM0{%F2u%)~S(Zh0y8;-&T`dX5%5nCi`hPRF@nHYdb@O0u(YA8jq8OQ{c^e&E(F zcFDuGM=hd+Ne813PFYXrrq7x?Mj0V?p&)zYtogf3g}t81hmxjmbSa{qS*)L!rDHhb zD!rVw@fQiZpW^2-L_Od6%$56T)dn6G(*gx+YnINq)QcxMW9u(vHBc4>tu0gHQYQMN z8()w)B4+cQwbH_=YgI#%Xs!z;e#{Y^D}0cL;OFMz;sP3Z_~$IU+xmB2E>~NEDubDk z$}!Q-%nSDIZz0Jc=dU~iz+4wF0MjQKji7;W>?EMCGaD@F38X}n67ulDV~&B7ccJ*D zIzt(w(=QBlUuSRh;y*i6#}5T9Js$Z5-~t9Ib|Bhr)Kac~Z^$jXf9lEoJrO?cx8w;S z63~g)JF6lIP6^u#gBz2v4l4h1b%=%ba4 zzVFK)mtxJFCY1Vo0nrb*qO_14yP#Hqu@KaL+~*2$E_7EgIV3deJe<;|(D2cYw!Ink zqC=(;Qwu9JTPmmbnquU~^&$)GR`ALASrlW{8I4tJY#y%b=C-8y#qc{(9Yz7JXJc+5 z%2~Q~^c(SXX)g&1Ch?R0MUDnY;!XdQD#@#w$;P?;agS_oOyCTZjx>v2_Z$03cdZS$ z(uIn6UEW8E*+Q6#s|0&ZjQ*x&fuXJyj5GaJgGca^K;)P`tl%wtiW2OLnB$(}u57Jo=sujc=SgxUVRHrVzbhVY*~xwReiSW#G8G(;>casz*;?Yqj()9T~y zRUmlFyGjRISP?fFY||XhC=C(|3-EgBjFhh`?osF@Z{iK}zi*|JFcQyFlx@UUd zUX8WXuytrL%g6kx4YmsDtNgn*m^DJy+*F2$kAWQc{K^P^az7#qrDcFC)o*$oPtP0$ zVcf%9kJ8CJmV4&WTl#W_EXzS>%I(dI@#8F1&c4Wu#F#BDZB4;_=mnaQc#x1)bJWgT zwcSyY5CTYtt=Co~KZWMQc>8+*ZM`s3?DtXme;YEANt6Oa1V ziE2BHh8kFAA4Dn-PQtl)<^t>aJe(svgBa3E^m!di+qZ>7Klc_Z)-{`|9`M`tRGSip zr}EyldA)&dzR0sSnziB1*BR*5ZM%eo z!5xF-lIVSxHu1{!Eao4%h@?bfKuRCps8}ILOXw3Bw8h4r8tcBb^@Q6D3ooSrX1yQ> z<5kq|6*`#eQylWA*-^RH+P$zseeSh_64=Q1!@ef(pwaMLIi6?pM8)OKz1%5X07@M@ z)@$}2G&v}BkjaoY9uld6>RW;q%@-7jaus7b~V@xfF=6jeJ&v@h#s#Z%Jt$18NQZK%EWhp z6EtPPM=$Y$THd~21~(XduIEd1W>5a5S7j`Sz$4)MuIAnX9s+5q#bhf79ZZgzHgaV% zKFPz?w83k1C@R%T__J;uU^92@oAydFiTis+V9IPoY^(B_hW{vJjLnsMe2WutIA>P|bZH`b^PvPq8&f;c6&bN;W#Piv4VwW;UGsRoMvAk>U zw^ak2(zzk|6(4314}M-OZ`NDJo&u}4?}dV|aa`2;DP0HC?x_%C0!Si%t|`AACZVIQ zRN!sItoA;_>0hw*Kkj#N@AZ_6<>N?z@>xT6-)?HY*Mo@N0}-U&0rdSUjCZ^*g5T3a z$-8nibn3L_9D;frVKkn-HVvlYtU;6tukyP$5pA3K15&;ro6SWfpG1ihqDQ1`c3VW7 z3LR_))O@M0EP9ilzhsy4eYk$6a#wVDsXf|$9?yCMJaV_}Mk^$HITUEDz$)fnf~zZ~ zQk;?7RW0ZMQ!CIv%&&P-jEO8N{7M?aE4r$vmxSPKvs>3)E~j{QZ^zA7i*{(KR`VlM z-@o6mL-_HUg?)qSDo+{5%%NNrq5U>6|Mu3^O$<_QpoU1^g|ik}e(RaZI*4ABJzm{&Z*n}v7@#%klv5cYP4o!PISMzq(F#+-oJd8xdG@z z;dJte!B>_Cu}xP>P2+-Mp9d)aw7h`u{AEKMXFhsju5mGQg%#z&B{O*70o|~2YY@Lr zi`nkW@a>#0V$YY_<`wx+gS(vb&H5ja%(d40B~KTEQS~iUW$6OQ{fd^V2Osot8HDH= z8%IO!UFZ5s_hqqU-)^#R%5Kudp*gc-?xcL@LPO%sH*vx%zOuG-ddVEos92%Z=a9RF$t9)#Ks2SwC@)E(U& zy(tU?!Js+u-vz@mtpn{1Z_^t?-8`fIdqu?mUseS4;h#tz{>k5!5gC#KpFQ5(upb^^ z^!w~x19E~ig-gjkgj@H%u>4=y5m9r4gM(qBCN%U$oy;~-0?)qq-XIii=wtS{5qgF4 z4{go`p|IRPR^_bzpzueN{{;&Fs~-FS@%QnJzft%(R-%xbR7r#I{S=8ad6n7V9?yFc z@+z`eOs>yzU%R9^aktUQg0fk0X*7Q3;mo8H>Z-dsydx;9CTTJW#dO?wv!xMW!dO!} zYwc<3-_UaubK3l;I(Yo?u{D!8(-Zcbpp&w*4iE|u2Zule0Pwl_MMTPJ^=UP1<0EqO zHaV2tGel|8r3R!WSjf;&0YsJjKAd1*q38j()L^jJ*C7Teo%{qdyp4W4JX zf|mp=hK}L@xw3|hPBOI=5>71Z=v!}V-Sj(Mhs8mNvd{^l>s4rUu8>=M4ULvIJeWXv zivbJZrh&uD4qfDw-FX6fAXEzXJT`jj%q0SEInC;av?oU1RVHdKeBv%r`Ns(35tLIp7+i?9Pst74^x9fDOi`k7M8NXKPUvZo6>f+Zz>@=Jd^R!PDx zTnRs6iA}?SyaKX8(@)$=W$j>I)92!e2ZQBYZDsXyRjxx*o==$z6up~+{UclNP&ODp z$G>i9XjB&7zmb{F>F;(Gv}~-nKxeat$evGo^AQam{i4#ll$Oevj`RI3N8cjKhR96# zNn*ub*2O^62x7gmmEDh%jfSvFMxBbHGU!riEPgjTegsQSB=2?#6F`YPqihFerXQ9+ z#W$yD`BEMAUW@zrFs2XPKVz;5``~9~7U&+R&YOh8DPHb*G}D;8KCa#;S2aExF}wZ@ zPPJ268|PzMXQTLp7!xd&-P%rbrUhq&>?z{Z#7Ttp&?E4UbtV%$q{0wHzn_28Zw1H+ zw)#WA=2icRe*ftN%RmDv{&IqUR|fm~QNJJ3#e@)H79X}p!=3YnHV$N&e-4QHEGHtO zfyobxjvbgmzO70A`zmCTg9A9TAUT5OTT<@Sy@2VVpkn(M} zR#=95&+(7(QZZd%UUr>rITUC*`EEqe@{EsJu2wh+iHN~JIU24;9!Lu%psR?$Cy1uUXvq(^<_s^5m zsxY@zu4gL=Ix;$6#HD&mrkrc-;HFF_;ac7L56!%olY6S$ICL-@9Nr zkqv+F|3-U#19wl`= zM2?_YM(G*S>O{{^VX14tv!d>qb#Qu^^KW9)yOw^~k7-0$;iLMvAhsTNT-VPH=z^g_ z5t4aE3NRh_;~D1d9j6wUNz?Jan|bEXFca9cJ@9=9>A>us$W*43IwYar(xF2N_dkC@ zeg+KS=Wve*u|D^U)Ov0NBo(!x3bf3Q`yRbP|K7T@CeIxh)RUNWdixk_cA(kpvP>l{ zt8MrSEQFFSJy^)Ni2>id_(@a7)J>A%+Dvv^#MkSr@`=dPEck6h9hHE`DJcz5>$-VK zPTGQ9$8F(-@U88f%x=T6pUFpqk(+)|=|$H(IG-_bhx5YnEoY;*71{|~?wo)j0j>-y z?u`IUq7H-eeY)>f6-GRvXCymCSE=<(z9H;I6Y`BM@IM1x8)mImAP+O}{O*L7S_hc^SOxrAzeVSgiI?)84I@GYk*nlk- zuXy@2GRiZtO;KCco*iQPdbEO8MrM{8ji1RbC46O(0o=$>nUK%)nwwvTD?7B93G$#a zi+qpGp+|spG8vY&*^D!>>h;8bxh%HdPjL5gu&^{S`qNw0{Xt`2*7lN3UdPYo+1+w( zt00RnUVrWSWNu>RMqk6h1VuTW_oGtcN9jK7f)}w8`gLwERu);3W;B5?J#pJjcF@c> zW{?y*iohB6ck@F{7-_Gf5pJ9eB9$a6dAL%qnGs@Kv?ibj1$;U>_E!lo1t`Bte`65_ zf0h0QgHRT&DePD2FMk|=oQ^Cb<*zNc4lqiCg&xcwpX6`U2UOczA9^8X-Pn?Gc0C-}c0+kf?bAOA_Ve_h3R?22U+ z6Ibn=hKz#Pt^}L4_a>soj7x|ZggP?cXr)79v_D1c_b(9nIV#n>6Z2*u1bxIFsDTF=}3>{I~2xQd<|Qw%NRKAjFL? z@(DlGDD+7@WN)_V|GL6Nw=kBrLXVfWjsnB3gD*9;jx5r?7(|{SI4*I5G?2Z@8;RD- zy{(_P^khF@}yZoT;u(GpkxN zA*Nl~2Tzl>6FL*MbvegyP0 zC^p=hsqaL`nWHnCtLRUIFsX7pk);TmqA)_f&TU;8+q3RRthH#Jay3E=l1^{2y1y1P}q(#-W2ZOYrQ!d~d&E>ByYPmZgkONSgtJ5Csh8>_80B zB`yety5uADT*Bb{K%R4n_3!6naiyO&OYpm|uJU&pn3Mmc_iH5q+7#PHA z!q!0BbC zH4w8dkP^BO?$_1;_Ix~fSJh4iN6W&Z5-ljRX>b=DhZVW`d}UE_aFq{JRKubz!HsL& z)3IISeQ$aO42!MNr}@<#x~>N?Ek5)$1dNsyrc*7-xWW|+@hH#D3`)su9Y+o1QL9p2 z=eOsFi&$q}ps3~GoIYRfR6P&u6k-W9cW)IrYq}4dyT?9op7MB{-cMgA7Dn%mKeygd z7PBqSvNrToZEm^>I;zc8dGTInW&5J36Rpwm*S-%?v;K0n)c|AxT4$vkG&j1<8S+;O z@ZT?eyuZuXPH_>_z&QNGD8#4zhOsgw*S%fg@Tg8D`NmJSFUS}g?t-!jt)-xmJ}##69lPQ z7nY+OfuJ6t&Nx$)7hDcYXq~rS>?b~f1+~b)t(UEyZ9`gnW8>^pk2O(d`e|dy_cD!2 zVU>+4K4lFuYOewjAMuLn&w$s|ty1900lpM_>EW}EjQpy8KBJC=cIo}mulHgjzbpq_ zuKr*{(`A?*H@P-GuJUVNR|5+zdyKsu_X6Zue{)2Gue4m1r|%K;Jva>{#q=tCp5E&0 zsk)CdKA@h8S>5`_=&Y-;*EWzpQr!hLjIwdM8{P&MM^q|YZZyOIAqKQQH&v`GAL}3{p3qlkjYYpZJiIi4rsnG6xGGMLfpR6Al;RJ)jT4{N(2f>4@2e>7k0h)g+02-vGHB8SDm>8;9${ zM_rr9Bq)4^pox6_Xr9^_p1>ekp*&;${rY7-&Ziao%R>GSyBJaFAGvG-HSDnjY_3ns zqyF2$g&!6)_m(s&L_N5sQY(+SOLz}u2mup2#e{PUZn;1#nnp`zawNh)^YJO53Ku@?zf&sh|BOg z!Sr-f>HuGSG&OeNxNd|7*9YOMrYx_?GIZ(}7YCD=GjeK=j9`WSH`$FiN*U>%Xv11( zQHZB|VtA87;Rm)MKiTzGpB}xaT_vK&5NJa$_gm6{Dg)WAF2zsw?~oJ5sU&ZtY=p5e z`wsB2MH6*Yy9}4I7o9w=9p#x->&Bb(k}L|F@3DeC@d{6^@Sk^N1*ca(H5LK;vv%7H z_fx4t7jaKu(b58&OTRw8^P!%WYNky?x=}=V8Hn>7!ap3sJv}#JVUK)I8!SU48t*ha znLjHQ5Bvi3IDj&+Ozq(KOm~TMr6kZyZ7@9U=9ad3{ zKMy)Fe7J42E|(^D4LW{-NCJ(9gOLnsI2#G03(M{m!sr1R4nY_^;*4=pQ6!S+8fdv; zUPkQp94sM?p#8V+9`_ zz7_tJqHn+RNpUoHnHmA%#nA_&HCEltpYXAMP zWM-S&_W71`@gEOtKgbHE4yL8&Y#9tXnSG+@{umAi&-3iR3LLYd{NNkLpu`1$R`LV9;g>$>}6u+Vej!f%hjJM&JK{N*kQ@ z`DcDPT;+Rxw|LBCs9s!IPEy&ud<n{Mo>*-tfb81wyZb{W^(^&(AHB_eGa4_@07C)F&vGnBoT$ zHbRencr@naJzAVFgq`2V@lR8LNI$4fqFk`nlbRPz8*LbHn#BP@K&lL`IPT_Pmi}8r za>RlYIHz7HnA|}xL{hoU@VD*$`=7;a$#_%t*>k4CSKm8Pg7)5YCy_$+^-=@*zPl(7 zdU*=)3x$fPEaX|Xd=ux+x{mjmt%CApE^DB)yEc2nZ}H=sH&`e<^wL&|V1L(|ZLnGN zeJ;<3%EB^lF4m&l5}`A5NlJ6^1pM{j9)@c87hq)EMOzW4>`<&fW(7VNID3V6M?vl? zLg)?)*+{CmiTcxW0yal@RNcdBIfshb%eLXY&gDlF)|S&Bm(`PAtjdY6yKhsc9yyX{ zGexfYvZnIeN6qvunZ+j50!@p=r{@a4gC&iQkB@(PD|4GL588U;Pj9eV``v(coACDK zh|_*`7NgW)o&FdOo8R!)U1X2$%Z3cpDL~)49K_wP2DFR_f?$)Fvd+YHFyYaKz}Bxz zIlYbBXU)cCA-tH8efF$kgo>RIe*DUU6A}(pCyo{x%`D50Zat=c9k|N#a#J4N?-DO%vA(V3s=G?gOW$PL%O z%ok7zlXfP zE+gChAz|O7|3t$7lzmC3?`=$@xzv9m-z;9*UP;Ru+UKqtt8+!5Jf4VT1n-l2%i@AK*mS<4fB z!gMQ@_0D|(n8*tmeagqL;fXj>V`JN@1td(0p;t@uasZ=4Jo2W?^{6xgy-RwXWDa1} z;@b4|6`vRl+9GJ!gPlEF=1mcT=@R3revoeqK_#SW?dpai4J=vMaZm`#=ZLB(h7;ev z!TDr7kc*ZSA;8#W6oh2O;HLg1z)mi?FjoL!<9W>HX6!yp5uZ{}^9Gr$oUp0bmRjQb z;ZWQ}5xn?q2-Z@#kXS;s=2hizRN*PY%brxbNUc#<>mt`UNwW-F>%q!MSR5gDoI^P= zOFFO~rcw%x?q)ot;uWrn5Z~x@`W3l+JIZ*(QO0hG!FRF87$ReLsbH%CVj( zYG5=|{S=~~c9f#PqU#E_Ooz=1+IDB%G`&yh{E%}mJef1VbwC$`ObD*s6MxNH4B;-H z{}qbk73{ULY-GBF$zN#E?B3vs7LwqG38LN`)#TadO6MFEvhIx6vAG z)8-9fSu`J+PaMV7kssaW%}tD?z5}X0d6SQGIM-&Vk08)HfLOd-4M`spQsg^AMbRo2 z*kt>w4a0LZ!lc2w$z~IfFL+cilL>mz!U*UsW zrkCKi1FHeR@>B6I4}`j>S1ZzsJG4I=Po;j=&60psAftyS+W5Z~hQ94POq9qZ2;81x zqOxi?5BRR(;khZv_T?ngC0gzkH1&3NjQNEBg^ql*>>Z)>DN*^;;R%uSiQs&zE6`aQ zOV9lyLr?5!V<}B58?^b{hj#lHh{5^Wm!E!Au|x9oQOZK0rDWb2zoghsa1g0K2M3lqxJ zV|CwF^^ais=KZJ1)JYPskG{LBi70xU2TPtQQU@c)E$+fnYpfz9P)dnuc?`>NcL!IO zKbmJ5Gq=s0kSSnEcFBRyL@~`E$Ay7ceZ%t7;l8nB_x1J+4 zVRgN6TD1R%J8%Vx3faHzS~RErm5}B?NoxL`-!tIf^1{C%@_)M&_cscAP~ONM{wjs| zo1H&Zee&Ha70yX(jBX5^7d|F?;g=yl`CQBOb5+{&9}oY1J}mATV*f28BSSu}l<}A9 z;1WdvVq$lY>d>Mhh!zBy=0{}vP@4rE*%9=YmA*whz zd^EKF=H=*!UwbR1a;36RGOa05H}uwqM~fhA<=ITzjL zY`6K=I`zxaL`?6yH%oFfazeO#_4b`rGHuo;-`}ydc%Ge>efpG^vM`TK%)+3Yt1cQ` zpA{h;)&a->z!lLd4nrimiNL;vMCU&bD2!EnR7P_eYh&Z9!TaR8%&ts9_VJU8)%aQ3 z+I{0*nkN$O3#kby1Yp9S7*ILt_v3n|M56+G*E{(e$7x1oFa)%Tq+ujjB@*i)3NIT# zH~3(Zrcm#G=Lj(IQ8+*I#i9Ie`Rh@tr2)VTHr*Zo&I(}c7w(sf*{Vp+o&stS9C>a#QnQ|-cEA}-r2Bre^l~ZCvb+3 zvwqP9vtW8$S;qA#HT3N(fXdqGIb(AZpfqjLEx%c7`dhCUu*yX%axL0YhWP9;;ZU%1 zb~IOoLQKGRpVv@rBeP8V*6u+@5ffk{_f-na7}!*;!t`Mo5PLMC#0iiE=amx{Q_8Xd z{m-sTtRsXP096<2S7axuHqJ>!{QmECp8uDO1!I=$+>^Dgte6h}w*xceeWi}rJ~&PG~VE6j8r)S^G1-pih(nf{E;S^Uyckg51&bDveX zc9QEv`CP0F_43LzER#lz5!stLJ?JB+QZm zZ*L5-;Y=^KLU<&Y3k1=BXw;$!kjVva)B5PG`@$S5J~7c7d%oU#IbJ7-x$YuLSH!Epnk#*^8JwXe5ecW4RvOV z*f_EN2~H)hRC@>lvoj>TTw@1VftRD7f6DFTVbQNBi#kO>@K8{T3b&7k=jrcm zJF3mTV{0-oY*%Z@bKe}shiaj!3Ag-4O%>VEyvZ5>te23iub`Qv0&xp zXvof-phv8)xZbfm_N+FQxk-k1))e+l1AlvfekjS-4@v#*-5Yn+ws;N8b`iZo3 z#d(_H3rX=vM54L3Q7a>)>)wt;#vJfRJPr?Nlb)VzH7t(V#-kc@W1SAN4E#kpA1 zHjX+*3hw}iT1s<(P`5uo0qdxnm2RKdIi{vrclQ*HiW;b?I$ZyKsr-AS|Aya&`%JD0 zqjC%@ZbTB;1fj$Ph6&;zrs}sZDdsjRv4qzz5sZ16dCDKK;xCx#3&Ze8G7S}ejAGTc z1DIEjS1XoZW;gb0%=nb`Lbdf+0U4wgnPe8mQ$eMj(PqLmG$YHmd9ef|v+Nf>@>}$% zV;Dg_q8ZGl;$V+Ot1HQ-$C(tY{wqhxxbiVb6s-x0WW13wi#j<8!64usF zpbKW+c+j?bN09YGx{Ar&GQV6WweyDpAqtivFmLKkDm&Q41$d83xF!g>bm8-ra}V z+@GCDWCg@^f$yh)J?!V)PBL-TVBYOJrsk0aFR)>nhIZpj2`i4$gcVqOn2Nk*F;Bj? zcvSDduat~5UDQ+_M+g=++2Q!`J|EF9r=LgSLlKw?eJ&7+`;zPo!9aB*U~2J5UZ|S= zJv4-ac7lKdUiH9jY(1i1s(NP;#w{y!GuVOQKW^i2v}EONAKZMWsd z1|Qx&@7W7%(jMjUiB;VwU7p!H>CjfrY%WP@5yt$8)K_%|tt%%TGMy&2De2gkKW`b6 zXFFT2U#oJ`OSNd{jcG1@T3r|C%IRB{%}h*fWUX1e?8NI7@v4%~zV#7DSUzt(Embnt zL0{;_^g}L=KesAm*EoH>pxjq`L{Mo#z%9{dr=`Ltv-W%5{=75N&424_(|4zY*p8Sn zY<0h`K7K%7&okYeLi&3QPs$#&yVaHH~BnFIJm$3(3hXKEqX5wDjo~(-}tb- zuct?@@`a+AQPrD&i;uT$JnR+B++F%&`44r;D<|F?2iomA+7tO?+V%cejjXJT;Zv0| z`NUV0p540LAh+u3g6gd%mrBiA{j8o!ZhrBWYeANu!(Lf5yZf=^fZpPBZQ_2omA2MNl7ZRax*tZh>6 zpXb{&@!>M61*-#Gdhqs$gsb*r6S@~->T1?>R+ReWWa)Nh?xUzB$79Pg_+X>xN- zg!-1wv3n}NDufQ?SlQvoL&yxe-J3p%mWtb$^fOmz=5&EH9ltt5|7n zQD*vU3-8CLbA>Ae5_ugO5xcL-)qk`T0hBeyK8CJp{6>|<%}~|83jFy**vi+?}r+n>{7jBi`Y|U zRk6ufy*pAYc5u?I4^2}-!!M;>`>U8dql-0l<1tIdypK}bYu8vRpSzw1EU=9i*XA|7 zxopyL<+jd*kNJl`9bnku%zmLS?Y0KH!Gg!kUk~+tf6-d){Lz?!xmAD1v!c>7(W|d! zq`f-`Z1`7695r3=*!SzJzWFBmrNmi8LSNl5(KNfdaz(_&iNWvXRYbxZbs|5R+3lY8 z_kq1d68C@BN>=Urr(bUn?SHhg&q1~6#=inTAH9U&s;D!1kMky!yOkI8C2;rLx|*P^ zc=n%Lxc>*cwY`iVCQW-wK3#wEd-L3N6T+Lm?bKu5xf~Pz}IRi-bG&8Zzj4+%FRA-W`5G)ve@T5SEsHzJZ)oV zVSB`l$#e8X@=n#>T(akC8&7wqkJs28~y%b`fv@8vF`D88@84#zFxNA>d6JQ((`$4v6zG{_+7%fYxbm~ z&li79)ckRK_5Ha4rW||LpPpTBy8KDP?pJB@eEU7!U;JlZtNnO8a7eKO)H7rA1NY3V zKs~d`FF`|!tRZfhIjIsEi7CnXMMd#RiA6=JIlwCl4I=c4^7Bi8N*E*=7#NK~x|zNM zb%!yifpjx`0qJH5@i1~@_4IRbjR104LP4rHUI0}^LS{sm)Iq8QL)?oJ3o;ywD|2&Q zi;D7#ie(Bi^Yh|UOA_NjcY>Rv?fC?{a}CHOPS5~oBxC@Ttp;Qg8^k0*kWSF$4`_S5 zfKCX5J0Tk41YY1NCPX^{zSbV-1jNZ>(GVvH*5PvkbfGQK2~@fz9q0tanGdAgjSO@G zl`g3SI)S`P>3~k4()~a{Cy;j|2#OOZI+h*i1o94IMu`ZD4#osJ0g)U@IS3EM2^1Yk z1atx-Ig)Y&35pXa+6xYJ0(pBsfli>(9vq+($XkF9bOMzYOQNI&QWi=9oj|22YoHUz io1p?0pe~>Snt=;Z56vnB6{`g6Az+;|Yiqgb6b1kc`Gtc3 literal 0 HcmV?d00001 diff --git a/L1Trigger/Phase2L1ParticleFlow/data/hfcorr.root b/L1Trigger/Phase2L1ParticleFlow/data/hfcorr.root new file mode 100644 index 0000000000000000000000000000000000000000..afd3a0a02dbcabc1b1dc1aa99dd2deacefb944a4 GIT binary patch literal 15329 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 literal 0 HcmV?d00001 diff --git a/L1Trigger/Phase2L1ParticleFlow/data/hfcorr_106X.root b/L1Trigger/Phase2L1ParticleFlow/data/hfcorr_106X.root new file mode 100644 index 0000000000000000000000000000000000000000..fe1bbdb6103dbf7e11393da6e724d28c0b026e94 GIT binary patch literal 24210 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 z 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 literal 0 HcmV?d00001 diff --git a/L1Trigger/Phase2L1ParticleFlow/data/hgcal_egID/Photon_Pion_vs_Neutrino_BDTweights.xml.gz b/L1Trigger/Phase2L1ParticleFlow/data/hgcal_egID/Photon_Pion_vs_Neutrino_BDTweights.xml.gz new file mode 100644 index 0000000000000000000000000000000000000000..ef039586b2cb8fe5079badd616d27081afaa5db2 GIT binary patch literal 144127 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 z zo3^S;jN-=r1bLLLcfnz@Qze1xOij{iq)3q7#9Xo<+P~XJ;C0vXzAwIMXOHCrd$}|O zL*m*q+NUE|aUAHXNWJ%V_WmNLHt)DuPr5ouqwUI;^lV&~RE=8AQQJ@H?8(oeO8K?w zUesSz4xO{3_zJ4h?0M-?4^^C^1Yl()x#y*iN{L#EO0$#WFQWG@Z%#>A3Voy%w^9!1 z=ovxNyE=Q$`DC;hgr1p{JuVIhz*nK`(m_gKUT2TZ3ZgCpo<6k9YsC+pB~kd%*dwnF&Afzr~wP+p@(97D`Dfii;@K0$6 z=u_)OX<^^gq@yb8D=s}rh~$|RltWcLbH>K%BW$snbMD=xHq_pW+WDn$C6=2#+I&+5 z6s<}Y<>(AZ_f5+Qr0?#?ua?N-`X4eM?TP~?$c^mnolPm0!J|$RG|g#|dJ+s05Qrn&8OkfM;+PTM*X5)o6;g(7ODQ@%hOe$ zc2@jT>d40%h^Uf`^jWZ^bJO0ZKweWRG(@#|lU{X)y zu|XVYiza$vZ1td0YGn{P<_Wm~TUg)$%FyP|70HSnH>4=mVfYV+;5*jB^j9mC4$&d+ zFnL+x|9-XUOOU91D7MZ$&i5tG{Sp=hvJvQ`#Ct`*XTlg+AooV7x`JFj$YN{v$=^VhvF+`~d0pEYs+%egA+>s}ao zdl;QijB0nWO2_z%>ub}BAfWD2%n=R{3{IrVU;2QRDA^4;v3CAmdmgZC#sz!Q@evs> z3S}?rQv?7rRq(j1ZPeN+hd#yk&7Of+K{FBnEh4M5Gg|OAeF|=@ zMxl)(yVWEr@z5y?1kNWYLN{CgB5f@3eM7B9 zCf;7D*cAYI(pOBpxh1QmQWltdY*Dw|RrbblJuZB3usVgtd^?X0nNLY?U{fdbOf+aA zYYyj4nQD4X#liDK2L8UN=`H0JGjK18C*Tx}mYUOc3i$nt7Y#>6#KHLr)?XXubM(9| zRTNJ$RV{?XzvM0s00h94_f=g(;1llLq##-gs&g3yW{)kx|BR?k|&^kW;<3} z*F{Y~ezp2Ggoi~r^u+n|MH=nBb_C^O&9!U%8Ms_+t?64E-=8{!++&bmCG_Uu{F0r5 zVMf8;Q^m%w#`=#p;BQQT+`dGlM=f2J=~r_TnMSn2YGunfiPxLdpb5If^mDg@*Nv07 z3_($)MArIk4Q@ee&E9gTOsaYoCpKC$v!}QT2dQ{PR?FF-c$;94sMyKHH>IlGpMm~d z3J~xfYDnU5GZFnY*voYpz(=TgmzgJILitr!QD|tlR+6n&;J*n5_77W^Q0r87P@_9e z_eH?IYl=lgr?<=0y+P(%x-B3N;xT$HE9A7e4%3TUMXU^}H%#?%QabfIK)v%IjWOz) zSuOCekUCSSmb@otwXhXc9B-T!@aIe0ubZ&&x+}0f1tJiW@}Ab(gWr(<_q)$mo#YNl zYl{46vf~b10i;0YaJsE{?~^Y*qI!6xS|aj0{$5ijunnEmB2eH|+0*G#fU(H0Rj!|> zY>HAN!9klT$N+vC zJOY8!J=46tAG}3{B>9X%QBV|OJI)|*ZivCGT5~`43^$oUbkuUVmeHuyR!*HUo>wy) z^0*Ex$?b57MGQjuwk^DcxEzb?N2=bI-{@s*f zBx`D5Q5>;0EMB^w2!4HQxJ8*{X%VgzlJ`Z43Ux2CxKaV6wR54=tHZ5+9#5v-MaFmU z^ooTk;a zLUt;piney(jmvfUpSux#w!wJkT*cZ+>)?97(+X|wDw)KUEzdP1HZ2rKLUoT%D>>J( z@1B~3?GB3aAt#EoP1^>XnREM$bz$r(EQl9j#p$3!@4kzcAun8R;cdLJLB=$66t&~em)_f3tQ--7%uFoFW5j*`6*OVo2t=j*}<+~pow3XW3wi){PG z@AdgL-TTFa z`3R^LwPio95B!?(FRr2J8!o@mdyt)qT4crU*_f5n!t&j)?cE0Q*=+Su^42$+Goc8o z6x=JWxv1pD$3(44YFCX-&3L)y4OFFuIR6)t&kIL-U_+wMBnCdNOD|zV3YYv#^I*fE z$Rai*UrePxkNDV^{|C5U-&o)U>Iz`W-X#yp+VYGfL$97C)Eh?;5xOQr0#pVd8I3KG zQ|9r;QQaL(^A_YP&LGSN>za}sJM=lDP4Q{Hz2o{Y?F9m-%`?x6ad)t&ut{rHvAS+6%+I`a?(^0!A z?QrR0*iJf~|1Zc~&tmeH2piTta8q!+)YfD%9IwbCg7Dwv)Diu44;Zo-a#*Gb-C7PZ z7TX*!N=#TELxZFn=dJ2LNLH2N$fpvd?}8S^=nPow(L zLR_#rKv_ph1#9c%Qfvu}R0<$BMSSrPwk;czSg1zT;`E|eE;WKXLU~=1{olp!7o}h> zD7A(^qqp{M3UPZ1_BTPik!HqO^?1}@NpsglnI1#%;e8@h#Ute@SClV90+$p=WJnT0 z^w0P7Wr-9B!$`kI<{Z6Ao+nZ~B4us-!;Kb}hyw?uk!cTrH;l@`Y57`@OpvFytSCS% zO~cqvZ?&vxvQ!1y)Rb<+J7s1w+TQTTit?&AGE}uLf}+{QsKQmVwM~6Q@xSsu?6JI! zO_we66;0x)i-QU`@$YA~)s4;Q{uWA&Wa^X_GPd&9P_Ne|nQjgBWVWWDXzk>JuuHLD zs3(vq66|{;mYpnfzGSH98vrOqob;rqYff$6+!gATJAwG}-M9>M3W={Wy!CC28EF0F z902F9tgLy{Ut9u`=BPR>Cz``A9qOgBfCF?G@?@L381-5yJBmtIwI1#6|5>QFH)|Xj zSUPK`n(f!dnqJqJxm(DpJAxUK6@Y!q39{NB=i)DXpm|jZ#RKI-#A*g6e)Q=hNm?uq ziL6DrDw-Gm{tb6@PjZ8db=1~55;{+~uN-93krb7BQKjL9ubMl4T=DkyPAcUl)R50= zYeFa2#k5%$uAG-W3zh-n_!uRG=Fxi|Fj`|Z&YQ?9OS#7#_2U`)+kwNpNMb*no}#3Z z)0AKa6XdZnBxf}2X%Sfg?YXIfKPBa4J@l0?3_C5QQG?NGQN5{2K$jZc)l|9cD%S?} z*CX;@4%n=^BBK_fBF?o_PqoWl_<+%(vIF!2K_aeg8j)hX>^fW&`D9qc(9mf(&(YRE=7bgnG-x`8qWZ_#>nM^)eN zfv&fU+(;w$mviEj(@N=OFTIKkuhQ_={Jh(DRn=RNIvRg}R;&n*y)HRv9q)jCW~GoG zSvK9a&e2H70m6H3ijF!RMG6Hm0TukIdUdWS1qvE2d!%_6@q_1yeqRIdE<0iFGf*Rv z?N>XoSGtalG}s}@*40xoSG1Jgo!5tSM@3pY@~5Bex{4u97N@Ykp!8ex1~}T(L{`%w zWVmIJ!6Q_pL@lURdoP>rk>U=xDDp}XI`XdSx;_qAMWx5-cA@~6601~CDDoMRJ$zq7 z8lj^oP8jfOvAXF2OGFVu3W|Qx`R~?kkGs5{)f@p6uS%=+DG~X8_oE^CN`1qQ#5IL5 zaC~$k04i*r8?W`XVDZj2{`}Gw34<5-{x)e8h7yo&EVrnfscwNz5 zD6wa8P(IM>0*!aq!qRDC&OJ{-SpIXcyj}}iA1>HJ9wL1-7r_>!dvY|BMa=26_#0Hs z;Ss>q$0CSjZIPsZIKDVO3UD9zWy)&br+E#9!0_vs)RNw1!6{<7#bs)`=a>QY>{-tj z$|+fOX*g4T*X8AIq%($RjH_3YE}zEVr5fUL)pGT=uw_ zzDv24trs&KGW^vJ8V9#6*GsXA*hY?>QfBLrfuE7hyr~=Qq}kAkL#f<2F#`jTkT~Cz z-j#F;Skt8n6uhiRH7Chtep*o-&eFhD0Co6{WW^dc#d%A&O5vW`dX1^e5`z4Ghg4oe z-bz#}j)>AuB@SLV1CN*pphbb0R(74$J2lXnRSlsC%zv}tS-p74niRO%(gUNIWEMu2 z26%t2GyAd`I2!3)fi&zmZ2m7YaB@yvks=EPed1le>vO~Ny87R(4bP#~ivkQGC)naC z&+pdX+VC7bDyIc(AZ|E8GnAHiNQVqFRIYb zTHn~snuwbvMQtVLaehVv>E zAXjP&ZV4U*RcPk~vk9Vm-*x!FIgs^i)H^+cB+r4zPt&c+WpVs)iBN1AYpysw@@R8L z$j~>n)nSJq5oOcTBKxTk#p@oh2<>B;2eqQ6UDHV1rMG6*rMAk9C^8p6$Ar+3n?4HBx_53^m0`qxfaZ zEvjCV2|2bQX6Py0Uv7bZzq?Fi*4Ryc4z)tkD$yF~=tTxr^Zx>r}_c3|!dT0?O3w5O4Z;M;riA3C^Y*K(^N zdRXIib`&UQEZ%3zt%t;Kt=vDxucm=(vV;#gib$XZ+`>o~(@o2*Qn*;xMQP=`Yq^zF z&`p5&ES#U* z@JgCTu=%{_j;r7ij44H0^wzf>nyVCqkX8!;@HKthuP5S1;V3@->REqir7Y3^A(fv2 ziUzhd_B>#PST&MzUML*OrUwl7T)0FBY_EQF4EV1k;_O18fy!=gDVHr_5 zy{`!|D8mweI44BjPThB3H%`)}c(`H)*XLu?I7wX*3)(8sNw}>_#GekB;BshVdpK+Q zuN~ZJSDbr+T9S%69VuYT1BS|~C?RWbDbzOI2hWBZPED4N{r@`>@h7X~A?m5sN|h#U zk;hU4utY?wl(ExOxFaUC5kFL|m z^Pp2~*QI7|_dnqo2Rd$z#xla8D>m#KGpbV zZ(!OJ^g6`3TE|bdE4K-C0|^rDr3M9Z_l%UCE8&&31O?G^6?yKH!7vSitchi)tJO8- zX%zu7W+_aqnN6EWDGvDETSeH9GxO3{K46@xwNC8a`9l7q{wGSZF)5C{NX+2tJO(St zu9Oz5RUGx+3byH3P>F`5QaRi0ZBIILaaZb>F|A1UO(Qbu`EFT|U9wfZIR5-jH$gqE z09pzq>`?44ns+LV<+W27NXnn(k6-zK0o1Y4lXRX%8M&##cc9cxAI{QVj^<$hOyQet zQxp%C4Z+|_w;$??>#AnA*A=9jc1Naj%4F|XS7;;il;B)ioL$jxu*AHyD&*0>3z95C zOh)dAbd>yZzEZfh(tJpijWJ_AtD@u!N0?gm3E9g3elWW|GtMBq$3!0Pw zVOr?VQ~@>GrZhzD76O=5jqKS?4;WB{p!&uOk3_L|jfVLAQqCzVpLX1wdbUDtGi6|> zO3vZN;Hr2VLj3rkTGk{L{K?Uj>#z}FQ}zJtQ`gm~t3cu6(pp(GnJ{Z%owmcKxoNkm zgoYvmH&t4Zp1y|{zVx15xdqRw-}Pn8X}IKQjiOFjDSCQTccNeKT zPkkNVe>7m;$u*^=uc330P_Gp2vy{nJ2>OPXt3`g$kz+`AWojrN0w6FO8$i!VwnlD!~u)Wz}CKLq}@0prwM!JBPHJN}L zj>aiSe%U~oR*-?iB#bb5rXa5lPY=9cv0BVfI4(Lxh8m^N2j2D-PcaLm(sjFqv}6315<{9-chZ{m?RxC@b~pI@9KAEHWaXi zATze5_shU))*F@KkcVXk1^D(rNi(8Sqeg_P?Ah<+`dtIguY{qewpY7k;HWiQH$(B| zQMQx;?Cz>ui$^iv>y(4_Xr{FP`_<<6JE`m2(wKx#m_)CffkkK{jyOf(@Z)0jHW|2c zphQW@f&y3c8ST%x3f8qD=(G&(fWCKnK4su~U83>sekU0LD8TT`Hf<;7jbF{cALrsP zIw;d>cv0YQEm2HJ*P6JlXm6~5*kz|NXRmH+))f)tyVVbzwda1XhZT@l~B#jj~# zUZW(r{82l8v}`8~hpUom@>W}_CGun|6!cs4{Q>pqU|_Tbbe|!q_K71&fgVA$G?Gl- z`^57zu^1QC5t4x?TFR83;o~hJ(&LBeh1#iFy{`ciq9u`ujgh9D?j*l%tmj-wx^RWx zTiccx-2r;b7-NSW>D{ZvLMr8(j9R^_4k&YwpPDy!?5G=B_K;dynJSQe<6%>-Cr9P| z+|mg&TLGwOT!n~mJCoU1Rtk3-PCHekh&DxzPN4O=sOha4c%Xl-ta_B5y-!dVzdHjX z*eDKxveBcb-Kv+(z@@UY3Yc%o&i%}u;Vp(#WBU*Y2(jdyHnV57Rj97-D7CB(eZD<2 zFoH#7MZIM-$~=|nnU{fY6;K?^AJ3{>8E0gfu`GK3h#0qB+){Y#&fU*mHUoDKy0g1C z?$v*t12VS;&h{SvE6#%WVg03kU(NKc8n}3`iTsOybU9JKxY~^Vi~h*G>Z=LY696Zv zZa0IF^%!W=@+7Mb>s>F0f%dc~08pVlZqy`R*;F3Fobx)dP|xBUXD<{bJ@Kxs#kGmo zcN!ELt+%XPvy^U2rX52pJ)H_y4R1zwl@%9j)EVkjv+TP{js@{>RBH?<_S6#R3pXgV zi{OKB+Eg<@vtS%fchJz)~ohLd%e^6LjWo2LolIx|g8WZf^&{%z9lg z^W#^%W!BBolDeZf#?pD7pBK#hBAsSpgTgug5+&uk&FB_>(jAep`G8o`6nQ_^wAWRV z+ByH1>b*_&;^7(5*R5LLbXK3VtB**o`2)19vOl}OkaUEn%1vih#Vb~~%g;MQ8J$i! z5MaJ4Wd%o;DY&wDM8p+b%_++S4+2FIs zNq<;qX)NC}~=c#WCuqtnAZ4P98`Txai2f{<^y zyUmV;DYsA!uVc#Y_CHvr1vH|J74`MY%6&fiCWl&v<3r#1t4j)p7&eWlf3(&kd2W+~ zB^(b(r*aC-Nv0kwMQLbAD>YQLv*2EIu-scp)~0Dk-{ISABZ&Jsp~rV2yF3q3{uzxd z3O3aG({F2qf-$Q|Ek=D*EmG=7rud zT`N+rb()$kGoie7No|ms8;ycmrA_ZCXnEZOh61Zr4K_CfC}~q(fG1*ACEk1K+c8>+Q&-JR>VYn}=Ls-+B) zQ>nV^b`+&SDo0WAqkpsE0gIq^mf#5hT+2;X%8!hKlBS7qkS`H9b8G5~;ki(XB#pwS zv|S$&x!fYVP3tpiD`etc_B|tVsYN^*MKr2dI~AgN-3!B&B%{U@MTaD=Ei+v2^eDBh zSbWEOm$j@}U!XxW_4Z4s$Z=PEp95xwnn-I>zoTzjxQ4rt+fO10&COn=u4p_R9F3-< z%+=$(;u)3Md+Lg0kD1-8R?JV>Bd=OlaO)r}yr|-wpEYB@;puV9zyhJgnl>hV6fiP% zt?;gvxT$x%XaHDT(o+kn7Y>x7`1xB;z;A22ssvFQ$WpR9kX_GvTH<#@SGs>X9?lc7 z(PmIl9#7!GE7NIl&w#in>_+XCvYZGlsFwB|QWgc^>&~4xk_I-d^*RR=Qs|#9*5gc` zU}5|qO(9zycWabb<`IBWT_$Ff}>v(^2RjZd7YnC7p_YHKQ?rX zR|vp@0F2s7ix$ENo&k-tYsr%hov*^9`*-CV*`aBjWHCJ{FR$)MQC+g5@{V4q>mX&3 z?ghQI2q39gQ}?7DD#`=?3AhA)oQXWk4&&lb%fMaobTac7ZTC1MJidLQhnM{$4luXz z8a3)r5JlC4r$@W4XZoqds|AJJ5FE8(4!CAVsw2%5LF!k6{%O?~fEQ3}Ql;R1bG5FC zCZ&_xhVP$BzuCDWE~Gi)j}}3q0D|mGsx6M8l2(%>152M$Z9U#XqsSz)zFD>fk902YSsOVCcIvJ2y5NydKyM@5xsu1F$Mycwl=iP&DWp8B^hKIM+_tEM ztAPY?VmkM_8Mr97unJ0*ET~YYXeZv@0qspjGfe@BJpWM!Mt(E_5aWq+D+dvmc3sHy z(_yZ)_OS@yNHVf0c4krTK?76@p5XZ{UTkssuUI^huw8o^#kE; z_bQ?E-Mz-j+$9k+R3ej9Kv>kp^5=(~%Q6va4cz^>qx2F*qWdCP<^8XQs21sQ7bM!9;4%2tznrM zS%#z*)4X7gm+_~exy4vc%kW`$wJ3wR(MQzZJGW=G?+eFzZD!Je;{hG3Y})t4U4G|A z;xP5&I?8(S>ioaoeZJC0Lr63=O2eIMrN3<7(<{xw+zT#$sZ#_`9+w{J4^>sCjxBzk zSfTmLgv%`tWQ`coznfCaP_vUC?aEg(jtHsbjrKNUwz%_9f@S994YWi&gz+7 z`gh^cqw`|__nXd_?J}T?pf)G|ZN~oCXX{bKTdr#>c@B$8A^@T~6zpk;P-4$pZ`4P} z>GCm|-BvjhH(n8hRR;NLl`h3+veCN}q@kp&)(#laW$`lFU(UsDs?^AWNcp}KZIayW!Ee;( zj&V>Oc`5XJ_|ev1(Z3Ti$*G%}Dw>-ri?fc`jwdigm^kl%y>6sLu~3pi6zL=at#SeX zc&eaM7~KK!p+Uj3vgCl3!I}&u^|M>ql+x%%b%>w@f^6#o9??7Jgv|ptM(hMaP=blc^^ z(D;z9A-&+g)OS^*8ThUFs)+n(>b%Pil2w7<%?ER1e)l_R-3Yv;g`MM5>&DkT zU|fM!$KRAb&~x*~*F9jIsyVea(kWB_%wT=8V^IYn+ zSfsr6h>hx!b;htoe?GxI3jnC~=;aWj@x0{h7v%w` zeg9623$Its~*Tos{whZim4yY)|fAaKs zgU{PCFg-o9bfwF=oR!9}8Yn3VC^$Tc=V*WN$$8lf+yQ}F#{+0^-*5K}Jc?l24|_36 zx!8^eOANrMRc;lIHP6|iP`9LDPSAjcT9ZKR|5uU}+(oESlJjY?g9LB;zQ){bbyjn{ zEk?@GgPW%@cb7A4_Mihb9%Qsdp4XTwKWAMxIFOD(01XQmQfk&yDEYGCL@Dyf1BBZc zKBbZV$;iA*b!xs4Srhy`_9

E|SETpa_{9Ob97yuaapPqJCE$=# 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 literal 0 HcmV?d00001 diff --git a/L1Trigger/Phase2L1ParticleFlow/data/hgcal_egID/Photon_vs_Pion_BDTweights.xml.gz b/L1Trigger/Phase2L1ParticleFlow/data/hgcal_egID/Photon_vs_Pion_BDTweights.xml.gz new file mode 100644 index 0000000000000000000000000000000000000000..af366169812f8ac1e0fb03a61dee72825e249df6 GIT binary patch literal 142020 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ჂF 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�j9@U=457iBJPA|K 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 z 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 literal 0 HcmV?d00001 diff --git a/L1Trigger/Phase2L1ParticleFlow/data/jecs/jecs.PU200_110X.root b/L1Trigger/Phase2L1ParticleFlow/data/jecs/jecs.PU200_110X.root new file mode 100644 index 0000000000000000000000000000000000000000..048a5ade0992917400c4bf0d6bb9fe228ca521f0 GIT binary patch literal 234378 zcma&NV{j*J_wO6q#>7r0wr$(CZB49+ZQHgpv2EM_#o2S;`_!}R{LgdhoUU43S9jM! ztru5)`rE6W?Co8EfbML7fPhSZKocYXn(W^-?_UG{Yhqx3Po_YiPV7KHaGpTGt(F}X ziMGh+p?$crkr6#Nf1m#UIs$?I2_$c-)i$1VbN#mho`3y0|E=KoAAcAX5lbgi zV;6fTPiPrNVF_g^Qy1s|v--a!b^YtW`Pcq+1Og3!`kT~hSLXk{AHYBVNeWW@Z&LDq zk^*c0;}51H!6*hUDJLST0i-1Z^$7%23Idem38hi*|+tkS4# zVQ6d%2ObMZrQmUJm)1fA+!tm zTn<#<`w-&~)ve0h?8J7cO8%k(n}VsGo`pIDH=I5I$4=(fK)9|qnZNv3BEU}U!MRdo z_cuqC{9TAr`W!9Q5oFl+1h=q15D={5KfQv7__tRK|MUtZ?4MpisE9imI#@uNx)|yk zS=upz|9knjYgn*A5b%GyrkZNWldO$9oEuFnWuXwJAS9PgJ)TrKiQO)2GVuh3;?KG{Zk~F*f*=_#h=h4e^@mg)pd(m@!@m7lnyU0Q% z1%Xy9Hb;pgs+hz=MnZwvk7&wJh$=(Q=_I`NQz7XG+0zXO4y6?nnW*Bte^9~USe5L# zzkkuXMcV5PEcnyd$b>EPtH!PKVm8w=?Z6gNublJ4YRNr2Tyo40nj7kXv6)v>nBtL; zVQ#~>hj*Ai@pquPSB78C*~Q~pfZ<_ijTtQbZbdAxOifWT`2^g6?8DwA&3)N1@fpJ@ zx`tlcXOQfz-lr9Ti zgJeJ{_uQT*1&#S|2(?E$DzDyEKJqz){9bp=>3xs2S$&-bFdx21?hJ3p8HCjFZ82(g z4?yoRqojWKMDp=%tJby&e;v`EzF^~9(5yvRgJ#(q`SXH1aB!156nR(n4a%d` z3&wPe>~Ef%sN031-djXOf+s{o;(_27to{Jq{RB7>6;yr_J~b71@iLP6;1`^+Y*uv@ zm7r1Pp`FqEBwBrLU8LrummhyV%^6hdAr)DNZpsXAo|s}#>Qaz*G`mV@Hk6b5Du})s z`Oa|VY$?Sbof3pu{Pq2&#c@Se5_k&uKjU(WcOtNq6QqCtLf7y6EiQvMMsfV`dF>fS zPPF{{5RIlu&-qc1$ml{+ub#w|!nKr6I177>R<5W(%g`Ov(OlBcQ9ofGo}C%FH}DXP z{@mNW#18Hbo^<9#u_JfQ00BiUK?il{M0@(;j3__gFq5IAb12jiI^vl0L_~7>i{`aQ z!p5eXwY&u^!dTxj#vQURN8HI=o4)!Yu^sLiB7xuAd2vJZ0llA&_(vT*hUFiPTF7_o zy@1cpo|%ZJ-XP{!hki}6PGf~z^LSOt#xtB!t%~f)`CC=01N>542gAueQSeUj}@8N_AYjAqk>nVEMuFf?Cru z@;k^-F(`82wAIt?U93o5#9c6!2V>ctjYK*EZRjS_32@&cI%!DPY4 zdq+VyA>B4m-cU2dAC#NSE-~cxS>Ms|~mNb=z?7G0(Ws z@ZMg3Ud)7$Lmi3Bij;I2k=cx;Tt7<_n`OJ4^zr7^WXCei>AQG|q8e|@+4&Fpm35#@ zBKwHTIa=Yg`*p@>eO~a!%_rLio)RNHQB~zSW4fkdM5{weh=Zo{rRwtL_?+vsz~ZX&-9jazwD*potJsaf=M;U(@z@ znBc;GyDWs1bUSPo&c6qJBgusnw{Nlf548KVZ>8rqYG^w@Ezl)8wdve*V*KHQTEX?* zu9UwD)-IJ0vvok-^fs{;gWIpOBjmrd(?Q}%aAGESOA4Sve>`sxfPK8;Ixcm3*yFS{ zkTNzK>!-f^_s$MD})ifY)b43!Ikqh6}oI2@=#)iZ?-p&2F)O%SJ zkDeNX4y;XP^qnscyS2rpC9rZ2$~A_4GO9!OYi0hlr>P0-#r%Ba4Dx#6e-o{loPxRt z@)mMB7_aMTEg+(mh6QHiDGnY70rROd0pC^;%TwrBE9XZI(6^srOiUG0(4y1U_9tN* zg=nVYgf||f!<)LP(g3T33x8{UBIf9=>8`W^#lji$Qm=LWf zbaNG8P5lRobJg!iND@gXXQ``Jvm#QV+NYUc3!jkX=hz(-FJ%6Ru*bW8JK-Zi=f3U_ zPKMN<9j~}cFlPIU^tjGS{Z(IOQ*#Xv4-12?ilxKIEd`Fsb+UK^Y#7O&t=3BoF87p}U746pCa?>9IiH1l54%2i|^+T5gZ*`f>6 z5H*abwxTgQ19qRBm`BR&wA%CtVKwS(a&@hZCb`Dcobl{&4Tts0rqonfw1^*(x_|?lGS`>F#r$|uX;6oGKB_y{ z3bFC^OAJ*U{<4f}0vC6xToHt+Z4V zPak82HKh@Dpzum(qQ4gK4?Dq|9{SJSL+al*Eta6AbefhUEeE?UezQ{+GeG7^mdPbJ z5Z9XsGo%oG%`OHJ<1GE~Ruabuevs_1E1O`A6uTIhY9bW5psk|yoFD7J4&F-K!f4>T zl8D`~k53@-6hh;GTcz6{9mlipNqxqgxE) z8@A;PYYJfhsv#S*6ap|SX5CWvG$DiLdF_k7ZO)FbuV;M00Woujj1GJFn5m@|CxQj ztw@*p%DfSjeQ$VAuOoBt%^6iIJ)}^P3)xLa7pI7{EKRLfh0vkuvQxPM7;*n*jdLv* z;d-xgp58Z{h`GOny0a6Z*HDgk0V8n19e$xx2F=j<_H*%c6j4hLhKI)tS~xZhC-{~x zQmLBF#6ky*V}zF?LM7Th%^EAWe5v3^Xh)B067ZPGb(D*SaKXyE=Yt!oMAj$T(3NrA zkWTK5`c)|Dgp(+7AwF6$CnF={-WAT&fpQ+Dsnz^<4eO!R{Y|5%{Oou1H}K%*NXTEH zmj9nX4Zr$dfSTz)K#lPqp!VcR-oPK$A1a2Uf>(iw#%Ys+xeFEw{XMq1{mh2Akt2Rd zQoLHsA`wqoObkyc8j>W%c~-;`?J`fLM14*PaGv1;#J5B{7MXKL!>ICuqJm zebW`$Q3>AMV8SpLS+P7huQR-wXW3WROEcP`V8C0moiddSc3tT2Ec0$e7k^J`<72h% z_Nd}leZAV@<>4J>DuZoUWy^bC$QbZTx_ggoDCMOrYJR$TTZAYA{dgMVqDZZx2gT3U zAR&EP!B@YmLkjC}4_b6o-QY~senYuPN%XRt%z8U_Bi{u4ebdCdZs1>H%k{d7xJ)spTU*V{UsAx{cVyT268fO zcD~I7lMef^4~q$&c6M9_2+01#cyH+av6IN{K`&@)nv7WT4`Pct`|4=iR0?l7(Pduy z+K(EIl`w*I1?))Q1+j3GR4RP2r+oXyljGx6Fn@%HOpy4E{Y-tkxSn8*%#rksjlb|5 zdQF&&D#Lpn7e_iU&D6r3DfmW?vYD~Vw!+)+_uacVy*uY|koSv+0594YpdGfa60;;< z6v2pg31=a_*; z)LH6SDn?c5*Oh47^}=+Z0eKFfA@p&8H5sXdJr3NE;MnVdzpCe_=re~ZvY$^1T;y^V|#bu_b2^3GZr;L{My!v)w z6n+@2JmvbX-Mjy@I00#jG@J%{WM7<~ z8*94|DHbV*Y#8470B|C(FVvPoic!1ImkmCKKhRqAjF~dohLV68>|BoXX(9G#C4q^& zUCf6Ni+0p2L`}LW4J*s?j4)4ROZ*}Itx`{`a|g|Y=Y(LAvL#tebruJn_&}J*j-k#X z8+^&ZiP^AR*t=wrL}@sHd%{z>rpBQ2$HScA70j$vhyA0S6SrjZy*0s)rC;Y{Ffw3* zs?K9dJqfzBzu|d==B)vzYILlQ>E#qOQ(~&>`5v*Zam+U!FB9H``aa4TVDOaJx-b(< zzlT)yhPVpq-&B7u_649X_$Ela^6q#PgudKo5R1C;M_@ zwEzNfW$2UM+h@M3ko`zzk2XuWGEzxPiVV2jSH&!hWbIAQF^A6PH zh`IXDrruwp#V!Y-K$s%eX=UhXt0AM?!}$TUKSem5^lfQX1XcF3)CMbj!*Tpnl$Wd` zEq1E^T=Tky*J#9V@$N@sJ+*?24dD-o94=7&L?bTQp6Z@-{9#lYqd|1aV8nSOhGzpi zv<sWOmhq zXyhcUaNhTAydgEX@@u6%R1MbDAmJ&C1JNtD%nBXAt^F4>s^3uitva;c^A4#ra!WFB zGg65?$uBe}(J>OXwBagrs^WjLjpyT65Wco)Eb(@sk0BC-19~?QTN=*7?115I8eK}# zBdJ!2bhG#Ia{IS?Y#E1@vQbhr-N0^ZZ32=7FTX6)j4laa-|!f!rNc+nl91<)wNC}rb=UXS&? z>rtcxZa7Y#&CVm=s*LD)IX{tmU?7`GZ@C3v`n8i5lR)u=M{^d*3dL=~ytQ_d|t6?p768xe{gL7E|`9oW%^tM_lJ>!(E6*ROf9PSzIEDJMW~O9*_i zygx`N!H^i1XGES$O_ien(7X%U+VF>&{P4eAG$sG((Il&KCWvUk?IY;%!- z&#_Xy0{mM1!=yWA0#n5Er_TG2v_#am#AqWQv}NX2<+T}I5&yG2%Y!C(`dOIT9kc5w zTL%Zr2+yydg{KAAsX=ks?=2iE)4`V^?vCjx*h)=ua<5qccq+DWm`OVUDVI7YHB&aF z=NwFz)i;u2N1fceYE21jgIQGHZ;|ugG870mk8a!!sLXpKk0(CZE@cl@0#-4YkW5rc}#ot#WZxNl!RAEs?DnKcZ zGE%7^NmXS4+>ofLY?Z7q%fs*oIi*yH(#HuTxWb}^RD3~FhoGXB$uiq(FKjtKdfw9v zY=~tES*@&7uhDUDp`@*mG;24a*+uuoCgvBs^IlH0FSLH$%Z_K1qoQ5riqBAkf3G%v zef?7QCg=sCGqwJw2W;k1;-q}H59n$&@??$g!S^Uy!^3f`XL}s-_*CCykURDAhFLx+UI_&>cS0nr z_Pu1FMtJVlSM>1(8X~vz^7p_SqsYozm&O)zxy;K9#oI@1&vWJvf&h3uk&{rl?=2-W z4v-;{8?k0@zy>>0-5tXmp2ao8vLhZ|z)Hjy;f}N%nVTWhIk_*`#Br(RPk7OAF92ND zwSdH4ytPjvQt){~kIDM zq+HN2q3?p6Kf2~)X25gwqrCVZ6Y>kRQ|$=E$Ky0-Pu&uOQ&fH|kQ7#sS8y!}` zL$`hX!-K~;{?uHcg}9f|-$HYNjl%{xWPVKk9}ZB=v_gy2`__vwu=LK6W+dlSckJuo zi7Ms}aC37*C#Mf33lM-Ap-1|C_sR3=iINO)pK6)O+MQ zy0{-2B#8iBc@~h3^uzvXJFT}PZK73M($rN=?M&IW1>_0x*CDlt6CmGodqF!CToGEBP$fumU~06&xS>mgP()o&^BCL@)#pT%oEQ11M(k9y`7QMwSrx&dz5@G)uOVw)cXri@^@qu^EuPKK`-yYl`nor$33SqP|eW# z1L#fZRuox8a3opK?D|JjK7}BAk^`A_ioI?}j~htOsMjJ~^U!{R*htl+9}xpN!9z!! zf=O~5XvuW66Fy831!4n*r_#^0B#GyQ%Vau{>dzf&-bKPPBtDVMI*2Vc`tXiadn%hM z^AGucXhWdE>Ji&mm5hbcXhCG~;pS z$T`I=PKJ}SvJ%+A)|O@$)lawYm2;(3vx60Z;W3EX9hx_ArccF?EUMv1|O76(sT`$zE-combwSGJ*I;L;pG zWhdiguzWrd)3yWGIticm-5@Kb86Ozo2MM+gLO12rN^H;tcSnjsW`HY({gE*0=UxuZ z0+qUZhoz|QN=Bv-=NJ?tL&{K zE_w#l3wW+yDX%+U)ULO|M0UNS?`@;)%h6i^crRVFD0e|;onNN7hp{{52j!gyT^ zgCyM1<`2t^5?H0HV<4_MNt@Ahz0itKa8<0|TZ0}VQLkL(jLW!S*-7g_V-s93#+eE$ zE+?_eY(sIcFt8yVaJSYgE7U}4r54y2(z3fpNp26BMGPxV$P9$QgspzA_wEmi8>(xv zZ;n~p-wj&LCqX&3`YexSkdN$-)?VH*LG?ec(wo^qe^-m@gHYfE+j>sh%MUd>f2yqoov>XF`96cX=8-wugkIi4?T! zDpX4+neLV@rX=ha!7AX?%N+jYti0)1b)k=+ zxgPMui2YJ6ex#q2Bbe8uBAadp9k4c~Q+@GHc>9pex?uqnSTqe2g+>4+70g!2H7z*H z)6tKZf%Gx?6ic~FxV>7W%;7_Dcb)2i-ES72$`O00HzxEEzij*GjW@g(x7u6s`u9t~ z&B(V6H*mh;a)R2$98yiX*Oe|lp3pW`YkvL(628`4NlQP}fHok_D>Z@W5*~+P$qzVw zdPK!~PAdE|ak!I*4+`1(BVQnjDEt{?+Vtuv?6l%l^fgr~yu%u={ZfYZj7dN5hH^NM(Wn9d>;ew35a7W$?H~j>HlK;f-#T*a` z<@08zWjJ9ioZI)g1OW-{ZF-JcCHS+tsyA|F#0JiTEN#0eq6ePGvV|9DlZMx(02kQN z7~NNv3TDWL_Y0H~4!_V#?aqulM)}d`eWz5a?10UXj3beiUpjS_MxU-2hp%F6GKCPM z_UbI*%Ev<6<~O-(@eyF%VcC#2JH-9*(==2X(O_=hqXdKE@o||g)qEPr(9Maixw_E8 zLh^HWfH(E{vZsv%0w++?nyN~?jg((QqfZx))$4I>7q*$2Ib`oaTy`ga zGcN1E0yuFoF)<&V!WR%2v|`EVx1Hut9oa8Wy$OVm-aCHsn+2V}L@o9|iJH{&zYsOc ze~23XKSb@R^V^zWIM-~J_&o)+A*lh2D$*roG$0>zfDg(4PC=?!R)=(E}i0FEji*7(zLoHlOc8 z8Ch_;NXW|@lZ1}^2UP>n4Y@H`M}w2<-*Rv`&EUAN)6mtV=13+w$a zQ%hRTTz~6XhoA9}q_YCD+Dka=^7Oe46HS9X<;+XxJ0cC9oc;EcXAU#nKl)x?edEs> zQgOs^F}`(9`s(jau8j6pCXF+3(@TEMq)~v65!A6{e6-3m{0TSHj5xX&{gU$(-fX|J zs-h%+=TNU2o3(TOH9@B2ZtCoh4vLnRZL*_EAljYb&gy_C^X!fbu)^@w$JjK_SYhgM z=@05hh<(t5p2054F;CCS$xH#S4JoQoSH&*f^~3B+O?=yir>DFEA@}i#K*)tG!C4<3 zyfsDT?WxslVUvg7qaf?}=s{<@yL`Q!A$$XY(|*m+p#`}QpY9t&eQc^dA-N@-!!Lt-?!NgWsrLyq_D|Fhf+A1^GK8;?)b%?2zQK1uc|w!QFCQEc7MMDE*2 zJZ*EFqHKUi_}SQ@rDd7_fNU!06E5{(Q!{5wR1x@syu>eOrW_w+0l6>zxE{i~KB^_6 zPyAK))Fplo_ul75##i48J!n}f+iyqi=lHu}g5?LlgHVKhR=0Q$gP3W+!|xYN=E{Ce z?-~?F=%JCc`&3UJJxn9MzsmHL3-{?kG*YIJPjokjb52Pp^tHi0ed<}#08&}smXOc! zc4US9#}R|aLHJHr9t+8KGTSXo#7!54x6vtz@K8GP_kqWW99jkk;WgzLQ4Jsfp)erU z12;ju>%7vtumI}rM3N4gg+z7}jus_Lk`Eded&}ht2*oZT>!tA11~%~|=tlm2|C?^C zDfU@SbX(@{Pkp0(i){0UtP6HA37 z_6rn^c%Yhir6I-c4D!!Tu>K$3u+(T5J~Vx(5h>%9_>6Z=1um4FWMrb2t^-kp66Bg> z$o&EA^kfA+avz#bmGnm>T9vn8=j1Z(w)Z&U;mCN%iR!(J8+KbSwtP9+E`nB5j zPFKgzA;B`c0WxwzlIV^#1Zv!ndV`f5S-fnl&PQD}$h5PwWj=!+anw-GH$QH`aYYH; zRcFJmrZNq^()$WC?fxD43|}8QaU!}|P@}>?k#*9Wq|;v^Du-fi#i0hdOry*WIiPx! z?lfgVu<5p=%U;rkdu=YX5~fZ2OWb-SW!`!0R;JvbA~JWtdewY|s@7#swQ2P;AsM{u zq{QP6E$5a`|BCw~3yu%pP`3u-C$hr?N6*&VPY}($K-Y5$sLL&i3|B{}!1)|WyK^l< zkEV8={o{b$PeZK(2wUsq@ zyq@77Z~McqSN^}6H~Wl}p0MlKG+D%UIuVv_*=wbqghjAn?Jnf~qRLKfdx$VC!>QjN zrWv0#M4q+~X6IPNn?A!ZatGbQr?CiB_FHh~R&2H3cS3@A*(hCH?TAX@j127oOOuT$`%kZ8P<4eBjejb?CrBrRb<-A8or;zNG9(ir5Y4?pQl_$)rgg)*NBHhT)?miz``1OcU48&+yWrPR3 zPF(e4PYCnlxmTy&317r;8=if5p#4nJuitf_c2o6s>IS}mUv9kM+*$wv2JA-4?i~nV zmTH4PriKL^rntSWv#C(TCB;knLmUYtsdf1prZb8_em{HNUJ;6{)cl@y%7vZF>})-`;)K2{tJzG^ z6R=sh$?Unr8R~yK_<8R`D3|R~+Wr7M^lpAqy6!~SV?d6)>3wI zD$ww&*IR5{OyWa1sK#1cxM2G&%Et0)glR=i`Q@or6eH!oaCz8NhQoa4}5%W>*M>aORD2VrTZy1I^z3f{F$0S^2El~6lM1L_>R9tV1l=Pkt0HYlQSR?ojX@h^XtiXMw&0lJv3*v`2{sepIkE4 zP7id+MEc^|&9^Lt%WpC>6%>7>d!BI$s{$VR{zUeV0v`Ih9dkD5Qg!pETZ2>?pB?{_ zqbu|xDxi`LcS-Qd!>C?13v;n*z4l7ATEU!6y_x_6{waUjr1F+sVdv#=R*Np|?KAEM zn+sF|hkviDc*cvAHYeE&uuDlAvO%l)P!1${R$1m>%_6EK>EOC>T_{lzD=+Q!M?gvb zo{2f^K?1)!#EsdTECD;DIa0he?uXA$;|x`X1Z8@TrBZ&;`>)~tgkvy;q_MufzF)O8 z^2EggiiKtU|67;lpE+{Y%mRkGX03-v2_;tpB0t|1&r3$&;c0`TtSFLDG_14`Xi^|l2|=r+(jt*&mJlkE zQP7p^E_Xw4!w+cZKj8zs>h@l|8SBxN* zQELkLkLB%Ezfu^Kp~e%cR!>A6Kp7v4@7Jlqm-OZlrZcOl_SHBy3Ht*5dVzE;%5ivWfXfL zcv0^z;5mS9`3?#>o==$X6fTpjm{_I3;Iq8|9O{$9xpg`kC0H}AXVA@I0o_yx$t~oO z;F;|5uEx|J$xhSX$99S^r0#WIK6cryoVP>%#e{}vuf~xK5sG@39^d2sJ-q?j z-zNMKlS6AoK=4zviTRF~E2!tE+cJ*G4#^jDvX9Z*V{PD>kdwi6Yv=CCCET%Zg81)- zv6GZlgrT;09ixVnjSaI|*wfz)uvnDx2`94SU1?)*qsUb+S@ z@2VifZwOx-Fil-XvJgQwat|k`$$-{hj%H{^>}DlAo{!r;oo&Rqv^2i1!ary8bNefa zf81$(-l*ZO1_EMkhtxfX_B4uu?1kF)y*cSLnxBwgdfvta2S9U3Qe9|q=IO2ZxQh~5by2H zS8tnOj(}TQI)>B7!xo02ATI#P^aZ%KtY4d)hi(uiPx z$-Vu-u|ME(Iz%S|^Ui(q6%~jHGlx79y~?NWt92+!G){CyM3PjP_>HD{R`jEAtl!`} zk;^@~sjH!;)d}}?dYq?lEximIs$jn9PZiW!#|%0y77rH}wi=DM%Dx^)rfEO<51jSI z@JqzLNN{<(>b7+lpG*{yCtGxu)v)nG+s*&Znc~7~g#Nt8AD0VaZM0mi?S(I^wm#MO z0m`g7F~Qq*fo6-Y@2{EETitG4%1x(5>{N@6SYKaS-TbNvShxwH<#lgRo0R(XDd4Cu zvrfzbM}B$)#xm$QWIW(F!;rOov6aQw2{fI^l)e;8yDQ`h@kefcm)c)X-rJLU^SG$z z#-S#-v%s;fdktxmndK@V8Q+jcQ@U=)&9D^`gXo; zb*Ks^MBPyGwOWj?tCEf2PPA@zE8>{C; zt^CXM3G-vQ!oT6}1FZKPn;r(+x!(5E;edZ5)ll13y`znx zR2?q{hG%N@ui;196)ynctYVXv@lVVEfJH@ty&Tc#)X_nq{RPsZ)$>5#DPN$k3l3l% zfw0ZkPqTLiObCSUL}QqWxX4_=i$fAM-%wt71ObQ0Wp@~3MY#p)?@n>}>4QE12AF>q z$t12CCcoR{rU~|K8@iTs5ok*{9J2A052i?Zvm1pG@#qdE(ItV|%WeGWB(;{OIf1*y zkQA7bRL1LLiD<#TU2eT@LMX(hHFvj7B(nM>6X6?6Lj1?N=<$!G2+P*BeRR1{QNh!~ z*`1dNm+FpQcO!Bm~~Fv;lr=+&SY1C0N| zcKrszZ@q4CbMsDOt&27x@fv~xODpAj=|N=O1U@4tE{Hk$@-GKe;Ixi{()Zd+u*AEP z_H94^-8=zU%hfvgogj=SY$f>L9?*>TG_9?qJ0h1_ zTQ8Euo#96W#nqGEk*ikd1UsfP$lUSgaX!!J`^)}}{PtXt9OZqtugz3LOFhdu2c)rW z<#pg@@=5&-Hp&LUKOwAB9}fG~*9~-g8GRDXf4yK|yo;5{AlqwyxkyH`?)z(PU-HZ# z-$lQ=CXnP9&`_#peehw~jO0e*tIzh!%bKPn>5P-zoe4)A<7h-Hn$K+hGh}c!TH}X*@4S2V39m-^<+KuUfk>krn z$dQW34W&foNkjrX9CPk^(z`k3-S?yN)cbyU6M3|!rwlwA-CAWW&p5uLce!yMpfoex z^69LwU+^G)6>4Ea++idsu+6U$i(E2?WR zXu;U|_>z7Qgynq?;2n+1BaJuU%ANZL+`t0FC75bI`j;9t(L-7zB zmI5EpUy??cs1RO#ESs&*Aa4)fdjyAK!ms>PKeh`ce+4`ZAQ9=ecmR&PKRXpA9L z6QhPR$%tT{;Sy5g9=Fvr1eYDLJjAxLA;F7_+0?d#X?R-JNd+DsXPOKBaII0#N$<#`O6Wr*j*HPl^JHj5Y^8S=qd>~}3*1{i0 z65gMf&ti}W7U@#rHFjYq^#pxLSt$~5I!iOUdUlcE`ZVQ@10SPUDpz-cBwA|YuYZu^ zD>}Bc$27qZ!ZBgjIMxNR+<*LawXYn9vFzr~M<4W9Q5UVO1Rkly#mmck)tx+ssgPIp znzZ?U%}qbN1>}9>euK_(bzJ@hYW@EyOLHUr7ocYQ4^Wf;N0zqKh}QlqOG{A~K_w$e zkrg3P6loW#;1qeTUp?E&H=lG1hoVZ6NfpGP5d~AK6p%2H3Mt|tOG3G-oCb#iyk^cn zZ~Z(&U3sl}zrSz3su5w6I*3{S3h3fg3NU|%rll4sRaHZSF>t11^eQe%3!pXfC{?BI zb`a72z8+ACMk<{HiAEC@vTb~G$5*KR+UrF``+ecdKO$S+--U{qAx0}PBGf)!?eT7) z@wu zCmhQ$Rh`cx!$q%B)DExO#w%@GM-H~!?bX&ih<36xY)kmFBOQ>g^Fmu(ZR%n$&&Sul z#QTqhXABB>iUwFWd^@#JxNOFIFNnGnDTU`JS=qbwW>v+Ms81@5ekLwA%mP4I^ zq84C~@b5qRqbO|K52eX8dNiXM83${vQLBjqm7O{5LVqf7dZ+$~tILjDBKU^jtlKj? zSnv-4PexFo1Vgk$!0Xz>FAv57Vq@+u?ej!{&6_6<7KLHalg8sQBJ6Pa%h zGt%rkXEyd$ZXklsU7)wL1mRI)Aj)sR(yPr2_|zV%H5~iBblLk-M1*h;Gk&eWI1~SO zxY$5^zA00CnhqhLBGq61UNaIv51FLn;pOxl*33uSDW=)52Jb& z2z$=qaJAOfLYpcsPvqf9HJb|@9ELgF@BBrIe^FogB&1*K&n0SZ2-{VL8G7->QdsV<~VsPDFu z2w*VUA;kVZyA$5LMfD*DsBx3db#PA7(3Cfiq%6Jblu5Li{Mif~1HFB@W4P6)|qEC(?dd>xj21^Mp21q13bRZ^f1KUOg_7;egAiwD5@J@*px8 z1wRVKorKkp2+5sx-eKM}D+4|AxJPJaZK+3@cP~SaW6LXBR6dy^-i@G7ZpIxoV?})? z$YW|{5rAHV;T-FTYr-Z-R4!e*@WN^6k?KbNLn&{*ri_f(G9+*0k!)EUdMEbOX3Y)%xlU(-@cQ` zPzoFehj%L+?r22u4<44xCnz~-wB(A~pM5yStibw2;M2;i+T@+CM%5iL56%2KyFzEF zv)h<`N0s#f=SHk;J?tCmZPDiTCb@m(>^|1I~VvTTLD1(Jx zGKn^nh&eT|N>*@x_qEbdzm6!7E}N7OG$`6#RW-Nzb0qi+%o zFtqbb0S>#=`4`JqfGTx7Zi1dbG7jeB8Kaf=jfw*f6u*x1xAG z_bC)oiPd`>!chRt{vd*rt#Rfio0sNBFGv*pKK{0c-|w&bxArK($Gn+gK(Y3Tz29&G z0?{A&50j)|>z|PmZe5Xmk+!}6i@m=HiY#i^Heo2-6R*PErEqt5cX#)~Nhlz3cXue< z-3xc8aCdjt=I!q9boc4ggMa=Ha*#V>@5tDL6<4lxKlcUP1`1Cz4=^?zx52i3_ha5Y z!GX+(hCB1X58T@IrmRxs4~jiTFMFKuj*bodp|jed3MebJvHD>WHr;< z-mM6uC84uiiUUEQqe!}Q|C1JM@r1n`R}*28&J^bFyW?3cPKObLALP5n}CC4ZcxGFs%e$!;ZhL zPU60920pWITzT98NG!OK7Ecs}Ol!1V46eV4n)6Ym9dG>}9!z9C><;Lebv_JhRj%Qs z;50)i`rUYVeAaG7`M1r_ux9m&d#M1JeVWVu5T<<2cRmeeAZ-UgTXq~ z{aFVdZ4;h+w-g0~)ReFio{ZOb`UpU!CRzQ0@z&fo>ErYQbp`Sind_ua3VX!Am%qn|;uw~82U7{!@C ze*5Nb0VKVbgw2N^OyckjGMq}yxsYfUQvCZqJ^2Gc=)NyFDgs6L%19{bWy=;e=}~{Y z-5XpukdbRlIYq?sH12KslL2HThHC|_53tV|e%pA4?y)k`JMM>6+m(>>lMfPo0d72PP+Y!Ay zC>(;S?aVwxyGWurF=W1QQ30BEl3jCqF#QyHh*=wY03LO(tnMl}CKD`McYJ>jiM0R< zcl6Mh&VRedy1^~8`cc+8NY~})z#kTb!n`GG_B8i_qA^W}sw@V=tNvsR*#~CWReW6k_u`2!piQ^UHN_lWa}pc3iioD-27gcq|3;&&oPJZ zcfN?F5v>Sc`F(J_Uh8Q6#|2%X@Y{iX}s(I1efP>^Fqt%=-MOorZPi_xK5hRNC;B`hcJP z?|3cl@IT-+$A95<8vOt2`S8|_wEDtpYqGpdQVXZ"A_ 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

&x};?$B6dH^&u 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 |nNBpd&-KGPHD`CH`=U_ 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 literal 0 HcmV?d00001 diff --git a/L1Trigger/Phase2L1ParticleFlow/interface/BitwisePFAlgo.h b/L1Trigger/Phase2L1ParticleFlow/interface/BitwisePFAlgo.h new file mode 100644 index 0000000000000..4729841216dff --- /dev/null +++ b/L1Trigger/Phase2L1ParticleFlow/interface/BitwisePFAlgo.h @@ -0,0 +1,22 @@ +#ifndef L1Trigger_Phase2L1ParticleFlow_BitwisePFAlgo_h +#define L1Trigger_Phase2L1ParticleFlow_BitwisePFAlgo_h + +#include "L1Trigger/Phase2L1ParticleFlow/interface/PFAlgoBase.h" + +struct pfalgo_config; + +namespace l1tpf_impl { + class BitwisePFAlgo : public PFAlgoBase { + public: + BitwisePFAlgo(const edm::ParameterSet&); + ~BitwisePFAlgo(); + virtual void runPF(Region& r) const override; + + protected: + enum AlgoChoice { algo3, algo2hgc } algo_; + pfalgo_config* config_; + }; + +} // namespace l1tpf_impl + +#endif diff --git a/L1Trigger/Phase2L1ParticleFlow/interface/COEFile.h b/L1Trigger/Phase2L1ParticleFlow/interface/COEFile.h new file mode 100644 index 0000000000000..b9b11b49165c4 --- /dev/null +++ b/L1Trigger/Phase2L1ParticleFlow/interface/COEFile.h @@ -0,0 +1,43 @@ +#ifndef L1Trigger_Phase2L1ParticleFlow_CoeFile_h +#define L1Trigger_Phase2L1ParticleFlow_CoeFile_h + +// system include files +#include +#include +#include +#include +#include + +// user include files +#include "FWCore/ParameterSet/interface/ParameterSet.h" +#include "DataFormats/L1TParticleFlow/interface/PFCandidate.h" +#include "L1Trigger/Phase2L1ParticleFlow/interface/DiscretePFInputs.h" +#include "L1Trigger/Phase2L1ParticleFlow/interface/Region.h" + +namespace l1tpf_impl { + class COEFile { + public: + COEFile(const edm::ParameterSet&); + ~COEFile(); + + void close() { fclose(file); } + template + bool getBit(T value, unsigned bit) { + return (value >> bit) & 1; + } + bool is_open() { return (file != nullptr); } + void writeHeaderToFile(); + void writeTracksToFile(const std::vector& regions, bool print = false); + + protected: + FILE* file; + std::string coeFileName, bset_string_; + unsigned int ntracksmax, phiSlices; + static constexpr unsigned int tracksize = 96; + boost::dynamic_bitset<> bset_; + const std::vector track_word_block_sizes = {14, 1, 12, 16, 12, 13, 4, 3, 7, 14}; + int debug_; + }; +} // namespace l1tpf_impl + +#endif \ No newline at end of file diff --git a/L1Trigger/Phase2L1ParticleFlow/interface/CaloClusterer.h b/L1Trigger/Phase2L1ParticleFlow/interface/CaloClusterer.h new file mode 100644 index 0000000000000..6823d243a6053 --- /dev/null +++ b/L1Trigger/Phase2L1ParticleFlow/interface/CaloClusterer.h @@ -0,0 +1,297 @@ +#ifndef L1Trigger_Phase2L1ParticleFlow_CALOCLUSTERER_H +#define L1Trigger_Phase2L1ParticleFlow_CALOCLUSTERER_H +/** + * Classes for calorimetric re-clustering + * */ + +// fwd declarations +namespace edm { + class ParameterSet; +} + +// real includes +#include +#include +#include +#include +#include +#include "DataFormats/L1TParticleFlow/interface/PFCluster.h" +#include "DataFormats/Common/interface/OrphanHandle.h" + +namespace l1tpf_calo { + class Grid { + public: + virtual ~Grid() {} + unsigned int size() const { return ncells_; } + virtual int find_cell(float eta, float phi) const = 0; + int neighbour(int icell, unsigned int idx) const { return neighbours_[icell][idx]; } + float eta(int icell) const { return eta_[icell]; } + float phi(int icell) const { return phi_[icell]; } + float etaWidth(int icell) const { return etaWidth_[icell]; } + float phiWidth(int icell) const { return phiWidth_[icell]; } + int ieta(int icell) const { return ieta_[icell]; } + int iphi(int icell) const { return iphi_[icell]; } + + protected: + Grid(unsigned int size) + : ncells_(size), + eta_(size), + etaWidth_(size), + phi_(size), + phiWidth_(size), + ieta_(size), + iphi_(size), + neighbours_(size) {} + unsigned int ncells_; + std::vector eta_, etaWidth_, phi_, phiWidth_; + std::vector ieta_, iphi_; + std::vector> neighbours_; // indices of the neigbours, -1 = none + }; + + class Phase1GridBase : public Grid { + public: + Phase1GridBase(int nEta, int nPhi, int ietaCoarse, int ietaVeryCoarse, const float *towerEtas); + + virtual int find_cell(float eta, float phi) const override; + int ifind_cell(int ieta, int iphi) const { return cell_map_[(ieta + nEta_) + 2 * nEta_ * (iphi - 1)]; } + + protected: + const int nEta_, nPhi_, ietaCoarse_, ietaVeryCoarse_; + const float *towerEtas_; + std::vector cell_map_; + // valid ieta, iphi (does not check for outside bounds, only for non-existence of ieta=0, iphi=0, and coarser towers at high eta) + bool valid_ieta_iphi(int ieta, int iphi) const { + if (ieta == 0 || iphi == 0) + return false; + if (std::abs(ieta) >= ietaVeryCoarse_ && (iphi % 4 != 1)) + return false; + if (std::abs(ieta) >= ietaCoarse_ && (iphi % 2 != 1)) + return false; + return true; + } + // move by +/-1 around a cell; return icell or -1 if not available + int imove(int ieta, int iphi, int deta, int dphi); + }; + + class Phase1Grid : public Phase1GridBase { + public: + Phase1Grid() + : Phase1GridBase(phase1_nEta_, phase1_nPhi_, phase1_ietaCoarse_, phase1_ietaVeryCoarse_, phase1_towerEtas_) {} + + protected: + static const int phase1_nEta_ = 41, phase1_nPhi_ = 72, phase1_ietaCoarse_ = 29, phase1_ietaVeryCoarse_ = 40; + static const float phase1_towerEtas_[phase1_nEta_]; + }; + class Phase2Grid : public Phase1GridBase { + public: + Phase2Grid() + : Phase1GridBase(phase2_nEta_, phase2_nPhi_, phase2_ietaCoarse_, phase2_ietaVeryCoarse_, phase2_towerEtas_) {} + + protected: + static const int phase2_nEta_ = 48, phase2_nPhi_ = 72, phase2_ietaCoarse_ = 36, phase2_ietaVeryCoarse_ = 47; + static const float phase2_towerEtas_[phase2_nEta_]; + }; + + template + class GridData { + public: + GridData() : grid_(nullptr), data_(), empty_() {} + GridData(const Grid &grid) : grid_(&grid), data_(grid.size()), empty_() {} + + T &operator()(float eta, float phi) { return data_[grid_->find_cell(eta, phi)]; } + const T &operator()(float eta, float phi) const { return data_[grid_->find_cell(eta, phi)]; } + + const Grid &grid() const { return *grid_; } + + unsigned int size() const { return data_.size(); } + + float eta(int icell) const { return grid().eta(icell); } + float phi(int icell) const { return grid().phi(icell); } + int ieta(int icell) const { return grid().ieta(icell); } + int iphi(int icell) const { return grid().iphi(icell); } + + T &operator[](int icell) { return data_[icell]; } + const T &operator[](int icell) const { return data_[icell]; } + + const T &neigh(int icell, unsigned int idx) const { + int ineigh = grid_->neighbour(icell, idx); + return (ineigh < 0 ? empty_ : data_[ineigh]); + } + + GridData &operator=(const GridData &other) { + assert(grid_ == other.grid_); + data_ = other.data_; + return *this; + } + GridData &operator+=(const GridData &other) { + assert(grid_ == other.grid_); + for (unsigned int i = 0, n = data_.size(); i < n; ++i) { + data_[i] += other.data_[i]; + } + return *this; + } + + // always defined + void fill(const T &val) { std::fill(data_.begin(), data_.end(), val); } + void zero() { fill(T()); } + + // defined only if T has a 'clear' method + void clear() { + for (T &t : data_) + t.clear(); + } + + private: + const Grid *grid_; + std::vector data_; + const T empty_; + }; + typedef GridData EtGrid; + typedef GridData IndexGrid; + + struct PreCluster { + PreCluster() : ptLocalMax(0), ptOverNeighLocalMaxSum(0) {} + float ptLocalMax; // pt if it's a local max, zero otherwise + float ptOverNeighLocalMaxSum; // pt / (sum of ptLocalMax of neighbours); zero if no neighbours + void clear() { ptLocalMax = ptOverNeighLocalMaxSum = 0; } + }; + typedef GridData PreClusterGrid; + + struct Cluster { + Cluster() : et(0), eta(0), phi(0) {} + float et, eta, phi; + std::vector> constituents; + void clear() { + et = eta = phi = 0; + constituents.clear(); + } + }; + + struct CombinedCluster : public Cluster { + float ecal_et, hcal_et; + void clear() { + Cluster::clear(); + ecal_et = hcal_et = 0; + } + }; + + const Grid *getGrid(const std::string &type); + + class SingleCaloClusterer { + public: + SingleCaloClusterer(const edm::ParameterSet &pset); + ~SingleCaloClusterer(); + void clear(); + void add(const reco::Candidate &c) { add(c.pt(), c.eta(), c.phi()); } + void add(float pt, float eta, float phi) { rawet_(eta, phi) += pt; } + void run(); + + /// possibly grow clusters by adding unclustered energy on the sides + // note: there can be some double-counting as the same unclustered energy can go into more clusters + void grow(); + + const EtGrid &raw() const { return rawet_; } + const IndexGrid &indexGrid() const { return clusterIndex_; } + const std::vector &clusters() const { return clusters_; } + const Cluster &cluster(int i) const { + return (i == -1 || clusterIndex_[i] == -1) ? nullCluster_ : clusters_[clusterIndex_[i]]; + } + + /// non-const access to the energy: be careful to use it only before 'run()' + EtGrid &raw() { return rawet_; } + + // for the moment, generic interface that takes a cluster and returns the corrected pt + template + void correct(const Corrector &corrector) { + for (Cluster &c : clusters_) { + c.et = corrector(c); + } + } + + std::unique_ptr fetchCells(bool unclusteredOnly = false, float ptMin = 0.) const; + + std::unique_ptr fetch(float ptMin = 0.) const; + std::unique_ptr fetch(const edm::OrphanHandle &cells, + float ptMin = 0.) const; + + private: + enum EnergyShareAlgo { + Fractions, /* each local maximum neighbour takes a share proportional to its value */ + None, /* each local maximum neighbour takes all the value (double counting!) */ + Greedy, /* assing cell to the highest local maximum neighbour */ + Crude + }; /* if there's more than one local maximum neighbour, they all take half of the value (no fp division) */ + const Grid *grid_; + EtGrid rawet_, unclustered_; + PreClusterGrid precluster_; + IndexGrid clusterIndex_, cellKey_; + std::vector clusters_; + const Cluster nullCluster_; + float zsEt_, seedEt_, minClusterEt_, minEtToGrow_; + EnergyShareAlgo energyShareAlgo_; + bool energyWeightedPosition_; // do the energy-weighted cluster position instead of the cell center + }; + + class SimpleCaloLinkerBase { + public: + SimpleCaloLinkerBase(const edm::ParameterSet &pset, + const SingleCaloClusterer &ecal, + const SingleCaloClusterer &hcal); + virtual ~SimpleCaloLinkerBase(); + virtual void clear() { clearBase(); } + virtual void run() = 0; + void clearBase() { + clusters_.clear(); + clusterIndex_.fill(-1); + } + + // for the moment, generic interface that takes a cluster and returns the corrected pt + template + void correct(const Corrector &corrector) { + for (CombinedCluster &c : clusters_) { + c.et = corrector(c); + } + } + + std::unique_ptr fetch() const; + std::unique_ptr fetch(const edm::OrphanHandle &ecal, + const edm::OrphanHandle &hcal) const; + + protected: + const Grid *grid_; + const SingleCaloClusterer &ecal_, &hcal_; + IndexGrid clusterIndex_; + std::vector clusters_; + float hoeCut_, minPhotonEt_, minHadronRawEt_, minHadronEt_; + bool noEmInHGC_; + }; + + class SimpleCaloLinker : public SimpleCaloLinkerBase { + public: + SimpleCaloLinker(const edm::ParameterSet &pset, const SingleCaloClusterer &ecal, const SingleCaloClusterer &hcal); + ~SimpleCaloLinker(); + void clear() override; + void run() override; + + protected: + PreClusterGrid ecalToHCal_; + }; + class FlatCaloLinker : public SimpleCaloLinkerBase { + public: + FlatCaloLinker(const edm::ParameterSet &pset, const SingleCaloClusterer &ecal, const SingleCaloClusterer &hcal); + ~FlatCaloLinker(); + void clear() override; + void run() override; + + protected: + SingleCaloClusterer combClusterer_; + }; + + // makes a calo linker (pointer will be owned by the callee) + SimpleCaloLinkerBase *makeCaloLinker(const edm::ParameterSet &pset, + const SingleCaloClusterer &ecal, + const SingleCaloClusterer &hcal); + +} // namespace l1tpf_calo + +#endif diff --git a/L1Trigger/Phase2L1ParticleFlow/interface/DiscretePFInputs.h b/L1Trigger/Phase2L1ParticleFlow/interface/DiscretePFInputs.h new file mode 100644 index 0000000000000..c697c88eb5ada --- /dev/null +++ b/L1Trigger/Phase2L1ParticleFlow/interface/DiscretePFInputs.h @@ -0,0 +1,244 @@ +#ifndef L1Trigger_Phase2L1ParticleFlow_DiscretePFInputs_H +#define L1Trigger_Phase2L1ParticleFlow_DiscretePFInputs_H + +#if defined(__GXX_EXPERIMENTAL_CXX0X__) or defined(CMSSW) +#include +#include +#define L1Trigger_Phase2L1ParticleFlow_DiscretePFInputs_MORE +#else +#include +#endif + +namespace l1t { + class PFTrack; + class PFCluster; + class PFCandidate; + class Muon; +} // namespace l1t + +// the serialization may be hidden if needed +#include +#include + +namespace l1tpf_impl { + + struct CaloCluster { + int16_t hwPt; + int16_t hwEmPt; + int16_t hwPtErr; + int16_t hwEta; + int16_t hwPhi; + uint16_t hwFlags; + bool isEM, used; + const l1t::PFCluster *src; + + // sorting + bool operator<(const CaloCluster &other) const { return hwPt > other.hwPt; } + +#ifdef L1Trigger_Phase2L1ParticleFlow_DiscretePFInputs_MORE + static constexpr float PT_SCALE = 4.0; // quantize in units of 0.25 GeV (can be changed) + static constexpr float ETAPHI_FACTOR = 4; // size of an ecal crystal in phi in integer units (our choice) + static constexpr float ETAPHI_SCALE = + ETAPHI_FACTOR * + (180. / M_PI); // M_PI/180 is the size of an ECal crystal; we make a grid that is 4 times that size + static constexpr int16_t PHI_WRAP = 360 * ETAPHI_FACTOR; // what is 3.14 in integer + + static int16_t ptToInt16(float pt) { // avoid overflows + return std::min(round(pt * CaloCluster::PT_SCALE), std::numeric_limits::max()); + } + + // filling from floating point + void fill(float pt, + float emPt, + float ptErr, + float eta, + float phi, + bool em, + unsigned int flags, + const l1t::PFCluster *source = nullptr) { + hwPt = CaloCluster::ptToInt16(pt); + hwEmPt = CaloCluster::ptToInt16(emPt); + hwPtErr = CaloCluster::ptToInt16(ptErr); + hwEta = round(eta * CaloCluster::ETAPHI_SCALE); + hwPhi = int16_t(round(phi * CaloCluster::ETAPHI_SCALE)) % CaloCluster::PHI_WRAP; + isEM = em; + used = false; + hwFlags = flags; + src = source; + } + + float floatPt() const { return float(hwPt) / CaloCluster::PT_SCALE; } + float floatEmPt() const { return float(hwEmPt) / CaloCluster::PT_SCALE; } + float floatPtErr() const { return float(hwPtErr) / CaloCluster::PT_SCALE; } + static float minFloatPt() { return float(1.0) / CaloCluster::PT_SCALE; } + float floatEta() const { return float(hwEta) / CaloCluster::ETAPHI_SCALE; } + float floatPhi() const { return float(hwPhi) / CaloCluster::ETAPHI_SCALE; } + void setFloatPt(float pt) { hwPt = round(pt * CaloCluster::PT_SCALE); } + void setFloatEmPt(float emPt) { hwEmPt = round(emPt * CaloCluster::PT_SCALE); } +#endif + }; + + // https://twiki.cern.ch/twiki/bin/view/CMS/L1TriggerPhase2InterfaceSpecifications + struct InputTrack { + uint16_t hwInvpt; + int32_t hwVtxEta; + int32_t hwVtxPhi; + bool hwCharge; + int16_t hwZ0; + uint16_t hwChi2, hwStubs; + uint16_t hwFlags; + const l1t::PFTrack *src; + +#ifdef L1Trigger_Phase2L1ParticleFlow_DiscretePFInputs_MORE + static constexpr float INVPT_SCALE = 2E4; // 1%/pt @ 100 GeV is 2 bits + static constexpr float VTX_PHI_SCALE = 1 / 1.6E-3; // 5 micro rad is 2 bits + static constexpr float VTX_ETA_SCALE = 1 / 1E-4; // no idea, but assume it's somewhat worse than phi + static constexpr float Z0_SCALE = 20; // 1mm is 2 bits + static constexpr int32_t VTX_ETA_1p3 = 1.3 * InputTrack::VTX_ETA_SCALE; + + // filling from floating point + void fillInput( + float pt, float eta, float phi, int charge, float dz, unsigned int flags, const l1t::PFTrack *source = nullptr) { + hwInvpt = std::min(round(1 / pt * InputTrack::INVPT_SCALE), std::numeric_limits::max()); + hwVtxEta = round(eta * InputTrack::VTX_ETA_SCALE); + hwVtxPhi = round(phi * InputTrack::VTX_PHI_SCALE); + hwCharge = (charge > 0); + hwZ0 = round(dz * InputTrack::Z0_SCALE); + hwFlags = flags; + src = source; + } + + float floatVtxPt() const { return 1 / (float(hwInvpt) / InputTrack::INVPT_SCALE); } + float floatVtxEta() const { return float(hwVtxEta) / InputTrack::VTX_ETA_SCALE; } + float floatVtxPhi() const { return float(hwVtxPhi) / InputTrack::VTX_PHI_SCALE; } + float floatDZ() const { return float(hwZ0) / InputTrack::Z0_SCALE; } + int intCharge() const { return hwCharge ? +1 : -1; } +#endif + }; + + struct PropagatedTrack : public InputTrack { + int16_t hwPt; + int16_t hwPtErr; + int16_t hwCaloPtErr; + int16_t hwEta; // at calo + int16_t hwPhi; // at calo + bool muonLink; + bool used; // note: this flag is not used in the default PF, but is used in alternative algos + bool fromPV; + + // sorting + bool operator<(const PropagatedTrack &other) const { return hwPt > other.hwPt; } + +#ifdef L1Trigger_Phase2L1ParticleFlow_DiscretePFInputs_MORE + void fillPropagated( + float pt, float ptErr, float caloPtErr, float caloEta, float caloPhi, unsigned int quality, bool isMuon) { + hwPt = CaloCluster::ptToInt16(pt); + hwPtErr = CaloCluster::ptToInt16(ptErr); + hwCaloPtErr = CaloCluster::ptToInt16(caloPtErr); + // saturation protection + if (hwPt == std::numeric_limits::max()) { + hwCaloPtErr = hwPt / 4; + } + hwEta = round(caloEta * CaloCluster::ETAPHI_SCALE); + hwPhi = int16_t(round(caloPhi * CaloCluster::ETAPHI_SCALE)) % CaloCluster::PHI_WRAP; + muonLink = isMuon; + used = false; + } + + float floatPt() const { return float(hwPt) / CaloCluster::PT_SCALE; } + float floatPtErr() const { return float(hwPtErr) / CaloCluster::PT_SCALE; } + float floatCaloPtErr() const { return float(hwCaloPtErr) / CaloCluster::PT_SCALE; } + float floatEta() const { return float(hwEta) / CaloCluster::ETAPHI_SCALE; } + float floatPhi() const { return float(hwPhi) / CaloCluster::ETAPHI_SCALE; } +#endif + }; + + struct Muon { + int16_t hwPt; + int16_t hwEta; // at calo + int16_t hwPhi; // at calo + uint16_t hwFlags; + bool hwCharge; + const l1t::Muon *src; + + // sorting + bool operator<(const Muon &other) const { return hwPt > other.hwPt; } + +#ifdef L1Trigger_Phase2L1ParticleFlow_DiscretePFInputs_MORE + void fill(float pt, float eta, float phi, int charge, unsigned int flags, const l1t::Muon *source = nullptr) { + // we assume we use the same discrete ieta, iphi grid for all particles + hwPt = round(pt * CaloCluster::PT_SCALE); + hwEta = round(eta * CaloCluster::ETAPHI_SCALE); + hwPhi = int16_t(round(phi * CaloCluster::ETAPHI_SCALE)) % CaloCluster::PHI_WRAP; + hwCharge = (charge > 0); + hwFlags = flags; + src = source; + } + float floatPt() const { return float(hwPt) / CaloCluster::PT_SCALE; } + float floatEta() const { return float(hwEta) / CaloCluster::ETAPHI_SCALE; } + float floatPhi() const { return float(hwPhi) / CaloCluster::ETAPHI_SCALE; } + int intCharge() const { return hwCharge ? +1 : -1; } +#endif + }; + + struct PFParticle { + int16_t hwPt; + int16_t hwEta; // at calo face + int16_t hwPhi; + uint8_t hwId; // CH=0, EL=1, NH=2, GAMMA=3, MU=4 + int16_t hwVtxEta; // propagate back to Vtx for charged particles (if useful?) + int16_t hwVtxPhi; + uint16_t hwFlags; + CaloCluster cluster; + PropagatedTrack track; + bool chargedPV; + uint16_t hwPuppiWeight; + uint16_t hwStatus; // for debugging + const l1t::Muon *muonsrc; + const l1t::PFCandidate *src; + + // sorting + bool operator<(const PFParticle &other) const { return hwPt > other.hwPt; } + +#ifdef L1Trigger_Phase2L1ParticleFlow_DiscretePFInputs_MORE + static constexpr float PUPPI_SCALE = 100; + + float floatPt() const { return float(hwPt) / CaloCluster::PT_SCALE; } + float floatEta() const { return float(hwEta) / CaloCluster::ETAPHI_SCALE; } + float floatPhi() const { return float(hwPhi) / CaloCluster::ETAPHI_SCALE; } + float floatVtxEta() const { + return (track.hwPt > 0 ? track.floatVtxEta() : float(hwVtxEta) / CaloCluster::ETAPHI_SCALE); + } + float floatVtxPhi() const { + return (track.hwPt > 0 ? track.floatVtxPhi() : float(hwVtxPhi) / CaloCluster::ETAPHI_SCALE); + } + float floatDZ() const { return float(track.hwZ0) / InputTrack::Z0_SCALE; } + float floatPuppiW() const { return float(hwPuppiWeight) / PUPPI_SCALE; } + int intCharge() const { return (track.hwPt > 0 ? track.intCharge() : 0); } + void setPuppiW(float w) { hwPuppiWeight = std::round(w * PUPPI_SCALE); } + void setFloatPt(float pt) { hwPt = round(pt * CaloCluster::PT_SCALE); } +#endif + }; + + struct InputRegion { + float etaCenter, etaMin, etaMax, phiCenter, phiHalfWidth; + float etaExtra, phiExtra; + std::vector calo; + std::vector emcalo; + std::vector track; + std::vector muon; + + InputRegion() : etaCenter(), etaMin(), etaMax(), phiCenter(), phiHalfWidth(), etaExtra(), phiExtra() {} + InputRegion( + float etacenter, float etamin, float etamax, float phicenter, float phihalfwidth, float etaextra, float phiextra) + : etaCenter(etacenter), + etaMin(etamin), + etaMax(etamax), + phiCenter(phicenter), + phiHalfWidth(phihalfwidth), + etaExtra(etaextra), + phiExtra(phiextra) {} + }; + +} // namespace l1tpf_impl +#endif diff --git a/L1Trigger/Phase2L1ParticleFlow/interface/DiscretePFInputsIO.h b/L1Trigger/Phase2L1ParticleFlow/interface/DiscretePFInputsIO.h new file mode 100644 index 0000000000000..ddb8b4f526b57 --- /dev/null +++ b/L1Trigger/Phase2L1ParticleFlow/interface/DiscretePFInputsIO.h @@ -0,0 +1,143 @@ +#ifndef L1Trigger_Phase2L1ParticleFlow_DiscretePFInputsIO_H +#define L1Trigger_Phase2L1ParticleFlow_DiscretePFInputsIO_H + +#include +#include +#include + +#include "DiscretePFInputs.h" + +namespace l1tpf_impl { + void writeToFile(const CaloCluster &c, FILE *file) { + fwrite(&c.hwPt, 2, 1, file); + fwrite(&c.hwEmPt, 2, 1, file); + fwrite(&c.hwPtErr, 2, 1, file); + fwrite(&c.hwEta, 2, 1, file); + fwrite(&c.hwPhi, 2, 1, file); + fwrite(&c.hwFlags, 2, 1, file); + fwrite(&c.isEM, 1, 1, file); + // used is not written out + // src is not written out + } + void readFromFile(CaloCluster &c, FILE *file) { + fread(&c.hwPt, 2, 1, file); + fread(&c.hwEmPt, 2, 1, file); + fread(&c.hwPtErr, 2, 1, file); + fread(&c.hwEta, 2, 1, file); + fread(&c.hwPhi, 2, 1, file); + fread(&c.hwFlags, 2, 1, file); + fread(&c.isEM, 1, 1, file); + c.used = false; + c.src = nullptr; + } + + void writeToFile(const InputTrack &t, FILE *file) { + fwrite(&t.hwInvpt, 2, 1, file); + fwrite(&t.hwVtxEta, 4, 1, file); + fwrite(&t.hwVtxPhi, 4, 1, file); + fwrite(&t.hwCharge, 1, 1, file); + fwrite(&t.hwZ0, 2, 1, file); + fwrite(&t.hwChi2, 2, 1, file); + fwrite(&t.hwStubs, 2, 1, file); + fwrite(&t.hwFlags, 2, 1, file); + // src is not written out + } + void readFromFile(InputTrack &t, FILE *file) { + fread(&t.hwInvpt, 2, 1, file); + fread(&t.hwVtxEta, 4, 1, file); + fread(&t.hwVtxPhi, 4, 1, file); + fread(&t.hwCharge, 1, 1, file); + fread(&t.hwZ0, 2, 1, file); + fread(&t.hwChi2, 2, 1, file); + fread(&t.hwStubs, 2, 1, file); + fread(&t.hwFlags, 2, 1, file); + t.src = nullptr; + } + void writeToFile(const PropagatedTrack &t, FILE *file) { + writeToFile(static_cast(t), file); + fwrite(&t.hwPt, 2, 1, file); + fwrite(&t.hwPtErr, 2, 1, file); + fwrite(&t.hwCaloPtErr, 2, 1, file); + fwrite(&t.hwEta, 2, 1, file); + fwrite(&t.hwPhi, 2, 1, file); + // muonLink, used, fromPV are transient + } + void readFromFile(PropagatedTrack &t, FILE *file) { + readFromFile(static_cast(t), file); + fread(&t.hwPt, 2, 1, file); + fread(&t.hwPtErr, 2, 1, file); + fread(&t.hwCaloPtErr, 2, 1, file); + fread(&t.hwEta, 2, 1, file); + fread(&t.hwPhi, 2, 1, file); + t.muonLink = false; + t.used = false; + t.fromPV = false; + } + + void writeToFile(const Muon &m, FILE *file) { + fwrite(&m.hwPt, 2, 1, file); + fwrite(&m.hwEta, 2, 1, file); + fwrite(&m.hwPhi, 2, 1, file); + fwrite(&m.hwFlags, 2, 1, file); + fwrite(&m.hwCharge, 1, 1, file); + } + void readFromFile(Muon &m, FILE *file) { + fread(&m.hwPt, 2, 1, file); + fread(&m.hwEta, 2, 1, file); + fread(&m.hwPhi, 2, 1, file); + fread(&m.hwFlags, 2, 1, file); + fread(&m.hwCharge, 1, 1, file); + m.src = nullptr; + } + + void writeToFile(const float &pug, FILE *file) { fwrite(&pug, sizeof(float), 1, file); } + void readFromFile(float &pug, FILE *file) { fread(&pug, sizeof(float), 1, file); } + + template + void writeManyToFile(const std::vector &objs, FILE *file) { + uint32_t number = objs.size(); + fwrite(&number, 4, 1, file); + for (uint32_t i = 0; i < number; ++i) + writeToFile(objs[i], file); + } + + template + void readManyFromFile(std::vector &objs, FILE *file) { + uint32_t number; + fread(&number, 4, 1, file); + objs.resize(number); + for (uint32_t i = 0; i < number; ++i) + readFromFile(objs[i], file); + } + + void writeToFile(const InputRegion &r, FILE *file) { + assert(4 == sizeof(float)); + fwrite(&r.etaCenter, 4, 1, file); + fwrite(&r.etaMin, 4, 1, file); + fwrite(&r.etaMax, 4, 1, file); + fwrite(&r.phiCenter, 4, 1, file); + fwrite(&r.phiHalfWidth, 4, 1, file); + fwrite(&r.etaExtra, 4, 1, file); + fwrite(&r.phiExtra, 4, 1, file); + writeManyToFile(r.calo, file); + writeManyToFile(r.emcalo, file); + writeManyToFile(r.track, file); + writeManyToFile(r.muon, file); + } + void readFromFile(InputRegion &r, FILE *file) { + assert(4 == sizeof(float)); + fread(&r.etaCenter, 4, 1, file); + fread(&r.etaMin, 4, 1, file); + fread(&r.etaMax, 4, 1, file); + fread(&r.phiCenter, 4, 1, file); + fread(&r.phiHalfWidth, 4, 1, file); + fread(&r.etaExtra, 4, 1, file); + fread(&r.phiExtra, 4, 1, file); + readManyFromFile(r.calo, file); + readManyFromFile(r.emcalo, file); + readManyFromFile(r.track, file); + readManyFromFile(r.muon, file); + } + +} // namespace l1tpf_impl +#endif diff --git a/L1Trigger/Phase2L1ParticleFlow/interface/HGC3DClusterEgID.h b/L1Trigger/Phase2L1ParticleFlow/interface/HGC3DClusterEgID.h new file mode 100644 index 0000000000000..6b68dffc6db94 --- /dev/null +++ b/L1Trigger/Phase2L1ParticleFlow/interface/HGC3DClusterEgID.h @@ -0,0 +1,91 @@ +#ifndef L1Trigger_Phase2L1ParticleFlow_HGC3DClusterEgID_h +#define L1Trigger_Phase2L1ParticleFlow_HGC3DClusterEgID_h +#include "FWCore/Framework/interface/Frameworkfwd.h" +#include "FWCore/Framework/interface/stream/EDProducer.h" +#include "FWCore/Framework/interface/Event.h" +#include "FWCore/Framework/interface/MakerMacros.h" +#include "FWCore/ParameterSet/interface/ParameterSet.h" + +#include "DataFormats/L1THGCal/interface/HGCalMulticluster.h" +#include "DataFormats/L1TParticleFlow/interface/PFCluster.h" +#include "CommonTools/Utils/interface/StringCutObjectSelector.h" +#include "CommonTools/Utils/interface/StringObjectFunction.h" +#include "CommonTools/MVAUtils/interface/TMVAZipReader.h" + +#include "TMVA/Factory.h" +#include "TMVA/Reader.h" + +#include +#include + +namespace l1tpf { + class HGC3DClusterEgID { + public: + HGC3DClusterEgID(const edm::ParameterSet &pset) + : isPUFilter_(pset.getParameter("isPUFilter")), + preselection_(pset.getParameter("preselection")), + method_(pset.getParameter("method")), + weightsFile_(pset.getParameter("weightsFile")), + reader_(new TMVA::Reader()), + wp_(pset.getParameter("wp")) { + // first create all the variables + for (const auto &psvar : pset.getParameter>("variables")) { + variables_.emplace_back(psvar.getParameter("name"), psvar.getParameter("value")); + } + } + + void prepareTMVA() { + // Declare the variables + for (auto &var : variables_) + var.declare(*reader_); + // then read the weights + if (weightsFile_[0] != '/' && weightsFile_[0] != '.') { + weightsFile_ = edm::FileInPath(weightsFile_).fullPath(); + } + reco::details::loadTMVAWeights(&*reader_, method_, weightsFile_); + } + + float passID(l1t::HGCalMulticluster c, l1t::PFCluster &cpf) { + if (preselection_(c)) { + for (auto &var : variables_) + var.fill(c); + float mvaOut = reader_->EvaluateMVA(method_); + if (isPUFilter_) + cpf.setEgVsPUMVAOut(mvaOut); + else + cpf.setEgVsPionMVAOut(mvaOut); + return (mvaOut > wp_(c) ? 1 : 0); + } else { + if (isPUFilter_) + cpf.setEgVsPUMVAOut(-100.0); + else + cpf.setEgVsPionMVAOut(-100.0); + return 0; + } + } + + std::string method() { return method_; } + + private: + class Var { + public: + Var(const std::string &name, const std::string &expr) : name_(name), expr_(expr) {} + void declare(TMVA::Reader &r) { r.AddVariable(name_, &val_); } + void fill(const l1t::HGCalMulticluster &c) { val_ = expr_(c); } + + private: + std::string name_; + StringObjectFunction expr_; + float val_; + }; + + bool isPUFilter_; + StringCutObjectSelector preselection_; + std::vector variables_; + std::string method_, weightsFile_; + std::unique_ptr reader_; + StringObjectFunction wp_; + }; //class +}; // namespace l1tpf + +#endif diff --git a/L1Trigger/Phase2L1ParticleFlow/interface/L1TPFUtils.h b/L1Trigger/Phase2L1ParticleFlow/interface/L1TPFUtils.h new file mode 100644 index 0000000000000..525b780afaf46 --- /dev/null +++ b/L1Trigger/Phase2L1ParticleFlow/interface/L1TPFUtils.h @@ -0,0 +1,13 @@ +#ifndef L1Trigger_Phase2L1ParticleFlow_L1TPFUtils_h +#define L1Trigger_Phase2L1ParticleFlow_L1TPFUtils_h +#include +#include "DataFormats/Math/interface/LorentzVector.h" + +namespace l1tpf { + std::pair propagateToCalo(const math::XYZTLorentzVector& iMom, + const math::XYZTLorentzVector& iVtx, + double iCharge, + double iBField); +} + +#endif diff --git a/L1Trigger/Phase2L1ParticleFlow/interface/LinearizedPuppiAlgo.h b/L1Trigger/Phase2L1ParticleFlow/interface/LinearizedPuppiAlgo.h new file mode 100644 index 0000000000000..72395d72ad358 --- /dev/null +++ b/L1Trigger/Phase2L1ParticleFlow/interface/LinearizedPuppiAlgo.h @@ -0,0 +1,33 @@ +#ifndef L1Trigger_Phase2L1ParticleFlow_LinearizedPuppiAlgo_h +#define L1Trigger_Phase2L1ParticleFlow_LinearizedPuppiAlgo_h + +#include "L1Trigger/Phase2L1ParticleFlow/interface/PuppiAlgo.h" + +namespace l1tpf_impl { + + class LinearizedPuppiAlgo : public PuppiAlgo { + public: + LinearizedPuppiAlgo(const edm::ParameterSet &); + virtual ~LinearizedPuppiAlgo(); + + const std::vector &puGlobalNames() const override; + void doPUGlobals(const std::vector &rs, float npu, std::vector &globals) const override; + void runNeutralsPU(Region &r, float npu, const std::vector &globals) const override; + + protected: + void computePuppiWeights(Region &r, + float npu, + const std::vector &alphaC, + const std::vector &alphaF) const; + + std::vector puppiPriors_, puppiPriorsPhotons_; + std::vector puppiPtSlopes_, puppiPtSlopesPhotons_; + std::vector puppiPtZeros_, puppiPtZerosPhotons_; + std::vector puppiAlphaSlopes_, puppiAlphaSlopesPhotons_; + std::vector puppiAlphaZeros_, puppiAlphaZerosPhotons_; + std::vector puppiAlphaCrops_, puppiAlphaCropsPhotons_; + }; + +} // namespace l1tpf_impl + +#endif diff --git a/L1Trigger/Phase2L1ParticleFlow/interface/PFAlgo2HGC.h b/L1Trigger/Phase2L1ParticleFlow/interface/PFAlgo2HGC.h new file mode 100644 index 0000000000000..4345bebf3f134 --- /dev/null +++ b/L1Trigger/Phase2L1ParticleFlow/interface/PFAlgo2HGC.h @@ -0,0 +1,76 @@ +#ifndef L1Trigger_Phase2L1ParticleFlow_PFAlgo2HGC_h +#define L1Trigger_Phase2L1ParticleFlow_PFAlgo2HGC_h + +#include "L1Trigger/Phase2L1ParticleFlow/interface/PFAlgoBase.h" + +namespace l1tpf_impl { + class PFAlgo2HGC : public PFAlgoBase { + public: + PFAlgo2HGC(const edm::ParameterSet &); + virtual void runPF(Region &r) const override; + + protected: + float drMatchMu_; + enum MuMatchMode { BoxBestByPtRatio, DrBestByPtRatio, DrBestByPtDiff } muMatchMode_; + float drMatch_, ptMatchLow_, ptMatchHigh_, maxInvisiblePt_; + bool useTrackCaloSigma_, rescaleUnmatchedTrack_, caloTrkWeightedAverage_; + enum TkCaloLinkMetric { BestByDR = 0, BestByDRPt = 1, BestByDR2Pt2 = 2 }; + TkCaloLinkMetric tkCaloLinkMetric_; + bool caloReLinkStep_; + float caloReLinkDr_, caloReLinkThreshold_; + bool rescaleTracks_, sumTkCaloErr2_, ecalPriority_, trackEmUseAlsoTrackSigma_, emCaloUseAlsoCaloSigma_; + unsigned int tightTrackMinStubs_; + float tightTrackMaxChi2_, tightTrackMaxInvisiblePt_; + enum GoodTrackStatus { GoodTK_Calo_TkPt = 0, GoodTK_Calo_TkCaloPt = 1, GoodTk_Calo_CaloPt = 2, GoodTK_NoCalo = 3 }; + enum BadTrackStatus { BadTK_NoCalo = 1 }; + + /// do muon track linking (also sets track.muonLink) + void link_tk2mu(Region &r, std::vector &tk2mu, std::vector &mu2tk) const; + + /// track to calo matching + // tk2calo[itk] = icalo or -1 + void link_tk2calo(Region &r, std::vector &tk2calo) const; + + /// for each calo, compute the sum of the track pt + void sum_tk2calo(Region &r, + const std::vector &tk2calo, + std::vector &calo2ntk, + std::vector &calo2sumtkpt, + std::vector &calo2sumtkpterr) const; + + /// promote unlinked low pt tracks to hadrons + void unlinkedtk_algo(Region &r, const std::vector &tk2calo) const; + + /// try to recover split hadron showers (v1.0): + // take hadrons that are not track matched, close by a hadron which has an excess of track pt vs calo pt + // add this pt to the calo pt of the other cluster + // off by default, as it seems to not do much in jets even if it helps remove tails in single-pion events + void calo_relink(Region &r, + const std::vector &calo2ntk, + const std::vector &calo2sumtkpt, + const std::vector &calo2sumtkpterr) const; + + /// process matched calo clusters, compare energy to sum track pt, compute track rescaling factor if needed + // alpha[icalo] = x < 1 if all tracks linked to icalo must have their pt rescaled by x + void linkedcalo_algo(Region &r, + const std::vector &calo2ntk, + const std::vector &calo2sumtkpt, + const std::vector &calo2sumtkpterr, + std::vector &calo2alpha) const; + + /// process matched tracks, if necessary rescale or average + void linkedtk_algo(Region &r, + const std::vector &tk2calo, + const std::vector &calo2ntk, + const std::vector &calo2alpha) const; + + /// process unmatched calo clusters + void unlinkedcalo_algo(Region &r) const; + + /// save muons in output list + void save_muons(Region &r, const std::vector &tk2mu) const; + }; + +} // namespace l1tpf_impl + +#endif diff --git a/L1Trigger/Phase2L1ParticleFlow/interface/PFAlgo3.h b/L1Trigger/Phase2L1ParticleFlow/interface/PFAlgo3.h new file mode 100644 index 0000000000000..84bef59cea90e --- /dev/null +++ b/L1Trigger/Phase2L1ParticleFlow/interface/PFAlgo3.h @@ -0,0 +1,109 @@ +#ifndef L1Trigger_Phase2L1ParticleFlow_PFAlgo3_h +#define L1Trigger_Phase2L1ParticleFlow_PFAlgo3_h + +#include "L1Trigger/Phase2L1ParticleFlow/interface/PFAlgoBase.h" + +namespace l1tpf_impl { + class PFAlgo3 : public PFAlgoBase { + public: + PFAlgo3(const edm::ParameterSet &); + virtual void runPF(Region &r) const override; + + protected: + float drMatchMu_; + enum MuMatchMode { BoxBestByPtRatio, DrBestByPtRatio, DrBestByPtDiff } muMatchMode_; + float drMatch_, ptMatchLow_, ptMatchHigh_, maxInvisiblePt_; + bool useTrackCaloSigma_, rescaleUnmatchedTrack_, caloTrkWeightedAverage_; + enum TkCaloLinkMetric { BestByDR = 0, BestByDRPt = 1, BestByDR2Pt2 = 2 }; + float drMatchEm_, ptMinFracMatchEm_, drMatchEmHad_; + float emHadSubtractionPtSlope_; + TkCaloLinkMetric tkCaloLinkMetric_; + bool caloReLinkStep_; + float caloReLinkDr_, caloReLinkThreshold_; + bool rescaleTracks_, sumTkCaloErr2_, ecalPriority_, trackEmUseAlsoTrackSigma_, trackEmMayUseCaloMomenta_, + emCaloUseAlsoCaloSigma_; + unsigned int tightTrackMinStubs_; + float tightTrackMaxChi2_, tightTrackMaxInvisiblePt_; + enum GoodTrackStatus { GoodTK_Calo_TkPt = 0, GoodTK_Calo_TkCaloPt = 1, GoodTk_Calo_CaloPt = 2, GoodTK_NoCalo = 3 }; + enum BadTrackStatus { BadTK_NoCalo = 1 }; + + /// do muon track linking (also sets track.muonLink) + void link_tk2mu(Region &r, std::vector &tk2mu, std::vector &mu2tk) const; + + /// match all tracks to the closest EM cluster + // tk2em[itrack] = iem, or -1 if unmatched + void link_tk2em(Region &r, std::vector &tk2em) const; + + /// match all em to the closest had (can happen in parallel to the above) + // em2calo[iem] = icalo or -1 + void link_em2calo(Region &r, std::vector &em2calo) const; + + /// for each EM cluster, count and add up the pt of all the corresponding tracks (skipping muons) + void sum_tk2em(Region &r, + const std::vector &tk2em, + std::vector &em2ntk, + std::vector &em2sumtkpt, + std::vector &em2sumtkpterr) const; + + /// process ecal clusters after linking + void emcalo_algo(Region &r, + const std::vector &em2ntk, + const std::vector &em2sumtkpt, + const std::vector &em2sumtkpterr) const; + + /// promote all flagged tracks to electrons + void emtk_algo(Region &r, + const std::vector &tk2em, + const std::vector &em2ntk, + const std::vector &em2sumtkpterr) const; + + /// subtract EM component from Calo clusters for all photons and electrons (within tracker coverage) + void sub_em2calo(Region &r, const std::vector &em2calo) const; + + /// track to calo matching + // tk2calo[itk] = icalo or -1 + void link_tk2calo(Region &r, std::vector &tk2calo) const; + + /// for each calo, compute the sum of the track pt + void sum_tk2calo(Region &r, + const std::vector &tk2calo, + std::vector &calo2ntk, + std::vector &calo2sumtkpt, + std::vector &calo2sumtkpterr) const; + + /// promote unlinked low pt tracks to hadrons + void unlinkedtk_algo(Region &r, const std::vector &tk2calo) const; + + /// try to recover split hadron showers (v1.0): + // take hadrons that are not track matched, close by a hadron which has an excess of track pt vs calo pt + // add this pt to the calo pt of the other cluster + // off by default, as it seems to not do much in jets even if it helps remove tails in single-pion events + void calo_relink(Region &r, + const std::vector &calo2ntk, + const std::vector &calo2sumtkpt, + const std::vector &calo2sumtkpterr) const; + + /// process matched calo clusters, compare energy to sum track pt, compute track rescaling factor if needed + // alpha[icalo] = x < 1 if all tracks linked to icalo must have their pt rescaled by x + void linkedcalo_algo(Region &r, + const std::vector &calo2ntk, + const std::vector &calo2sumtkpt, + const std::vector &calo2sumtkpterr, + std::vector &calo2alpha) const; + + /// process matched tracks, if necessary rescale or average + void linkedtk_algo(Region &r, + const std::vector &tk2calo, + const std::vector &calo2ntk, + const std::vector &calo2alpha) const; + + /// process unmatched calo clusters + void unlinkedcalo_algo(Region &r) const; + + /// save muons in output list + void save_muons(Region &r, const std::vector &tk2mu) const; + }; + +} // namespace l1tpf_impl + +#endif diff --git a/L1Trigger/Phase2L1ParticleFlow/interface/PFAlgoBase.h b/L1Trigger/Phase2L1ParticleFlow/interface/PFAlgoBase.h new file mode 100644 index 0000000000000..dbc8e7e844bd2 --- /dev/null +++ b/L1Trigger/Phase2L1ParticleFlow/interface/PFAlgoBase.h @@ -0,0 +1,38 @@ +#ifndef L1Trigger_Phase2L1ParticleFlow_PFAlgoBase_h +#define L1Trigger_Phase2L1ParticleFlow_PFAlgoBase_h + +#include + +#include "L1Trigger/Phase2L1ParticleFlow/interface/Region.h" +#include "FWCore/ParameterSet/interface/ParameterSet.h" + +namespace l1tpf_impl { + + class PFAlgoBase { + public: + PFAlgoBase(const edm::ParameterSet &); + virtual ~PFAlgoBase(); + virtual void runPF(Region &r) const = 0; + + protected: + int debug_; + void initRegion(Region &r) const; + PFParticle &addTrackToPF(Region &r, const PropagatedTrack &tk) const { return addTrackToPF(r.pf, tk); } + PFParticle &addCaloToPF(Region &r, const CaloCluster &calo) const { return addCaloToPF(r.pf, calo); } + //PFParticle & discardTrack(Region &r, const PropagatedTrack &tk, int status) const { + // PFParticle & ret = addTrackToPF(r.pfdiscarded, tk); + // ret.hwStatus = status; + // return ret; + //} + //PFParticle & discardCalo(Region &r, const CaloCluster &calo, int status) const { + // PFParticle & ret = addCaloToPF(r.pfdiscarded, calo); + // ret.hwStatus = status; + // return ret; + //} + PFParticle &addTrackToPF(std::vector &pfs, const PropagatedTrack &tk) const; + PFParticle &addCaloToPF(std::vector &pfs, const CaloCluster &calo) const; + }; + +} // namespace l1tpf_impl + +#endif diff --git a/L1Trigger/Phase2L1ParticleFlow/interface/PUAlgoBase.h b/L1Trigger/Phase2L1ParticleFlow/interface/PUAlgoBase.h new file mode 100644 index 0000000000000..1f19bd693e3ef --- /dev/null +++ b/L1Trigger/Phase2L1ParticleFlow/interface/PUAlgoBase.h @@ -0,0 +1,34 @@ +#ifndef L1Trigger_Phase2L1ParticleFlow_PUAlgoBase_h +#define L1Trigger_Phase2L1ParticleFlow_PUAlgoBase_h + +#include "L1Trigger/Phase2L1ParticleFlow/interface/Region.h" +#include "FWCore/ParameterSet/interface/ParameterSet.h" + +namespace l1tpf_impl { + + class PUAlgoBase { + public: + PUAlgoBase(const edm::ParameterSet &); + virtual ~PUAlgoBase(); + + /// global operations + enum VertexAlgo { OldVtxAlgo, TPVtxAlgo, ExternalVtxAlgo }; + virtual void doVertexing(std::vector &rs, + VertexAlgo algo, + float &vz) const; // region is not const since it sets the fromPV bit of the tracks + + virtual void runChargedPV(Region &r, float z0) const; + + virtual const std::vector &puGlobalNames() const; + virtual void doPUGlobals(const std::vector &rs, float npu, std::vector &globals) const = 0; + virtual void runNeutralsPU(Region &r, float npu, const std::vector &globals) const = 0; + + protected: + int debug_; + float etaCharged_, vtxRes_; + bool vtxAdaptiveCut_; + }; + +} // namespace l1tpf_impl + +#endif diff --git a/L1Trigger/Phase2L1ParticleFlow/interface/ParametricResolution.h b/L1Trigger/Phase2L1ParticleFlow/interface/ParametricResolution.h new file mode 100644 index 0000000000000..323fdaa0c9b11 --- /dev/null +++ b/L1Trigger/Phase2L1ParticleFlow/interface/ParametricResolution.h @@ -0,0 +1,67 @@ +#ifndef L1Trigger_Phase2L1ParticleFlow_ParametricResolution_h +#define L1Trigger_Phase2L1ParticleFlow_ParametricResolution_h +#include "FWCore/ParameterSet/interface/ParameterSet.h" +#include "FWCore/Utilities/interface/Exception.h" +#include +#include + +namespace l1tpf { + class ParametricResolution { + public: + ParametricResolution() {} + ParametricResolution(const edm::ParameterSet &cpset) { + std::vector etaBins = cpset.getParameter>("etaBins"); + std::vector offset = cpset.getParameter>("offset"); + std::vector scale = cpset.getParameter>("scale"); + etas.insert(etas.end(), etaBins.begin(), etaBins.end()); + scales.insert(scales.end(), scale.begin(), scale.end()); + offsets.insert(offsets.end(), offset.begin(), offset.end()); + if (cpset.existsAs>("ptMin")) { + std::vector ptMin = cpset.getParameter>("ptMin"); + ptMins.insert(ptMins.end(), ptMin.begin(), ptMin.end()); + } else { + float ptMin = cpset.existsAs("ptMin") ? cpset.getParameter("ptMin") : 0; + ptMins = std::vector(etaBins.size(), ptMin); + } + if (cpset.existsAs>("ptMax")) { + std::vector ptMax = cpset.getParameter>("ptMax"); + ptMaxs.insert(ptMaxs.end(), ptMax.begin(), ptMax.end()); + } else { + ptMaxs = std::vector(etaBins.size(), 1e6); + } + std::string skind = cpset.getParameter("kind"); + if (skind == "track") + kind = Track; + else if (skind == "calo") + kind = Calo; + else + throw cms::Exception("Configuration", "Bad kind of resolution"); + } + float operator()(const float pt, const float abseta) const { + for (unsigned int i = 0, n = etas.size(); i < n; ++i) { + if (pt > ptMaxs[i]) + continue; + if (abseta < etas[i]) { + switch (kind) { + case Track: + return pt * std::min(1.f, std::hypot(pt * scales[i] * 0.001, offsets[i])); + case Calo: + return std::min(pt, pt * scales[i] + offsets[i]); + if (pt < ptMins[i]) + return pt * std::min(1, scales[i] + offsets[i] / ptMins[i]); + return std::min(pt, pt * scales[i] + offsets[i]); + } + } + } + return std::min(pt, 0.3 * pt + 7); // saturate to 100% at 10 GeV, and to 30% at high pt + } + + protected: + std::vector etas, offsets, scales, ptMins, ptMaxs; + enum Kind { Calo, Track }; + Kind kind; + }; + +}; // namespace l1tpf + +#endif diff --git a/L1Trigger/Phase2L1ParticleFlow/interface/PuppiAlgo.h b/L1Trigger/Phase2L1ParticleFlow/interface/PuppiAlgo.h new file mode 100644 index 0000000000000..43847e0b0ea0a --- /dev/null +++ b/L1Trigger/Phase2L1ParticleFlow/interface/PuppiAlgo.h @@ -0,0 +1,38 @@ +#ifndef L1Trigger_Phase2L1ParticleFlow_PuppiAlgo_h +#define L1Trigger_Phase2L1ParticleFlow_PuppiAlgo_h + +#include "L1Trigger/Phase2L1ParticleFlow/interface/PUAlgoBase.h" + +namespace l1tpf_impl { + + class PuppiAlgo : public PUAlgoBase { + public: + PuppiAlgo(const edm::ParameterSet &); + virtual ~PuppiAlgo(); + + const std::vector &puGlobalNames() const override; + void doPUGlobals(const std::vector &rs, float npu, std::vector &globals) const override; + void runNeutralsPU(Region &r, float npu, const std::vector &globals) const override; + + protected: + virtual void computePuppiMedRMS( + const std::vector &rs, float &alphaCMed, float &alphaCRms, float &alphaFMed, float &alphaFRms) const; + virtual void fillPuppi(Region &r) const; + virtual void computePuppiAlphas(const Region &r, std::vector &alphaC, std::vector &alphaF) const; + virtual void computePuppiWeights(Region &r, + const std::vector &alphaC, + const std::vector &alphaF, + float alphaCMed, + float alphaCRms, + float alphaFMed, + float alphaFRms) const; + + float puppiDr_, puppiDrMin_, puppiPtMax_; + std::vector puppiEtaCuts_, puppiPtCuts_, puppiPtCutsPhotons_; + std::vector intPuppiEtaCuts_, intPuppiPtCuts_, intPuppiPtCutsPhotons_; + bool puppiUsingBareTracks_; + }; + +} // namespace l1tpf_impl + +#endif diff --git a/L1Trigger/Phase2L1ParticleFlow/interface/Region.h b/L1Trigger/Phase2L1ParticleFlow/interface/Region.h new file mode 100644 index 0000000000000..65ffba84dc503 --- /dev/null +++ b/L1Trigger/Phase2L1ParticleFlow/interface/Region.h @@ -0,0 +1,104 @@ +#ifndef L1Trigger_Phase2L1ParticleFlow_Region_h +#define L1Trigger_Phase2L1ParticleFlow_Region_h + +#include "L1Trigger/Phase2L1ParticleFlow/interface/DiscretePFInputs.h" +#include "DataFormats/Math/interface/deltaPhi.h" + +namespace l1tpf_impl { + struct Region : public InputRegion { + std::vector pf; + std::vector puppi; + unsigned int caloOverflow, emcaloOverflow, trackOverflow, muonOverflow, pfOverflow, puppiOverflow; + + const bool relativeCoordinates; // whether the eta,phi in each region are global or relative to the region center + const unsigned int ncaloMax, nemcaloMax, ntrackMax, nmuonMax, npfMax, npuppiMax; + Region(float etamin, + float etamax, + float phicenter, + float phiwidth, + float etaextra, + float phiextra, + bool useRelativeCoordinates, + unsigned int ncalomax, + unsigned int nemcalomax, + unsigned int ntrackmax, + unsigned int nmuonmax, + unsigned int npfmax, + unsigned int npuppimax) + : InputRegion(0.5 * (etamin + etamax), etamin, etamax, phicenter, 0.5 * phiwidth, etaextra, phiextra), + relativeCoordinates(useRelativeCoordinates), + ncaloMax(ncalomax), + nemcaloMax(nemcalomax), + ntrackMax(ntrackmax), + nmuonMax(nmuonmax), + npfMax(npfmax), + npuppiMax(npuppimax) {} + + enum InputType { calo_type = 0, emcalo_type = 1, track_type = 2, l1mu_type = 3, n_input_types = 4 }; + static const char* inputTypeName(int inputType); + + enum OutputType { + any_type = 0, + charged_type = 1, + neutral_type = 2, + electron_type = 3, + pfmuon_type = 4, + charged_hadron_type = 5, + neutral_hadron_type = 6, + photon_type = 7, + n_output_types = 8 + }; + static const char* outputTypeName(int outputType); + + unsigned int nInput(InputType type) const; + unsigned int nOutput(OutputType type, bool puppi, bool fiducial = true) const; + + // global coordinates + bool contains(float eta, float phi) const { + float dphi = deltaPhi(phiCenter, phi); + return (etaMin - etaExtra < eta && eta <= etaMax + etaExtra && -phiHalfWidth - phiExtra < dphi && + dphi <= phiHalfWidth + phiExtra); + } + // global coordinates + bool fiducial(float eta, float phi) const { + float dphi = deltaPhi(phiCenter, phi); + return (etaMin < eta && eta <= etaMax && -phiHalfWidth < dphi && dphi <= phiHalfWidth); + } + // possibly local coordinates + bool fiducialLocal(float localEta, float localPhi) const { + if (relativeCoordinates) { + float dphi = deltaPhi(0.f, localPhi); + return (etaMin < localEta + etaCenter && localEta + etaCenter <= etaMax && -phiHalfWidth < dphi && + dphi <= phiHalfWidth); + } + float dphi = deltaPhi(phiCenter, localPhi); + return (etaMin < localEta && localEta <= etaMax && -phiHalfWidth < dphi && dphi <= phiHalfWidth); + } + float regionAbsEta() const { return std::abs(etaCenter); } + float globalAbsEta(float localEta) const { return std::abs(relativeCoordinates ? localEta + etaCenter : localEta); } + float globalEta(float localEta) const { return relativeCoordinates ? localEta + etaCenter : localEta; } + float globalPhi(float localPhi) const { return relativeCoordinates ? localPhi + phiCenter : localPhi; } + float localEta(float globalEta) const { return relativeCoordinates ? globalEta - etaCenter : globalEta; } + float localPhi(float globalPhi) const { return relativeCoordinates ? deltaPhi(globalPhi, phiCenter) : globalPhi; } + + void zero() { + calo.clear(); + emcalo.clear(); + track.clear(); + muon.clear(); + pf.clear(); + puppi.clear(); + caloOverflow = 0; + emcaloOverflow = 0; + trackOverflow = 0; + muonOverflow = 0; + pfOverflow = 0; + puppiOverflow = 0; + } + + void inputSort(); + }; + +} // namespace l1tpf_impl + +#endif diff --git a/L1Trigger/Phase2L1ParticleFlow/interface/RegionMapper.h b/L1Trigger/Phase2L1ParticleFlow/interface/RegionMapper.h new file mode 100644 index 0000000000000..bbe370597106e --- /dev/null +++ b/L1Trigger/Phase2L1ParticleFlow/interface/RegionMapper.h @@ -0,0 +1,57 @@ +#ifndef L1Trigger_Phase2L1ParticleFlow_RegionMapper_h +#define L1Trigger_Phase2L1ParticleFlow_RegionMapper_h + +#include "DataFormats/L1TParticleFlow/interface/PFCandidate.h" +#include "L1Trigger/Phase2L1ParticleFlow/interface/Region.h" +#include "DataFormats/Math/interface/deltaPhi.h" +#include "FWCore/ParameterSet/interface/ParameterSet.h" + +#include "DataFormats/L1TCorrelator/interface/TkMuon.h" +#include "DataFormats/L1TCorrelator/interface/TkMuonFwd.h" + +#include + +namespace l1tpf_impl { + class RegionMapper { + // This does the input and filling of regions. + public: + RegionMapper(const edm::ParameterSet &); + + // add object, without tracking references + void addTrack(const l1t::PFTrack &t); + void addMuon(const l1t::Muon &t); + void addMuon(const l1t::TkMuon &t); + void addCalo(const l1t::PFCluster &t); + void addEmCalo(const l1t::PFCluster &t); + + // add object, tracking references + void addTrack(const l1t::PFTrack &t, l1t::PFTrackRef ref); + void addMuon(const l1t::Muon &t, l1t::PFCandidate::MuonRef ref); + void addCalo(const l1t::PFCluster &t, l1t::PFClusterRef ref); + void addEmCalo(const l1t::PFCluster &t, l1t::PFClusterRef ref); + + void clear(); + std::vector ®ions() { return regions_; } + + std::unique_ptr fetch(bool puppi = true, float ptMin = 0.01) const; + std::unique_ptr fetchCalo(float ptMin = 0.01, bool emcalo = false) const; + std::unique_ptr fetchTracks(float ptMin = 0.01, bool fromPV = false) const; + + std::pair totAndMaxInput(/*Region::InputType*/ int type) const; + std::pair totAndMaxOutput(/*Region::OutputType*/ int type, bool puppi) const; + std::unique_ptr> vecInput(int type) const; + std::unique_ptr> vecOutput(int type, bool puppi) const; + + protected: + std::vector regions_; + bool useRelativeRegionalCoordinates_; // whether the eta,phi in each region are global or relative to the region center + enum TrackAssoMode { atVertex, atCalo, any = 999 } trackRegionMode_; + + // these are used to link items back + std::unordered_map clusterRefMap_; + std::unordered_map trackRefMap_; + std::unordered_map muonRefMap_; + }; + +} // namespace l1tpf_impl +#endif diff --git a/L1Trigger/Phase2L1ParticleFlow/interface/SimpleCalibrations.h b/L1Trigger/Phase2L1ParticleFlow/interface/SimpleCalibrations.h new file mode 100644 index 0000000000000..733f1c4fa3697 --- /dev/null +++ b/L1Trigger/Phase2L1ParticleFlow/interface/SimpleCalibrations.h @@ -0,0 +1,174 @@ +#ifndef L1Trigger_Phase2L1ParticleFlow_SimpleCalibrations_h +#define L1Trigger_Phase2L1ParticleFlow_SimpleCalibrations_h +#include "FWCore/ParameterSet/interface/ParameterSet.h" +#include + +namespace l1tpf { + class SimpleCorrEm { + public: + SimpleCorrEm() {} + SimpleCorrEm(const edm::ParameterSet &iConfig, const std::string &name) { + if (iConfig.existsAs(name)) { + edm::ParameterSet cpset = iConfig.getParameter(name); + std::vector etaBins = cpset.getParameter>("etaBins"); + std::vector offset = cpset.getParameter>("offset"); + std::vector scale = cpset.getParameter>("scale"); + etas.insert(etas.end(), etaBins.begin(), etaBins.end()); + scales.insert(scales.end(), scale.begin(), scale.end()); + offsets.insert(offsets.end(), offset.begin(), offset.end()); + if (cpset.existsAs>("ptMin")) { + std::vector ptMin = cpset.getParameter>("ptMin"); + ptMins.insert(ptMins.end(), ptMin.begin(), ptMin.end()); + } else { + float ptMin = cpset.existsAs("ptMin") ? cpset.getParameter("ptMin") : 0; + ptMins = std::vector(etaBins.size(), ptMin); + } + if (cpset.existsAs>("ptMax")) { + std::vector ptMax = cpset.getParameter>("ptMax"); + ptMaxs.insert(ptMaxs.end(), ptMax.begin(), ptMax.end()); + } else { + ptMaxs = std::vector(etaBins.size(), 1e6); + } + } + } + + bool empty() const { return etas.empty(); } + float operator()(float pt, float abseta) const { + for (unsigned int i = 0, n = etas.size(); i < n; ++i) { + if (pt > ptMaxs[i]) + continue; + if (abseta < etas[i]) { + if (pt < ptMins[i]) + return (pt / ptMins[i]) * (ptMins[i] - offsets[i]) / scales[i]; + return (pt - offsets[i]) / scales[i]; + } + } + return pt; + } + + protected: + std::vector etas, scales, offsets, ptMins, ptMaxs; + }; + class SimpleCorrHad { + public: + SimpleCorrHad() {} + SimpleCorrHad(const edm::ParameterSet &iConfig, const std::string &name) { + if (iConfig.existsAs(name)) { + edm::ParameterSet cpset = iConfig.getParameter(name); + std::vector etaBins = cpset.getParameter>("etaBins"); + std::vector emfBins = cpset.getParameter>("emfBins"); + std::vector offset = cpset.getParameter>("offset"); + std::vector scale = cpset.getParameter>("scale"); + etas.insert(etas.end(), etaBins.begin(), etaBins.end()); + emfs.insert(emfs.end(), emfBins.begin(), emfBins.end()); + scales.insert(scales.end(), scale.begin(), scale.end()); + offsets.insert(offsets.end(), offset.begin(), offset.end()); + if (cpset.existsAs>("ptMin")) { + std::vector ptMin = cpset.getParameter>("ptMin"); + ptMins.insert(ptMins.end(), ptMin.begin(), ptMin.end()); + } else { + float ptMin = cpset.existsAs("ptMin") ? cpset.getParameter("ptMin") : 0; + ptMins = std::vector(etaBins.size(), ptMin); + } + if (cpset.existsAs>("ptMax")) { + std::vector ptMax = cpset.getParameter>("ptMax"); + ptMaxs.insert(ptMaxs.end(), ptMax.begin(), ptMax.end()); + } else { + ptMaxs = std::vector(etaBins.size(), 1e6); + } + } + } + + bool empty() const { return etas.empty(); } + float operator()(float pt, float abseta, float emf) const { + unsigned int i = 0, n = emfs.size(); + // step 0 get to the right pt bin + while (i < n && pt > ptMaxs[i]) + i++; + // step 1: find the first emf bin for this eta + while (i < n && abseta > etas[i]) + i++; + if (i == n) { + //printf("for pt %7.2f eta %4.2f emf %4.2f will not apply any correction (no eta bin found)\n", pt, abseta, emf); + return pt; + } + unsigned int i2 = i; + while (i < n && etas[i] == etas[i2] && emf > emfs[i]) + i++; + if (i == n || etas[i] != etas[i2]) { + //printf("for pt %7.2f eta %4.2f emf %4.2f will not apply any correction (no emf bin found)\n", pt, abseta, emf); + return pt; + } + //printf("for pt %7.2f eta %4.2f emf %4.2f will use bin %d eta [ * , %4.2f ] emf [ * , %4.2f ] offset = %+5.2f scale=%.3f -> corr pt %7.2f\n", + // pt, abseta, emf, i, etas[i], emfs[i], offsets[i], scales[i], (pt-offsets[i])/scales[i]); + if (pt < ptMins[i]) + return (pt / ptMins[i]) * (ptMins[i] - offsets[i]) / scales[i]; + return (pt - offsets[i]) / scales[i]; + } + + protected: + std::vector etas, emfs, scales, offsets, ptMins, ptMaxs; + }; + class SimpleResol { + public: + SimpleResol() {} + SimpleResol(const edm::ParameterSet &iConfig, const std::string &name, bool throwIfMissing = false) { + if (iConfig.existsAs(name) || throwIfMissing) { + edm::ParameterSet cpset = iConfig.getParameter(name); + std::vector etaBins = cpset.getParameter>("etaBins"); + std::vector offset = cpset.getParameter>("offset"); + std::vector scale = cpset.getParameter>("scale"); + etas.insert(etas.end(), etaBins.begin(), etaBins.end()); + scales.insert(scales.end(), scale.begin(), scale.end()); + offsets.insert(offsets.end(), offset.begin(), offset.end()); + if (cpset.existsAs>("ptMin")) { + std::vector ptMin = cpset.getParameter>("ptMin"); + ptMins.insert(ptMins.end(), ptMin.begin(), ptMin.end()); + } else { + float ptMin = cpset.existsAs("ptMin") ? cpset.getParameter("ptMin") : 0; + ptMins = std::vector(etaBins.size(), ptMin); + } + if (cpset.existsAs>("ptMax")) { + std::vector ptMax = cpset.getParameter>("ptMax"); + ptMaxs.insert(ptMaxs.end(), ptMax.begin(), ptMax.end()); + } else { + ptMaxs = std::vector(etaBins.size(), 1e6); + } + std::string skind = cpset.getParameter("kind"); + if (skind == "track") + kind = Track; + else if (skind == "calo") + kind = Calo; + else + throw cms::Exception("Configuration", "Bad kind of resolution"); + } + } + float operator()(const float pt, const float abseta) const { + for (unsigned int i = 0, n = etas.size(); i < n; ++i) { + if (pt > ptMaxs[i]) + continue; + if (abseta < etas[i]) { + switch (kind) { + case Track: + return pt * std::min(1.f, std::hypot(pt * scales[i] * 0.001, offsets[i])); + case Calo: + return std::min(pt, pt * scales[i] + offsets[i]); + if (pt < ptMins[i]) + return pt * std::min(1, scales[i] + offsets[i] / ptMins[i]); + return std::min(pt, pt * scales[i] + offsets[i]); + } + } + } + return std::min(pt, 0.3 * pt + 7); // saturate to 100% at 10 GeV, and to 30% at high pt + } + bool empty() const { return etas.empty(); } + + protected: + std::vector etas, offsets, scales, ptMins, ptMaxs; + enum Kind { Calo, Track }; + Kind kind; + }; + +}; // namespace l1tpf + +#endif diff --git a/L1Trigger/Phase2L1ParticleFlow/plugins/BuildFile.xml b/L1Trigger/Phase2L1ParticleFlow/plugins/BuildFile.xml new file mode 100644 index 0000000000000..3d1223a3526e1 --- /dev/null +++ b/L1Trigger/Phase2L1ParticleFlow/plugins/BuildFile.xml @@ -0,0 +1,12 @@ + + + + + + + + + + + + diff --git a/L1Trigger/Phase2L1ParticleFlow/plugins/L1TCorrectedPFJetProducer.cc b/L1Trigger/Phase2L1ParticleFlow/plugins/L1TCorrectedPFJetProducer.cc new file mode 100644 index 0000000000000..b642a1bc3f5cb --- /dev/null +++ b/L1Trigger/Phase2L1ParticleFlow/plugins/L1TCorrectedPFJetProducer.cc @@ -0,0 +1,58 @@ +#include "DataFormats/L1TParticleFlow/interface/PFJet.h" +#include "DataFormats/JetReco/interface/Jet.h" + +#include "FWCore/Framework/interface/global/EDProducer.h" +#include "FWCore/Framework/interface/Event.h" +#include "FWCore/ParameterSet/interface/ParameterSet.h" +#include "FWCore/Utilities/interface/InputTag.h" + +#include "L1Trigger/Phase2L1ParticleFlow/src/corrector.h" + +#include + +class L1TCorrectedPFJetProducer : public edm::global::EDProducer<> { +public: + explicit L1TCorrectedPFJetProducer(const edm::ParameterSet&); + ~L1TCorrectedPFJetProducer() override; + +private: + void produce(edm::StreamID, edm::Event&, const edm::EventSetup&) const override; + + edm::EDGetTokenT> jets_; + l1tpf::corrector corrector_; + bool copyDaughters_; +}; + +L1TCorrectedPFJetProducer::L1TCorrectedPFJetProducer(const edm::ParameterSet& iConfig) + : jets_(consumes>(iConfig.getParameter("jets"))), + corrector_(iConfig.getParameter("correctorFile"), iConfig.getParameter("correctorDir")), + copyDaughters_(iConfig.getParameter("copyDaughters")) { + produces>(); +} + +L1TCorrectedPFJetProducer::~L1TCorrectedPFJetProducer() {} + +void L1TCorrectedPFJetProducer::produce(edm::StreamID, edm::Event& iEvent, const edm::EventSetup&) const { + edm::Handle> jets; + iEvent.getByToken(jets_, jets); + auto out = std::make_unique>(); + + for (const auto& srcjet : *jets) { + // start out as copy + out->emplace_back(srcjet.p4()); + auto& jet = out->back(); + // copy daughters + if (copyDaughters_) { + for (const auto& dau : srcjet.daughterPtrVector()) { + jet.addConstituent(edm::Ptr(dau)); + } + } + // apply corrections + jet.calibratePt(corrector_.correctedPt(jet.pt(), jet.eta())); + } + + iEvent.put(std::move(out)); +} + +#include "FWCore/Framework/interface/MakerMacros.h" +DEFINE_FWK_MODULE(L1TCorrectedPFJetProducer); diff --git a/L1Trigger/Phase2L1ParticleFlow/plugins/L1TPFCaloProducer.cc b/L1Trigger/Phase2L1ParticleFlow/plugins/L1TPFCaloProducer.cc new file mode 100644 index 0000000000000..a63cb36947c93 --- /dev/null +++ b/L1Trigger/Phase2L1ParticleFlow/plugins/L1TPFCaloProducer.cc @@ -0,0 +1,296 @@ +// system include files +#include +#include + +// user include files +#include "FWCore/Framework/interface/Frameworkfwd.h" +#include "FWCore/Framework/interface/stream/EDProducer.h" +#include "FWCore/Framework/interface/Event.h" +#include "FWCore/Framework/interface/ESHandle.h" +#include "FWCore/ParameterSet/interface/ParameterSet.h" +#include "FWCore/ParameterSet/interface/FileInPath.h" + +#include "DataFormats/HcalDetId/interface/HcalTrigTowerDetId.h" +#include "DataFormats/HcalDigi/interface/HcalDigiCollections.h" +#include "CalibFormats/CaloTPG/interface/CaloTPGTranscoder.h" +#include "CalibFormats/CaloTPG/interface/CaloTPGRecord.h" +#include "L1Trigger/L1TCalorimeter/interface/CaloTools.h" + +#include "DataFormats/L1THGCal/interface/HGCalTower.h" + +#include "DataFormats/L1TCalorimeterPhase2/interface/CaloTower.h" + +#include "DataFormats/Math/interface/deltaPhi.h" + +#include "L1Trigger/Phase2L1ParticleFlow/src/corrector.h" +#include "L1Trigger/Phase2L1ParticleFlow/interface/ParametricResolution.h" +#include "L1Trigger/Phase2L1ParticleFlow/interface/CaloClusterer.h" + +//-------------------------------------------------------------------------------------------------- +class L1TPFCaloProducer : public edm::stream::EDProducer<> { +public: + explicit L1TPFCaloProducer(const edm::ParameterSet &); + +private: + bool ecalOnly_, debug_; + std::vector> ecalCands_; + std::vector> hcalCands_; + + std::vector> hcalDigis_; + edm::ESHandle decoder_; + bool hcalDigisBarrel_, hcalDigisHF_; + std::vector> phase2barrelTowers_; + std::vector> hcalHGCTowers_; + bool hcalHGCTowersHadOnly_; + + l1tpf::corrector emCorrector_; + l1tpf::corrector hcCorrector_; + l1tpf::corrector hadCorrector_; + + l1tpf_calo::SingleCaloClusterer ecalClusterer_, hcalClusterer_; + std::unique_ptr caloLinker_; + + l1tpf::ParametricResolution resol_; + + virtual void produce(edm::Event &, const edm::EventSetup &) override; + + void readHcalDigis_(edm::Event &event, const edm::EventSetup &); + void readPhase2BarrelCaloTowers_(edm::Event &event, const edm::EventSetup &); + void readHcalHGCTowers_(edm::Event &event, const edm::EventSetup &); + struct SimpleHGCTC { + float et, eta, phi; + SimpleHGCTC(float aet, float aeta, float aphi) : et(aet), eta(aeta), phi(aphi) {} + }; +}; + +// +// constructors and destructor +// +L1TPFCaloProducer::L1TPFCaloProducer(const edm::ParameterSet &iConfig) + : ecalOnly_(iConfig.existsAs("ecalOnly") ? iConfig.getParameter("ecalOnly") : false), + debug_(iConfig.getUntrackedParameter("debug", 0)), + emCorrector_(iConfig.getParameter("emCorrector"), -1, debug_), + hcCorrector_(iConfig.getParameter("hcCorrector"), -1, debug_), + hadCorrector_(iConfig.getParameter("hadCorrector"), + iConfig.getParameter("hadCorrectorEmfMax"), + debug_), + ecalClusterer_(iConfig.getParameter("ecalClusterer")), + hcalClusterer_(iConfig.getParameter("hcalClusterer")), + caloLinker_(l1tpf_calo::makeCaloLinker( + iConfig.getParameter("linker"), ecalClusterer_, hcalClusterer_)), + resol_(iConfig.getParameter("resol")) { + produces("ecalCells"); + + produces("emCalibrated"); + produces("emUncalibrated"); + + for (auto &tag : iConfig.getParameter>("ecalCandidates")) { + ecalCands_.push_back(consumes(tag)); + } + + if (ecalOnly_) + return; + + produces("hcalCells"); + + produces("hcalUnclustered"); + produces("hcalUncalibrated"); + produces("hcalCalibrated"); + + produces("uncalibrated"); + produces("calibrated"); + + for (auto &tag : iConfig.getParameter>("hcalCandidates")) { + hcalCands_.push_back(consumes(tag)); + } + + for (auto &tag : iConfig.getParameter>("hcalDigis")) { + hcalDigis_.push_back(consumes(tag)); + } + if (!hcalDigis_.empty()) { + hcalDigisBarrel_ = iConfig.getParameter("hcalDigisBarrel"); + hcalDigisHF_ = iConfig.getParameter("hcalDigisHF"); + } + + for (auto &tag : iConfig.getParameter>("phase2barrelCaloTowers")) { + phase2barrelTowers_.push_back(consumes(tag)); + } + + for (auto &tag : iConfig.getParameter>("hcalHGCTowers")) { + hcalHGCTowers_.push_back(consumes(tag)); + } + if (!hcalHGCTowers_.empty()) + hcalHGCTowersHadOnly_ = iConfig.getParameter("hcalHGCTowersHadOnly"); +} + +// ------------ method called to produce the data ------------ +void L1TPFCaloProducer::produce(edm::Event &iEvent, const edm::EventSetup &iSetup) { + /// ----------------ECAL INFO------------------- + edm::Handle ecals; + for (const auto &token : ecalCands_) { + iEvent.getByToken(token, ecals); + for (const reco::Candidate &it : *ecals) { + if (debug_) + std::cout << "L1TPFCaloProducer: adding ECal input pt " << it.pt() << ", eta " << it.eta() << ", phi " + << it.phi() << std::endl; + ecalClusterer_.add(it); + } + } + + /// ----------------HCAL INFO------------------- + if (!ecalOnly_) { + edm::Handle hcals; + for (const auto &token : hcalCands_) { + iEvent.getByToken(token, hcals); + for (const reco::Candidate &it : *hcals) { + if (debug_) + std::cout << "L1TPFCaloProducer: adding HCal cand input pt " << it.pt() << ", eta " << it.eta() << ", phi " + << it.phi() << std::endl; + hcalClusterer_.add(it); + } + } + if (!hcalDigis_.empty()) { + readHcalDigis_(iEvent, iSetup); + } + if (!phase2barrelTowers_.empty()) { + readPhase2BarrelCaloTowers_(iEvent, iSetup); + } + if (!hcalHGCTowers_.empty()) { + readHcalHGCTowers_(iEvent, iSetup); + } + } + + /// --------------- CLUSTERING ------------------ + ecalClusterer_.run(); + + auto ecalCellsH = iEvent.put(ecalClusterer_.fetchCells(), "ecalCells"); + + iEvent.put(ecalClusterer_.fetch(ecalCellsH), "emUncalibrated"); + + if (emCorrector_.valid()) { + ecalClusterer_.correct( + [&](const l1tpf_calo::Cluster &c) -> float { return emCorrector_.correctedPt(0., c.et, std::abs(c.eta)); }); + } + + std::unique_ptr corrEcal = ecalClusterer_.fetch(ecalCellsH); + + if (debug_) { + for (const l1t::PFCluster &it : *corrEcal) { + std::cout << "L1TPFCaloProducer: corrected ECal cluster pt " << it.pt() << ", eta " << it.eta() << ", phi " + << it.phi() << std::endl; + } + } + + auto ecalClustH = iEvent.put(std::move(corrEcal), "emCalibrated"); + + if (ecalOnly_) { + ecalClusterer_.clear(); + return; + } + + hcalClusterer_.run(); + + auto hcalCellsH = iEvent.put(hcalClusterer_.fetchCells(), "hcalCells"); + + // this we put separately for debugging + iEvent.put(hcalClusterer_.fetchCells(/*unclustered=*/true), "hcalUnclustered"); + + iEvent.put(hcalClusterer_.fetch(hcalCellsH), "hcalUncalibrated"); + + if (hcCorrector_.valid()) { + hcalClusterer_.correct( + [&](const l1tpf_calo::Cluster &c) -> float { return hcCorrector_.correctedPt(c.et, 0., std::abs(c.eta)); }); + } + + auto hcalClustH = iEvent.put(hcalClusterer_.fetch(hcalCellsH), "hcalCalibrated"); + + // Calorimeter linking + caloLinker_->run(); + + iEvent.put(caloLinker_->fetch(ecalClustH, hcalClustH), "uncalibrated"); + + if (hadCorrector_.valid()) { + caloLinker_->correct([&](const l1tpf_calo::CombinedCluster &c) -> float { + if (debug_) + std::cout << "L1TPFCaloProducer: raw linked cluster pt " << c.et << ", eta " << c.eta << ", phi " << c.phi + << ", emPt " << c.ecal_et << std::endl; + return hadCorrector_.correctedPt(c.et, c.ecal_et, std::abs(c.eta)); + }); + } + + std::unique_ptr clusters = caloLinker_->fetch(ecalClustH, hcalClustH); + for (l1t::PFCluster &c : *clusters) { + c.setPtError(resol_(c.pt(), std::abs(c.eta()))); + if (debug_) + std::cout << "L1TPFCaloProducer: calibrated linked cluster pt " << c.pt() << ", eta " << c.eta() << ", phi " + << c.phi() << ", emPt " << c.emEt() << std::endl; + } + iEvent.put(std::move(clusters), "calibrated"); + + ecalClusterer_.clear(); + hcalClusterer_.clear(); + caloLinker_->clear(); +} + +void L1TPFCaloProducer::readHcalDigis_(edm::Event &iEvent, const edm::EventSetup &iSetup) { + iSetup.get().get(decoder_); + edm::Handle hcalTPs; + for (const auto &token : hcalDigis_) { + iEvent.getByToken(token, hcalTPs); + for (const auto &itr : *hcalTPs) { + HcalTrigTowerDetId id = itr.id(); + double et = decoder_->hcaletValue(itr.id(), itr.t0()); + if (et <= 0) + continue; + float towerEta = l1t::CaloTools::towerEta(id.ieta()); + float towerPhi = l1t::CaloTools::towerPhi(id.ieta(), id.iphi()); + if (!hcalDigisBarrel_ && std::abs(towerEta) < 2) + continue; + if (!hcalDigisHF_ && std::abs(towerEta) > 2) + continue; + if (debug_) + std::cout << "L1TPFCaloProducer: adding HCal digi input pt " << et << ", eta " << towerEta << ", phi " + << towerPhi << std::endl; + hcalClusterer_.add(et, towerEta, towerPhi); + } + } +} + +void L1TPFCaloProducer::readPhase2BarrelCaloTowers_(edm::Event &event, const edm::EventSetup &) { + edm::Handle towers; + for (const auto &token : phase2barrelTowers_) { + event.getByToken(token, towers); + for (const auto &t : *towers) { + // sanity check from https://github.com/cms-l1t-offline/cmssw/blob/phase2-l1t-integration-CMSSW_10_5_0_pre1/L1Trigger/L1CaloTrigger/plugins/L1TowerCalibrator.cc#L248-L252 + if ((int)t.towerIEta() == -1016 && (int)t.towerIPhi() == -962) + continue; + if (debug_ && (t.hcalTowerEt() > 0 || t.ecalTowerEt() > 0)) { + std::cout << "L1TPFCaloProducer: adding phase2 L1 CaloTower eta " << t.towerEta() << " phi " << t.towerIPhi() + << " ieta " << t.towerIEta() << " iphi " << t.towerIPhi() << " ecal " << t.ecalTowerEt() + << " hcal " << t.hcalTowerEt() << std::endl; + } + hcalClusterer_.add(t.hcalTowerEt(), t.towerEta(), t.towerIPhi()); + ecalClusterer_.add(t.ecalTowerEt(), t.towerEta(), t.towerIPhi()); + } + } +} + +void L1TPFCaloProducer::readHcalHGCTowers_(edm::Event &iEvent, const edm::EventSetup &iSetup) { + edm::Handle hgcTowers; + + for (const auto &token : hcalHGCTowers_) { + iEvent.getByToken(token, hgcTowers); + for (auto it = hgcTowers->begin(0), ed = hgcTowers->end(0); it != ed; ++it) { + if (debug_) + std::cout << "L1TPFCaloProducer: adding HGC Tower hadEt " << it->etHad() << ", emEt " << it->etEm() << ", pt " + << it->pt() << ", eta " << it->eta() << ", phi " << it->phi() << std::endl; + hcalClusterer_.add(it->etHad(), it->eta(), it->phi()); + if (!hcalHGCTowersHadOnly_) + ecalClusterer_.add(it->etEm(), it->eta(), it->phi()); + } + } +} + +//define this as a plug-in +#include "FWCore/Framework/interface/MakerMacros.h" +DEFINE_FWK_MODULE(L1TPFCaloProducer); diff --git a/L1Trigger/Phase2L1ParticleFlow/plugins/L1TPFCandMerger.cc b/L1Trigger/Phase2L1ParticleFlow/plugins/L1TPFCandMerger.cc new file mode 100644 index 0000000000000..e61c8d394282d --- /dev/null +++ b/L1Trigger/Phase2L1ParticleFlow/plugins/L1TPFCandMerger.cc @@ -0,0 +1,7 @@ +#include "DataFormats/L1TParticleFlow/interface/PFCandidate.h" +#include "FWCore/Framework/interface/MakerMacros.h" +#include "CommonTools/UtilAlgos/interface/Merger.h" + +typedef Merger> L1TPFCandMerger; + +DEFINE_FWK_MODULE(L1TPFCandMerger); diff --git a/L1Trigger/Phase2L1ParticleFlow/plugins/L1TPFCandMultiMerger.cc b/L1Trigger/Phase2L1ParticleFlow/plugins/L1TPFCandMultiMerger.cc new file mode 100644 index 0000000000000..ee1654af24822 --- /dev/null +++ b/L1Trigger/Phase2L1ParticleFlow/plugins/L1TPFCandMultiMerger.cc @@ -0,0 +1,51 @@ +#include "DataFormats/L1TParticleFlow/interface/PFCandidate.h" + +#include "FWCore/Framework/interface/global/EDProducer.h" +#include "FWCore/Framework/interface/Event.h" +#include "FWCore/ParameterSet/interface/ParameterSet.h" +#include "FWCore/Utilities/interface/transform.h" +#include "FWCore/Utilities/interface/InputTag.h" +#include "DataFormats/Common/interface/CloneTrait.h" +#include + +class L1TPFCandMultiMerger : public edm::global::EDProducer<> { +public: + explicit L1TPFCandMultiMerger(const edm::ParameterSet&); + ~L1TPFCandMultiMerger() override; + +private: + void produce(edm::StreamID, edm::Event&, const edm::EventSetup&) const override; + + std::vector instances_; + std::vector>> tokens_; +}; + +L1TPFCandMultiMerger::L1TPFCandMultiMerger(const edm::ParameterSet& iConfig) + : instances_(iConfig.getParameter>("labelsToMerge")) { + const std::vector& pfProducers = iConfig.getParameter>("pfProducers"); + tokens_.reserve(instances_.size() * pfProducers.size()); + for (unsigned int ii = 0, ni = instances_.size(); ii < ni; ++ii) { + for (const edm::InputTag& tag : pfProducers) { + tokens_.push_back( + consumes>(edm::InputTag(tag.label(), instances_[ii], tag.process()))); + } + produces>(instances_[ii]); + } +} + +L1TPFCandMultiMerger::~L1TPFCandMultiMerger() {} + +void L1TPFCandMultiMerger::produce(edm::StreamID, edm::Event& iEvent, const edm::EventSetup&) const { + edm::Handle> handle; + for (unsigned int ii = 0, it = 0, ni = instances_.size(), np = tokens_.size() / ni; ii < ni; ++ii) { + std::unique_ptr> out(new std::vector()); + for (unsigned int ip = 0; ip < np; ++ip, ++it) { + iEvent.getByToken(tokens_[it], handle); + out->insert(out->end(), handle->begin(), handle->end()); + } + iEvent.put(std::move(out), instances_[ii]); + } +} + +#include "FWCore/Framework/interface/MakerMacros.h" +DEFINE_FWK_MODULE(L1TPFCandMultiMerger); diff --git a/L1Trigger/Phase2L1ParticleFlow/plugins/L1TPFCandSelector.cc b/L1Trigger/Phase2L1ParticleFlow/plugins/L1TPFCandSelector.cc new file mode 100644 index 0000000000000..09445cf2ab83a --- /dev/null +++ b/L1Trigger/Phase2L1ParticleFlow/plugins/L1TPFCandSelector.cc @@ -0,0 +1,8 @@ +#include "DataFormats/L1TParticleFlow/interface/PFCandidate.h" +#include "FWCore/Framework/interface/MakerMacros.h" +#include "CommonTools/UtilAlgos/interface/StringCutObjectSelector.h" +#include "CommonTools/UtilAlgos/interface/SingleObjectSelector.h" + +typedef SingleObjectSelector, StringCutObjectSelector> L1TPFCandSelector; + +DEFINE_FWK_MODULE(L1TPFCandSelector); diff --git a/L1Trigger/Phase2L1ParticleFlow/plugins/L1TPFJetMetTreeProducer.cc b/L1Trigger/Phase2L1ParticleFlow/plugins/L1TPFJetMetTreeProducer.cc new file mode 100644 index 0000000000000..7341f594b5ba8 --- /dev/null +++ b/L1Trigger/Phase2L1ParticleFlow/plugins/L1TPFJetMetTreeProducer.cc @@ -0,0 +1,321 @@ +// -*- C++ -*- +// +// Package: Giovanni/NTuplizer +// Class: NTuplizer +// +/**\class NTuplizer NTuplizer.cc Giovanni/NTuplizer/plugins/NTuplizer.cc + + Description: [one line class summary] + + Implementation: + [Notes on implementation] +*/ +// +// Original Author: Giovanni Petrucciani +// Created: Thu, 01 Sep 2016 11:30:38 GMT +// +// + +// user include files +#include "FWCore/Framework/interface/Frameworkfwd.h" +#include "FWCore/Framework/interface/one/EDAnalyzer.h" + +#include "FWCore/Framework/interface/Event.h" +#include "DataFormats/Common/interface/Handle.h" +#include "DataFormats/Common/interface/View.h" + +#include "DataFormats/Candidate/interface/Candidate.h" +#include "DataFormats/HepMCCandidate/interface/GenParticle.h" +#include "DataFormats/JetReco/interface/GenJet.h" +#include "DataFormats/JetReco/interface/PFJet.h" +#include "DataFormats/METReco/interface/CaloMET.h" +#include "DataFormats/METReco/interface/PFMET.h" +#include "DataFormats/METReco/interface/GenMET.h" + +#include "DataFormats/Math/interface/deltaR.h" + +#include "FWCore/ParameterSet/interface/ParameterSet.h" +#include "FWCore/Framework/interface/ConsumesCollector.h" +#include "FWCore/Utilities/interface/InputTag.h" + +#include "FWCore/ServiceRegistry/interface/Service.h" +#include "CommonTools/UtilAlgos/interface/TFileService.h" +#include "CommonTools/Utils/interface/StringCutObjectSelector.h" +#include "CommonTools/Utils/interface/StringObjectFunction.h" +#include "L1Trigger/Phase2L1ParticleFlow/interface/SimpleCalibrations.h" + +#include +#include +#include + +class L1TPFJetMetTreeProducer : public edm::one::EDAnalyzer { +public: + explicit L1TPFJetMetTreeProducer(const edm::ParameterSet &); + ~L1TPFJetMetTreeProducer(); + +private: + virtual void analyze(const edm::Event &, const edm::EventSetup &) override; + + struct JetInput { + std::string name; + edm::EDGetTokenT> token; + l1tpf::SimpleCorrEm jec; + JetInput() {} + JetInput(const std::string &n, + const edm::EDGetTokenT> &t, + const l1tpf::SimpleCorrEm &c) + : name(n), token(t), jec(c) {} + }; + std::vector jets_; + std::vector>> jetSels_; + + struct MetInput { + std::string name; + edm::EDGetTokenT> token; + MetInput() {} + MetInput(const std::string &n, const edm::EDGetTokenT> &t) : name(n), token(t) {} + }; + std::vector mets_; + + struct JetCollectionBranch { + std::string name; + std::vector ak4jet_pt_corr; + std::vector ak4jet_pt_raw; + std::vector ak4jet_eta; + std::vector ak4jet_phi; + std::vector ak4jet_mass_raw; + std::vector ak4jet_mass_corr; + std::vector ak4jet_e_raw; + std::vector ak4jet_e_corr; + int ak4jet_N; + JetCollectionBranch(const std::string &n) : name(n) {} + void makeBranches(TTree *tree) { + tree->Branch((name + "_N").c_str(), &ak4jet_N); + tree->Branch((name + "_pt_raw").c_str(), &ak4jet_pt_raw); + tree->Branch((name + "_pt_corr").c_str(), &ak4jet_pt_corr); + tree->Branch((name + "_eta").c_str(), &ak4jet_eta); + tree->Branch((name + "_phu").c_str(), &ak4jet_phi); + tree->Branch((name + "_mass_raw").c_str(), &ak4jet_mass_raw); + tree->Branch((name + "_mass_corr").c_str(), &ak4jet_mass_corr); + tree->Branch((name + "_e_raw").c_str(), &ak4jet_pt_raw); + tree->Branch((name + "_e_corr").c_str(), &ak4jet_pt_corr); + } + void fill(const edm::View &jets, const l1tpf::SimpleCorrEm &corr) { + ak4jet_pt_corr.clear(); + ak4jet_pt_raw.clear(); + ak4jet_eta.clear(); + ak4jet_phi.clear(); + ak4jet_mass_raw.clear(); + ak4jet_mass_corr.clear(); + ak4jet_e_raw.clear(); + ak4jet_e_corr.clear(); + ak4jet_N = 0; + reco::Particle::LorentzVector sum_raw, sum_corr; + for (reco::LeafCandidate jet : jets) { + ak4jet_N++; + ak4jet_pt_raw.push_back(jet.pt()); + ak4jet_e_raw.push_back(jet.energy()); + ak4jet_mass_raw.push_back(jet.mass()); + ak4jet_eta.push_back(jet.eta()); + ak4jet_phi.push_back(jet.phi()); + float correction = corr(jet.pt(), std::abs(jet.eta())); + jet.setP4(reco::Particle::PolarLorentzVector(correction, jet.eta(), jet.phi(), jet.mass())); + correction = correction / jet.pt(); + ak4jet_pt_corr.push_back(jet.pt()); + ak4jet_mass_corr.push_back(correction * jet.mass()); + ak4jet_e_corr.push_back(correction * jet.energy()); + } + } + }; + std::vector jetCollbranches_; + + struct JetBranch { + std::string name; + int count_raw, count_corr; + float ht_raw, ht_corr; + float mht_raw, mht_corr; + JetBranch(const std::string &n) : name(n) {} + void makeBranches(TTree *tree) { + tree->Branch((name + "_ht_raw").c_str(), &ht_raw, (name + "_ht_raw/F").c_str()); + tree->Branch((name + "_mht_raw").c_str(), &mht_raw, (name + "_mht_raw/F").c_str()); + tree->Branch((name + "_num_raw").c_str(), &count_raw, (name + "_num_raw/I").c_str()); + tree->Branch((name + "_ht_corr").c_str(), &ht_corr, (name + "_ht_corr/F").c_str()); + tree->Branch((name + "_mht_corr").c_str(), &mht_corr, (name + "_mht_corr/F").c_str()); + tree->Branch((name + "_num_corr").c_str(), &count_corr, (name + "_num_corr/I").c_str()); + } + void fill(const edm::View &jets, + const l1tpf::SimpleCorrEm &corr, + const StringCutObjectSelector &sel) { + count_raw = 0; + ht_raw = 0; + count_corr = 0; + ht_corr = 0; + reco::Particle::LorentzVector sum_raw, sum_corr; + for (reco::LeafCandidate jet : jets) { + if (sel(jet)) { + count_raw++; + ht_raw += std::min(jet.pt(), 500.); + sum_raw += jet.p4(); + } + jet.setP4( + reco::Particle::PolarLorentzVector(corr(jet.pt(), std::abs(jet.eta())), jet.eta(), jet.phi(), jet.mass())); + if (sel(jet)) { + count_corr++; + ht_corr += std::min(jet.pt(), 500.); + sum_corr += jet.p4(); + } + } + mht_raw = sum_raw.Pt(); + mht_corr = sum_corr.Pt(); + } + }; + std::vector jetbranches_; + + struct MetBranch { + std::string name; + float met, met_phi; + MetBranch(const std::string &n) : name(n) {} + void makeBranches(TTree *tree) { + tree->Branch((name).c_str(), &met, (name + "/F").c_str()); + tree->Branch((name + "_phi").c_str(), &met_phi, (name + "_phi/F").c_str()); + } + void fill(const edm::View &recoMets) { + met = 0; + met_phi = 0; + for (reco::LeafCandidate recoMet : recoMets) { + met = recoMet.et(); + met_phi = recoMet.phi(); + } + } + }; + std::vector metbranches_; + + struct SpecialBranch { + std::string name; + edm::EDGetTokenT> token; + StringCutObjectSelector sel; + StringObjectFunction func; + float val; + SpecialBranch() : sel(""), func("1") {} + SpecialBranch(const std::string &n, + const edm::EDGetTokenT> &t, + const std::string &cut, + const std::string &expr) + : name(n), token(t), sel(cut, true), func(expr, true) {} + void makeBranches(TTree *tree) { tree->Branch((name).c_str(), &val, (name + "/F").c_str()); } + void fill(const edm::View &view) { + val = 0; + for (const reco::Candidate &c : view) { + if (sel(c)) { + val += func(c); + } + } + } + }; + std::vector specials_; + + TTree *tree_; + uint32_t run_, lumi_; + uint64_t event_; +}; + +L1TPFJetMetTreeProducer::L1TPFJetMetTreeProducer(const edm::ParameterSet &iConfig) { + usesResource("TFileService"); + edm::Service fs; + tree_ = fs->make("tree", "tree"); + tree_->Branch("run", &run_, "run/i"); + tree_->Branch("lumi", &lumi_, "lumi/i"); + tree_->Branch("event", &event_, "event/l"); + + // jet branches + edm::ParameterSet jets = iConfig.getParameter("jets"); + edm::ParameterSet jecs = iConfig.getParameter("jecs"); + for (const std::string &name : jets.getParameterNamesForType()) { + jets_.emplace_back(name, + consumes>(jets.getParameter(name)), + l1tpf::SimpleCorrEm(jecs, name)); + } + edm::ParameterSet sels = iConfig.getParameter("sels"); + for (const std::string &name : sels.getParameterNamesForType()) { + jetSels_.emplace_back(name, StringCutObjectSelector(sels.getParameter(name))); + } + jetbranches_.reserve(jets_.size() * jetSels_.size()); + for (const auto &j : jets_) { + for (const auto &s : jetSels_) { + jetbranches_.emplace_back(j.name + s.first); + } + } + for (auto &b : jetbranches_) + b.makeBranches(tree_); + + jetCollbranches_.reserve(jets_.size()); + for (const auto &j : jets_) + jetCollbranches_.emplace_back(j.name); + for (auto &b : jetCollbranches_) + b.makeBranches(tree_); + + //met branches + edm::ParameterSet mets = iConfig.getParameter("mets"); + for (const std::string &name : mets.getParameterNamesForType()) { + mets_.emplace_back(name, consumes>(mets.getParameter(name))); + } + metbranches_.reserve(mets_.size()); + for (const auto &m : mets_) + metbranches_.emplace_back(m.name); + for (auto &b : metbranches_) + b.makeBranches(tree_); + + edm::ParameterSet specials = iConfig.getParameter("specials"); + for (const std::string &name : specials.getParameterNamesForType()) { + edm::ParameterSet conf = specials.getParameter(name); + specials_.emplace_back(name, + consumes>(conf.getParameter("src")), + conf.getParameter("cut"), + conf.getParameter("expr")); + } + for (auto &b : specials_) + b.makeBranches(tree_); +} + +L1TPFJetMetTreeProducer::~L1TPFJetMetTreeProducer() {} + +// ------------ method called for each event ------------ +void L1TPFJetMetTreeProducer::analyze(const edm::Event &iEvent, const edm::EventSetup &iSetup) { + run_ = iEvent.id().run(); + lumi_ = iEvent.id().luminosityBlock(); + event_ = iEvent.id().event(); + + int ibranch = 0; + for (const auto &j : jets_) { + edm::Handle> jets; + iEvent.getByToken(j.token, jets); + jetCollbranches_[ibranch++].fill(*jets, j.jec); + } + + ibranch = 0; + for (const auto &j : jets_) { + edm::Handle> jets; + iEvent.getByToken(j.token, jets); + for (const auto &s : jetSels_) { + jetbranches_[ibranch++].fill(*jets, j.jec, s.second); + } + } + + ibranch = 0; + for (const auto &m : mets_) { + edm::Handle> mets; + iEvent.getByToken(m.token, mets); + metbranches_[ibranch++].fill(*mets); + } + + for (SpecialBranch &s : specials_) { + edm::Handle> specials; + iEvent.getByToken(s.token, specials); + s.fill(*specials); + } + tree_->Fill(); +} + +//define this as a plug-in +#include "FWCore/Framework/interface/MakerMacros.h" +DEFINE_FWK_MODULE(L1TPFJetMetTreeProducer); diff --git a/L1Trigger/Phase2L1ParticleFlow/plugins/L1TPFProducer.cc b/L1Trigger/Phase2L1ParticleFlow/plugins/L1TPFProducer.cc new file mode 100644 index 0000000000000..d4766d8494200 --- /dev/null +++ b/L1Trigger/Phase2L1ParticleFlow/plugins/L1TPFProducer.cc @@ -0,0 +1,381 @@ +// system include files +#include +#include +#include + +// user include files +#include "FWCore/Framework/interface/Frameworkfwd.h" +#include "FWCore/Framework/interface/stream/EDProducer.h" +#include "FWCore/Framework/interface/Event.h" +#include "FWCore/Framework/interface/ESHandle.h" +#include "FWCore/ParameterSet/interface/ParameterSet.h" +#include "FWCore/ParameterSet/interface/FileInPath.h" + +#include "DataFormats/Common/interface/View.h" +#include "DataFormats/L1TParticleFlow/interface/PFCandidate.h" +#include "DataFormats/L1TCorrelator/interface/TkPrimaryVertex.h" + +#include "DataFormats/Math/interface/deltaR.h" + +#include "L1Trigger/Phase2L1ParticleFlow/interface/RegionMapper.h" +#include "L1Trigger/Phase2L1ParticleFlow/interface/PFAlgoBase.h" +#include "L1Trigger/Phase2L1ParticleFlow/interface/PFAlgo3.h" +#include "L1Trigger/Phase2L1ParticleFlow/interface/PFAlgo2HGC.h" +#include "L1Trigger/Phase2L1ParticleFlow/interface/BitwisePFAlgo.h" +#include "L1Trigger/Phase2L1ParticleFlow/interface/PuppiAlgo.h" +#include "L1Trigger/Phase2L1ParticleFlow/interface/LinearizedPuppiAlgo.h" +#include "L1Trigger/Phase2L1ParticleFlow/interface/DiscretePFInputsIO.h" +#include "L1Trigger/Phase2L1ParticleFlow/interface/COEFile.h" + +#include "DataFormats/L1TCorrelator/interface/TkMuon.h" +#include "DataFormats/L1TCorrelator/interface/TkMuonFwd.h" + +//-------------------------------------------------------------------------------------------------- +class L1TPFProducer : public edm::stream::EDProducer<> { +public: + explicit L1TPFProducer(const edm::ParameterSet&); + ~L1TPFProducer(); + +private: + int debug_; + + bool useStandaloneMuons_; + bool useTrackerMuons_; + + bool hasTracks_; + edm::EDGetTokenT tkCands_; + float trkPt_, trkMaxChi2_; + unsigned trkMinStubs_; + l1tpf_impl::PUAlgoBase::VertexAlgo vtxAlgo_; + edm::EDGetTokenT> extTkVtx_; + + edm::EDGetTokenT muCands_; // standalone muons + edm::EDGetTokenT tkMuCands_; // tk muons + + std::vector> emCands_; + std::vector> hadCands_; + + float emPtCut_, hadPtCut_; + + l1tpf_impl::RegionMapper l1regions_; + std::unique_ptr l1pfalgo_; + std::unique_ptr l1pualgo_; + + edm::EDGetTokenT TokGenOrigin_; + + // Region dump/coe + FILE* fRegionDump; + l1tpf_impl::COEFile* fRegionCOE; + unsigned int neventscoemax, neventsproduced; + + // region of interest debugging + float debugEta_, debugPhi_, debugR_; + + virtual void produce(edm::Event&, const edm::EventSetup&) override; + void addUInt(unsigned int value, std::string iLabel, edm::Event& iEvent); +}; + +// +// constructors and destructor +// +L1TPFProducer::L1TPFProducer(const edm::ParameterSet& iConfig) + : debug_(iConfig.getUntrackedParameter("debug", 0)), + useStandaloneMuons_(iConfig.getParameter("useStandaloneMuons")), + useTrackerMuons_(iConfig.getParameter("useTrackerMuons")), + hasTracks_(!iConfig.getParameter("tracks").label().empty()), + tkCands_(hasTracks_ ? consumes(iConfig.getParameter("tracks")) + : edm::EDGetTokenT()), + trkPt_(iConfig.getParameter("trkPtCut")), + trkMaxChi2_(iConfig.getParameter("trkMaxChi2")), + trkMinStubs_(iConfig.getParameter("trkMinStubs")), + muCands_(consumes(iConfig.getParameter("muons"))), + tkMuCands_(consumes(iConfig.getParameter("tkMuons"))), + emPtCut_(iConfig.getParameter("emPtCut")), + hadPtCut_(iConfig.getParameter("hadPtCut")), + l1regions_(iConfig), + l1pfalgo_(nullptr), + l1pualgo_(nullptr), + fRegionDump(nullptr), + fRegionCOE(nullptr), + debugEta_(iConfig.getUntrackedParameter("debugEta", 0)), + debugPhi_(iConfig.getUntrackedParameter("debugPhi", 0)), + debugR_(iConfig.getUntrackedParameter("debugR", -1)) { + produces("PF"); + produces("Puppi"); + + //produces("RawEmCalo"); + //produces("RawCalo"); + + produces("EmCalo"); + produces("Calo"); + produces("TK"); + produces("TKVtx"); + + produces("z0"); + + for (auto& tag : iConfig.getParameter>("emClusters")) { + emCands_.push_back(consumes(tag)); + } + for (auto& tag : iConfig.getParameter>("hadClusters")) { + hadCands_.push_back(consumes(tag)); + } + + const std::string& algo = iConfig.getParameter("pfAlgo"); + if (algo == "PFAlgo3") { + l1pfalgo_.reset(new l1tpf_impl::PFAlgo3(iConfig)); + } else if (algo == "PFAlgo2HGC") { + l1pfalgo_.reset(new l1tpf_impl::PFAlgo2HGC(iConfig)); + } else if (algo == "BitwisePFAlgo") { + l1pfalgo_.reset(new l1tpf_impl::BitwisePFAlgo(iConfig)); + } else + throw cms::Exception("Configuration", "Unsupported PFAlgo"); + + const std::string& pualgo = iConfig.getParameter("puAlgo"); + if (pualgo == "Puppi") { + l1pualgo_.reset(new l1tpf_impl::PuppiAlgo(iConfig)); + } else if (pualgo == "LinearizedPuppi") { + l1pualgo_.reset(new l1tpf_impl::LinearizedPuppiAlgo(iConfig)); + } else + throw cms::Exception("Configuration", "Unsupported PUAlgo"); + + std::string vtxAlgo = iConfig.getParameter("vtxAlgo"); + if (vtxAlgo == "TP") + vtxAlgo_ = l1tpf_impl::PUAlgoBase::TPVtxAlgo; + else if (vtxAlgo == "old") + vtxAlgo_ = l1tpf_impl::PUAlgoBase::OldVtxAlgo; + else if (vtxAlgo == "external") { + vtxAlgo_ = l1tpf_impl::PUAlgoBase::ExternalVtxAlgo; + const std::string& vtxFormat = iConfig.getParameter("vtxFormat"); + if (vtxFormat == "TkPrimaryVertex") { + extTkVtx_ = consumes>(iConfig.getParameter("vtxCollection")); + } else + throw cms::Exception("Configuration") << "Unsupported vtxFormat " << vtxFormat << "\n"; + } else + throw cms::Exception("Configuration") << "Unsupported vtxAlgo " << vtxAlgo << "\n"; + + for (const std::string& label : l1pualgo_->puGlobalNames()) { + produces(label); + } + + std::string dumpFileName = iConfig.getUntrackedParameter("dumpFileName", ""); + if (!dumpFileName.empty()) { + fRegionDump = fopen(dumpFileName.c_str(), "wb"); + TokGenOrigin_ = consumes(iConfig.getParameter("genOrigin")); + } + std::string coeFileName = iConfig.getUntrackedParameter("coeFileName", ""); + if (!coeFileName.empty()) { + fRegionCOE = new l1tpf_impl::COEFile(iConfig); + neventscoemax = iConfig.getUntrackedParameter("neventscoemax"); + neventsproduced = 0; + } + + for (int tot = 0; tot <= 1; ++tot) { + for (int i = 0; i < l1tpf_impl::Region::n_input_types; ++i) { + produces(std::string(tot ? "totNL1" : "maxNL1") + l1tpf_impl::Region::inputTypeName(i)); + } + for (int i = 0; i < l1tpf_impl::Region::n_output_types; ++i) { + produces(std::string(tot ? "totNL1PF" : "maxNL1PF") + l1tpf_impl::Region::outputTypeName(i)); + produces(std::string(tot ? "totNL1Puppi" : "maxNL1Puppi") + l1tpf_impl::Region::outputTypeName(i)); + } + } + for (int i = 0; i < l1tpf_impl::Region::n_input_types; ++i) { + produces>(std::string("vecNL1") + l1tpf_impl::Region::inputTypeName(i)); + } + for (int i = 0; i < l1tpf_impl::Region::n_output_types; ++i) { + produces>(std::string("vecNL1PF") + l1tpf_impl::Region::outputTypeName(i)); + produces>(std::string("vecNL1Puppi") + l1tpf_impl::Region::outputTypeName(i)); + } +} + +L1TPFProducer::~L1TPFProducer() { + // do anything here that needs to be done at desctruction time + // (e.g. close files, deallocate resources etc.) + if (fRegionDump) + fclose(fRegionDump); + if (fRegionCOE) + fRegionCOE->close(); +} + +// ------------ method called to produce the data ------------ +void L1TPFProducer::produce(edm::Event& iEvent, const edm::EventSetup& iSetup) { + /// ------ READ TRACKS ---- + if (hasTracks_) { + edm::Handle htracks; + iEvent.getByToken(tkCands_, htracks); + const auto& tracks = *htracks; + for (unsigned int itk = 0, ntk = tracks.size(); itk < ntk; ++itk) { + const auto& tk = tracks[itk]; + // adding objects to PF + if (debugR_ > 0 && deltaR(tk.eta(), tk.phi(), debugEta_, debugPhi_) > debugR_) + continue; + if (tk.pt() > trkPt_ && tk.nStubs() >= trkMinStubs_ && tk.normalizedChi2() < trkMaxChi2_) { + l1regions_.addTrack(tk, l1t::PFTrackRef(htracks, itk)); + } + } + } + + /// ------ READ MUONS ---- + /// ------- first check that not more than one version of muons (standaloneMu or trackerMu) is set to be used in l1pflow + if (useStandaloneMuons_ && useTrackerMuons_) { + throw cms::Exception( + "Configuration", + "setting useStandaloneMuons=True && useTrackerMuons=True is not to be done, as it would duplicate all muons\n"); + } + + if (useStandaloneMuons_) { + edm::Handle muons; + iEvent.getByToken(muCands_, muons); + for (auto it = muons->begin(0), ed = muons->end(0); it != ed; ++it) { + const l1t::Muon& mu = *it; + if (debugR_ > 0 && deltaR(mu.eta(), mu.phi(), debugEta_, debugPhi_) > debugR_) + continue; + l1regions_.addMuon(mu, l1t::PFCandidate::MuonRef(muons, muons->key(it))); + } + } + + if (useTrackerMuons_) { + edm::Handle muons; + iEvent.getByToken(tkMuCands_, muons); + for (auto it = muons->begin(), ed = muons->end(); it != ed; ++it) { + const l1t::TkMuon& mu = *it; + if (debugR_ > 0 && deltaR(mu.eta(), mu.phi(), debugEta_, debugPhi_) > debugR_) + continue; + l1regions_.addMuon(mu); // FIXME add a l1t::PFCandidate::MuonRef + } + } + + // ------ READ CALOS ----- + edm::Handle caloHandle; + for (const auto& tag : emCands_) { + iEvent.getByToken(tag, caloHandle); + const auto& calos = *caloHandle; + for (unsigned int ic = 0, nc = calos.size(); ic < nc; ++ic) { + const auto& calo = calos[ic]; + if (debugR_ > 0 && deltaR(calo.eta(), calo.phi(), debugEta_, debugPhi_) > debugR_) + continue; + if (calo.pt() > emPtCut_) + l1regions_.addEmCalo(calo, l1t::PFClusterRef(caloHandle, ic)); + } + } + for (const auto& tag : hadCands_) { + iEvent.getByToken(tag, caloHandle); + const auto& calos = *caloHandle; + for (unsigned int ic = 0, nc = calos.size(); ic < nc; ++ic) { + const auto& calo = calos[ic]; + if (debugR_ > 0 && deltaR(calo.eta(), calo.phi(), debugEta_, debugPhi_) > debugR_) + continue; + if (calo.pt() > hadPtCut_) + l1regions_.addCalo(calo, l1t::PFClusterRef(caloHandle, ic)); + } + } + + // First, get a copy of the discretized and corrected inputs, and write them out + // FIXME: to be implemented + iEvent.put(l1regions_.fetchCalo(/*ptmin=*/0.1, /*em=*/true), "EmCalo"); + iEvent.put(l1regions_.fetchCalo(/*ptmin=*/0.1, /*em=*/false), "Calo"); + iEvent.put(l1regions_.fetchTracks(/*ptmin=*/0.0, /*fromPV=*/false), "TK"); + if (fRegionDump) { + uint32_t run = iEvent.id().run(), lumi = iEvent.id().luminosityBlock(); + uint64_t event = iEvent.id().event(); + fwrite(&run, sizeof(uint32_t), 1, fRegionDump); + fwrite(&lumi, sizeof(uint32_t), 1, fRegionDump); + fwrite(&event, sizeof(uint64_t), 1, fRegionDump); + l1tpf_impl::writeManyToFile(l1regions_.regions(), fRegionDump); + } + + // Then save the regions to the COE file + // Do it here because there is some sorting going on in a later function + if (fRegionCOE && fRegionCOE->is_open() && neventsproduced < neventscoemax) { + std::vector regions = l1regions_.regions(); + fRegionCOE->writeTracksToFile(regions, neventsproduced == 0); + } + neventsproduced++; + + // Then do the vertexing, and save it out + float z0; + if (vtxAlgo_ == l1tpf_impl::PUAlgoBase::ExternalVtxAlgo) { + z0 = 0; + double ptsum = 0; + if (!extTkVtx_.isUninitialized()) { + edm::Handle> vtxHandle; + iEvent.getByToken(extTkVtx_, vtxHandle); + for (const l1t::TkPrimaryVertex& vtx : *vtxHandle) { + if (ptsum == 0 || vtx.sum() > ptsum) { + z0 = vtx.zvertex(); + ptsum = vtx.sum(); + } + } + } else + throw cms::Exception("LogicError", "Inconsistent vertex configuration"); + } + l1pualgo_->doVertexing(l1regions_.regions(), vtxAlgo_, z0); + iEvent.put(std::make_unique(z0), "z0"); + if (fRegionDump) { + fwrite(&z0, sizeof(float), 1, fRegionDump); + edm::Handle hGenOrigin; + iEvent.getByToken(TokGenOrigin_, hGenOrigin); + const math::XYZPointF& genOrigin = *hGenOrigin; + float genZ = genOrigin.Z(); + fwrite(&genZ, sizeof(float), 1, fRegionDump); + } + + // Then also save the tracks with a vertex cut + iEvent.put(l1regions_.fetchTracks(/*ptmin=*/0.0, /*fromPV=*/true), "TKVtx"); + + // Then run PF in each region + for (auto& l1region : l1regions_.regions()) { + l1pfalgo_->runPF(l1region); + l1pualgo_->runChargedPV(l1region, z0); + } + // save PF into the event + iEvent.put(l1regions_.fetch(false), "PF"); + + // Then get our alphas (globally) + std::vector puGlobals; + l1pualgo_->doPUGlobals(l1regions_.regions(), -1., puGlobals); // FIXME we don't have yet an external PU estimate + const std::vector& puGlobalNames = l1pualgo_->puGlobalNames(); + assert(puGlobals.size() == puGlobalNames.size()); + for (unsigned int i = 0, n = puGlobalNames.size(); i < n; ++i) { + iEvent.put(std::make_unique(puGlobals[i]), puGlobalNames[i]); + } + if (fRegionDump) { + l1tpf_impl::writeManyToFile(puGlobals, fRegionDump); + } + + // Then run puppi (regionally) + for (auto& l1region : l1regions_.regions()) { + l1pualgo_->runNeutralsPU(l1region, -1., puGlobals); + } + // and save puppi + iEvent.put(l1regions_.fetch(true), "Puppi"); + + // Then go do the multiplicities + + for (int i = 0; i < l1tpf_impl::Region::n_input_types; ++i) { + auto totAndMax = l1regions_.totAndMaxInput(i); + addUInt(totAndMax.first, std::string("totNL1") + l1tpf_impl::Region::inputTypeName(i), iEvent); + addUInt(totAndMax.second, std::string("maxNL1") + l1tpf_impl::Region::inputTypeName(i), iEvent); + iEvent.put(l1regions_.vecInput(i), std::string("vecNL1") + l1tpf_impl::Region::inputTypeName(i)); + } + for (int i = 0; i < l1tpf_impl::Region::n_output_types; ++i) { + auto totAndMaxPF = l1regions_.totAndMaxOutput(i, false); + auto totAndMaxPuppi = l1regions_.totAndMaxOutput(i, true); + addUInt(totAndMaxPF.first, std::string("totNL1PF") + l1tpf_impl::Region::outputTypeName(i), iEvent); + addUInt(totAndMaxPF.second, std::string("maxNL1PF") + l1tpf_impl::Region::outputTypeName(i), iEvent); + addUInt(totAndMaxPuppi.first, std::string("totNL1Puppi") + l1tpf_impl::Region::outputTypeName(i), iEvent); + addUInt(totAndMaxPuppi.second, std::string("maxNL1Puppi") + l1tpf_impl::Region::outputTypeName(i), iEvent); + iEvent.put(l1regions_.vecOutput(i, false), std::string("vecNL1PF") + l1tpf_impl::Region::outputTypeName(i)); + iEvent.put(l1regions_.vecOutput(i, true), std::string("vecNL1Puppi") + l1tpf_impl::Region::outputTypeName(i)); + } + + // finall clear the regions + l1regions_.clear(); +} + +void L1TPFProducer::addUInt(unsigned int value, std::string iLabel, edm::Event& iEvent) { + iEvent.put(std::make_unique(value), iLabel); +} + +//define this as a plug-in +#include "FWCore/Framework/interface/MakerMacros.h" +DEFINE_FWK_MODULE(L1TPFProducer); diff --git a/L1Trigger/Phase2L1ParticleFlow/plugins/PFClusterProducerFromHGC3DClusters.cc b/L1Trigger/Phase2L1ParticleFlow/plugins/PFClusterProducerFromHGC3DClusters.cc new file mode 100644 index 0000000000000..bfa2e7cdeedb6 --- /dev/null +++ b/L1Trigger/Phase2L1ParticleFlow/plugins/PFClusterProducerFromHGC3DClusters.cc @@ -0,0 +1,111 @@ +#include "FWCore/Framework/interface/Frameworkfwd.h" +#include "FWCore/Framework/interface/stream/EDProducer.h" +#include "FWCore/Framework/interface/Event.h" +#include "FWCore/Framework/interface/MakerMacros.h" +#include "FWCore/ParameterSet/interface/ParameterSet.h" + +#include "DataFormats/L1TParticleFlow/interface/PFCluster.h" +#include "L1Trigger/Phase2L1ParticleFlow/src/corrector.h" +#include "L1Trigger/Phase2L1ParticleFlow/interface/ParametricResolution.h" +#include "L1Trigger/Phase2L1ParticleFlow/interface/HGC3DClusterEgID.h" +#include "DataFormats/L1THGCal/interface/HGCalMulticluster.h" +#include "CommonTools/Utils/interface/StringCutObjectSelector.h" + +namespace l1tpf { + class PFClusterProducerFromHGC3DClusters : public edm::stream::EDProducer<> { + public: + explicit PFClusterProducerFromHGC3DClusters(const edm::ParameterSet &); + ~PFClusterProducerFromHGC3DClusters() {} + + private: + edm::EDGetTokenT src_; + bool emOnly_; + double etCut_; + StringCutObjectSelector preEmId_; + l1tpf::HGC3DClusterEgID emVsPionID_, emVsPUID_; + bool hasEmId_; + l1tpf::corrector corrector_; + l1tpf::ParametricResolution resol_; + + virtual void produce(edm::Event &, const edm::EventSetup &) override; + + }; // class +} // namespace l1tpf + +l1tpf::PFClusterProducerFromHGC3DClusters::PFClusterProducerFromHGC3DClusters(const edm::ParameterSet &iConfig) + : src_(consumes(iConfig.getParameter("src"))), + emOnly_(iConfig.getParameter("emOnly")), + etCut_(iConfig.getParameter("etMin")), + preEmId_(iConfig.getParameter("preEmId")), + emVsPionID_(iConfig.getParameter("emVsPionID")), + emVsPUID_(iConfig.getParameter("emVsPUID")), + hasEmId_((iConfig.existsAs("preEmId") && !iConfig.getParameter("preEmId").empty()) || + emVsPionID_.method() != ""), + corrector_(iConfig.getParameter("corrector"), + emOnly_ || iConfig.getParameter("corrector").empty() + ? -1 + : iConfig.getParameter("correctorEmfMax")), + resol_(iConfig.getParameter("resol")) { + if (emVsPionID_.method() != "") { + emVsPionID_.prepareTMVA(); + } + if (emVsPUID_.method() != "") { + emVsPUID_.prepareTMVA(); + } + + produces(); + if (hasEmId_) { + produces("em"); + produces("had"); + } +} + +void l1tpf::PFClusterProducerFromHGC3DClusters::produce(edm::Event &iEvent, const edm::EventSetup &) { + std::unique_ptr out(new l1t::PFClusterCollection()), outEm, outHad; + if (hasEmId_) { + outEm.reset(new l1t::PFClusterCollection()); + outHad.reset(new l1t::PFClusterCollection()); + } + edm::Handle multiclusters; + iEvent.getByToken(src_, multiclusters); + + for (auto it = multiclusters->begin(0), ed = multiclusters->end(0); it != ed; ++it) { + float pt = it->pt(), hoe = it->hOverE(); + bool isEM = hasEmId_ ? preEmId_(*it) : emOnly_; + if (emOnly_) { + if (hoe == -1) + continue; + pt /= (1 + hoe); + hoe = 0; + } + if (pt <= etCut_) + continue; + + l1t::PFCluster cluster(pt, it->eta(), it->phi(), hoe, /*isEM=*/isEM); + if (emVsPUID_.method() != "") { + if (!emVsPUID_.passID(*it, cluster)) { + continue; + } + } + if (emVsPionID_.method() != "") { + cluster.setIsEM(emVsPionID_.passID(*it, cluster)); + } + if (corrector_.valid()) + corrector_.correctPt(cluster); + cluster.setPtError(resol_(cluster.pt(), std::abs(cluster.eta()))); + + out->push_back(cluster); + out->back().addConstituent(edm::Ptr(multiclusters, multiclusters->key(it))); + if (hasEmId_) { + (isEM ? outEm : outHad)->push_back(out->back()); + } + } + + iEvent.put(std::move(out)); + if (hasEmId_) { + iEvent.put(std::move(outEm), "em"); + iEvent.put(std::move(outHad), "had"); + } +} +using l1tpf::PFClusterProducerFromHGC3DClusters; +DEFINE_FWK_MODULE(PFClusterProducerFromHGC3DClusters); diff --git a/L1Trigger/Phase2L1ParticleFlow/plugins/PFClusterProducerFromL1EGClusters.cc b/L1Trigger/Phase2L1ParticleFlow/plugins/PFClusterProducerFromL1EGClusters.cc new file mode 100644 index 0000000000000..779f9a7a25282 --- /dev/null +++ b/L1Trigger/Phase2L1ParticleFlow/plugins/PFClusterProducerFromL1EGClusters.cc @@ -0,0 +1,60 @@ +#include "FWCore/Framework/interface/Frameworkfwd.h" +#include "FWCore/Framework/interface/stream/EDProducer.h" +#include "FWCore/Framework/interface/Event.h" +#include "FWCore/Framework/interface/MakerMacros.h" +#include "FWCore/ParameterSet/interface/ParameterSet.h" + +#include "DataFormats/L1TParticleFlow/interface/PFCluster.h" +#include "L1Trigger/Phase2L1ParticleFlow/src/corrector.h" +#include "L1Trigger/Phase2L1ParticleFlow/interface/ParametricResolution.h" +#include "DataFormats/L1TCalorimeterPhase2/interface/CaloCrystalCluster.h" + +namespace l1tpf { + class PFClusterProducerFromL1EGClusters : public edm::stream::EDProducer<> { + public: + explicit PFClusterProducerFromL1EGClusters(const edm::ParameterSet &); + ~PFClusterProducerFromL1EGClusters() {} + + private: + edm::EDGetTokenT src_; + double etCut_; + l1tpf::corrector corrector_; + l1tpf::ParametricResolution resol_; + + virtual void produce(edm::Event &, const edm::EventSetup &) override; + + }; // class +} // namespace l1tpf + +l1tpf::PFClusterProducerFromL1EGClusters::PFClusterProducerFromL1EGClusters(const edm::ParameterSet &iConfig) + : src_(consumes(iConfig.getParameter("src"))), + etCut_(iConfig.getParameter("etMin")), + corrector_(iConfig.getParameter("corrector"), -1), + resol_(iConfig.getParameter("resol")) { + produces(); +} + +void l1tpf::PFClusterProducerFromL1EGClusters::produce(edm::Event &iEvent, const edm::EventSetup &) { + std::unique_ptr out(new l1t::PFClusterCollection()); + edm::Handle clusters; + iEvent.getByToken(src_, clusters); + + unsigned int index = 0; + for (auto it = clusters->begin(), ed = clusters->end(); it != ed; ++it, ++index) { + if (it->pt() <= etCut_) + continue; + + l1t::PFCluster cluster( + it->pt(), it->eta(), it->phi(), /*hOverE=*/0., /*isEM=*/true); // it->hovere() seems to return random values + if (corrector_.valid()) + corrector_.correctPt(cluster); + cluster.setPtError(resol_(cluster.pt(), std::abs(cluster.eta()))); + + out->push_back(cluster); + out->back().addConstituent(edm::Ptr(clusters, index)); + } + + iEvent.put(std::move(out)); +} +using l1tpf::PFClusterProducerFromL1EGClusters; +DEFINE_FWK_MODULE(PFClusterProducerFromL1EGClusters); diff --git a/L1Trigger/Phase2L1ParticleFlow/plugins/PFTrackProducerFromL1Tracks.cc b/L1Trigger/Phase2L1ParticleFlow/plugins/PFTrackProducerFromL1Tracks.cc new file mode 100644 index 0000000000000..8a2d8f1dfc3f1 --- /dev/null +++ b/L1Trigger/Phase2L1ParticleFlow/plugins/PFTrackProducerFromL1Tracks.cc @@ -0,0 +1,86 @@ +#include "FWCore/Framework/interface/Frameworkfwd.h" +#include "FWCore/Framework/interface/stream/EDProducer.h" +#include "FWCore/Framework/interface/Event.h" +#include "FWCore/Framework/interface/MakerMacros.h" +#include "FWCore/ParameterSet/interface/ParameterSet.h" + +#include "FWCore/Framework/interface/ESHandle.h" +#include "MagneticField/Engine/interface/MagneticField.h" +#include "MagneticField/Records/interface/IdealMagneticFieldRecord.h" + +#include "DataFormats/L1TParticleFlow/interface/PFTrack.h" +#include "L1Trigger/Phase2L1ParticleFlow/interface/L1TPFUtils.h" +#include "L1Trigger/Phase2L1ParticleFlow/interface/ParametricResolution.h" + +namespace l1tpf { + class PFTrackProducerFromL1Tracks : public edm::stream::EDProducer<> { + public: + explicit PFTrackProducerFromL1Tracks(const edm::ParameterSet &); + ~PFTrackProducerFromL1Tracks() {} + + private: + edm::EDGetTokenT> TrackTag_; + int nParam_; + float fBz_; + l1tpf::ParametricResolution resolCalo_, resolTrk_; + + virtual void produce(edm::Event &, const edm::EventSetup &) override; + + virtual void beginRun(edm::Run const &, edm::EventSetup const &iSetup) override { + edm::ESHandle magneticField; + iSetup.get().get(magneticField); + fBz_ = magneticField->inTesla(GlobalPoint(0, 0, 0)).z(); + } + + }; // class +} // namespace l1tpf + +l1tpf::PFTrackProducerFromL1Tracks::PFTrackProducerFromL1Tracks(const edm::ParameterSet &iConfig) + : TrackTag_(consumes>(iConfig.getParameter("L1TrackTag"))), + nParam_(iConfig.getParameter("nParam")), + resolCalo_(iConfig.getParameter("resolCalo")), + resolTrk_(iConfig.getParameter("resolTrack")) { + produces(); +} + +void l1tpf::PFTrackProducerFromL1Tracks::produce(edm::Event &iEvent, const edm::EventSetup &) { + std::unique_ptr out(new l1t::PFTrackCollection()); + + // https://github.com/skinnari/cmssw/blob/80c19f1b721325c3a02ee0482f72fb974a4c3bf7/L1Trigger/TrackFindingTracklet/test/L1TrackNtupleMaker.cc + edm::Handle> htracks; + iEvent.getByToken(TrackTag_, htracks); + const auto &tracks = *htracks; + + for (unsigned int i = 0, n = tracks.size(); i < n; ++i) { + const auto &tk = tracks[i]; + + float pt = tk.momentum().perp(); + float eta = tk.momentum().eta(); + float phi = tk.momentum().phi(); + float z0 = tk.POCA().z(); //cm + int charge = tk.rInv() > 0 ? +1 : -1; + + reco::Candidate::PolarLorentzVector p4p(pt, eta, phi, 0.137); // pion mass + reco::Particle::LorentzVector p4(p4p.X(), p4p.Y(), p4p.Z(), p4p.E()); + reco::Particle::Point vtx(0., 0., z0); + + auto caloetaphi = l1tpf::propagateToCalo(p4, math::XYZTLorentzVector(0., 0., z0, 0.), charge, fBz_); + + float trkErr = resolTrk_(pt, std::abs(eta)); + float caloErr = resolCalo_(pt, std::abs(eta)); + int quality = 1; + out->emplace_back(charge, + p4, + vtx, + l1t::PFTrack::TrackRef(htracks, i), + nParam_, + caloetaphi.first, + caloetaphi.second, + trkErr, + caloErr, + quality); + } + iEvent.put(std::move(out)); +} +using l1tpf::PFTrackProducerFromL1Tracks; +DEFINE_FWK_MODULE(PFTrackProducerFromL1Tracks); diff --git a/L1Trigger/Phase2L1ParticleFlow/python/l1ParticleFlow_cff.py b/L1Trigger/Phase2L1ParticleFlow/python/l1ParticleFlow_cff.py new file mode 100644 index 0000000000000..c43e85c93f71d --- /dev/null +++ b/L1Trigger/Phase2L1ParticleFlow/python/l1ParticleFlow_cff.py @@ -0,0 +1,316 @@ +import FWCore.ParameterSet.Config as cms + +from L1Trigger.Phase2L1ParticleFlow.pfTracksFromL1Tracks_cfi import pfTracksFromL1Tracks +from L1Trigger.Phase2L1ParticleFlow.pfClustersFromL1EGClusters_cfi import pfClustersFromL1EGClusters +from L1Trigger.Phase2L1ParticleFlow.pfClustersFromCombinedCalo_cfi import pfClustersFromCombinedCalo +from L1Trigger.Phase2L1ParticleFlow.l1pfProducer_cfi import l1pfProducer + +# Using phase2_hgcalV10 to customize the config for all 106X samples, since there's no other modifier for it +from Configuration.Eras.Modifier_phase2_hgcalV10_cff import phase2_hgcalV10 +from Configuration.Eras.Modifier_phase2_hgcalV11_cff import phase2_hgcalV11 + +# Calorimeter part: ecal + hcal + hf only +pfClustersFromCombinedCaloHCal = pfClustersFromCombinedCalo.clone( + hcalHGCTowers = [], hcalDigis = [], + hcalDigisBarrel = True, hcalDigisHF = False, + hadCorrector = cms.string("L1Trigger/Phase2L1ParticleFlow/data/hadcorr_barrel.root"), + resol = cms.PSet( + etaBins = cms.vdouble( 0.700, 1.200, 1.600), + offset = cms.vdouble( 2.582, 2.191, -0.077), + scale = cms.vdouble( 0.122, 0.143, 0.465), + kind = cms.string('calo'), + )) +phase2_hgcalV10.toModify(pfClustersFromCombinedCaloHCal, + hadCorrector = "L1Trigger/Phase2L1ParticleFlow/data/hadcorr_barrel_106X.root", + resol = cms.PSet( + etaBins = cms.vdouble( 0.700, 1.200, 1.600), + offset = cms.vdouble( 3.084, 2.715, 0.107), + scale = cms.vdouble( 0.118, 0.130, 0.442), + kind = cms.string('calo'), + ) +) +phase2_hgcalV11.toModify(pfClustersFromCombinedCaloHCal, + hadCorrector = "L1Trigger/Phase2L1ParticleFlow/data/hadcorr_barrel_110X.root", + resol = cms.PSet( + etaBins = cms.vdouble( 0.700, 1.200, 1.600), + offset = cms.vdouble( 2.909, 2.864, 0.294), + scale = cms.vdouble( 0.119, 0.127, 0.442), + kind = cms.string('calo'), + ) +) + +pfTracksFromL1TracksBarrel = pfTracksFromL1Tracks.clone( + resolCalo = pfClustersFromCombinedCaloHCal.resol.clone(), +) + +pfClustersFromCombinedCaloHF = pfClustersFromCombinedCalo.clone( + ecalCandidates = [], hcalHGCTowers = [], + phase2barrelCaloTowers = [], + hadCorrector = cms.string("L1Trigger/Phase2L1ParticleFlow/data/hfcorr.root"), + resol = cms.PSet( + etaBins = cms.vdouble( 3.500, 4.000, 4.500, 5.000), + offset = cms.vdouble( 1.099, 0.930, 1.009, 1.369), + scale = cms.vdouble( 0.152, 0.151, 0.144, 0.179), + kind = cms.string('calo'), + )) +phase2_hgcalV10.toModify(pfClustersFromCombinedCaloHF, + hcalCandidates = cms.VInputTag(cms.InputTag("hgcalBackEndLayer2Producer","HGCalBackendLayer2Processor3DClustering")), + hadCorrector = "L1Trigger/Phase2L1ParticleFlow/data/hfcorr_106X.root", + resol = cms.PSet( + etaBins = cms.vdouble( 3.500, 4.000, 4.500, 5.000), + offset = cms.vdouble(-0.846, 0.696, 1.313, 1.044), + scale = cms.vdouble( 0.815, 0.164, 0.146, 0.192), + kind = cms.string('calo'), + ) +) +phase2_hgcalV11.toModify(pfClustersFromCombinedCaloHF, + hcalCandidates = cms.VInputTag(cms.InputTag("hgcalBackEndLayer2Producer","HGCalBackendLayer2Processor3DClustering")), + hadCorrector = "L1Trigger/Phase2L1ParticleFlow/data/hfcorr_110X.root", + resol = cms.PSet( + etaBins = cms.vdouble( 3.500, 4.000, 4.500, 5.000), + offset = cms.vdouble(-1.125, 1.220, 1.514, 1.414), + scale = cms.vdouble( 0.868, 0.159, 0.148, 0.194), + kind = cms.string('calo'), + ) +) + +# Calorimeter part: hgcal +from L1Trigger.Phase2L1ParticleFlow.pfClustersFromHGC3DClusters_cfi import pfClustersFromHGC3DClusters + +l1ParticleFlow_calo_Task = cms.Task( + pfClustersFromL1EGClusters , + pfClustersFromCombinedCaloHCal , + pfClustersFromCombinedCaloHF , + pfClustersFromHGC3DClusters +) +l1ParticleFlow_calo = cms.Sequence(l1ParticleFlow_calo_Task) + + +# PF in the barrel +l1pfProducerBarrel = l1pfProducer.clone( + # inputs + tracks = cms.InputTag('pfTracksFromL1TracksBarrel'), + emClusters = [ cms.InputTag('pfClustersFromL1EGClusters') ], + hadClusters = [ cms.InputTag('pfClustersFromCombinedCaloHCal:calibrated') ], + # track-based PUPPI + puppiUsingBareTracks = True, + puppiDrMin = 0.07, + puppiPtMax = 50., + vtxAlgo = "external", + vtxFormat = cms.string("TkPrimaryVertex"), + vtxCollection = cms.InputTag("L1TkPrimaryVertex",""), + # puppi tuning + puAlgo = "LinearizedPuppi", + puppiEtaCuts = cms.vdouble( 1.6 ), # just one bin + puppiPtCuts = cms.vdouble( 1.0 ), + puppiPtCutsPhotons = cms.vdouble( 1.0 ), + puppiPtSlopes = cms.vdouble( 0.3 ), # coefficient for pT + puppiPtSlopesPhotons = cms.vdouble( 0.3 ), + puppiPtZeros = cms.vdouble( 4.0 ), # ballpark pT from PU + puppiPtZerosPhotons = cms.vdouble( 2.5 ), + puppiAlphaSlopes = cms.vdouble( 0.7 ), # coefficient for alpha + puppiAlphaSlopesPhotons = cms.vdouble( 0.7 ), + puppiAlphaZeros = cms.vdouble( 6.0 ), # ballpark alpha from PU + puppiAlphaZerosPhotons = cms.vdouble( 6.0 ), + puppiAlphaCrops = cms.vdouble( 4 ), # max. absolute value for alpha term + puppiAlphaCropsPhotons = cms.vdouble( 4 ), + puppiPriors = cms.vdouble( 5.0 ), + puppiPriorsPhotons = cms.vdouble( 1.0 ), + # regionalize + useRelativeRegionalCoordinates = cms.bool(False), + trackRegionMode = cms.string("atCalo"), + regions = cms.VPSet( + cms.PSet( + etaBoundaries = cms.vdouble(-1.5,1.5), + phiSlices = cms.uint32(1), + etaExtra = cms.double(0.3), + phiExtra = cms.double(0.0) + ), + ), +) +l1ParticleFlow_pf_barrel_Task = cms.Task( + pfTracksFromL1TracksBarrel , + l1pfProducerBarrel +) +l1ParticleFlow_pf_barrel = cms.Sequence(l1ParticleFlow_pf_barrel_Task) + + + +# PF in HGCal +pfTracksFromL1TracksHGCal = pfTracksFromL1Tracks.clone( + resolCalo = pfClustersFromHGC3DClusters.resol.clone(), +) +l1pfProducerHGCal = l1pfProducer.clone( + # algo + pfAlgo = "PFAlgo2HGC", + # inputs + tracks = cms.InputTag('pfTracksFromL1TracksHGCal'), + emClusters = [ ], # EM clusters are not used (only added to NTuple for calibration/monitoring) + hadClusters = [ cms.InputTag("pfClustersFromHGC3DClusters") ], + # track-based PUPPI + puppiDrMin = 0.04, + puppiPtMax = 50., + puppiUsingBareTracks = True, + vtxAlgo = "external", + vtxFormat = cms.string("TkPrimaryVertex"), + vtxCollection = cms.InputTag("L1TkPrimaryVertex",""), + # puppi tuning + puAlgo = "LinearizedPuppi", + puppiEtaCuts = cms.vdouble( 2.0, 2.4, 3.1 ), # two bins in the tracker (different pT), one outside + puppiPtCuts = cms.vdouble( 1.0, 2.0, 4.0 ), + puppiPtCutsPhotons = cms.vdouble( 1.0, 2.0, 4.0 ), + puppiPtSlopes = cms.vdouble( 0.3, 0.3, 0.3 ), # coefficient for pT + puppiPtSlopesPhotons = cms.vdouble( 0.4, 0.4, 0.4 ), #When e/g ID not applied, use: cms.vdouble( 0.3, 0.3, 0.3 ), + puppiPtZeros = cms.vdouble( 5.0, 7.0, 9.0 ), # ballpark pT from PU + puppiPtZerosPhotons = cms.vdouble( 3.0, 4.0, 5.0 ), + puppiAlphaSlopes = cms.vdouble( 1.5, 1.5, 2.2 ), + puppiAlphaSlopesPhotons = cms.vdouble( 1.5, 1.5, 2.2 ), + puppiAlphaZeros = cms.vdouble( 6.0, 6.0, 9.0 ), + puppiAlphaZerosPhotons = cms.vdouble( 6.0, 6.0, 9.0 ), + puppiAlphaCrops = cms.vdouble( 3 , 3 , 4 ), # max. absolute value for alpha term + puppiAlphaCropsPhotons = cms.vdouble( 3 , 3 , 4 ), + puppiPriors = cms.vdouble( 5.0, 5.0, 7.0 ), + puppiPriorsPhotons = cms.vdouble( 1.5, 1.5, 5.0 ), #When e/g ID not applied, use: cms.vdouble( 3.5, 3.5, 7.0 ), + # regionalize + useRelativeRegionalCoordinates = cms.bool(False), + trackRegionMode = cms.string("atCalo"), + regions = cms.VPSet( + cms.PSet( + etaBoundaries = cms.vdouble(-2.5,-1.5), + phiSlices = cms.uint32(1), + etaExtra = cms.double(0.3), + phiExtra = cms.double(0.0) + ), + cms.PSet( + etaBoundaries = cms.vdouble(1.5,2.5), + phiSlices = cms.uint32(1), + etaExtra = cms.double(0.3), + phiExtra = cms.double(0.0) + ), + ), +) +l1pfProducerHGCal.linking.trackCaloDR = 0.1 # more precise cluster positions +l1pfProducerHGCal.linking.ecalPriority = False +l1pfProducerHGCalNoTK = l1pfProducerHGCal.clone(regions = cms.VPSet( + cms.PSet( + etaBoundaries = cms.vdouble(-3,-2.5), + phiSlices = cms.uint32(1), + etaExtra = cms.double(0.3), + phiExtra = cms.double(0.0) + ), + cms.PSet( + etaBoundaries = cms.vdouble(2.5,3), + phiSlices = cms.uint32(1), + etaExtra = cms.double(0.3), + phiExtra = cms.double(0.0) + ), +)) + +l1ParticleFlow_pf_hgcal_Task = cms.Task( + pfTracksFromL1TracksHGCal , + l1pfProducerHGCal , + l1pfProducerHGCalNoTK +) +l1ParticleFlow_pf_hgcal = cms.Sequence(l1ParticleFlow_pf_hgcal_Task) + + + +# PF in HF +l1pfProducerHF = l1pfProducer.clone( + # inputs + tracks = cms.InputTag(''), # no tracks + emClusters = [ ], + hadClusters = [ cms.InputTag('pfClustersFromCombinedCaloHF:calibrated') ], + hadPtCut = 15, + # not really useful, but for consistency + puppiDrMin = 0.1, + puppiPtMax = 100., + vtxAlgo = "external", + vtxFormat = cms.string("TkPrimaryVertex"), + vtxCollection = cms.InputTag("L1TkPrimaryVertex",""), + # puppi tuning + puAlgo = "LinearizedPuppi", + puppiEtaCuts = cms.vdouble( 5.5 ), # one bin + puppiPtCuts = cms.vdouble( 10. ), + puppiPtCutsPhotons = cms.vdouble( 10. ), # not used (no photons in HF) + puppiPtSlopes = cms.vdouble( 0.25), + puppiPtSlopesPhotons = cms.vdouble( 0.25), # not used (no photons in HF) + puppiPtZeros = cms.vdouble( 14. ), # ballpark pT from PU + puppiPtZerosPhotons = cms.vdouble( 14. ), # not used (no photons in HF) + puppiAlphaSlopes = cms.vdouble( 0.6 ), + puppiAlphaSlopesPhotons = cms.vdouble( 0.6 ), # not used (no photons in HF) + puppiAlphaZeros = cms.vdouble( 9.0 ), + puppiAlphaZerosPhotons = cms.vdouble( 9.0 ), # not used (no photons in HF) + puppiAlphaCrops = cms.vdouble( 4 ), + puppiAlphaCropsPhotons = cms.vdouble( 4 ), # not used (no photons in HF) + puppiPriors = cms.vdouble( 6.0 ), + puppiPriorsPhotons = cms.vdouble( 6.0 ), # not used (no photons in HF) + # regionalize + useRelativeRegionalCoordinates = cms.bool(False), + trackRegionMode = cms.string("atCalo"), + regions = cms.VPSet( + cms.PSet( + etaBoundaries = cms.vdouble(-5.5,-3), + phiSlices = cms.uint32(1), + etaExtra = cms.double(0.0), + phiExtra = cms.double(0.0) + ), + cms.PSet( + etaBoundaries = cms.vdouble(3,5.5), + phiSlices = cms.uint32(1), + etaExtra = cms.double(0.0), + phiExtra = cms.double(0.0) + ), + ) +) +l1ParticleFlow_pf_hf_Task = cms.Task( + l1pfProducerHF +) +l1ParticleFlow_pf_hf = cms.Sequence(l1ParticleFlow_pf_hf_Task) + + +# PF in the TSA Region +l1pfProducerTSA = l1pfProducerBarrel.clone( + trackRegionMode = cms.string("atVertex"), + regions = cms.VPSet( + cms.PSet( + etaBoundaries = cms.vdouble(-3,3), + phiSlices = cms.uint32(18), + etaExtra = cms.double(0.0), + phiExtra = cms.double(0.0) + ), + ), +) +l1ParticleFlow_pf_tsa = cms.Sequence( + pfTracksFromL1TracksBarrel + + l1pfProducerTSA +) + +# Merging all outputs +l1pfCandidates = cms.EDProducer("L1TPFCandMultiMerger", + pfProducers = cms.VInputTag( + cms.InputTag("l1pfProducerBarrel"), + cms.InputTag("l1pfProducerHGCal"), + cms.InputTag("l1pfProducerHGCalNoTK"), + cms.InputTag("l1pfProducerHF") + ), + labelsToMerge = cms.vstring("Calo", "TK", "TKVtx", "PF", "Puppi"), +) + +l1ParticleFlow_proper = cms.Sequence( + l1ParticleFlow_calo + + l1ParticleFlow_pf_barrel + + l1ParticleFlow_pf_hgcal + + l1ParticleFlow_pf_hf + + l1pfCandidates +) + +l1ParticleFlow = cms.Sequence(l1ParticleFlow_proper) + +l1ParticleFlowTask = cms.Task( + l1ParticleFlow_calo_Task, + l1ParticleFlow_pf_barrel_Task, + l1ParticleFlow_pf_hgcal_Task, + l1ParticleFlow_pf_hf_Task, + cms.Task(l1pfCandidates) +) diff --git a/L1Trigger/Phase2L1ParticleFlow/python/l1pfJetMet_cff.py b/L1Trigger/Phase2L1ParticleFlow/python/l1pfJetMet_cff.py new file mode 100644 index 0000000000000..86a99ba09f648 --- /dev/null +++ b/L1Trigger/Phase2L1ParticleFlow/python/l1pfJetMet_cff.py @@ -0,0 +1,38 @@ +import FWCore.ParameterSet.Config as cms + +from RecoMET.METProducers.PFMET_cfi import pfMet as _pfMet +_pfMet.calculateSignificance = False +l1PFMetCalo = _pfMet.clone(src = "l1pfCandidates:Calo") +l1PFMetPF = _pfMet.clone(src = "l1pfCandidates:PF") +l1PFMetPuppi = _pfMet.clone(src = "l1pfCandidates:Puppi") + +l1PFMets = cms.Sequence(l1PFMetCalo + l1PFMetPF + l1PFMetPuppi) + +from RecoJets.JetProducers.ak4PFJets_cfi import ak4PFJets as _ak4PFJets +_ak4PFJets.doAreaFastjet = False +ak4PFL1Calo = _ak4PFJets.clone(src = 'l1pfCandidates:Calo') +ak4PFL1PF = _ak4PFJets.clone(src = 'l1pfCandidates:PF') +ak4PFL1Puppi = _ak4PFJets.clone(src = 'l1pfCandidates:Puppi') + +_correctedJets = cms.EDProducer("L1TCorrectedPFJetProducer", + jets = cms.InputTag("_tag_"), + correctorFile = cms.string("L1Trigger/Phase2L1ParticleFlow/data/jecs/jecs.PU200.root"), + correctorDir = cms.string("_dir_"), + copyDaughters = cms.bool(False) +) +# Using phase2_hgcalV10 to customize the config for all 106X samples, since there's no other modifier for it +from Configuration.Eras.Modifier_phase2_hgcalV10_cff import phase2_hgcalV10 +phase2_hgcalV10.toModify(_correctedJets, correctorFile = "L1Trigger/Phase2L1ParticleFlow/data/jecs/jecs.PU200_106X.root") +from Configuration.Eras.Modifier_phase2_hgcalV11_cff import phase2_hgcalV11 +phase2_hgcalV11.toModify(_correctedJets, correctorFile = "L1Trigger/Phase2L1ParticleFlow/data/jecs/jecs.PU200_110X.root") + +ak4PFL1CaloCorrected = _correctedJets.clone(jets = 'ak4PFL1Calo', correctorDir = 'L1CaloJets') +ak4PFL1PFCorrected = _correctedJets.clone(jets = 'ak4PFL1PF', correctorDir = 'L1PFJets') +ak4PFL1PuppiCorrected = _correctedJets.clone(jets = 'ak4PFL1Puppi', correctorDir = 'L1PuppiJets') + +l1PFJets = cms.Sequence( + ak4PFL1Calo + ak4PFL1PF + ak4PFL1Puppi + + ak4PFL1CaloCorrected + ak4PFL1PFCorrected + ak4PFL1PuppiCorrected +) + + diff --git a/L1Trigger/Phase2L1ParticleFlow/python/l1pfProducer_cfi.py b/L1Trigger/Phase2L1ParticleFlow/python/l1pfProducer_cfi.py new file mode 100644 index 0000000000000..08941eb2bc018 --- /dev/null +++ b/L1Trigger/Phase2L1ParticleFlow/python/l1pfProducer_cfi.py @@ -0,0 +1,72 @@ +import FWCore.ParameterSet.Config as cms + +from math import sqrt + +l1pfProducer = cms.EDProducer("L1TPFProducer", + tracks = cms.InputTag('pfTracksFromL1Tracks'), + muons = cms.InputTag('simGmtStage2Digis',), + tkMuons = cms.InputTag('L1TkMuons'), + # type of muons to be used in PF (enable only one at a time) + useStandaloneMuons = cms.bool(True), + useTrackerMuons = cms.bool(False), + emClusters = cms.VInputTag(cms.InputTag('pfClustersFromHGC3DClustersEM'), cms.InputTag('pfClustersFromL1EGClusters')), + hadClusters = cms.VInputTag(cms.InputTag('pfClustersFromCombinedCalo:calibrated')), + emPtCut = cms.double(0.5), + hadPtCut = cms.double(1.0), + trkPtCut = cms.double(2.0), + trkMinStubs = cms.uint32(4), + trkMaxChi2 = cms.double(15), + etaCharged = cms.double(2.5), + puppiDr = cms.double(0.3), + puppiDrMin = cms.double(0.1), + puppiPtMax = cms.double(999), + puppiEtaCuts = cms.vdouble(1.5, 2.5, 3.0, 5.5), + puppiPtCuts = cms.vdouble(0.0, 3.0, 6.0, 8.0), + puppiPtCutsPhotons = cms.vdouble(0.0, 3.0, 6.0, 8.0), + puppiUsingBareTracks = cms.bool(False), # use PF + vtxRes = cms.double(0.333), + vtxAlgo = cms.string("TP"), + vtxAdaptiveCut = cms.bool(True), + pfAlgo = cms.string("PFAlgo3"), + puAlgo = cms.string("Puppi"), + linking = cms.PSet( + # track -> mu linking configurables + trackMuDR = cms.double(0.2), # accounts for poor resolution of standalone, and missing propagations + trackMuMatch = cms.string("boxBestByPtRatio"), # also drBestByPtRatio + # track -> em linking configurables + trackEmDR = cms.double(0.04), # 1 Ecal crystal size is 0.02, and ~2 cm in HGCal is ~0.007 + trackEmUseAlsoTrackSigma = cms.bool(True), # also use the track uncertainty for electron linking + trackEmMayUseCaloMomenta = cms.bool(True), # use calo momenta for 1 emcalo to 1 track match electrons + # em -> calo linking configurables + emCaloDR = cms.double(0.10), # 1 Hcal tower size is ~0.09 + caloEmPtMinFrac = cms.double(0.5), # Calo object must have an EM Et at least half of that of the EM cluster to allow linking + emCaloUseAlsoCaloSigma = cms.bool(True), # also use the track uncertainty for electron linking + emCaloSubtractionPtSlope = cms.double(1.2), # e/pi ratio of HCal + # track -> calo linking configurables + trackCaloLinkMetric = cms.string("bestByDRPt"), + #trackCaloLinkMetric = cms.string("bestByDR"), + trackCaloDR = cms.double(0.15), + trackCaloNSigmaLow = cms.double(2.0), + trackCaloNSigmaHigh = cms.double(sqrt(1.0)), # sqrt(x) since in the hardware we use sigma squared + useTrackCaloSigma = cms.bool(True), # take the uncertainty on the calo cluster from the track, for linking purposes + sumTkCaloErr2 = cms.bool(True), # add up track calo errors in quadrature instead of linearly + rescaleTracks = cms.bool(False), # if tracks exceed the calo, rescale the track momenta + useCaloTrkWeightedAverage = cms.bool(False), # do the weighted average of track & calo pTs if it's a 1-1 link + # how to deal with unlinked tracks + maxInvisiblePt = cms.double(10.0), # max allowed pt of a track with no calo energy + tightTrackMinStubs = cms.uint32(6), + tightTrackMaxChi2 = cms.double(50), + tightTrackMaxInvisiblePt = cms.double(20), + # how to deal with neutrals + ecalPriority = cms.bool(True), # take first ecal energy when making neutrals + # other features not turned on: reliniking of neutrals to track-matched calo clusters with track excess + caloReLink = cms.bool(False), + caloReLinkDR = cms.double(0.3), + caloReLinkThreshold = cms.double(0.5), + # other features not turned on: matching too high pt tracks to calo but rescaling track pt (not implemented in PFAlgo3) + rescaleUnmatchedTrack = cms.bool(False), + ), + debug = cms.untracked.int32(0), +) + + diff --git a/L1Trigger/Phase2L1ParticleFlow/python/pfClustersFromCombinedCalo_cfi.py b/L1Trigger/Phase2L1ParticleFlow/python/pfClustersFromCombinedCalo_cfi.py new file mode 100644 index 0000000000000..1e3c3f2bc8612 --- /dev/null +++ b/L1Trigger/Phase2L1ParticleFlow/python/pfClustersFromCombinedCalo_cfi.py @@ -0,0 +1,57 @@ +import FWCore.ParameterSet.Config as cms + +pfClustersFromCombinedCalo = cms.EDProducer("L1TPFCaloProducer", + ecalCandidates = cms.VInputTag(cms.InputTag('pfClustersFromL1EGClusters')), # using EM from towers in HGC, no longer reading also 'pfClustersFromHGC3DClustersEM' + hcalCandidates = cms.VInputTag(), + hcalDigis = cms.VInputTag(cms.InputTag('simHcalTriggerPrimitiveDigis')), + hcalDigisBarrel = cms.bool(False), + hcalDigisHF = cms.bool(True), + phase2barrelCaloTowers = cms.VInputTag(cms.InputTag("L1EGammaClusterEmuProducer",)), + hcalHGCTowers = cms.VInputTag(cms.InputTag("hgcalTowerProducer:HGCalTowerProcessor") ), + hcalHGCTowersHadOnly = cms.bool(False), # take also EM part from towers + emCorrector = cms.string(""), # no need to correct further + hcCorrector = cms.string(""), # no correction to hcal-only in the default scheme + hadCorrector = cms.string("L1Trigger/Phase2L1ParticleFlow/data/hadcorr.root"), # correction on linked cluster + hadCorrectorEmfMax = cms.double(-1.0), + ecalClusterer = cms.PSet( + grid = cms.string("phase2"), + zsEt = cms.double(0.4), + seedEt = cms.double(0.5), + minClusterEt = cms.double(0.5), + energyWeightedPosition = cms.bool(True), + energyShareAlgo = cms.string("fractions"), + ), + hcalClusterer = cms.PSet( + grid = cms.string("phase2"), + zsEt = cms.double(0.4), + seedEt = cms.double(0.5), + minClusterEt = cms.double(0.8), + energyWeightedPosition = cms.bool(True), + energyShareAlgo = cms.string("fractions"), + ), + linker = cms.PSet( + algo = cms.string("flat"), + + zsEt = cms.double(0.0), ## Ecal and Hcal are already ZS-ed above + seedEt = cms.double(1.0), + minClusterEt = cms.double(1.0), + energyWeightedPosition = cms.bool(True), + energyShareAlgo = cms.string("fractions"), + + grid = cms.string("phase2"), + hoeCut = cms.double(0.1), + minPhotonEt = cms.double(1.0), + minHadronRawEt = cms.double(1.0), + minHadronEt = cms.double(1.0), + noEmInHGC = cms.bool(False) + ), + resol = cms.PSet( + etaBins = cms.vdouble( 1.300, 1.700, 2.800, 3.200, 4.000, 5.000), + offset = cms.vdouble( 2.572, 1.759, 1.858, 2.407, 1.185, 1.658), + scale = cms.vdouble( 0.132, 0.240, 0.090, 0.138, 0.143, 0.147), + kind = cms.string('calo'), + ), + debug = cms.untracked.int32(0), +) + + diff --git a/L1Trigger/Phase2L1ParticleFlow/python/pfClustersFromHGC3DClustersEM_cfi.py b/L1Trigger/Phase2L1ParticleFlow/python/pfClustersFromHGC3DClustersEM_cfi.py new file mode 100644 index 0000000000000..aa13bd5ee3453 --- /dev/null +++ b/L1Trigger/Phase2L1ParticleFlow/python/pfClustersFromHGC3DClustersEM_cfi.py @@ -0,0 +1,38 @@ +import FWCore.ParameterSet.Config as cms + +import L1Trigger.Phase2L1ParticleFlow.pfClustersFromHGC3DClusters_cfi + +pfClustersFromHGC3DClustersEM = L1Trigger.Phase2L1ParticleFlow.pfClustersFromHGC3DClusters_cfi.pfClustersFromHGC3DClusters.clone( + emOnly = cms.bool(True), + etMin = cms.double(0.0), + corrector = cms.string("L1Trigger/Phase2L1ParticleFlow/data/emcorr_hgc.root"), + preEmId = cms.string(""), + resol = cms.PSet( + etaBins = cms.vdouble( 1.900, 2.200, 2.500, 2.800, 2.950), + offset = cms.vdouble( 0.566, 0.557, 0.456, 0.470, 0.324), + scale = cms.vdouble( 0.030, 0.024, 0.024, 0.023, 0.042), + kind = cms.string('calo'), + ) +) + + +from Configuration.Eras.Modifier_phase2_hgcalV10_cff import phase2_hgcalV10 +from Configuration.Eras.Modifier_phase2_hgcalV11_cff import phase2_hgcalV11 +phase2_hgcalV10.toModify(pfClustersFromHGC3DClustersEM, + corrector = "L1Trigger/Phase2L1ParticleFlow/data/emcorr_hgc_106X.root", + resol = cms.PSet( + etaBins = cms.vdouble( 1.700, 1.900, 2.200, 2.500, 2.800, 2.900), + offset = cms.vdouble( 2.579, 2.176, 1.678, 0.911, 0.672, -2.292), + scale = cms.vdouble( 0.048, 0.026, 0.012, 0.016, 0.022, 0.538), + kind = cms.string('calo') + ), +) +phase2_hgcalV11.toModify(pfClustersFromHGC3DClustersEM, + corrector = "L1Trigger/Phase2L1ParticleFlow/data/emcorr_hgc_110X.root", + resol = cms.PSet( + etaBins = cms.vdouble( 1.700, 1.900, 2.200, 2.500, 2.800, 2.900), + offset = cms.vdouble( 2.581, 2.289, 1.674, 0.927, 0.604, -2.377), + scale = cms.vdouble( 0.046, 0.025, 0.016, 0.017, 0.023, 0.500), + kind = cms.string('calo') + ), +) diff --git a/L1Trigger/Phase2L1ParticleFlow/python/pfClustersFromHGC3DClusters_cfi.py b/L1Trigger/Phase2L1ParticleFlow/python/pfClustersFromHGC3DClusters_cfi.py new file mode 100644 index 0000000000000..81fa6edf5dd30 --- /dev/null +++ b/L1Trigger/Phase2L1ParticleFlow/python/pfClustersFromHGC3DClusters_cfi.py @@ -0,0 +1,65 @@ +import FWCore.ParameterSet.Config as cms + +pfClustersFromHGC3DClusters = cms.EDProducer("PFClusterProducerFromHGC3DClusters", + src = cms.InputTag("hgcalBackEndLayer2Producer","HGCalBackendLayer2Processor3DClustering"), + corrector = cms.string("L1Trigger/Phase2L1ParticleFlow/data/hadcorr_HGCal3D_TC.root"), + correctorEmfMax = cms.double(1.125), + preEmId = cms.string("hOverE < 0.3 && hOverE >= 0"), + emVsPionID = cms.PSet( + isPUFilter = cms.bool(False), + preselection = cms.string(""), + method = cms.string("BDT"), # "" to be disabled, "BDT" to be enabled + variables = cms.VPSet( + cms.PSet(name = cms.string("fabs(eta)"), value = cms.string("abs(eta())")), + cms.PSet(name = cms.string("coreShowerLength"), value = cms.string("coreShowerLength()")), + cms.PSet(name = cms.string("maxLayer"), value = cms.string("maxLayer()")), + cms.PSet(name = cms.string("hOverE"), value = cms.string("hOverE()")), + cms.PSet(name = cms.string("sigmaZZ"), value = cms.string("sigmaZZ()")), + ), + weightsFile = cms.string("L1Trigger/Phase2L1ParticleFlow/data/hgcal_egID/Photon_vs_Pion_BDTweights.xml.gz"), + wp = cms.string("0.01") + ), + emVsPUID = cms.PSet( + isPUFilter = cms.bool(True), + preselection = cms.string(""), + method = cms.string("BDT"), # "" to be disabled, "BDT" to be enabled + variables = cms.VPSet( + cms.PSet(name = cms.string("fabs(eta)"), value = cms.string("abs(eta())")), + cms.PSet(name = cms.string("coreShowerLength"), value = cms.string("coreShowerLength()")), + cms.PSet(name = cms.string("maxLayer"), value = cms.string("maxLayer()")), + cms.PSet(name = cms.string("sigmaPhiPhiTot"), value = cms.string("sigmaPhiPhiTot()")), + ), + weightsFile = cms.string("L1Trigger/Phase2L1ParticleFlow/data/hgcal_egID/Photon_Pion_vs_Neutrino_BDTweights.xml.gz"), + wp = cms.string("-0.02") + ), + emOnly = cms.bool(False), + etMin = cms.double(1.0), + resol = cms.PSet( + etaBins = cms.vdouble( 1.900, 2.200, 2.500, 2.800, 2.950), + offset = cms.vdouble( 2.593, 3.089, 2.879, 2.664, 2.947), + scale = cms.vdouble( 0.120, 0.098, 0.099, 0.098, 0.124), + kind = cms.string('calo') + ), +) + + +from Configuration.Eras.Modifier_phase2_hgcalV10_cff import phase2_hgcalV10 +from Configuration.Eras.Modifier_phase2_hgcalV11_cff import phase2_hgcalV11 +phase2_hgcalV10.toModify(pfClustersFromHGC3DClusters, + corrector = "L1Trigger/Phase2L1ParticleFlow/data/hadcorr_HGCal3D_TC_106X.root", + resol = cms.PSet( + etaBins = cms.vdouble( 1.700, 1.900, 2.200, 2.500, 2.800, 2.900), + offset = cms.vdouble(-0.819, 0.900, 2.032, 2.841, 2.865, 1.237), + scale = cms.vdouble( 0.320, 0.225, 0.156, 0.108, 0.119, 0.338), + kind = cms.string('calo') + ), +) +phase2_hgcalV11.toModify(pfClustersFromHGC3DClusters, + corrector = "L1Trigger/Phase2L1ParticleFlow/data/hadcorr_HGCal3D_TC_110X.root", + resol = cms.PSet( + etaBins = cms.vdouble( 1.700, 1.900, 2.200, 2.500, 2.800, 2.900), + offset = cms.vdouble( 1.413, 1.631, 2.366, 2.768, 2.908, 1.434), + scale = cms.vdouble( 0.169, 0.155, 0.132, 0.114, 0.137, 0.338), + kind = cms.string('calo') + ), +) diff --git a/L1Trigger/Phase2L1ParticleFlow/python/pfClustersFromL1EGClusters_cfi.py b/L1Trigger/Phase2L1ParticleFlow/python/pfClustersFromL1EGClusters_cfi.py new file mode 100644 index 0000000000000..ff4e72aa7ec17 --- /dev/null +++ b/L1Trigger/Phase2L1ParticleFlow/python/pfClustersFromL1EGClusters_cfi.py @@ -0,0 +1,37 @@ +import FWCore.ParameterSet.Config as cms + +pfClustersFromL1EGClusters = cms.EDProducer("PFClusterProducerFromL1EGClusters", + src = cms.InputTag("L1EGammaClusterEmuProducer",), + etMin = cms.double(0.5), + corrector = cms.string("L1Trigger/Phase2L1ParticleFlow/data/emcorr_barrel.root"), + resol = cms.PSet( + etaBins = cms.vdouble( 0.700, 1.200, 1.600), + offset = cms.vdouble( 0.873, 1.081, 1.563), + scale = cms.vdouble( 0.011, 0.015, 0.012), + kind = cms.string('calo'), + ) +) + +# use phase2_hgcalV10 to customize for 106X L1TDR MC even in the barrel, since there's no other modifier for it +from Configuration.Eras.Modifier_phase2_hgcalV10_cff import phase2_hgcalV10 +from Configuration.Eras.Modifier_phase2_hgcalV11_cff import phase2_hgcalV11 +phase2_hgcalV10.toModify(pfClustersFromL1EGClusters, + corrector = "", # In this setup, TP's are already calibrated correctly :-) + # L1Trigger/Phase2L1ParticleFlow/data/emcorr_barrel_106X.root", + resol = cms.PSet( + etaBins = cms.vdouble( 0.700, 1.200, 1.600), + offset = cms.vdouble( 0.946, 0.948, 1.171), + scale = cms.vdouble( 0.011, 0.018, 0.019), + kind = cms.string('calo') + ) +) +phase2_hgcalV11.toModify(pfClustersFromL1EGClusters, + corrector = "", # In this setup, TP's are already calibrated correctly :-) + # L1Trigger/Phase2L1ParticleFlow/data/emcorr_barrel_110X.root", + resol = cms.PSet( + etaBins = cms.vdouble( 0.700, 1.200, 1.600), + offset = cms.vdouble( 0.838, 0.924, 1.101), + scale = cms.vdouble( 0.012, 0.017, 0.018), + kind = cms.string('calo') + ) +) diff --git a/L1Trigger/Phase2L1ParticleFlow/python/pfTracksFromL1Tracks_cfi.py b/L1Trigger/Phase2L1ParticleFlow/python/pfTracksFromL1Tracks_cfi.py new file mode 100644 index 0000000000000..93f8ddb758aed --- /dev/null +++ b/L1Trigger/Phase2L1ParticleFlow/python/pfTracksFromL1Tracks_cfi.py @@ -0,0 +1,22 @@ +import FWCore.ParameterSet.Config as cms + +pfTracksFromL1Tracks = cms.EDProducer("PFTrackProducerFromL1Tracks", + L1TrackTag = cms.InputTag("TTTracksFromTrackletEmulation", "Level1TTTracks"), + nParam = cms.uint32(4), + resolCalo = cms.PSet( + etaBins = cms.vdouble( 1.300, 1.700, 2.800, 3.200, 4.000, 5.000), + offset = cms.vdouble( 2.688, 1.382, 2.096, 1.022, 0.757, 0.185), + scale = cms.vdouble( 0.154, 0.341, 0.105, 0.255, 0.208, 0.306), + ptMin = cms.vdouble( 5.000, 5.000, 5.000, 5.000, 5.000, 5.000), + ptMax = cms.vdouble(999999, 999999, 999999, 999999, 999999, 999999), + kind = cms.string('calo'), + ), + resolTrack = cms.PSet( + etaBins = cms.vdouble( 0.800, 1.200, 1.500, 2.000, 2.500), + offset = cms.vdouble( 0.007, 0.009, 0.011, 0.015, 0.025), + scale = cms.vdouble( 0.275, 0.404, 0.512, 0.480, 1.132), + kind = cms.string('track'), + ) + +) + diff --git a/L1Trigger/Phase2L1ParticleFlow/src/BitwisePFAlgo.cc b/L1Trigger/Phase2L1ParticleFlow/src/BitwisePFAlgo.cc new file mode 100644 index 0000000000000..6de0a21492a89 --- /dev/null +++ b/L1Trigger/Phase2L1ParticleFlow/src/BitwisePFAlgo.cc @@ -0,0 +1,204 @@ +#include "L1Trigger/Phase2L1ParticleFlow/interface/BitwisePFAlgo.h" +#include "FWCore/Utilities/interface/Exception.h" + +//#define REG_HGCal +#include "ref/pfalgo2hgc_ref.h" +#include "ref/pfalgo3_ref.h" +#include "utils/DiscretePF2Firmware.h" +#include "utils/Firmware2DiscretePF.h" + +using namespace l1tpf_impl; + +BitwisePFAlgo::BitwisePFAlgo(const edm::ParameterSet &iConfig) : PFAlgoBase(iConfig), config_(nullptr) { + const edm::ParameterSet &bitwiseConfig = iConfig.getParameter("bitwiseConfig"); + const std::string &algo = iConfig.getParameter("bitwiseAlgo"); + debug_ = iConfig.getUntrackedParameter("debugBitwisePFAlgo", iConfig.getUntrackedParameter("debug", 0)); + if (algo == "pfalgo3") { + algo_ = algo3; + config_ = new pfalgo3_config(bitwiseConfig.getParameter("NTRACK"), + bitwiseConfig.getParameter("NEMCALO"), + bitwiseConfig.getParameter("NCALO"), + bitwiseConfig.getParameter("NMU"), + bitwiseConfig.getParameter("NPHOTON"), + bitwiseConfig.getParameter("NSELCALO"), + bitwiseConfig.getParameter("NALLNEUTRAL"), + bitwiseConfig.getParameter("DR2MAX_TK_MU"), + bitwiseConfig.getParameter("DR2MAX_TK_EM"), + bitwiseConfig.getParameter("DR2MAX_EM_CALO"), + bitwiseConfig.getParameter("DR2MAX_TK_CALO"), + bitwiseConfig.getParameter("TK_MAXINVPT_LOOSE"), + bitwiseConfig.getParameter("TK_MAXINVPT_TIGHT")); + pfalgo3_ref_set_debug(debug_); + } else if (algo == "pfalgo2hgc") { + algo_ = algo2hgc; + config_ = new pfalgo_config(bitwiseConfig.getParameter("NTRACK"), + bitwiseConfig.getParameter("NCALO"), + bitwiseConfig.getParameter("NMU"), + bitwiseConfig.getParameter("NSELCALO"), + bitwiseConfig.getParameter("DR2MAX_TK_MU"), + bitwiseConfig.getParameter("DR2MAX_TK_CALO"), + bitwiseConfig.getParameter("TK_MAXINVPT_LOOSE"), + bitwiseConfig.getParameter("TK_MAXINVPT_TIGHT")); + pfalgo2hgc_ref_set_debug(debug_); + } else { + throw cms::Exception("Configuration", "Unsupported bitwiseAlgo " + algo); + } +} + +BitwisePFAlgo::~BitwisePFAlgo() { + switch (algo_) { + case algo3: + delete (static_cast(config_)); + break; + default: + delete config_; + } + config_ = nullptr; +} + +void BitwisePFAlgo::runPF(Region &r) const { + initRegion(r); + + std::unique_ptr calo(new HadCaloObj[config_->nCALO]); + std::unique_ptr track(new TkObj[config_->nTRACK]); + std::unique_ptr mu(new MuObj[config_->nMU]); + std::unique_ptr outch(new PFChargedObj[config_->nTRACK]); + std::unique_ptr outne(new PFNeutralObj[config_->nSELCALO]); + std::unique_ptr outmu(new PFChargedObj[config_->nMU]); + + dpf2fw::convert(config_->nTRACK, r.track, track.get()); + dpf2fw::convert(config_->nCALO, r.calo, calo.get()); + dpf2fw::convert(config_->nMU, r.muon, mu.get()); + + if (debug_) { + printf( + "BitwisePF\nBitwisePF region eta [ %+5.2f , %+5.2f ], phi [ %+5.2f , %+5.2f ], fiducial eta [ %+5.2f , %+5.2f " + "], phi [ %+5.2f , %+5.2f ], algo = %d\n", + r.etaMin - r.etaExtra, + r.etaMax + r.etaExtra, + r.phiCenter - r.phiHalfWidth - r.phiExtra, + r.phiCenter + r.phiHalfWidth + r.phiExtra, + r.etaMin, + r.etaMax, + r.phiCenter - r.phiHalfWidth, + r.phiCenter + r.phiHalfWidth, + int(algo_)); + printf("BitwisePF \t N(track) %3lu N(em) %3lu N(calo) %3lu N(mu) %3lu\n", + r.track.size(), + r.emcalo.size(), + r.calo.size(), + r.muon.size()); + for (int itk = 0, ntk = r.track.size(); itk < ntk; ++itk) { + const auto &tk = r.track[itk]; + printf( + "BitwisePF \t track %3d: pt %7.2f +- %5.2f vtx eta %+5.2f vtx phi %+5.2f calo eta %+5.2f calo phi %+5.2f " + " fid %1d calo ptErr %7.2f stubs %2d chi2 %7.1f\n", + itk, + tk.floatPt(), + tk.floatPtErr(), + tk.floatVtxEta(), + tk.floatVtxPhi(), + tk.floatEta(), + tk.floatPhi(), + int(r.fiducialLocal(tk.floatEta(), tk.floatPhi())), + tk.floatCaloPtErr(), + int(tk.hwStubs), + tk.hwChi2 * 0.1f); + } + for (int iem = 0, nem = r.emcalo.size(); iem < nem; ++iem) { + const auto &em = r.emcalo[iem]; + printf( + "BitwisePF \t EM %3d: pt %7.2f +- %5.2f vtx eta %+5.2f vtx phi %+5.2f calo eta %+5.2f calo phi %+5.2f " + " fid %1d calo ptErr %7.2f\n", + iem, + em.floatPt(), + em.floatPtErr(), + em.floatEta(), + em.floatPhi(), + em.floatEta(), + em.floatPhi(), + int(r.fiducialLocal(em.floatEta(), em.floatPhi())), + em.floatPtErr()); + } + for (int ic = 0, nc = r.calo.size(); ic < nc; ++ic) { + auto &calo = r.calo[ic]; + printf( + "BitwisePF \t calo %3d: pt %7.2f +- %5.2f vtx eta %+5.2f vtx phi %+5.2f calo eta %+5.2f calo phi %+5.2f " + " fid %1d calo ptErr %7.2f em pt %7.2f \n", + ic, + calo.floatPt(), + calo.floatPtErr(), + calo.floatEta(), + calo.floatPhi(), + calo.floatEta(), + calo.floatPhi(), + int(r.fiducialLocal(calo.floatEta(), calo.floatPhi())), + calo.floatPtErr(), + calo.floatEmPt()); + } + for (int im = 0, nm = r.muon.size(); im < nm; ++im) { + auto &mu = r.muon[im]; + printf( + "BitwisePF \t muon %3d: pt %7.2f vtx eta %+5.2f vtx phi %+5.2f calo eta %+5.2f calo phi %+5.2f " + " fid %1d \n", + im, + mu.floatPt(), + mu.floatEta(), + mu.floatPhi(), + mu.floatEta(), + mu.floatPhi(), + int(r.fiducialLocal(mu.floatEta(), mu.floatPhi()))); + } + } + switch (algo_) { + case algo3: { + pfalgo3_config *config3 = static_cast(config_); + std::unique_ptr emcalo(new EmCaloObj[config3->nEMCALO]); + std::unique_ptr outpho(new PFNeutralObj[config3->nPHOTON]); + + dpf2fw::convert(config3->nEMCALO, r.emcalo, emcalo.get()); + pfalgo3_ref(*config3, + emcalo.get(), + calo.get(), + track.get(), + mu.get(), + outch.get(), + outpho.get(), + outne.get(), + outmu.get()); + + fw2dpf::convert(config3->nTRACK, outch.get(), r.track, r.pf); // FIXME works only with a 1-1 mapping + fw2dpf::convert(config3->nPHOTON, outpho.get(), r.pf); + fw2dpf::convert(config3->nSELCALO, outne.get(), r.pf); + } break; + case algo2hgc: { + pfalgo2hgc_ref(*config_, calo.get(), track.get(), mu.get(), outch.get(), outne.get(), outmu.get()); + fw2dpf::convert(config_->nTRACK, outch.get(), r.track, r.pf); // FIXME works only with a 1-1 mapping + fw2dpf::convert(config_->nSELCALO, outne.get(), r.pf); + } break; + }; + + if (debug_) { + printf("BitwisePF \t Output N(ch) %3u/%3u N(nh) %3u/%3u N(ph) %3u/%u [all/fiducial]\n", + r.nOutput(l1tpf_impl::Region::charged_type, false, false), + r.nOutput(l1tpf_impl::Region::charged_type, false, true), + r.nOutput(l1tpf_impl::Region::neutral_hadron_type, false, false), + r.nOutput(l1tpf_impl::Region::neutral_hadron_type, false, true), + r.nOutput(l1tpf_impl::Region::photon_type, false, false), + r.nOutput(l1tpf_impl::Region::photon_type, false, true)); + for (int ipf = 0, npf = r.pf.size(); ipf < npf; ++ipf) { + const auto &pf = r.pf[ipf]; + printf( + "BitwisePF \t pf %3d: pt %7.2f pid %d vtx eta %+5.2f vtx phi %+5.2f calo eta %+5.2f calo phi %+5.2f " + "fid %1d\n", + ipf, + pf.floatPt(), + int(pf.hwId), + pf.floatVtxEta(), + pf.floatVtxPhi(), + pf.floatEta(), + pf.floatPhi(), + int(r.fiducialLocal(pf.floatEta(), pf.floatPhi()))); + } + } +} diff --git a/L1Trigger/Phase2L1ParticleFlow/src/COEFile.cc b/L1Trigger/Phase2L1ParticleFlow/src/COEFile.cc new file mode 100644 index 0000000000000..b571ec829b8f9 --- /dev/null +++ b/L1Trigger/Phase2L1ParticleFlow/src/COEFile.cc @@ -0,0 +1,127 @@ +#include "L1Trigger/Phase2L1ParticleFlow/interface/COEFile.h" + +using namespace l1tpf_impl; + +COEFile::COEFile(const edm::ParameterSet& iConfig) + : file(nullptr), + coeFileName(iConfig.getUntrackedParameter("coeFileName", "")), + bset_string_(""), + ntracksmax(iConfig.getUntrackedParameter("ntracksmax")), + phiSlices(iConfig.getParameter>("regions")[0].getParameter("phiSlices")), + debug_(iConfig.getUntrackedParameter("debug", 0)) { + file = fopen(coeFileName.c_str(), "w"); + writeHeaderToFile(); + bset_.resize(tracksize); +} + +void COEFile::writeHeaderToFile() { + char depth_width[256]; + sprintf(depth_width, + "; of depth=%i, and width=%i. In this case, values are specified\n", + ntracksmax, + tracksize * phiSlices); + std::vector vheader = {"; Sample memory initialization file for Dual Port Block Memory,\n", + "; v3.0 or later.\n", + "; Board: VCU118\n", + "; tmux: 1\n", + ";\n", + "; This .COE file specifies the contents for a block memory\n", + std::string(depth_width), + "; in binary format.\n", + "memory_initialization_radix=2;\n", + "memory_initialization_vector=\n"}; + for (uint32_t i = 0; i < vheader.size(); ++i) + fprintf(file, vheader[i].c_str()); +} + +void COEFile::writeTracksToFile(const std::vector& regions, bool print) { + PropagatedTrack current_track; + bool has_track = false; + for (unsigned int irow = 0; irow < ntracksmax; irow++) { + for (unsigned int icol = 0; icol < regions.size(); icol++) { + if (regions[icol].track.size() <= irow) + has_track = false; + else + has_track = true; + + if (has_track) { + // select the track that will be converted to a bit string + current_track = regions[icol].track[irow]; + + // convert the values in a PropogatedTrack to a 96-bit track word + for (unsigned int iblock = 0; iblock < track_word_block_sizes.size(); iblock++) { + for (unsigned int ibit = 0; ibit < track_word_block_sizes[iblock]; ibit++) { + int offset = std::accumulate(track_word_block_sizes.begin(), track_word_block_sizes.begin() + iblock, 0); + switch (iblock) { + case 0: + bset_.set(ibit + offset, getBit(current_track.hwPt, ibit)); + break; + case 1: + bset_.set(ibit + offset, current_track.hwCharge); + break; + case 2: + bset_.set(ibit + offset, getBit(current_track.hwVtxPhi, ibit)); + break; + case 3: + bset_.set(ibit + offset, getBit(current_track.hwVtxEta, ibit)); + break; + case 4: + bset_.set(ibit + offset, getBit(current_track.hwZ0, ibit)); + break; + case 5: + bset_.set(ibit + offset, 0); + break; + case 6: + bset_.set(ibit + offset, getBit(current_track.hwChi2, ibit)); + break; + case 7: + bset_.set(ibit + offset, 0); + break; + case 8: + bset_.set(ibit + offset, getBit(current_track.hwStubs, ibit)); + break; + case 9: + bset_.set(ibit + offset, 0); + break; + } + } + } + + // print the track word to the COE file + boost::to_string(bset_, bset_string_); + fprintf(file, "%s", bset_string_.c_str()); + + // print some debugging information + if (debug_ && print && irow == 0 && icol == 0) { + printf("region: eta=[%f,%f] phi=%f+/-%f\n", + regions[icol].etaMin, + regions[icol].etaMax, + regions[icol].phiCenter, + regions[icol].phiHalfWidth); + printf("l1t::PFTrack (pT,eta,phi) [float] = (%f,%f,%f)\n", + current_track.src->p4().Pt(), + current_track.src->p4().Eta(), + current_track.src->p4().Phi()); + printf("l1t::PFTrack (pT,eta,phi) [int] = (%i,%i,%i)\n", + current_track.src->hwPt(), + current_track.src->hwEta(), + current_track.src->hwPhi()); + printf("l1tpf_impl::PropagatedTrack (1/pT,eta,phi) [int,10] = (%i,%i,%i)\n", + current_track.hwPt, + current_track.hwVtxEta, + current_track.hwVtxPhi); + printf("l1tpf_impl::PropagatedTrack (1/pT,eta,phi) [int,2] = (%s,%s,%s)\n", + std::bitset<16>(current_track.hwPt).to_string().c_str(), + std::bitset<32>(current_track.hwVtxEta).to_string().c_str(), + std::bitset<32>(current_track.hwVtxPhi).to_string().c_str()); + printf("bitset = %s\n", bset_string_.c_str()); + } + } else { + bset_.reset(); + boost::to_string(bset_, bset_string_); + fprintf(file, "%s", bset_string_.c_str()); + } + } + fprintf(file, (irow == ntracksmax - 1) ? ";\n" : ",\n"); + } +} diff --git a/L1Trigger/Phase2L1ParticleFlow/src/CaloClusterer.cc b/L1Trigger/Phase2L1ParticleFlow/src/CaloClusterer.cc new file mode 100644 index 0000000000000..165ccbff504cb --- /dev/null +++ b/L1Trigger/Phase2L1ParticleFlow/src/CaloClusterer.cc @@ -0,0 +1,640 @@ +#include "L1Trigger/Phase2L1ParticleFlow/interface/CaloClusterer.h" + +#include + +#include "DataFormats/Math/interface/deltaPhi.h" +#include "DataFormats/Common/interface/RefToPtr.h" +#include "FWCore/ParameterSet/interface/ParameterSet.h" +#include "FWCore/Utilities/interface/Exception.h" + +const float l1tpf_calo::Phase1Grid::phase1_towerEtas_[l1tpf_calo::Phase1Grid::phase1_nEta_] = { + 0, 0.087, 0.174, 0.261, 0.348, 0.435, 0.522, 0.609, 0.696, 0.783, 0.870, 0.957, 1.044, 1.131, + 1.218, 1.305, 1.392, 1.479, 1.566, 1.653, 1.740, 1.830, 1.930, 2.043, 2.172, 2.322, 2.5, 2.650, + 2.853, 3.139, 3.314, 3.489, 3.664, 3.839, 4.013, 4.191, 4.363, 4.538, 4.716, 4.889, 5.191}; +const float l1tpf_calo::Phase2Grid::phase2_towerEtas_[l1tpf_calo::Phase2Grid::phase2_nEta_] = { + 0, 0.087, 0.174, 0.261, 0.348, 0.435, 0.522, 0.609, 0.696, 0.783, 0.870, 0.957, 1.044, 1.131, 1.218, 1.305, + 1.392, 1.479, 1.564, 1.648, 1.732, 1.817, 1.901, 1.986, 2.071, 2.155, 2.240, 2.324, 2.409, 2.493, 2.577, 2.662, + 2.747, 2.831, 2.915, 3.0, 3.139, 3.314, 3.489, 3.664, 3.839, 4.013, 4.191, 4.363, 4.538, 4.716, 4.889, 5.191}; + +l1tpf_calo::Phase1GridBase::Phase1GridBase( + int nEta, int nPhi, int ietaCoarse, int ietaVeryCoarse, const float *towerEtas) + : Grid(2 * ((ietaCoarse - 1) * nPhi + (ietaVeryCoarse - ietaCoarse) * (nPhi / 2) + + (nEta - ietaVeryCoarse + 1) * (nPhi / 4))), + nEta_(nEta), + nPhi_(nPhi), + ietaCoarse_(ietaCoarse), + ietaVeryCoarse_(ietaVeryCoarse), + towerEtas_(towerEtas), + cell_map_(2 * nEta * nPhi, -1) { + int icell = 0; + for (int ie = -nEta_; ie <= nEta_; ++ie) { + int absie = std::abs(ie); + for (int iph = 1; iph <= nPhi_; ++iph) { + if (!valid_ieta_iphi(ie, iph)) + continue; + ieta_[icell] = ie; + iphi_[icell] = iph; + eta_[icell] = (ie > 0 ? 0.5 : -0.5) * (towerEtas_[absie - 1] + towerEtas_[absie]); + etaWidth_[icell] = (towerEtas_[absie] - towerEtas_[absie - 1]); + phiWidth_[icell] = 2 * M_PI / nPhi_; + if (absie >= ietaVeryCoarse_) + phiWidth_[icell] *= 4; + else if (absie >= ietaCoarse_) + phiWidth_[icell] *= 2; + phi_[icell] = (iph - 1) * 2 * M_PI / nPhi_ + 0.5 * phiWidth_[icell]; + if (phi_[icell] > M_PI) + phi_[icell] -= 2 * M_PI; + std::fill(neighbours_[icell].begin(), neighbours_[icell].end(), -1); + cell_map_[(ie + nEta_) + 2 * nEta_ * (iph - 1)] = icell; + icell++; + } + } + assert(unsigned(icell) == ncells_); + // now link the cells + for (icell = 0; icell < int(ncells_); ++icell) { + int ie = ieta_[icell], iph = iphi_[icell]; + int ineigh = 0; + for (int deta = -1; deta <= +1; ++deta) { + for (int dphi = -1; dphi <= +1; ++dphi) { + if (deta == 0 && dphi == 0) + continue; + neighbours_[icell][ineigh++] = imove(ie, iph, deta, dphi); + } + } + } + //// consistency check 1: check that find_cell works + //for (float teta = 0; teta <= 5.0; teta += 0.02) { + // for (float tphi = -M_PI; tphi <= M_PI; tphi += 0.02) { + // find_cell(+teta, tphi); + // find_cell(-teta, tphi); + // } + //} +} + +int l1tpf_calo::Phase1GridBase::find_cell(float eta, float phi) const { + int ieta = + (eta != 0) ? std::distance(towerEtas_, std::lower_bound(towerEtas_, towerEtas_ + nEta_, std::abs(eta))) : 1; + if (ieta == nEta_) + return -1; // outside bounds + assert(ieta > 0 && ieta < nEta_); + if (ieta > nEta_) + ieta = nEta_; + if (eta < 0) + ieta = -ieta; + if (phi > 2 * M_PI) + phi -= 2 * M_PI; + if (phi < 0) + phi += 2 * M_PI; + int iphi = std::floor(phi * nPhi_ / (2 * M_PI)); + if (phi >= 2 * M_PI) + iphi = nPhi_ - 1; // fix corner case due to roundings etc + assert(iphi < nPhi_); + if (std::abs(ieta) >= ietaVeryCoarse_) + iphi -= (iphi % 4); + else if (std::abs(ieta) >= ietaCoarse_) + iphi -= (iphi % 2); + iphi += 1; + //if (!valid_ieta_iphi(ieta,iphi)) { + // printf("Error in finding cell for eta %+7.4f phi %+7.4f, got ieta = %+3d iphi %2d which is not valid\n", + // eta, phi, ieta, iphi); + //} + assert(valid_ieta_iphi(ieta, iphi)); + int icell = ifind_cell(ieta, iphi); + assert(icell != -1); + + //if (std::abs(eta - eta_[icell]) > 0.501*etaWidth_[icell] || std::abs(deltaPhi(phi, phi_[icell])) > 0.501*phiWidth_[icell]) { + // printf("Mismatch in finding cell for eta %+7.4f phi %+7.4f, got ieta = %+3d iphi %2d which has eta %+7.4f +- %.4f phi %+7.4f +- %.4f ; deta = %+7.4f dphi = %+7.4f\n", + // eta, phi, ieta, iphi, eta_[icell], etaWidth_[icell], phi_[icell], phiWidth_[icell], eta - eta_[icell], deltaPhi(phi, phi_[icell])); + //} + //assert(std::abs(eta - eta_[icell]) <= 0.5*etaWidth_[icell]); + //assert(std::abs(deltaPhi(phi, phi_[icell])) <= 0.5*phiWidth_[icell]); + return icell; +} + +int l1tpf_calo::Phase1GridBase::imove(int ieta, int iphi, int deta, int dphi) { + int ie = ieta, iph = iphi; + switch (deta) { + case -1: + ie = (ie == -nEta_ ? 0 : (ie == +1 ? -1 : ie - 1)); + break; + case +1: + ie = (ie == +nEta_ ? 0 : (ie == -1 ? +1 : ie + 1)); + break; + case 0: + break; + default: + assert(false); + }; + if (ie == 0) + return -1; + switch (dphi) { + case -1: + iph = (iph == 1 ? nPhi_ : iph - 1); + break; + case +1: + iph = (iph == nPhi_ ? 1 : iph + 1); + break; + case 0: + break; + default: + assert(false); + }; + if (!valid_ieta_iphi(ie, iph)) + return -1; + int icell = ifind_cell(ie, iph); + assert(!(ie == ieta && iph == iphi)); + assert(icell != -1); + assert(icell != ifind_cell(ieta, iphi)); + return icell; +} + +const l1tpf_calo::Grid *l1tpf_calo::getGrid(const std::string &type) { + static Phase1Grid _phase1Grid; + static Phase2Grid _phase2Grid; + if (type == "phase1") + return &_phase1Grid; + else if (type == "phase2") + return &_phase2Grid; + else + throw cms::Exception("Configuration") << "Unsupported grid type '" << type << "'\n"; +} + +l1tpf_calo::SingleCaloClusterer::SingleCaloClusterer(const edm::ParameterSet &pset) + : grid_(getGrid(pset.getParameter("grid"))), + rawet_(*grid_), + unclustered_(*grid_), + precluster_(*grid_), + clusterIndex_(*grid_), + cellKey_(*grid_), + clusters_(), + nullCluster_(), + zsEt_(pset.getParameter("zsEt")), + seedEt_(pset.getParameter("seedEt")), + minClusterEt_(pset.getParameter("minClusterEt")), + minEtToGrow_(pset.existsAs("minEtToGrow") ? pset.getParameter("minEtToGrow") : -1), + energyWeightedPosition_(pset.getParameter("energyWeightedPosition")) { + std::string energyShareAlgo = pset.getParameter("energyShareAlgo"); + if (energyShareAlgo == "fractions") + energyShareAlgo_ = Fractions; + else if (energyShareAlgo == "none") + energyShareAlgo_ = None; + else if (energyShareAlgo == "greedy") + energyShareAlgo_ = Greedy; + else if (energyShareAlgo == "crude") + energyShareAlgo_ = Crude; + else + throw cms::Exception("Configuration") << "Unsupported energyShareAlgo '" << energyShareAlgo << "'\n"; +} + +l1tpf_calo::SingleCaloClusterer::~SingleCaloClusterer() {} + +void l1tpf_calo::SingleCaloClusterer::clear() { + rawet_.zero(); + clusters_.clear(); + clusterIndex_.fill(-1); +} + +void l1tpf_calo::SingleCaloClusterer::run() { + unsigned int i, ncells = grid_->size(); + + // kill zeros. count non-zeros, for linking later + cellKey_.fill(-1); + int key = 0; + for (i = 0; i < ncells; ++i) { + if (rawet_[i] < zsEt_) { + rawet_[i] = 0; + } else { + cellKey_[i] = key++; + } + } + + precluster_.clear(); + // pre-cluster step 1: at each cell, set the value equal to itself if it's a local maxima, zero otherwise + // can be done in parallel on all cells + for (i = 0; i < ncells; ++i) { + if (rawet_[i] > seedEt_) { + precluster_[i].ptLocalMax = rawet_[i]; + //printf(" candidate precluster pt %7.2f at %4d (ieta %+3d iphi %2d)\n", rawet_[i], i, grid_->ieta(i), grid_->iphi(i)); + for (int ineigh = 0; ineigh <= 3; ++ineigh) { + if (rawet_.neigh(i, ineigh) > rawet_[i]) + precluster_[i].ptLocalMax = 0; + //int ncell = grid_->neighbour(i,ineigh); + //if (ncell == -1) printf(" \t neigh %d is null\n", ineigh); + //else printf(" \t neigh %d at %4d (ieta %+3d iphi %2d) has pt %7.2f: comparison %1d \n", ineigh, ncell, grid_->ieta(ncell), grid_->iphi(ncell), rawet_[ncell], precluster_[i].ptLocalMax > 0); + } + for (int ineigh = 4; ineigh < 8; ++ineigh) { + if (rawet_.neigh(i, ineigh) >= rawet_[i]) + precluster_[i].ptLocalMax = 0; + //int ncell = grid_->neighbour(i,ineigh); + //if (ncell == -1) printf(" \t neigh %d is null\n", ineigh); + //else printf(" \t neigh %d at %4d (ieta %+3d iphi %2d) has pt %7.2f: comparison %1d \n", ineigh, ncell, grid_->ieta(ncell), grid_->iphi(ncell), rawet_[ncell], precluster_[i].ptLocalMax > 0); + } + } + } + // pre-cluster step 2: compute information from neighbouring local max, for energy sharing purposes + for (i = 0; i < ncells; ++i) { + if (precluster_[i].ptLocalMax == 0) { + switch (energyShareAlgo_) { + case Fractions: { + float tot = 0; + for (int ineigh = 0; ineigh < 8; ++ineigh) { + tot += precluster_.neigh(i, ineigh).ptLocalMax; + } + precluster_[i].ptOverNeighLocalMaxSum = tot ? rawet_[i] / tot : 0; + } break; + case None: + precluster_[i].ptOverNeighLocalMaxSum = rawet_[i]; + break; + case Greedy: { + float maxet = 0; + for (int ineigh = 0; ineigh < 8; ++ineigh) { + maxet = std::max(maxet, precluster_.neigh(i, ineigh).ptLocalMax); + } + precluster_[i].ptOverNeighLocalMaxSum = maxet; + } break; + case Crude: { + int number = 0; + for (int ineigh = 0; ineigh < 8; ++ineigh) { + number += (precluster_.neigh(i, ineigh).ptLocalMax > 0); + } + precluster_[i].ptOverNeighLocalMaxSum = (number > 1 ? 0.5 : 1.0) * rawet_[i]; + } break; + } + } + } + + clusterIndex_.fill(-1); + clusters_.clear(); + unclustered_ = rawet_; + // cluster: at each localMax cell, take itself plus the weighted contributions of the neighbours + Cluster cluster; + for (i = 0; i < ncells; ++i) { + if (precluster_[i].ptLocalMax > 0) { + float myet = rawet_[i]; + float tot = myet; + float avg_eta = 0; + float avg_phi = 0; + cluster.clear(); + cluster.constituents.emplace_back(i, 1.0); + for (int ineigh = 0; ineigh < 8; ++ineigh) { + int ineighcell = grid_->neighbour(i, ineigh); + if (ineighcell == -1) + continue; // skip dummy cells + float fracet = 0; + switch (energyShareAlgo_) { + case Fractions: + fracet = myet * precluster_.neigh(i, ineigh).ptOverNeighLocalMaxSum; + break; + case None: + fracet = precluster_.neigh(i, ineigh).ptOverNeighLocalMaxSum; + break; + case Greedy: + fracet = (myet == precluster_.neigh(i, ineigh).ptOverNeighLocalMaxSum ? rawet_.neigh(i, ineigh) : 0); + break; + case Crude: + fracet = precluster_.neigh(i, ineigh).ptOverNeighLocalMaxSum; + break; + } + if (fracet == 0) + continue; + tot += fracet; + cluster.constituents.emplace_back(ineighcell, fracet / rawet_.neigh(i, ineigh)); + if (energyWeightedPosition_) { + avg_eta += fracet * (grid_->eta(ineighcell) - grid_->eta(i)); + avg_phi += fracet * deltaPhi(grid_->phi(ineighcell), grid_->phi(i)); + } + } + if (tot > minClusterEt_) { + cluster.et = tot; + unclustered_[i] = 0; + for (int ineigh = 0; ineigh < 8; ++ineigh) { + int ineighcell = grid_->neighbour(i, ineigh); + if (ineighcell == -1) + continue; // skip dummy cells + unclustered_[ineighcell] = 0; + } + if (energyWeightedPosition_) { + cluster.eta = grid_->eta(i) + avg_eta / tot; + cluster.phi = grid_->phi(i) + avg_phi / tot; + // wrap around phi + if (cluster.phi > M_PI) + cluster.phi -= 2 * M_PI; + if (cluster.phi < -M_PI) + cluster.phi += 2 * M_PI; + } else { + cluster.eta = grid_->eta(i); + cluster.phi = grid_->phi(i); + } + clusterIndex_[i] = clusters_.size(); + clusters_.push_back(cluster); + } + } + } + if (minEtToGrow_ > 0) + grow(); +} + +void l1tpf_calo::SingleCaloClusterer::grow() { + int selneighs[4] = {1, 3, 4, 6}; // -eta, -phi, +phi, +eta + std::vector toreset; + for (Cluster &cluster : clusters_) { + if (cluster.et > minEtToGrow_) { + int i = cluster.constituents.front().first; + for (int side = 0; side < 4; ++side) { + int neigh = grid_->neighbour(i, selneighs[side]); + if (neigh == -1) + continue; + for (int in = 0; in < 8; ++in) { + int n2 = grid_->neighbour(neigh, in); + if (n2 == -1) + continue; + cluster.et += unclustered_[n2]; + if (unclustered_[n2]) { + cluster.constituents.emplace_back(n2, 1.0); + toreset.push_back(n2); + } + } + } + } + } + for (int i : toreset) + unclustered_[i] = 0; +} + +std::unique_ptr l1tpf_calo::SingleCaloClusterer::fetchCells(bool unclusteredOnly, + float ptMin) const { + auto ret = std::make_unique(); + const EtGrid &src = (unclusteredOnly ? unclustered_ : rawet_); + for (unsigned int i = 0, ncells = grid_->size(); i < ncells; ++i) { + if (src[i] <= ptMin) + continue; + if ((unclusteredOnly == false) && (ptMin == 0)) { + assert(cellKey_[i] == int(ret->size())); + } + ret->emplace_back(src[i], grid_->eta(i), grid_->phi(i)); + ret->back().setHwEta(grid_->ieta(i)); + ret->back().setHwPhi(grid_->iphi(i)); + } + return ret; +} + +std::unique_ptr l1tpf_calo::SingleCaloClusterer::fetch(float ptMin) const { + auto ret = std::make_unique(); + for (const Cluster &cluster : clusters_) { + if (cluster.et > ptMin) { + ret->emplace_back(cluster.et, cluster.eta, cluster.phi); + } + } + return ret; +} + +std::unique_ptr l1tpf_calo::SingleCaloClusterer::fetch( + const edm::OrphanHandle &cells, float ptMin) const { + auto ret = std::make_unique(); + for (const Cluster &cluster : clusters_) { + if (cluster.et > ptMin) { + ret->emplace_back(cluster.et, cluster.eta, cluster.phi); + for (auto &pair : cluster.constituents) { + edm::Ptr ref(cells, cellKey_[pair.first]); + ret->back().addConstituent(ref, pair.second); + } + } + } + return ret; +} + +l1tpf_calo::SimpleCaloLinkerBase::SimpleCaloLinkerBase(const edm::ParameterSet &pset, + const SingleCaloClusterer &ecal, + const SingleCaloClusterer &hcal) + : grid_(getGrid(pset.getParameter("grid"))), + ecal_(ecal), + hcal_(hcal), + clusterIndex_(*grid_), + clusters_(), + hoeCut_(pset.getParameter("hoeCut")), + minPhotonEt_(pset.getParameter("minPhotonEt")), + minHadronRawEt_(pset.getParameter("minHadronRawEt")), + minHadronEt_(pset.getParameter("minHadronEt")), + noEmInHGC_(pset.getParameter("noEmInHGC")) { + if (grid_ != &ecal.raw().grid()) + throw cms::Exception("LogicError", "Inconsistent grid between ecal and linker\n"); + if (grid_ != &hcal.raw().grid()) + throw cms::Exception("LogicError", "Inconsistent grid between hcal and linker\n"); +} + +l1tpf_calo::SimpleCaloLinkerBase::~SimpleCaloLinkerBase() {} + +std::unique_ptr l1tpf_calo::SimpleCaloLinkerBase::fetch() const { + edm::OrphanHandle ecal, hcal; + return fetch(ecal, hcal); +} + +std::unique_ptr l1tpf_calo::SimpleCaloLinkerBase::fetch( + const edm::OrphanHandle &ecal, + const edm::OrphanHandle &hcal) const { + bool setRefs = (ecal.isValid() && hcal.isValid()); + auto ret = std::make_unique(); + for (const CombinedCluster &cluster : clusters_) { + if (cluster.et > 0) { + bool photon = (cluster.hcal_et < hoeCut_ * cluster.ecal_et); + if (photon && noEmInHGC_) { + if (std::abs(cluster.eta) > 1.5 && std::abs(cluster.eta) < 3.0) { + continue; + } + } + if (cluster.et > (photon ? minPhotonEt_ : minHadronEt_)) { + ret->emplace_back(cluster.et, + cluster.eta, + cluster.phi, + cluster.ecal_et > 0 ? std::max(cluster.et - cluster.ecal_et, 0.f) / cluster.ecal_et : -1, + photon); + if (setRefs) { + for (auto &pair : cluster.constituents) { + assert(pair.first != 0); + if (pair.first > 0) { // 1+hcal index + ret->back().addConstituent(edm::Ptr(hcal, +pair.first - 1), pair.second); + } else { // -1-ecal index + ret->back().addConstituent(edm::Ptr(ecal, -pair.first + 1), pair.second); + } + } + } + } + } + } + return ret; +} + +l1tpf_calo::SimpleCaloLinker::SimpleCaloLinker(const edm::ParameterSet &pset, + const SingleCaloClusterer &ecal, + const SingleCaloClusterer &hcal) + : SimpleCaloLinkerBase(pset, ecal, hcal), ecalToHCal_(*grid_) {} + +l1tpf_calo::SimpleCaloLinker::~SimpleCaloLinker() {} + +void l1tpf_calo::SimpleCaloLinker::clear() { + clearBase(); + ecalToHCal_.clear(); +} + +void l1tpf_calo::SimpleCaloLinker::run() { + unsigned int i, ncells = grid_->size(); + + const EtGrid &hraw = hcal_.raw(); + const IndexGrid &ecals = ecal_.indexGrid(); + const IndexGrid &hcals = hcal_.indexGrid(); + + // for each ECal cluster, get the corresponding HCal cluster and the sum of the neighbour HCal clusters + ecalToHCal_.clear(); + for (i = 0; i < ncells; ++i) { + if (ecals[i] >= 0) { + if (hcals[i] >= 0) { + ecalToHCal_[i].ptLocalMax = hcal_.cluster(i).et; + } else { + float tot = 0; + for (int ineigh = 0; ineigh < 8; ++ineigh) { + tot += hcal_.cluster(grid_->neighbour(i, ineigh)).et; + } + ecalToHCal_[i].ptOverNeighLocalMaxSum = tot ? ecal_.cluster(i).et / tot : 0; + } + } + } + + clusterIndex_.fill(-1); + clusters_.clear(); + CombinedCluster cluster; + // promote HCal clusters to final clusters + for (i = 0; i < ncells; ++i) { + if (hcals[i] >= 0) { + const Cluster &hcal = hcal_.cluster(i); + cluster.clear(); + cluster.constituents.emplace_back(+i + 1, 1); + if (ecalToHCal_[i].ptLocalMax > 0) { + // direct linking is easy + const Cluster &ecal = ecal_.cluster(i); + if (ecal.et + hcal.et > minHadronRawEt_) { + cluster.ecal_et = ecal.et; + cluster.hcal_et = hcal.et; + cluster.et = cluster.ecal_et + cluster.hcal_et; + float wecal = cluster.ecal_et / cluster.et, whcal = 1.0 - wecal; + cluster.eta = ecal.eta * wecal + hcal.eta * whcal; + cluster.phi = ecal.phi * wecal + hcal.phi * whcal; + // wrap around phi + if (cluster.phi > M_PI) + cluster.phi -= 2 * M_PI; + if (cluster.phi < -M_PI) + cluster.phi += 2 * M_PI; + cluster.constituents.emplace_back(-i - 1, 1); + } + } else { + // sidewas linking is more annonying + float myet = hcal.et; + float etot = 0; + float avg_eta = 0; + float avg_phi = 0; + for (int ineigh = 0; ineigh < 8; ++ineigh) { + int ineighcell = grid_->neighbour(i, ineigh); + if (ineighcell == -1) + continue; // skip dummy cells + float fracet = myet * ecalToHCal_.neigh(i, ineigh).ptOverNeighLocalMaxSum; + if (fracet == 0) + continue; + etot += fracet; + avg_eta += fracet * (grid_->eta(ineighcell) - grid_->eta(i)); + avg_phi += fracet * deltaPhi(grid_->phi(ineighcell), grid_->phi(i)); + cluster.constituents.emplace_back(-i - 1, fracet / ecal_.cluster(ineighcell).et); + } + if (myet + etot > minHadronRawEt_) { + cluster.hcal_et = hcal.et; + cluster.ecal_et = etot; + cluster.et = myet + etot; + cluster.eta = hcal.eta + avg_eta / cluster.et; + cluster.phi = hcal.phi + avg_phi / cluster.et; + // wrap around phi + if (cluster.phi > M_PI) + cluster.phi -= 2 * M_PI; + if (cluster.phi < -M_PI) + cluster.phi += 2 * M_PI; + } + } + if (cluster.et > 0) { + clusterIndex_[i] = clusters_.size(); + clusters_.push_back(cluster); + } + } + } + + // promote Unlinked ECal clusters to final clusters + for (i = 0; i < ncells; ++i) { + if (ecals[i] >= 0 && ecalToHCal_[i].ptLocalMax == 0 && ecalToHCal_[i].ptOverNeighLocalMaxSum == 0) { + cluster.clear(); + const Cluster &ecal = ecal_.cluster(i); + cluster.ecal_et = ecal.et; + cluster.hcal_et = hraw[i]; + cluster.et = cluster.ecal_et + cluster.hcal_et; + cluster.eta = ecal.eta; + cluster.phi = ecal.phi; + cluster.constituents.emplace_back(-i - 1, 1); + clusterIndex_[i] = clusters_.size(); + clusters_.push_back(cluster); + } + } +} + +l1tpf_calo::FlatCaloLinker::FlatCaloLinker(const edm::ParameterSet &pset, + const SingleCaloClusterer &ecal, + const SingleCaloClusterer &hcal) + : SimpleCaloLinkerBase(pset, ecal, hcal), combClusterer_(pset) {} + +l1tpf_calo::FlatCaloLinker::~FlatCaloLinker() {} + +void l1tpf_calo::FlatCaloLinker::clear() { + clearBase(); + combClusterer_.clear(); +} + +void l1tpf_calo::FlatCaloLinker::run() { + combClusterer_.clear(); + + const EtGrid &hraw = hcal_.raw(); + const EtGrid &eraw = ecal_.raw(); + combClusterer_.raw() = eraw; + combClusterer_.raw() += hraw; + + combClusterer_.run(); + clusterIndex_ = combClusterer_.indexGrid(); + const std::vector &clustersSrc = combClusterer_.clusters(); + unsigned int nclust = clustersSrc.size(); + clusters_.resize(nclust); + for (unsigned int ic = 0; ic < nclust; ++ic) { + const Cluster &src = clustersSrc[ic]; + CombinedCluster &dst = clusters_[ic]; + dst.et = src.et; + dst.eta = src.eta; + dst.phi = src.phi; + dst.ecal_et = 0; + dst.hcal_et = 0; + for (auto &pair : src.constituents) { + if (eraw[pair.first]) { + dst.ecal_et += pair.second * eraw[pair.first]; + dst.constituents.emplace_back(-pair.first - 1, pair.second); + } + if (hraw[pair.first]) { + dst.hcal_et += pair.second * hraw[pair.first]; + dst.constituents.emplace_back(+pair.first + 1, pair.second); + } + } + } +} + +l1tpf_calo::SimpleCaloLinkerBase *l1tpf_calo::makeCaloLinker(const edm::ParameterSet &pset, + const SingleCaloClusterer &ecal, + const SingleCaloClusterer &hcal) { + const std::string &algo = pset.getParameter("algo"); + if (algo == "simple") { + return new l1tpf_calo::SimpleCaloLinker(pset, ecal, hcal); + } else if (algo == "flat") { + return new l1tpf_calo::FlatCaloLinker(pset, ecal, hcal); + } else { + throw cms::Exception("Configuration") << "Unsupported linker algo '" << algo << "'\n"; + } +} diff --git a/L1Trigger/Phase2L1ParticleFlow/src/DiscretePFInputsIO.cc b/L1Trigger/Phase2L1ParticleFlow/src/DiscretePFInputsIO.cc new file mode 100644 index 0000000000000..67cc12e16a383 --- /dev/null +++ b/L1Trigger/Phase2L1ParticleFlow/src/DiscretePFInputsIO.cc @@ -0,0 +1 @@ +#include "L1Trigger/Phase2L1ParticleFlow/interface/DiscretePFInputsIO.h" diff --git a/L1Trigger/Phase2L1ParticleFlow/src/HGC3DClusterEgID.cc b/L1Trigger/Phase2L1ParticleFlow/src/HGC3DClusterEgID.cc new file mode 100644 index 0000000000000..b1243a38611b4 --- /dev/null +++ b/L1Trigger/Phase2L1ParticleFlow/src/HGC3DClusterEgID.cc @@ -0,0 +1 @@ +#include "L1Trigger/Phase2L1ParticleFlow/interface/HGC3DClusterEgID.h" diff --git a/L1Trigger/Phase2L1ParticleFlow/src/L1TPFUtils.cc b/L1Trigger/Phase2L1ParticleFlow/src/L1TPFUtils.cc new file mode 100644 index 0000000000000..d0aec72574472 --- /dev/null +++ b/L1Trigger/Phase2L1ParticleFlow/src/L1TPFUtils.cc @@ -0,0 +1,17 @@ +#include "L1Trigger/Phase2L1ParticleFlow/interface/L1TPFUtils.h" + +#include "CommonTools/BaseParticlePropagator/interface/BaseParticlePropagator.h" +#include "CommonTools/BaseParticlePropagator/interface/RawParticle.h" +#include "DataFormats/ParticleFlowReco/interface/PFCluster.h" + +std::pair l1tpf::propagateToCalo(const math::XYZTLorentzVector& iMom, + const math::XYZTLorentzVector& iVtx, + double iCharge, + double iBField) { + BaseParticlePropagator prop = BaseParticlePropagator(RawParticle(iMom, iVtx, iCharge), 0., 0., iBField); + prop.propagateToEcalEntrance(false); + double ecalShowerDepth = reco::PFCluster::getDepthCorrection(prop.particle().momentum().E(), false, false); + math::XYZVector point = math::XYZVector(prop.particle().vertex()) + + math::XYZTLorentzVector(prop.particle().momentum()).Vect().Unit() * ecalShowerDepth; + return std::make_pair(point.eta(), point.phi()); +} diff --git a/L1Trigger/Phase2L1ParticleFlow/src/LinearizedPuppiAlgo.cc b/L1Trigger/Phase2L1ParticleFlow/src/LinearizedPuppiAlgo.cc new file mode 100644 index 0000000000000..96b46a2ec9fbc --- /dev/null +++ b/L1Trigger/Phase2L1ParticleFlow/src/LinearizedPuppiAlgo.cc @@ -0,0 +1,141 @@ +#include "L1Trigger/Phase2L1ParticleFlow/interface/LinearizedPuppiAlgo.h" +#include "DataFormats/L1TParticleFlow/interface/PFCandidate.h" +#include "FWCore/Utilities/interface/Exception.h" +#include "DataFormats/Math/interface/deltaR.h" + +#include "Math/ProbFunc.h" + +namespace { + std::vector vd2vf(const std::vector &vd) { + std::vector ret; + ret.insert(ret.end(), vd.begin(), vd.end()); + return ret; + } +} // namespace + +using namespace l1tpf_impl; + +LinearizedPuppiAlgo::LinearizedPuppiAlgo(const edm::ParameterSet &iConfig) + : PuppiAlgo(iConfig), + puppiPriors_(vd2vf(iConfig.getParameter>("puppiPriors"))), + puppiPriorsPhotons_(vd2vf(iConfig.getParameter>("puppiPriorsPhotons"))), + puppiPtSlopes_(vd2vf(iConfig.getParameter>("puppiPtSlopes"))), + puppiPtSlopesPhotons_(vd2vf(iConfig.getParameter>("puppiPtSlopesPhotons"))), + puppiPtZeros_(vd2vf(iConfig.getParameter>("puppiPtZeros"))), + puppiPtZerosPhotons_(vd2vf(iConfig.getParameter>("puppiPtZerosPhotons"))), + puppiAlphaSlopes_(vd2vf(iConfig.getParameter>("puppiAlphaSlopes"))), + puppiAlphaSlopesPhotons_(vd2vf(iConfig.getParameter>("puppiAlphaSlopesPhotons"))), + puppiAlphaZeros_(vd2vf(iConfig.getParameter>("puppiAlphaZeros"))), + puppiAlphaZerosPhotons_(vd2vf(iConfig.getParameter>("puppiAlphaZerosPhotons"))), + puppiAlphaCrops_(vd2vf(iConfig.getParameter>("puppiAlphaCrops"))), + puppiAlphaCropsPhotons_(vd2vf(iConfig.getParameter>("puppiAlphaCropsPhotons"))) { + if (puppiPriors_.size() != puppiEtaCuts_.size()) + throw cms::Exception("Configuration", "Mismatched lenght for puppiPriors\n"); + if (puppiPtSlopes_.size() != puppiEtaCuts_.size()) + throw cms::Exception("Configuration", "Mismatched lenght for puppiPtSlopes\n"); + if (puppiPtZeros_.size() != puppiEtaCuts_.size()) + throw cms::Exception("Configuration", "Mismatched lenght for puppiPtZeros\n"); + if (puppiAlphaSlopes_.size() != puppiEtaCuts_.size()) + throw cms::Exception("Configuration", "Mismatched lenght for puppiAlphaSlopes\n"); + if (puppiAlphaZeros_.size() != puppiEtaCuts_.size()) + throw cms::Exception("Configuration", "Mismatched lenght for puppiAlphaZeros\n"); + if (puppiAlphaCrops_.size() != puppiEtaCuts_.size()) + throw cms::Exception("Configuration", "Mismatched lenght for puppiAlphaCrops\n"); + if (puppiPriorsPhotons_.size() != puppiEtaCuts_.size()) + throw cms::Exception("Configuration", "Mismatched lenght for puppiPriorsPhotons\n"); + if (puppiPtSlopesPhotons_.size() != puppiEtaCuts_.size()) + throw cms::Exception("Configuration", "Mismatched lenght for puppiPtSlopesPhotons\n"); + if (puppiPtZerosPhotons_.size() != puppiEtaCuts_.size()) + throw cms::Exception("Configuration", "Mismatched lenght for puppiPtZerosPhotons\n"); + if (puppiAlphaSlopesPhotons_.size() != puppiEtaCuts_.size()) + throw cms::Exception("Configuration", "Mismatched lenght for puppiAlphaSlopesPhotons\n"); + if (puppiAlphaZerosPhotons_.size() != puppiEtaCuts_.size()) + throw cms::Exception("Configuration", "Mismatched lenght for puppiAlphaZerosPhotons\n"); + if (puppiAlphaCropsPhotons_.size() != puppiEtaCuts_.size()) + throw cms::Exception("Configuration", "Mismatched lenght for puppiAlphaCropsPhotons\n"); +} + +LinearizedPuppiAlgo::~LinearizedPuppiAlgo() {} + +const std::vector &LinearizedPuppiAlgo::puGlobalNames() const { + static const std::vector names_{}; + return names_; +} +void LinearizedPuppiAlgo::doPUGlobals(const std::vector &rs, float npu, std::vector &globals) const { + globals.clear(); +} +void LinearizedPuppiAlgo::runNeutralsPU(Region &r, float npu, const std::vector &globals) const { + std::vector alphaC, alphaF; + PuppiAlgo::computePuppiAlphas(r, alphaC, alphaF); + computePuppiWeights(r, npu, alphaC, alphaF); + PuppiAlgo::fillPuppi(r); +} + +void LinearizedPuppiAlgo::computePuppiWeights(Region &r, + float npu, + const std::vector &alphaC, + const std::vector &alphaF) const { + if (debug_ && npu > 0) + printf("LinPup\t npu estimate %7.2f --> log(npu/200) = %+6.2f \n", npu, std::log(npu / 200.f)); + for (unsigned int ip = 0, np = r.pf.size(); ip < np; ++ip) { + PFParticle &p = r.pf[ip]; + // charged + if (p.hwId == l1t::PFCandidate::ChargedHadron || p.hwId == l1t::PFCandidate::Electron || + p.hwId == l1t::PFCandidate::Muon) { + p.setPuppiW(p.chargedPV || p.hwId == l1t::PFCandidate::Muon ? 1.0 : 0); + if (debug_ == 2) + printf( + "LinPup\t charged id %1d pt %7.2f eta %+5.2f phi %+5.2f fromPV %1d " + " --> puppi weight %.3f puppi pt %7.2f \n", + p.hwId, + p.floatPt(), + p.floatEta(), + p.floatPhi(), + p.chargedPV, + p.floatPuppiW(), + p.floatPt() * p.floatPuppiW()); + continue; + } + // neutral + float absEta = r.relativeCoordinates ? r.globalAbsEta(p.floatEta()) : std::abs(p.floatEta()); + bool central = absEta < etaCharged_; // FIXME could make a better integer implementation + bool photon = (p.hwId == l1t::PFCandidate::Photon); + // get alpha + float alpha = central ? alphaC[ip] : alphaF[ip]; + alpha = (alpha > 0 ? std::log(alpha) : 0); + // get eta bin + unsigned int ietaBin = 0, lastBin = puppiEtaCuts_.size() - 1; + while (ietaBin < lastBin && absEta > puppiEtaCuts_[ietaBin]) { + ietaBin++; + } + float alphaZero = (photon ? puppiAlphaZerosPhotons_ : puppiAlphaZeros_)[ietaBin]; + float alphaSlope = (photon ? puppiAlphaSlopesPhotons_ : puppiAlphaSlopes_)[ietaBin]; + float alphaCrop = (photon ? puppiAlphaCropsPhotons_ : puppiAlphaCrops_)[ietaBin]; + float x2a = std::min(std::max(alphaSlope * (alpha - alphaZero), -alphaCrop), alphaCrop); + // weight by pT + float ptZero = (photon ? puppiPtZerosPhotons_ : puppiPtZeros_)[ietaBin]; + float ptSlope = (photon ? puppiPtSlopesPhotons_ : puppiPtSlopes_)[ietaBin]; + float x2pt = ptSlope * (p.floatPt() - ptZero); + // weight by prior + float prior = (photon ? puppiPriorsPhotons_ : puppiPriors_)[ietaBin]; + float x2prior = (npu > 0 ? std::log(npu / 200.f) : 0) + prior; + // total + float x2 = x2a + x2pt - x2prior; + p.setPuppiW(1.0 / (1.0 + std::exp(-x2))); + if (debug_ == 1 || debug_ == 2 || debug_ == int(10 + ietaBin)) + printf( + "LinPup\t neutral id %1d pt %7.2f eta %+5.2f phi %+5.2f alpha %+6.2f x2a %+5.2f x2pt %+6.2f x2prior " + "%+6.2f --> x2 %+6.2f --> puppi weight %.3f puppi pt %7.2f \n", + p.hwId, + p.floatPt(), + p.floatEta(), + p.floatPhi(), + alpha, + x2a, + x2pt, + -x2prior, + x2, + p.floatPuppiW(), + p.floatPt() * p.floatPuppiW()); + } +} diff --git a/L1Trigger/Phase2L1ParticleFlow/src/PFAlgo2HGC.cc b/L1Trigger/Phase2L1ParticleFlow/src/PFAlgo2HGC.cc new file mode 100644 index 0000000000000..1125386c7c441 --- /dev/null +++ b/L1Trigger/Phase2L1ParticleFlow/src/PFAlgo2HGC.cc @@ -0,0 +1,648 @@ +#include "L1Trigger/Phase2L1ParticleFlow/interface/PFAlgo2HGC.h" + +#include "DataFormats/L1TParticleFlow/interface/PFCandidate.h" + +#include "FWCore/Utilities/interface/Exception.h" + +#include "DataFormats/Math/interface/deltaR.h" + +namespace { + template + float floatDR(const T1 &t1, const T2 &t2) { + return deltaR(t1.floatEta(), t1.floatPhi(), t2.floatEta(), t2.floatPhi()); + } +} // namespace + +using namespace l1tpf_impl; + +PFAlgo2HGC::PFAlgo2HGC(const edm::ParameterSet &iConfig) : PFAlgoBase(iConfig) { + debug_ = iConfig.getUntrackedParameter("debugPFAlgo2HGC", iConfig.getUntrackedParameter("debug", 0)); + edm::ParameterSet linkcfg = iConfig.getParameter("linking"); + drMatchMu_ = linkcfg.getParameter("trackMuDR"); + + std::string muMatchMode = linkcfg.getParameter("trackMuMatch"); + if (muMatchMode == "boxBestByPtRatio") + muMatchMode_ = BoxBestByPtRatio; + else if (muMatchMode == "drBestByPtRatio") + muMatchMode_ = DrBestByPtRatio; + else if (muMatchMode == "drBestByPtDiff") + muMatchMode_ = DrBestByPtDiff; + else + throw cms::Exception("Configuration", "bad value for trackMuMatch configurable"); + + std::string tkCaloLinkMetric = linkcfg.getParameter("trackCaloLinkMetric"); + if (tkCaloLinkMetric == "bestByDR") + tkCaloLinkMetric_ = BestByDR; + else if (tkCaloLinkMetric == "bestByDRPt") + tkCaloLinkMetric_ = BestByDRPt; + else if (tkCaloLinkMetric == "bestByDR2Pt2") + tkCaloLinkMetric_ = BestByDR2Pt2; + else + throw cms::Exception("Configuration", "bad value for tkCaloLinkMetric configurable"); + + drMatch_ = linkcfg.getParameter("trackCaloDR"); + ptMatchLow_ = linkcfg.getParameter("trackCaloNSigmaLow"); + ptMatchHigh_ = linkcfg.getParameter("trackCaloNSigmaHigh"); + useTrackCaloSigma_ = linkcfg.getParameter("useTrackCaloSigma"); + maxInvisiblePt_ = linkcfg.getParameter("maxInvisiblePt"); + + caloReLinkStep_ = linkcfg.getParameter("caloReLink"); + caloReLinkDr_ = linkcfg.getParameter("caloReLinkDR"); + caloReLinkThreshold_ = linkcfg.getParameter("caloReLinkThreshold"); + rescaleTracks_ = linkcfg.getParameter("rescaleTracks"); + caloTrkWeightedAverage_ = linkcfg.getParameter("useCaloTrkWeightedAverage"); + sumTkCaloErr2_ = linkcfg.getParameter("sumTkCaloErr2"); + ecalPriority_ = linkcfg.getParameter("ecalPriority"); + tightTrackMinStubs_ = linkcfg.getParameter("tightTrackMinStubs"); + tightTrackMaxChi2_ = linkcfg.getParameter("tightTrackMaxChi2"); + tightTrackMaxInvisiblePt_ = linkcfg.getParameter("tightTrackMaxInvisiblePt"); +} + +void PFAlgo2HGC::runPF(Region &r) const { + initRegion(r); + + /// ------------- first step (can all go in parallel) ---------------- + + if (debug_) { + printf( + "PFAlgo2HGC\nPFAlgo2HGC region eta [ %+5.2f , %+5.2f ], phi [ %+5.2f , %+5.2f ], fiducial eta [ %+5.2f , " + "%+5.2f ], phi [ %+5.2f , %+5.2f ]\n", + r.etaMin - r.etaExtra, + r.etaMax + r.etaExtra, + r.phiCenter - r.phiHalfWidth - r.phiExtra, + r.phiCenter + r.phiHalfWidth + r.phiExtra, + r.etaMin, + r.etaMax, + r.phiCenter - r.phiHalfWidth, + r.phiCenter + r.phiHalfWidth); + printf("PFAlgo2HGC \t N(track) %3lu N(calo) %3lu N(mu) %3lu\n", r.track.size(), r.calo.size(), r.muon.size()); + for (int itk = 0, ntk = r.track.size(); itk < ntk; ++itk) { + const auto &tk = r.track[itk]; + printf( + "PFAlgo2HGC \t track %3d: pt %7.2f +- %5.2f vtx eta %+5.2f vtx phi %+5.2f calo eta %+5.2f calo phi " + "%+5.2f fid %1d calo ptErr %7.2f stubs %2d chi2 %7.1f\n", + itk, + tk.floatPt(), + tk.floatPtErr(), + tk.floatVtxEta(), + tk.floatVtxPhi(), + tk.floatEta(), + tk.floatPhi(), + int(r.fiducialLocal(tk.floatEta(), tk.floatPhi())), + tk.floatCaloPtErr(), + int(tk.hwStubs), + tk.hwChi2 * 0.1f); + } + for (int ic = 0, nc = r.calo.size(); ic < nc; ++ic) { + auto &calo = r.calo[ic]; + printf( + "PFAlgo2HGC \t calo %3d: pt %7.2f +- %5.2f vtx eta %+5.2f vtx phi %+5.2f calo eta %+5.2f calo phi " + "%+5.2f fid %1d calo ptErr %7.2f em pt %7.2f isEM %1d \n", + ic, + calo.floatPt(), + calo.floatPtErr(), + calo.floatEta(), + calo.floatPhi(), + calo.floatEta(), + calo.floatPhi(), + int(r.fiducialLocal(calo.floatEta(), calo.floatPhi())), + calo.floatPtErr(), + calo.floatEmPt(), + calo.isEM); + } + for (int im = 0, nm = r.muon.size(); im < nm; ++im) { + auto &mu = r.muon[im]; + printf( + "PFAlgo2HGC \t muon %3d: pt %7.2f vtx eta %+5.2f vtx phi %+5.2f calo eta %+5.2f calo phi " + "%+5.2f fid %1d\n", + im, + mu.floatPt(), + mu.floatEta(), + mu.floatPhi(), + mu.floatEta(), + mu.floatPhi(), + int(r.fiducialLocal(mu.floatEta(), mu.floatPhi()))); + } + } + + std::vector tk2mu(r.track.size(), -1), mu2tk(r.muon.size(), -1); + link_tk2mu(r, tk2mu, mu2tk); + + // track to calo matching (first iteration, with a lower bound on the calo pt; there may be another one later) + std::vector tk2calo(r.track.size(), -1); + link_tk2calo(r, tk2calo); + + /// ------------- next step (needs the previous) ---------------- + // for each calo, compute the sum of the track pt + std::vector calo2ntk(r.calo.size(), 0); + std::vector calo2sumtkpt(r.calo.size(), 0); + std::vector calo2sumtkpterr(r.calo.size(), 0); + sum_tk2calo(r, tk2calo, calo2ntk, calo2sumtkpt, calo2sumtkpterr); + + // in the meantime, promote unlinked low pt tracks to hadrons + unlinkedtk_algo(r, tk2calo); + + /// ------------- next step (needs the previous) ---------------- + /// OPTIONAL STEP: try to recover split hadron showers (v1.0): + // off by default, as it seems to not do much in jets even if it helps remove tails in single-pion events + if (caloReLinkStep_) + calo_relink(r, calo2ntk, calo2sumtkpt, calo2sumtkpterr); + + /// ------------- next step (needs the previous) ---------------- + // process matched calo clusters, compare energy to sum track pt + std::vector calo2alpha(r.calo.size(), 1); + linkedcalo_algo(r, calo2ntk, calo2sumtkpt, calo2sumtkpterr, calo2alpha); + + /// ------------- next step (needs the previous) ---------------- + /// process matched tracks, if necessary rescale or average + linkedtk_algo(r, tk2calo, calo2ntk, calo2alpha); + // process unmatched calo clusters + unlinkedcalo_algo(r); + // finally do muons + save_muons(r, tk2mu); +} + +void PFAlgo2HGC::link_tk2mu(Region &r, std::vector &tk2mu, std::vector &mu2tk) const { + // do a rectangular match for the moment; make a box of the same are as a 0.2 cone + int intDrMuonMatchBox = std::ceil(drMatchMu_ * CaloCluster::ETAPHI_SCALE * std::sqrt(M_PI / 4)); + for (int itk = 0, ntk = r.track.size(); itk < ntk; ++itk) { + tk2mu[itk] = false; + } + for (int imu = 0, nmu = r.muon.size(); imu < nmu; ++imu) { + const auto &mu = r.muon[imu]; + if (debug_) + printf("PFAlgo2HGC \t muon %3d (pt %7.2f, eta %+5.2f, phi %+5.2f) \n", + imu, + mu.floatPt(), + mu.floatEta(), + mu.floatPhi()); + float minDistance = 9e9; + switch (muMatchMode_) { + case BoxBestByPtRatio: + minDistance = 4.; + break; + case DrBestByPtRatio: + minDistance = 4.; + break; + case DrBestByPtDiff: + minDistance = 0.5 * mu.floatPt(); + break; + } + int imatch = -1; + for (int itk = 0, ntk = r.track.size(); itk < ntk; ++itk) { + const auto &tk = r.track[itk]; + int deta = std::abs(mu.hwEta - tk.hwEta); + int dphi = std::abs((mu.hwPhi - tk.hwPhi) % CaloCluster::PHI_WRAP); + float dr = floatDR(mu, tk); + float dpt = std::abs(mu.floatPt() - tk.floatPt()); + float dptr = (mu.hwPt > tk.hwPt ? mu.floatPt() / tk.floatPt() : tk.floatPt() / mu.floatPt()); + bool ok = false; + float distance = 9e9; + switch (muMatchMode_) { + case BoxBestByPtRatio: + ok = (deta < intDrMuonMatchBox) && (dphi < intDrMuonMatchBox); + distance = dptr; + break; + case DrBestByPtRatio: + ok = (dr < drMatchMu_); + distance = dptr; + break; + case DrBestByPtDiff: + ok = (dr < drMatchMu_); + distance = dpt; + break; + } + if (debug_ && dr < 0.4) { + printf( + "PFAlgo2HGC \t\t possible match with track %3d (pt %7.2f, caloeta %+5.2f, calophi %+5.2f, dr %.2f, eta " + "%+5.2f, phi %+5.2f, dr %.2f): angular %1d, distance %.3f (vs %.3f)\n", + itk, + tk.floatPt(), + tk.floatEta(), + tk.floatPhi(), + dr, + tk.floatVtxEta(), + tk.floatVtxPhi(), + deltaR(mu.floatEta(), mu.floatPhi(), tk.floatVtxEta(), tk.floatVtxPhi()), + (ok ? 1 : 0), + distance, + minDistance); + } + if (!ok) + continue; + // FIXME for the moment, we do the floating point matching in pt + if (distance < minDistance) { + minDistance = distance; + imatch = itk; + } + } + if (debug_ && imatch > -1) + printf("PFAlgo2HGC \t muon %3d (pt %7.2f) linked to track %3d (pt %7.2f)\n", + imu, + mu.floatPt(), + imatch, + r.track[imatch].floatPt()); + if (debug_ && imatch == -1) + printf("PFAlgo2HGC \t muon %3d (pt %7.2f) not linked to any track\n", imu, mu.floatPt()); + mu2tk[imu] = imatch; + if (imatch > -1) { + tk2mu[imatch] = imu; + r.track[imatch].muonLink = true; + } + } +} + +void PFAlgo2HGC::link_tk2calo(Region &r, std::vector &tk2calo) const { + // track to calo matching (first iteration, with a lower bound on the calo pt; there may be another one later) + for (int itk = 0, ntk = r.track.size(); itk < ntk; ++itk) { + const auto &tk = r.track[itk]; + if (tk.muonLink || tk.used) + continue; // not necessary but just a waste of CPU otherwise + float drbest = drMatch_, dptscale = 0; + switch (tkCaloLinkMetric_) { + case BestByDR: + drbest = drMatch_; + break; + case BestByDRPt: + drbest = 1.0; + dptscale = drMatch_ / tk.floatCaloPtErr(); + break; + case BestByDR2Pt2: + drbest = 1.0; + dptscale = drMatch_ / tk.floatCaloPtErr(); + break; + } + float minCaloPt = tk.floatPt() - ptMatchLow_ * tk.floatCaloPtErr(); + if (debug_) + printf("PFAlgo2HGC \t track %3d (pt %7.2f) to be matched to calo, min pT %7.2f\n", itk, tk.floatPt(), minCaloPt); + for (int ic = 0, nc = r.calo.size(); ic < nc; ++ic) { + auto &calo = r.calo[ic]; + if (calo.used || calo.floatPt() <= minCaloPt) + continue; + float dr = floatDR(tk, calo), dq; + switch (tkCaloLinkMetric_) { + case BestByDR: + if (dr < drbest) { + tk2calo[itk] = ic; + drbest = dr; + } + break; + case BestByDRPt: + dq = dr + std::max(tk.floatPt() - calo.floatPt(), 0.) * dptscale; + if (debug_ > 2 && dr < 0.3) + printf("PFAlgo2HGC \t\t\t track %3d (pt %7.2f) vs calo %3d (pt %7.2f): dr %.3f, dq %.3f\n", + itk, + tk.floatPt(), + ic, + calo.floatPt(), + dr, + dq); + if (dr < drMatch_ && dq < drbest) { + tk2calo[itk] = ic; + drbest = dq; + } + break; + case BestByDR2Pt2: + dq = hypot(dr, std::max(tk.floatPt() - calo.floatPt(), 0.) * dptscale); + if (debug_ > 2 && dr < 0.3) + printf("PFAlgo2HGC \t\t\t track %3d (pt %7.2f) vs calo %3d (pt %7.2f): dr %.3f, dq %.3f\n", + itk, + tk.floatPt(), + ic, + calo.floatPt(), + dr, + dq); + if (dr < drMatch_ && dq < drbest) { + tk2calo[itk] = ic; + drbest = dq; + } + break; + } + } + if (debug_ && tk2calo[itk] != -1) + printf("PFAlgo2HGC \t track %3d (pt %7.2f) matches to calo %3d (pt %7.2f) with dist %.3f (dr %.3f)\n", + itk, + tk.floatPt(), + tk2calo[itk], + r.calo[tk2calo[itk]].floatPt(), + drbest, + floatDR(tk, r.calo[tk2calo[itk]])); + // now we re-do this for debugging sake, it may be done for real later + if (debug_ && tk2calo[itk] == -1) { + int ibest = -1; + drbest = 0.3; + for (int ic = 0, nc = r.calo.size(); ic < nc; ++ic) { + auto &calo = r.calo[ic]; + if (calo.used) + continue; + float dr = floatDR(tk, calo); + if (dr < drbest) { + ibest = ic; + drbest = dr; + } + } + if (ibest != -1) + printf( + "PFAlgo2HGC \t track %3d (pt %7.2f) would match to calo %3d (pt %7.2f) with dr %.3f if the pt min and dr " + "requirement had been relaxed\n", + itk, + tk.floatPt(), + ibest, + r.calo[ibest].floatPt(), + drbest); + } + } +} + +void PFAlgo2HGC::sum_tk2calo(Region &r, + const std::vector &tk2calo, + std::vector &calo2ntk, + std::vector &calo2sumtkpt, + std::vector &calo2sumtkpterr) const { + // for each calo, compute the sum of the track pt + for (int ic = 0, nc = r.calo.size(); ic < nc; ++ic) { + const auto &calo = r.calo[ic]; + if (r.globalAbsEta(calo.floatEta()) > 2.5) + continue; + for (int itk = 0, ntk = r.track.size(); itk < ntk; ++itk) { + if (tk2calo[itk] == ic) { + const auto &tk = r.track[itk]; + if (tk.muonLink || tk.used) + continue; + calo2ntk[ic]++; + calo2sumtkpt[ic] += tk.floatPt(); + calo2sumtkpterr[ic] += std::pow(tk.floatCaloPtErr(), sumTkCaloErr2_ ? 2 : 1); + } + } + if (sumTkCaloErr2_ && calo2sumtkpterr[ic] > 0) + calo2sumtkpterr[ic] = std::sqrt(calo2sumtkpterr[ic]); + } +} + +void PFAlgo2HGC::unlinkedtk_algo(Region &r, const std::vector &tk2calo) const { + // in the meantime, promote unlinked low pt tracks to hadrons + for (int itk = 0, ntk = r.track.size(); itk < ntk; ++itk) { + auto &tk = r.track[itk]; + if (tk2calo[itk] != -1 || tk.muonLink || tk.used) + continue; + float maxPt = (tk.hwStubs >= tightTrackMinStubs_ && tk.hwChi2 < 10. * tightTrackMaxChi2_) + ? tightTrackMaxInvisiblePt_ + : maxInvisiblePt_; + if (tk.floatPt() < maxPt) { + if (debug_) + printf("PFAlgo2HGC \t track %3d (pt %7.2f) not matched to calo, kept as charged hadron\n", itk, tk.floatPt()); + auto &p = addTrackToPF(r, tk); + p.hwStatus = GoodTK_NoCalo; + tk.used = true; + } else { + if (debug_) + printf("PFAlgo2HGC \t track %3d (pt %7.2f) not matched to calo, dropped\n", itk, tk.floatPt()); + //discardTrack(r, tk, BadTK_NoCalo); // log this as discarded, for debugging + } + } +} + +void PFAlgo2HGC::calo_relink(Region &r, + const std::vector &calo2ntk, + const std::vector &calo2sumtkpt, + const std::vector &calo2sumtkpterr) const { + /// OPTIONAL STEP: try to recover split hadron showers (v1.0): + // take hadrons that are not track matched, close by a hadron which has an excess of track pt vs calo pt + // add this pt to the calo pt of the other cluster + // off by default, as it seems to not do much in jets even if it helps remove tails in single-pion events + std::vector addtopt(r.calo.size(), 0); + for (int ic = 0, nc = r.calo.size(); ic < nc; ++ic) { + auto &calo = r.calo[ic]; + if (calo2ntk[ic] != 0 || calo.used || r.globalAbsEta(calo.floatEta()) > 2.5) + continue; + int i2best = -1; + float drbest = caloReLinkDr_; + for (int ic2 = 0; ic2 < nc; ++ic2) { + const auto &calo2 = r.calo[ic2]; + if (calo2ntk[ic2] == 0 || calo2.used || r.globalAbsEta(calo2.floatEta()) > 2.5) + continue; + float dr = floatDR(calo, calo2); + //// uncomment below for more verbose debugging + //if (debug_ && dr < 0.5) printf("PFAlgo2HGC \t calo %3d (pt %7.2f) with no tracks is at dr %.3f from calo %3d with pt %7.2f (sum tk pt %7.2f), track excess %7.2f +- %7.2f\n", ic, calo.floatPt(), dr, ic2, calo2.floatPt(), calo2sumtkpt[ic2], calo2sumtkpt[ic2] - calo2.floatPt(), useTrackCaloSigma_ ? calo2sumtkpterr[ic2] : calo2.floatPtErr()); + if (dr < drbest) { + float ptdiff = + calo2sumtkpt[ic2] - calo2.floatPt() + (useTrackCaloSigma_ ? calo2sumtkpterr[ic2] : calo2.floatPtErr()); + if (ptdiff >= caloReLinkThreshold_ * calo.floatPt()) { + i2best = ic2; + drbest = dr; + } + } + } + if (i2best != -1) { + const auto &calo2 = r.calo[i2best]; + if (debug_) + printf( + "PFAlgo2HGC \t calo %3d (pt %7.2f) with no tracks matched within dr %.3f with calo %3d with pt %7.2f (sum " + "tk pt %7.2f), track excess %7.2f +- %7.2f\n", + ic, + calo.floatPt(), + drbest, + i2best, + calo2.floatPt(), + calo2sumtkpt[i2best], + calo2sumtkpt[i2best] - calo2.floatPt(), + useTrackCaloSigma_ ? calo2sumtkpterr[i2best] : calo2.floatPtErr()); + calo.used = true; + addtopt[i2best] += calo.floatPt(); + } + } + // we do this at the end, so that the above loop is parallelizable + for (int ic = 0, nc = r.calo.size(); ic < nc; ++ic) { + if (addtopt[ic]) { + auto &calo = r.calo[ic]; + if (debug_) + printf("PFAlgo2HGC \t calo %3d (pt %7.2f, sum tk pt %7.2f) is increased to pt %7.2f after merging\n", + ic, + calo.floatPt(), + calo2sumtkpt[ic], + calo.floatPt() + addtopt[ic]); + calo.setFloatPt(calo.floatPt() + addtopt[ic]); + } + } +} + +void PFAlgo2HGC::linkedcalo_algo(Region &r, + const std::vector &calo2ntk, + const std::vector &calo2sumtkpt, + const std::vector &calo2sumtkpterr, + std::vector &calo2alpha) const { + /// ------------- next step (needs the previous) ---------------- + // process matched calo clusters, compare energy to sum track pt + for (int ic = 0, nc = r.calo.size(); ic < nc; ++ic) { + auto &calo = r.calo[ic]; + if (calo2ntk[ic] == 0 || calo.used) + continue; + float ptdiff = calo.floatPt() - calo2sumtkpt[ic]; + float pterr = useTrackCaloSigma_ ? calo2sumtkpterr[ic] : calo.floatPtErr(); + if (debug_) + printf( + "PFAlgo2HGC \t calo %3d (pt %7.2f +- %7.2f, empt %7.2f) has %2d tracks (sumpt %7.2f, sumpterr %7.2f), ptdif " + "%7.2f +- %7.2f\n", + ic, + calo.floatPt(), + calo.floatPtErr(), + calo.floatEmPt(), + calo2ntk[ic], + calo2sumtkpt[ic], + calo2sumtkpterr[ic], + ptdiff, + pterr); + if (ptdiff > +ptMatchHigh_ * pterr) { + if (ecalPriority_) { + if (calo.floatEmPt() > 1) { + float emptdiff = std::min(ptdiff, calo.floatEmPt()); + if (debug_) + printf( + "PFAlgo2HGC \t calo %3d (pt %7.2f, empt %7.2f) ---> make photon with pt %7.2f, reduce ptdiff to " + "%7.2f +- %7.2f\n", + ic, + calo.floatPt(), + calo.floatEmPt(), + emptdiff, + ptdiff - emptdiff, + pterr); + auto &p = addCaloToPF(r, calo); + p.setFloatPt(emptdiff); + p.hwId = l1t::PFCandidate::Photon; + ptdiff -= emptdiff; + } + if (ptdiff > 2) { + if (debug_) + printf("PFAlgo2HGC \t calo %3d (pt %7.2f, empt %7.2f) ---> make also neutral hadron with pt %7.2f\n", + ic, + calo.floatPt(), + calo.floatEmPt(), + ptdiff); + auto &p = addCaloToPF(r, calo); + p.setFloatPt(ptdiff); + p.hwId = l1t::PFCandidate::NeutralHadron; + } + } else { + if (debug_) + printf("PFAlgo2HGC \t calo %3d (pt %7.2f) ---> promoted to neutral with pt %7.2f\n", + ic, + calo.floatPt(), + ptdiff); + auto &p = addCaloToPF(r, calo); + p.setFloatPt(ptdiff); + calo.hwFlags = 0; + } + } else if (ptdiff > -ptMatchLow_ * pterr) { + // nothing to do (weighted average happens when we process the tracks) + calo.hwFlags = 1; + if (debug_) + printf( + "PFAlgo2HGC \t calo %3d (pt %7.2f) ---> to be deleted, will use tracks instead\n", ic, calo.floatPt()); + //discardCalo(r, calo, 0); // log this as discarded, for debugging + } else { + // tracks overshoot, rescale to tracks to calo + calo2alpha[ic] = rescaleTracks_ ? calo.floatPt() / calo2sumtkpt[ic] : 1.0; + calo.hwFlags = 2; + if (debug_ && rescaleTracks_) + printf("PFAlgo2HGC \t calo %3d (pt %7.2f) ---> tracks overshoot and will be scaled down by %.4f\n", + ic, + calo.floatPt(), + calo2alpha[ic]); + if (debug_ && !rescaleTracks_) + printf("PFAlgo2HGC \t calo %3d (pt %7.2f) ---> tracks overshoot by %.4f\n", + ic, + calo.floatPt(), + calo2sumtkpt[ic] / calo.floatPt()); + } + calo.used = true; + } +} + +void PFAlgo2HGC::linkedtk_algo(Region &r, + const std::vector &tk2calo, + const std::vector &calo2ntk, + const std::vector &calo2alpha) const { + // process matched tracks, if necessary rescale or average + for (int itk = 0, ntk = r.track.size(); itk < ntk; ++itk) { + auto &tk = r.track[itk]; + if (tk2calo[itk] == -1 || tk.muonLink || tk.used) + continue; + auto &p = addTrackToPF(r, tk); + tk.used = true; + const auto &calo = r.calo[tk2calo[itk]]; + if (calo.isEM) + p.hwId = l1t::PFCandidate::Electron; + p.cluster.src = calo.src; + if (calo.hwFlags == 1) { + // can do weighted average if there's just one track + if (calo2ntk[tk2calo[itk]] == 1 && caloTrkWeightedAverage_) { + p.hwStatus = GoodTK_Calo_TkPt; + float ptavg = tk.floatPt(); + if (tk.floatPtErr() > 0) { + float wcalo = 1.0 / std::pow(tk.floatCaloPtErr(), 2); + float wtk = 1.0 / std::pow(tk.floatPtErr(), 2); + ptavg = (calo.floatPt() * wcalo + tk.floatPt() * wtk) / (wcalo + wtk); + p.hwStatus = GoodTK_Calo_TkCaloPt; + } + p.setFloatPt(ptavg); + if (debug_) + printf( + "PFAlgo2HGC \t track %3d (pt %7.2f +- %7.2f) combined with calo %3d (pt %7.2f +- %7.2f (from tk) " + "yielding candidate of pt %7.2f\n", + itk, + tk.floatPt(), + tk.floatPtErr(), + tk2calo[itk], + calo.floatPt(), + tk.floatCaloPtErr(), + ptavg); + } else { + p.hwStatus = GoodTK_Calo_TkPt; + if (debug_) + printf("PFAlgo2HGC \t track %3d (pt %7.2f) linked to calo %3d promoted to %s\n", + itk, + tk.floatPt(), + tk2calo[itk], + (p.hwId == l1t::PFCandidate::Electron ? "electron" : "charged hadron")); + } + } else if (calo.hwFlags == 2) { + // must rescale + p.setFloatPt(tk.floatPt() * calo2alpha[tk2calo[itk]]); + p.hwStatus = GoodTk_Calo_CaloPt; + if (debug_) + printf( + "PFAlgo2HGC \t track %3d (pt %7.2f, stubs %2d chi2 %7.1f) linked to calo %3d promoted to %s with pt %7.2f " + "after maybe rescaling\n", + itk, + tk.floatPt(), + int(tk.hwStubs), + tk.hwChi2 * 0.1f, + tk2calo[itk], + (p.hwId == l1t::PFCandidate::Electron ? "electron" : "charged hadron"), + p.floatPt()); + } + } +} + +void PFAlgo2HGC::unlinkedcalo_algo(Region &r) const { + // process unmatched calo clusters + for (int ic = 0, nc = r.calo.size(); ic < nc; ++ic) { + if (!r.calo[ic].used) { + addCaloToPF(r, r.calo[ic]); + if (debug_) + printf("PFAlgo2HGC \t calo %3d (pt %7.2f) not linked, promoted to neutral\n", ic, r.calo[ic].floatPt()); + } + } +} + +void PFAlgo2HGC::save_muons(Region &r, const std::vector &tk2mu) const { + // finally do muons + for (int itk = 0, ntk = r.track.size(); itk < ntk; ++itk) { + if (r.track[itk].muonLink) { + auto &p = addTrackToPF(r, r.track[itk]); + p.muonsrc = r.muon[tk2mu[itk]].src; + if (debug_) + printf("PFAlgo2HGC \t track %3d (pt %7.2f) promoted to muon.\n", itk, r.track[itk].floatPt()); + } + } +} diff --git a/L1Trigger/Phase2L1ParticleFlow/src/PFAlgo3.cc b/L1Trigger/Phase2L1ParticleFlow/src/PFAlgo3.cc new file mode 100644 index 0000000000000..6e6d615ebae87 --- /dev/null +++ b/L1Trigger/Phase2L1ParticleFlow/src/PFAlgo3.cc @@ -0,0 +1,908 @@ +#include "L1Trigger/Phase2L1ParticleFlow/interface/PFAlgo3.h" + +#include "DataFormats/L1TParticleFlow/interface/PFCandidate.h" + +#include "FWCore/Utilities/interface/Exception.h" + +#include "DataFormats/Math/interface/deltaR.h" + +namespace { + template + float floatDR(const T1 &t1, const T2 &t2) { + return deltaR(t1.floatEta(), t1.floatPhi(), t2.floatEta(), t2.floatPhi()); + } +} // namespace + +using namespace l1tpf_impl; + +PFAlgo3::PFAlgo3(const edm::ParameterSet &iConfig) : PFAlgoBase(iConfig) { + debug_ = iConfig.getUntrackedParameter("debugPFAlgo3", iConfig.getUntrackedParameter("debug", 0)); + edm::ParameterSet linkcfg = iConfig.getParameter("linking"); + drMatchMu_ = linkcfg.getParameter("trackMuDR"); + + std::string muMatchMode = linkcfg.getParameter("trackMuMatch"); + if (muMatchMode == "boxBestByPtRatio") + muMatchMode_ = BoxBestByPtRatio; + else if (muMatchMode == "drBestByPtRatio") + muMatchMode_ = DrBestByPtRatio; + else if (muMatchMode == "drBestByPtDiff") + muMatchMode_ = DrBestByPtDiff; + else + throw cms::Exception("Configuration", "bad value for trackMuMatch configurable"); + + std::string tkCaloLinkMetric = linkcfg.getParameter("trackCaloLinkMetric"); + if (tkCaloLinkMetric == "bestByDR") + tkCaloLinkMetric_ = BestByDR; + else if (tkCaloLinkMetric == "bestByDRPt") + tkCaloLinkMetric_ = BestByDRPt; + else if (tkCaloLinkMetric == "bestByDR2Pt2") + tkCaloLinkMetric_ = BestByDR2Pt2; + else + throw cms::Exception("Configuration", "bad value for tkCaloLinkMetric configurable"); + + drMatch_ = linkcfg.getParameter("trackCaloDR"); + ptMatchLow_ = linkcfg.getParameter("trackCaloNSigmaLow"); + ptMatchHigh_ = linkcfg.getParameter("trackCaloNSigmaHigh"); + useTrackCaloSigma_ = linkcfg.getParameter("useTrackCaloSigma"); + maxInvisiblePt_ = linkcfg.getParameter("maxInvisiblePt"); + + drMatchEm_ = linkcfg.getParameter("trackEmDR"); + trackEmUseAlsoTrackSigma_ = linkcfg.getParameter("trackEmUseAlsoTrackSigma"); + trackEmMayUseCaloMomenta_ = linkcfg.getParameter("trackEmMayUseCaloMomenta"); + emCaloUseAlsoCaloSigma_ = linkcfg.getParameter("emCaloUseAlsoCaloSigma"); + ptMinFracMatchEm_ = linkcfg.getParameter("caloEmPtMinFrac"); + drMatchEmHad_ = linkcfg.getParameter("emCaloDR"); + emHadSubtractionPtSlope_ = linkcfg.getParameter("emCaloSubtractionPtSlope"); + caloReLinkStep_ = linkcfg.getParameter("caloReLink"); + caloReLinkDr_ = linkcfg.getParameter("caloReLinkDR"); + caloReLinkThreshold_ = linkcfg.getParameter("caloReLinkThreshold"); + rescaleTracks_ = linkcfg.getParameter("rescaleTracks"); + caloTrkWeightedAverage_ = linkcfg.getParameter("useCaloTrkWeightedAverage"); + sumTkCaloErr2_ = linkcfg.getParameter("sumTkCaloErr2"); + ecalPriority_ = linkcfg.getParameter("ecalPriority"); + tightTrackMinStubs_ = linkcfg.getParameter("tightTrackMinStubs"); + tightTrackMaxChi2_ = linkcfg.getParameter("tightTrackMaxChi2"); + tightTrackMaxInvisiblePt_ = linkcfg.getParameter("tightTrackMaxInvisiblePt"); +} + +void PFAlgo3::runPF(Region &r) const { + initRegion(r); + + /// ------------- first step (can all go in parallel) ---------------- + + if (debug_) { + printf( + "PFAlgo3\nPFAlgo3 region eta [ %+5.2f , %+5.2f ], phi [ %+5.2f , %+5.2f ], fiducial eta [ %+5.2f , %+5.2f ], " + "phi [ %+5.2f , %+5.2f ]\n", + r.etaMin - r.etaExtra, + r.etaMax + r.etaExtra, + r.phiCenter - r.phiHalfWidth - r.phiExtra, + r.phiCenter + r.phiHalfWidth + r.phiExtra, + r.etaMin, + r.etaMax, + r.phiCenter - r.phiHalfWidth, + r.phiCenter + r.phiHalfWidth); + printf("PFAlgo3 \t N(track) %3lu N(em) %3lu N(calo) %3lu N(mu) %3lu\n", + r.track.size(), + r.emcalo.size(), + r.calo.size(), + r.muon.size()); + for (int itk = 0, ntk = r.track.size(); itk < ntk; ++itk) { + const auto &tk = r.track[itk]; + printf( + "PFAlgo3 \t track %3d: pt %7.2f +- %5.2f vtx eta %+5.2f vtx phi %+5.2f calo eta %+5.2f calo phi %+5.2f " + "fid %1d calo ptErr %7.2f stubs %2d chi2 %7.1f\n", + itk, + tk.floatPt(), + tk.floatPtErr(), + tk.floatVtxEta(), + tk.floatVtxPhi(), + tk.floatEta(), + tk.floatPhi(), + int(r.fiducialLocal(tk.floatEta(), tk.floatPhi())), + tk.floatCaloPtErr(), + int(tk.hwStubs), + tk.hwChi2 * 0.1f); + } + for (int iem = 0, nem = r.emcalo.size(); iem < nem; ++iem) { + const auto &em = r.emcalo[iem]; + printf( + "PFAlgo3 \t EM %3d: pt %7.2f +- %5.2f vtx eta %+5.2f vtx phi %+5.2f calo eta %+5.2f calo phi %+5.2f " + "fid %1d calo ptErr %7.2f\n", + iem, + em.floatPt(), + em.floatPtErr(), + em.floatEta(), + em.floatPhi(), + em.floatEta(), + em.floatPhi(), + int(r.fiducialLocal(em.floatEta(), em.floatPhi())), + em.floatPtErr()); + } + for (int ic = 0, nc = r.calo.size(); ic < nc; ++ic) { + auto &calo = r.calo[ic]; + printf( + "PFAlgo3 \t calo %3d: pt %7.2f +- %5.2f vtx eta %+5.2f vtx phi %+5.2f calo eta %+5.2f calo phi %+5.2f " + "fid %1d calo ptErr %7.2f em pt %7.2f \n", + ic, + calo.floatPt(), + calo.floatPtErr(), + calo.floatEta(), + calo.floatPhi(), + calo.floatEta(), + calo.floatPhi(), + int(r.fiducialLocal(calo.floatEta(), calo.floatPhi())), + calo.floatPtErr(), + calo.floatEmPt()); + } + for (int im = 0, nm = r.muon.size(); im < nm; ++im) { + auto &mu = r.muon[im]; + printf( + "PFAlgo3 \t muon %3d: pt %7.2f vtx eta %+5.2f vtx phi %+5.2f calo eta %+5.2f calo phi %+5.2f " + "fid %1d \n", + im, + mu.floatPt(), + mu.floatEta(), + mu.floatPhi(), + mu.floatEta(), + mu.floatPhi(), + int(r.fiducialLocal(mu.floatEta(), mu.floatPhi()))); + } + } + + std::vector tk2mu(r.track.size(), -1), mu2tk(r.muon.size(), -1); + link_tk2mu(r, tk2mu, mu2tk); + + // match all tracks to the closest EM cluster + std::vector tk2em(r.track.size(), -1); + link_tk2em(r, tk2em); + + // match all em to the closest had (can happen in parallel to the above) + std::vector em2calo(r.emcalo.size(), -1); + link_em2calo(r, em2calo); + + /// ------------- next step (needs the previous) ---------------- + // for each EM cluster, count and add up the pt of all the corresponding tracks (skipping muons) + std::vector em2ntk(r.emcalo.size(), 0); + std::vector em2sumtkpt(r.emcalo.size(), 0); + std::vector em2sumtkpterr(r.emcalo.size(), 0); + sum_tk2em(r, tk2em, em2ntk, em2sumtkpt, em2sumtkpterr); + + /// ------------- next step (needs the previous) ---------------- + // process ecal clusters after linking + emcalo_algo(r, em2ntk, em2sumtkpt, em2sumtkpterr); + + /// ------------- next step (needs the previous) ---------------- + // promote all flagged tracks to electrons + emtk_algo(r, tk2em, em2ntk, em2sumtkpterr); + sub_em2calo(r, em2calo); + + /// ------------- next step (needs the previous) ---------------- + // track to calo matching (first iteration, with a lower bound on the calo pt; there may be another one later) + std::vector tk2calo(r.track.size(), -1); + link_tk2calo(r, tk2calo); + + /// ------------- next step (needs the previous) ---------------- + // for each calo, compute the sum of the track pt + std::vector calo2ntk(r.calo.size(), 0); + std::vector calo2sumtkpt(r.calo.size(), 0); + std::vector calo2sumtkpterr(r.calo.size(), 0); + sum_tk2calo(r, tk2calo, calo2ntk, calo2sumtkpt, calo2sumtkpterr); + + // in the meantime, promote unlinked low pt tracks to hadrons + unlinkedtk_algo(r, tk2calo); + + /// ------------- next step (needs the previous) ---------------- + /// OPTIONAL STEP: try to recover split hadron showers (v1.0): + // off by default, as it seems to not do much in jets even if it helps remove tails in single-pion events + if (caloReLinkStep_) + calo_relink(r, calo2ntk, calo2sumtkpt, calo2sumtkpterr); + + /// ------------- next step (needs the previous) ---------------- + // process matched calo clusters, compare energy to sum track pt + std::vector calo2alpha(r.calo.size(), 1); + linkedcalo_algo(r, calo2ntk, calo2sumtkpt, calo2sumtkpterr, calo2alpha); + + /// ------------- next step (needs the previous) ---------------- + /// process matched tracks, if necessary rescale or average + linkedtk_algo(r, tk2calo, calo2ntk, calo2alpha); + // process unmatched calo clusters + unlinkedcalo_algo(r); + // finally do muons + save_muons(r, tk2mu); +} + +void PFAlgo3::link_tk2mu(Region &r, std::vector &tk2mu, std::vector &mu2tk) const { + // do a rectangular match for the moment; make a box of the same are as a 0.2 cone + int intDrMuonMatchBox = std::ceil(drMatchMu_ * CaloCluster::ETAPHI_SCALE * std::sqrt(M_PI / 4)); + for (int itk = 0, ntk = r.track.size(); itk < ntk; ++itk) { + tk2mu[itk] = false; + } + for (int imu = 0, nmu = r.muon.size(); imu < nmu; ++imu) { + const auto &mu = r.muon[imu]; + if (debug_) + printf( + "PFAlgo3 \t muon %3d (pt %7.2f, eta %+5.2f, phi %+5.2f) \n", imu, mu.floatPt(), mu.floatEta(), mu.floatPhi()); + float minDistance = 9e9; + switch (muMatchMode_) { + case BoxBestByPtRatio: + minDistance = 4.; + break; + case DrBestByPtRatio: + minDistance = 4.; + break; + case DrBestByPtDiff: + minDistance = 0.5 * mu.floatPt(); + break; + } + int imatch = -1; + for (int itk = 0, ntk = r.track.size(); itk < ntk; ++itk) { + const auto &tk = r.track[itk]; + int deta = std::abs(mu.hwEta - tk.hwEta); + int dphi = std::abs((mu.hwPhi - tk.hwPhi) % CaloCluster::PHI_WRAP); + float dr = floatDR(mu, tk); + float dpt = std::abs(mu.floatPt() - tk.floatPt()); + float dptr = (mu.hwPt > tk.hwPt ? mu.floatPt() / tk.floatPt() : tk.floatPt() / mu.floatPt()); + bool ok = false; + float distance = 9e9; + switch (muMatchMode_) { + case BoxBestByPtRatio: + ok = (deta < intDrMuonMatchBox) && (dphi < intDrMuonMatchBox); + distance = dptr; + break; + case DrBestByPtRatio: + ok = (dr < drMatchMu_); + distance = dptr; + break; + case DrBestByPtDiff: + ok = (dr < drMatchMu_); + distance = dpt; + break; + } + if (debug_ && dr < 0.4) { + printf( + "PFAlgo3 \t\t possible match with track %3d (pt %7.2f, caloeta %+5.2f, calophi %+5.2f, dr %.2f, eta " + "%+5.2f, phi %+5.2f, dr %.2f): angular %1d, distance %.3f (vs %.3f)\n", + itk, + tk.floatPt(), + tk.floatEta(), + tk.floatPhi(), + dr, + tk.floatVtxEta(), + tk.floatVtxPhi(), + deltaR(mu.floatEta(), mu.floatPhi(), tk.floatVtxEta(), tk.floatVtxPhi()), + (ok ? 1 : 0), + distance, + minDistance); + } + if (!ok) + continue; + // FIXME for the moment, we do the floating point matching in pt + if (distance < minDistance) { + minDistance = distance; + imatch = itk; + } + } + if (debug_ && imatch > -1) + printf("PFAlgo3 \t muon %3d (pt %7.2f) linked to track %3d (pt %7.2f)\n", + imu, + mu.floatPt(), + imatch, + r.track[imatch].floatPt()); + if (debug_ && imatch == -1) + printf("PFAlgo3 \t muon %3d (pt %7.2f) not linked to any track\n", imu, mu.floatPt()); + mu2tk[imu] = imatch; + if (imatch > -1) { + tk2mu[imatch] = imu; + r.track[imatch].muonLink = true; + } + } +} + +void PFAlgo3::link_tk2em(Region &r, std::vector &tk2em) const { + // match all tracks to the closest EM cluster + for (int itk = 0, ntk = r.track.size(); itk < ntk; ++itk) { + const auto &tk = r.track[itk]; + //if (tk.muonLink) continue; // not necessary I think + float drbest = drMatchEm_; + for (int iem = 0, nem = r.emcalo.size(); iem < nem; ++iem) { + const auto &em = r.emcalo[iem]; + float dr = floatDR(tk, em); + if (dr < drbest) { + tk2em[itk] = iem; + drbest = dr; + } + } + if (debug_ && tk2em[itk] != -1) + printf("PFAlgo3 \t track %3d (pt %7.2f) matches to EM %3d (pt %7.2f) with dr %.3f\n", + itk, + tk.floatPt(), + tk2em[itk], + tk2em[itk] == -1 ? 0.0 : r.emcalo[tk2em[itk]].floatPt(), + drbest); + } +} + +void PFAlgo3::link_em2calo(Region &r, std::vector &em2calo) const { + // match all em to the closest had (can happen in parallel to the above) + for (int iem = 0, nem = r.emcalo.size(); iem < nem; ++iem) { + const auto &em = r.emcalo[iem]; + float drbest = drMatchEmHad_; + for (int ic = 0, nc = r.calo.size(); ic < nc; ++ic) { + const auto &calo = r.calo[ic]; + if (calo.floatEmPt() < ptMinFracMatchEm_ * em.floatPt()) + continue; + float dr = floatDR(calo, em); + if (dr < drbest) { + em2calo[iem] = ic; + drbest = dr; + } + } + if (debug_ && em2calo[iem] != -1) + printf("PFAlgo3 \t EM %3d (pt %7.2f) matches to calo %3d (pt %7.2f, empt %7.2f) with dr %.3f\n", + iem, + em.floatPt(), + em2calo[iem], + em2calo[iem] == -1 ? 0.0 : r.calo[em2calo[iem]].floatPt(), + em2calo[iem] == -1 ? 0.0 : r.calo[em2calo[iem]].floatEmPt(), + drbest); + } +} + +void PFAlgo3::sum_tk2em(Region &r, + const std::vector &tk2em, + std::vector &em2ntk, + std::vector &em2sumtkpt, + std::vector &em2sumtkpterr) const { + // for each EM cluster, count and add up the pt of all the corresponding tracks (skipping muons) + for (int iem = 0, nem = r.emcalo.size(); iem < nem; ++iem) { + const auto &em = r.emcalo[iem]; + if (r.globalAbsEta(em.floatEta()) > 2.5) + continue; + for (int itk = 0, ntk = r.track.size(); itk < ntk; ++itk) { + if (tk2em[itk] == iem) { + const auto &tk = r.track[itk]; + if (tk.muonLink) + continue; + em2ntk[iem]++; + em2sumtkpt[iem] += tk.floatPt(); + em2sumtkpterr[iem] += tk.floatPtErr(); + } + } + } +} + +void PFAlgo3::emcalo_algo(Region &r, + const std::vector &em2ntk, + const std::vector &em2sumtkpt, + const std::vector &em2sumtkpterr) const { + // process ecal clusters after linking + for (int iem = 0, nem = r.emcalo.size(); iem < nem; ++iem) { + auto &em = r.emcalo[iem]; + em.isEM = false; + em.used = false; + em.hwFlags = 0; + if (r.globalAbsEta(em.floatEta()) > 2.5) + continue; + if (debug_) + printf("PFAlgo3 \t EM %3d (pt %7.2f) has %2d tracks (sumpt %7.2f, sumpterr %7.2f), ptdif %7.2f +- %7.2f\n", + iem, + em.floatPt(), + em2ntk[iem], + em2sumtkpt[iem], + em2sumtkpterr[iem], + em.floatPt() - em2sumtkpt[iem], + std::max(em2sumtkpterr[iem], em.floatPtErr())); + if (em2ntk[iem] == 0) { // Photon + em.isEM = true; + addCaloToPF(r, em); + em.used = true; + if (debug_) + printf("PFAlgo3 \t EM %3d (pt %7.2f) ---> promoted to photon\n", iem, em.floatPt()); + continue; + } + float ptdiff = em.floatPt() - em2sumtkpt[iem]; + float pterr = trackEmUseAlsoTrackSigma_ ? std::max(em2sumtkpterr[iem], em.floatPtErr()) : em.floatPtErr(); + // avoid "pt = inf +- inf" track to become an electron. + if (pterr > 2 * em.floatPt()) { + pterr = 2 * em.floatPt(); + if (debug_) + printf("PFAlgo3 \t EM %3d (pt %7.2f) ---> clamp pterr ---> new ptdiff %7.2f +- %7.2f\n", + iem, + em.floatPt(), + ptdiff, + pterr); + } + + if (ptdiff > -ptMatchLow_ * pterr) { + em.isEM = true; + em.used = true; + // convert leftover to a photon if significant + if (ptdiff > +ptMatchHigh_ * pterr) { + auto &p = addCaloToPF(r, em); + p.setFloatPt(ptdiff); + if (debug_) + printf("PFAlgo3 \t EM %3d (pt %7.2f) ---> promoted to electron(s) + photon (pt %7.2f)\n", + iem, + em.floatPt(), + ptdiff); + } else { + em.hwFlags = 1; // may use calo momentum + if (debug_) + printf("PFAlgo3 \t EM %3d (pt %7.2f) ---> promoted to electron(s)\n", iem, em.floatPt()); + } + } else { + em.isEM = false; + em.used = false; + em.hwFlags = 0; + //discardCalo(r, em, 2); + } + } +} + +void PFAlgo3::emtk_algo(Region &r, + const std::vector &tk2em, + const std::vector &em2ntk, + const std::vector &em2sumtkpterr) const { + // promote all flagged tracks to electrons + for (int itk = 0, ntk = r.track.size(); itk < ntk; ++itk) { + auto &tk = r.track[itk]; + if (tk2em[itk] == -1 || tk.muonLink) + continue; + const auto &em = r.emcalo[tk2em[itk]]; + if (em.isEM) { + auto &p = addTrackToPF(r, tk); + p.cluster.src = em.src; + // FIXME to check if this is useful + if (trackEmMayUseCaloMomenta_ && em2ntk[tk2em[itk]] == 1 && em.hwFlags == 1) { + if (em.floatPtErr() < em2sumtkpterr[tk2em[itk]]) { + p.setFloatPt(em.floatPt()); + } + } + if (debug_) + printf("PFAlgo3 \t track %3d (pt %7.2f) matched to EM %3d (pt %7.2f) promoted to electron with pt %7.2f\n", + itk, + tk.floatPt(), + tk2em[itk], + em.floatPt(), + p.floatPt()); + p.hwId = l1t::PFCandidate::Electron; + tk.used = true; + } + } +} + +void PFAlgo3::sub_em2calo(Region &r, const std::vector &em2calo) const { + // subtract EM component from Calo clusters for all photons and electrons (within tracker coverage) + // kill clusters that end up below their own uncertainty, or that loose 90% of the energy, + // unless they still have live EM clusters pointing to them + for (int ic = 0, nc = r.calo.size(); ic < nc; ++ic) { + auto &calo = r.calo[ic]; + float pt0 = calo.floatPt(), ept0 = calo.floatEmPt(), pt = pt0, ept = ept0; + bool keepme = false; + for (int iem = 0, nem = r.emcalo.size(); iem < nem; ++iem) { + if (em2calo[iem] == ic) { + const auto &em = r.emcalo[iem]; + if (em.isEM) { + if (debug_) + printf( + "PFAlgo3 \t EM %3d (pt %7.2f) is subtracted from calo %3d (pt %7.2f) scaled by %.3f (deltaPt = " + "%7.2f)\n", + iem, + em.floatPt(), + ic, + calo.floatPt(), + emHadSubtractionPtSlope_, + emHadSubtractionPtSlope_ * em.floatPt()); + pt -= emHadSubtractionPtSlope_ * em.floatPt(); + ept -= em.floatPt(); + } else { + keepme = true; + if (debug_) + printf( + "PFAlgo3 \t EM %3d (pt %7.2f) not subtracted from calo %3d (pt %7.2f), and calo marked to be kept " + "after EM subtraction\n", + iem, + em.floatPt(), + ic, + calo.floatPt()); + } + } + } + if (pt < pt0) { + if (debug_) + printf("PFAlgo3 \t calo %3d (pt %7.2f +- %7.2f) has a subtracted pt of %7.2f, empt %7.2f -> %7.2f, isem %d\n", + ic, + calo.floatPt(), + calo.floatPtErr(), + pt, + ept0, + ept, + calo.isEM); + calo.setFloatPt(pt); + calo.setFloatEmPt(ept); + if (!keepme && + ((emCaloUseAlsoCaloSigma_ ? pt < calo.floatPtErr() : false) || pt <= 0.125 * pt0 || + (calo.isEM && ept <= 0.125 * ept0))) { // the <= is important since in firmware the pt0/8 can be zero + if (debug_) + printf("PFAlgo3 \t calo %3d (pt %7.2f) ----> discarded\n", ic, calo.floatPt()); + calo.used = true; + calo.setFloatPt(pt0); //discardCalo(r, calo, 1); // log this as discarded, for debugging + } + } + } +} + +void PFAlgo3::link_tk2calo(Region &r, std::vector &tk2calo) const { + // track to calo matching (first iteration, with a lower bound on the calo pt; there may be another one later) + for (int itk = 0, ntk = r.track.size(); itk < ntk; ++itk) { + const auto &tk = r.track[itk]; + if (tk.muonLink || tk.used) + continue; // not necessary but just a waste of CPU otherwise + float drbest = drMatch_, dptscale = 0; + switch (tkCaloLinkMetric_) { + case BestByDR: + drbest = drMatch_; + break; + case BestByDRPt: + drbest = 1.0; + dptscale = drMatch_ / tk.floatCaloPtErr(); + break; + case BestByDR2Pt2: + drbest = 1.0; + dptscale = drMatch_ / tk.floatCaloPtErr(); + break; + } + float minCaloPt = tk.floatPt() - ptMatchLow_ * tk.floatCaloPtErr(); + if (debug_) + printf("PFAlgo3 \t track %3d (pt %7.2f) to be matched to calo, min pT %7.2f\n", itk, tk.floatPt(), minCaloPt); + for (int ic = 0, nc = r.calo.size(); ic < nc; ++ic) { + auto &calo = r.calo[ic]; + if (calo.used || calo.floatPt() <= minCaloPt) + continue; + float dr = floatDR(tk, calo), dq; + switch (tkCaloLinkMetric_) { + case BestByDR: + if (dr < drbest) { + tk2calo[itk] = ic; + drbest = dr; + } + break; + case BestByDRPt: + dq = dr + std::max(tk.floatPt() - calo.floatPt(), 0.) * dptscale; + //if (debug_ && dr < 0.2) printf("PFAlgo3 \t\t\t track %3d (pt %7.2f) vs calo %3d (pt %7.2f): dr %.3f, dq %.3f\n", itk, tk.floatPt(), ic, calo.floatPt(), dr, dq); + if (dr < drMatch_ && dq < drbest) { + tk2calo[itk] = ic; + drbest = dq; + } + break; + case BestByDR2Pt2: + dq = hypot(dr, std::max(tk.floatPt() - calo.floatPt(), 0.) * dptscale); + //if (debug_ && dr < 0.2) printf("PFAlgo3 \t\t\t track %3d (pt %7.2f) vs calo %3d (pt %7.2f): dr %.3f, dq %.3f\n", itk, tk.floatPt(), ic, calo.floatPt(), dr, dq); + if (dr < drMatch_ && dq < drbest) { + tk2calo[itk] = ic; + drbest = dq; + } + break; + } + } + if (debug_ && tk2calo[itk] != -1) + printf("PFAlgo3 \t track %3d (pt %7.2f) matches to calo %3d (pt %7.2f) with dist %.3f\n", + itk, + tk.floatPt(), + tk2calo[itk], + tk2calo[itk] == -1 ? 0.0 : r.calo[tk2calo[itk]].floatPt(), + drbest); + // now we re-do this for debugging sake, it may be done for real later + if (debug_ && tk2calo[itk] == -1) { + int ibest = -1; + drbest = 0.3; + for (int ic = 0, nc = r.calo.size(); ic < nc; ++ic) { + auto &calo = r.calo[ic]; + if (calo.used) + continue; + float dr = floatDR(tk, calo); + if (dr < drbest) { + ibest = ic; + drbest = dr; + } + } + if (ibest != -1) + printf( + "PFAlgo3 \t track %3d (pt %7.2f) would match to calo %3d (pt %7.2f) with dr %.3f if the pt min and dr " + "requirement had been relaxed\n", + itk, + tk.floatPt(), + ibest, + r.calo[ibest].floatPt(), + drbest); + } + } +} + +void PFAlgo3::sum_tk2calo(Region &r, + const std::vector &tk2calo, + std::vector &calo2ntk, + std::vector &calo2sumtkpt, + std::vector &calo2sumtkpterr) const { + // for each calo, compute the sum of the track pt + for (int ic = 0, nc = r.calo.size(); ic < nc; ++ic) { + const auto &calo = r.calo[ic]; + if (r.globalAbsEta(calo.floatEta()) > 2.5) + continue; + for (int itk = 0, ntk = r.track.size(); itk < ntk; ++itk) { + if (tk2calo[itk] == ic) { + const auto &tk = r.track[itk]; + if (tk.muonLink || tk.used) + continue; + calo2ntk[ic]++; + calo2sumtkpt[ic] += tk.floatPt(); + calo2sumtkpterr[ic] += std::pow(tk.floatCaloPtErr(), sumTkCaloErr2_ ? 2 : 1); + } + } + if (sumTkCaloErr2_ && calo2sumtkpterr[ic] > 0) + calo2sumtkpterr[ic] = std::sqrt(calo2sumtkpterr[ic]); + } +} + +void PFAlgo3::unlinkedtk_algo(Region &r, const std::vector &tk2calo) const { + // in the meantime, promote unlinked low pt tracks to hadrons + for (int itk = 0, ntk = r.track.size(); itk < ntk; ++itk) { + auto &tk = r.track[itk]; + if (tk2calo[itk] != -1 || tk.muonLink || tk.used) + continue; + float maxPt = (tk.hwStubs >= tightTrackMinStubs_ && tk.hwChi2 < 10 * tightTrackMaxChi2_) ? tightTrackMaxInvisiblePt_ + : maxInvisiblePt_; + if (tk.floatPt() < maxPt) { + if (debug_) + printf("PFAlgo3 \t track %3d (pt %7.2f) not matched to calo, kept as charged hadron\n", itk, tk.floatPt()); + auto &p = addTrackToPF(r, tk); + p.hwStatus = GoodTK_NoCalo; + tk.used = true; + } else { + if (debug_) + printf("PFAlgo3 \t track %3d (pt %7.2f) not matched to calo, dropped\n", itk, tk.floatPt()); + //discardTrack(r, tk, BadTK_NoCalo); // log this as discarded, for debugging + } + } +} + +void PFAlgo3::calo_relink(Region &r, + const std::vector &calo2ntk, + const std::vector &calo2sumtkpt, + const std::vector &calo2sumtkpterr) const { + /// OPTIONAL STEP: try to recover split hadron showers (v1.0): + // take hadrons that are not track matched, close by a hadron which has an excess of track pt vs calo pt + // add this pt to the calo pt of the other cluster + // off by default, as it seems to not do much in jets even if it helps remove tails in single-pion events + std::vector addtopt(r.calo.size(), 0); + for (int ic = 0, nc = r.calo.size(); ic < nc; ++ic) { + auto &calo = r.calo[ic]; + if (calo2ntk[ic] != 0 || calo.used || r.globalAbsEta(calo.floatEta()) > 2.5) + continue; + int i2best = -1; + float drbest = caloReLinkDr_; + for (int ic2 = 0; ic2 < nc; ++ic2) { + const auto &calo2 = r.calo[ic2]; + if (calo2ntk[ic2] == 0 || calo2.used || r.globalAbsEta(calo2.floatEta()) > 2.5) + continue; + float dr = floatDR(calo, calo2); + //// uncomment below for more verbose debugging + //if (debug_ && dr < 0.5) printf("PFAlgo3 \t calo %3d (pt %7.2f) with no tracks is at dr %.3f from calo %3d with pt %7.2f (sum tk pt %7.2f), track excess %7.2f +- %7.2f\n", ic, calo.floatPt(), dr, ic2, calo2.floatPt(), calo2sumtkpt[ic2], calo2sumtkpt[ic2] - calo2.floatPt(), useTrackCaloSigma_ ? calo2sumtkpterr[ic2] : calo2.floatPtErr()); + if (dr < drbest) { + float ptdiff = + calo2sumtkpt[ic2] - calo2.floatPt() + (useTrackCaloSigma_ ? calo2sumtkpterr[ic2] : calo2.floatPtErr()); + if (ptdiff >= caloReLinkThreshold_ * calo.floatPt()) { + i2best = ic2; + drbest = dr; + } + } + } + if (i2best != -1) { + const auto &calo2 = r.calo[i2best]; + if (debug_) + printf( + "PFAlgo3 \t calo %3d (pt %7.2f) with no tracks matched within dr %.3f with calo %3d with pt %7.2f (sum tk " + "pt %7.2f), track excess %7.2f +- %7.2f\n", + ic, + calo.floatPt(), + drbest, + i2best, + calo2.floatPt(), + calo2sumtkpt[i2best], + calo2sumtkpt[i2best] - calo2.floatPt(), + useTrackCaloSigma_ ? calo2sumtkpterr[i2best] : calo2.floatPtErr()); + calo.used = true; + addtopt[i2best] += calo.floatPt(); + } + } + // we do this at the end, so that the above loop is parallelizable + for (int ic = 0, nc = r.calo.size(); ic < nc; ++ic) { + if (addtopt[ic]) { + auto &calo = r.calo[ic]; + if (debug_) + printf("PFAlgo3 \t calo %3d (pt %7.2f, sum tk pt %7.2f) is increased to pt %7.2f after merging\n", + ic, + calo.floatPt(), + calo2sumtkpt[ic], + calo.floatPt() + addtopt[ic]); + calo.setFloatPt(calo.floatPt() + addtopt[ic]); + } + } +} + +void PFAlgo3::linkedcalo_algo(Region &r, + const std::vector &calo2ntk, + const std::vector &calo2sumtkpt, + const std::vector &calo2sumtkpterr, + std::vector &calo2alpha) const { + /// ------------- next step (needs the previous) ---------------- + // process matched calo clusters, compare energy to sum track pt + for (int ic = 0, nc = r.calo.size(); ic < nc; ++ic) { + auto &calo = r.calo[ic]; + if (calo2ntk[ic] == 0 || calo.used) + continue; + float ptdiff = calo.floatPt() - calo2sumtkpt[ic]; + float pterr = useTrackCaloSigma_ ? calo2sumtkpterr[ic] : calo.floatPtErr(); + if (debug_) + printf( + "PFAlgo3 \t calo %3d (pt %7.2f +- %7.2f, empt %7.2f) has %2d tracks (sumpt %7.2f, sumpterr %7.2f), ptdif " + "%7.2f +- %7.2f\n", + ic, + calo.floatPt(), + calo.floatPtErr(), + calo.floatEmPt(), + calo2ntk[ic], + calo2sumtkpt[ic], + calo2sumtkpterr[ic], + ptdiff, + pterr); + if (ptdiff > +ptMatchHigh_ * pterr) { + if (ecalPriority_) { + if (calo.floatEmPt() > 1) { + float emptdiff = std::min(ptdiff, calo.floatEmPt()); + if (debug_) + printf( + "PFAlgo3 \t calo %3d (pt %7.2f, empt %7.2f) ---> make photon with pt %7.2f, reduce ptdiff to %7.2f " + "+- %7.2f\n", + ic, + calo.floatPt(), + calo.floatEmPt(), + emptdiff, + ptdiff - emptdiff, + pterr); + auto &p = addCaloToPF(r, calo); + p.setFloatPt(emptdiff); + p.hwId = l1t::PFCandidate::Photon; + ptdiff -= emptdiff; + } + if (ptdiff > 2) { + if (debug_) + printf("PFAlgo3 \t calo %3d (pt %7.2f, empt %7.2f) ---> make also neutral hadron with pt %7.2f\n", + ic, + calo.floatPt(), + calo.floatEmPt(), + ptdiff); + auto &p = addCaloToPF(r, calo); + p.setFloatPt(ptdiff); + p.hwId = l1t::PFCandidate::NeutralHadron; + } + } else { + if (debug_) + printf("PFAlgo3 \t calo %3d (pt %7.2f) ---> promoted to neutral with pt %7.2f\n", + ic, + calo.floatPt(), + ptdiff); + auto &p = addCaloToPF(r, calo); + p.setFloatPt(ptdiff); + calo.hwFlags = 0; + } + } else if (ptdiff > -ptMatchLow_ * pterr) { + // nothing to do (weighted average happens when we process the tracks) + calo.hwFlags = 1; + if (debug_) + printf("PFAlgo3 \t calo %3d (pt %7.2f) ---> to be deleted, will use tracks instead\n", ic, calo.floatPt()); + //discardCalo(r, calo, 0); // log this as discarded, for debugging + } else { + // tracks overshoot, rescale to tracks to calo + calo2alpha[ic] = rescaleTracks_ ? calo.floatPt() / calo2sumtkpt[ic] : 1.0; + calo.hwFlags = 2; + if (debug_ && rescaleTracks_) + printf("PFAlgo3 \t calo %3d (pt %7.2f) ---> tracks overshoot and will be scaled down by %.4f\n", + ic, + calo.floatPt(), + calo2alpha[ic]); + if (debug_ && !rescaleTracks_) + printf("PFAlgo3 \t calo %3d (pt %7.2f) ---> tracks overshoot by %.4f\n", + ic, + calo.floatPt(), + calo2sumtkpt[ic] / calo.floatPt()); + } + calo.used = true; + } +} + +void PFAlgo3::linkedtk_algo(Region &r, + const std::vector &tk2calo, + const std::vector &calo2ntk, + const std::vector &calo2alpha) const { + // process matched tracks, if necessary rescale or average + for (int itk = 0, ntk = r.track.size(); itk < ntk; ++itk) { + auto &tk = r.track[itk]; + if (tk2calo[itk] == -1 || tk.muonLink || tk.used) + continue; + auto &p = addTrackToPF(r, tk); + tk.used = true; + const auto &calo = r.calo[tk2calo[itk]]; + p.cluster.src = calo.src; + if (calo.hwFlags == 1) { + // can do weighted average if there's just one track + if (calo2ntk[tk2calo[itk]] == 1 && caloTrkWeightedAverage_) { + p.hwStatus = GoodTK_Calo_TkPt; + float ptavg = tk.floatPt(); + if (tk.floatPtErr() > 0) { + float wcalo = 1.0 / std::pow(tk.floatCaloPtErr(), 2); + float wtk = 1.0 / std::pow(tk.floatPtErr(), 2); + ptavg = (calo.floatPt() * wcalo + tk.floatPt() * wtk) / (wcalo + wtk); + p.hwStatus = GoodTK_Calo_TkCaloPt; + } + p.setFloatPt(ptavg); + if (debug_) + printf( + "PFAlgo3 \t track %3d (pt %7.2f +- %7.2f) combined with calo %3d (pt %7.2f +- %7.2f (from tk) yielding " + "candidate of pt %7.2f\n", + itk, + tk.floatPt(), + tk.floatPtErr(), + tk2calo[itk], + calo.floatPt(), + tk.floatCaloPtErr(), + ptavg); + } else { + p.hwStatus = GoodTK_Calo_TkPt; + if (debug_) + printf("PFAlgo3 \t track %3d (pt %7.2f) linked to calo %3d promoted to charged hadron\n", + itk, + tk.floatPt(), + tk2calo[itk]); + } + } else if (calo.hwFlags == 2) { + // must rescale + p.setFloatPt(tk.floatPt() * calo2alpha[tk2calo[itk]]); + p.hwStatus = GoodTk_Calo_CaloPt; + if (debug_) + printf( + "PFAlgo3 \t track %3d (pt %7.2f, stubs %2d chi2 %7.1f) linked to calo %3d promoted to charged hadron with " + "pt %7.2f after maybe rescaling\n", + itk, + tk.floatPt(), + int(tk.hwStubs), + tk.hwChi2 * 0.1f, + tk2calo[itk], + p.floatPt()); + } + } +} + +void PFAlgo3::unlinkedcalo_algo(Region &r) const { + // process unmatched calo clusters + for (int ic = 0, nc = r.calo.size(); ic < nc; ++ic) { + if (!r.calo[ic].used) { + addCaloToPF(r, r.calo[ic]); + if (debug_) + printf("PFAlgo3 \t calo %3d (pt %7.2f) not linked, promoted to neutral\n", ic, r.calo[ic].floatPt()); + } + } +} + +void PFAlgo3::save_muons(Region &r, const std::vector &tk2mu) const { + // finally do muons + for (int itk = 0, ntk = r.track.size(); itk < ntk; ++itk) { + if (r.track[itk].muonLink) { + auto &p = addTrackToPF(r, r.track[itk]); + p.muonsrc = r.muon[tk2mu[itk]].src; + if (debug_) + printf("PFAlgo3 \t track %3d (pt %7.2f) promoted to muon.\n", itk, r.track[itk].floatPt()); + } + } +} diff --git a/L1Trigger/Phase2L1ParticleFlow/src/PFAlgoBase.cc b/L1Trigger/Phase2L1ParticleFlow/src/PFAlgoBase.cc new file mode 100644 index 0000000000000..f3b5f3d83652b --- /dev/null +++ b/L1Trigger/Phase2L1ParticleFlow/src/PFAlgoBase.cc @@ -0,0 +1,57 @@ +#include "L1Trigger/Phase2L1ParticleFlow/interface/PFAlgoBase.h" + +#include "DataFormats/L1TParticleFlow/interface/PFCandidate.h" + +using namespace l1tpf_impl; + +PFAlgoBase::PFAlgoBase(const edm::ParameterSet &iConfig) : debug_(iConfig.getUntrackedParameter("debug", 0)) {} + +PFAlgoBase::~PFAlgoBase() {} + +void PFAlgoBase::initRegion(Region &r) const { + r.inputSort(); + r.pf.clear(); + r.puppi.clear(); + for (auto &c : r.calo) + c.used = false; + for (auto &c : r.emcalo) + c.used = false; + for (auto &t : r.track) { + t.used = false; + t.muonLink = false; + } +} + +PFParticle &PFAlgoBase::addTrackToPF(std::vector &pfs, const PropagatedTrack &tk) const { + PFParticle pf; + pf.hwPt = tk.hwPt; + pf.hwEta = tk.hwEta; + pf.hwPhi = tk.hwPhi; + pf.hwVtxEta = tk.hwEta; // FIXME: get from the track + pf.hwVtxPhi = tk.hwPhi; // before propagation + pf.track = tk; + pf.cluster.hwPt = 0; + pf.cluster.src = nullptr; + pf.muonsrc = nullptr; + pf.hwId = (tk.muonLink ? l1t::PFCandidate::Muon : l1t::PFCandidate::ChargedHadron); + pf.hwStatus = 0; + pfs.push_back(pf); + return pfs.back(); +} + +PFParticle &PFAlgoBase::addCaloToPF(std::vector &pfs, const CaloCluster &calo) const { + PFParticle pf; + pf.hwPt = calo.hwPt; + pf.hwEta = calo.hwEta; + pf.hwPhi = calo.hwPhi; + pf.hwVtxEta = calo.hwEta; + pf.hwVtxPhi = calo.hwPhi; + pf.track.hwPt = 0; + pf.track.src = nullptr; + pf.cluster = calo; + pf.muonsrc = nullptr; + pf.hwId = (calo.isEM ? l1t::PFCandidate::Photon : l1t::PFCandidate::NeutralHadron); + pf.hwStatus = 0; + pfs.push_back(pf); + return pfs.back(); +} diff --git a/L1Trigger/Phase2L1ParticleFlow/src/PUAlgoBase.cc b/L1Trigger/Phase2L1ParticleFlow/src/PUAlgoBase.cc new file mode 100644 index 0000000000000..05bd650154d49 --- /dev/null +++ b/L1Trigger/Phase2L1ParticleFlow/src/PUAlgoBase.cc @@ -0,0 +1,81 @@ +#include "L1Trigger/Phase2L1ParticleFlow/interface/PUAlgoBase.h" + +#include + +using namespace l1tpf_impl; + +PUAlgoBase::PUAlgoBase(const edm::ParameterSet &iConfig) + : debug_(iConfig.getUntrackedParameter("debug", 0)), + etaCharged_(iConfig.getParameter("etaCharged")), + vtxRes_(iConfig.getParameter("vtxRes")), + vtxAdaptiveCut_(iConfig.getParameter("vtxAdaptiveCut")) {} + +PUAlgoBase::~PUAlgoBase() {} + +void PUAlgoBase::runChargedPV(Region &r, float z0) const { + int16_t iZ0 = round(z0 * InputTrack::Z0_SCALE); + int16_t iDZ = round(1.5 * vtxRes_ * InputTrack::Z0_SCALE); + int16_t iDZ2 = vtxAdaptiveCut_ ? round(4.0 * vtxRes_ * InputTrack::Z0_SCALE) : iDZ; + for (PFParticle &p : r.pf) { + bool barrel = std::abs(p.track.hwVtxEta) < InputTrack::VTX_ETA_1p3; + if (r.relativeCoordinates) + barrel = + (std::abs(r.globalAbsEta(p.track.floatVtxEta())) < 1.3); // FIXME could make a better integer implementation + p.chargedPV = (p.hwId <= 1 && std::abs(p.track.hwZ0 - iZ0) < (barrel ? iDZ : iDZ2)); + } +} + +void PUAlgoBase::doVertexing(std::vector &rs, VertexAlgo algo, float &pvdz) const { + int lNBins = int(40. / vtxRes_); + if (algo == TPVtxAlgo) + lNBins *= 3; + std::unique_ptr h_dz(new TH1F("h_dz", "h_dz", lNBins, -20, 20)); + if (algo != ExternalVtxAlgo) { + for (const Region &r : rs) { + for (const PropagatedTrack &p : r.track) { + if (rs.size() > 1) { + if (!r.fiducialLocal(p.floatVtxEta(), p.floatVtxPhi())) + continue; // skip duplicates + } + h_dz->Fill(p.floatDZ(), std::min(p.floatPt(), 50.f)); + } + } + } + switch (algo) { + case ExternalVtxAlgo: + break; + case OldVtxAlgo: { + int imaxbin = h_dz->GetMaximumBin(); + pvdz = h_dz->GetXaxis()->GetBinCenter(imaxbin); + }; break; + case TPVtxAlgo: { + float max = 0; + int bmax = -1; + for (int b = 1; b <= lNBins; ++b) { + float sum3 = h_dz->GetBinContent(b) + h_dz->GetBinContent(b + 1) + h_dz->GetBinContent(b - 1); + if (bmax == -1 || sum3 > max) { + max = sum3; + bmax = b; + } + } + pvdz = h_dz->GetXaxis()->GetBinCenter(bmax); + }; break; + } + int16_t iZ0 = round(pvdz * InputTrack::Z0_SCALE); + int16_t iDZ = round(1.5 * vtxRes_ * InputTrack::Z0_SCALE); + int16_t iDZ2 = vtxAdaptiveCut_ ? round(4.0 * vtxRes_ * InputTrack::Z0_SCALE) : iDZ; + for (Region &r : rs) { + for (PropagatedTrack &p : r.track) { + bool central = std::abs(p.hwVtxEta) < InputTrack::VTX_ETA_1p3; + if (r.relativeCoordinates) + central = + (std::abs(r.globalAbsEta(p.floatVtxEta())) < 1.3); // FIXME could make a better integer implementation + p.fromPV = (std::abs(p.hwZ0 - iZ0) < (central ? iDZ : iDZ2)); + } + } +} + +const std::vector &PUAlgoBase::puGlobalNames() const { + static const std::vector empty_; + return empty_; +} diff --git a/L1Trigger/Phase2L1ParticleFlow/src/ParametricResolution.cc b/L1Trigger/Phase2L1ParticleFlow/src/ParametricResolution.cc new file mode 100644 index 0000000000000..22d0c9cd26bee --- /dev/null +++ b/L1Trigger/Phase2L1ParticleFlow/src/ParametricResolution.cc @@ -0,0 +1 @@ +#include "L1Trigger/Phase2L1ParticleFlow/interface/ParametricResolution.h" diff --git a/L1Trigger/Phase2L1ParticleFlow/src/PuppiAlgo.cc b/L1Trigger/Phase2L1ParticleFlow/src/PuppiAlgo.cc new file mode 100644 index 0000000000000..faba1fce17053 --- /dev/null +++ b/L1Trigger/Phase2L1ParticleFlow/src/PuppiAlgo.cc @@ -0,0 +1,265 @@ +#include "L1Trigger/Phase2L1ParticleFlow/interface/PuppiAlgo.h" +#include "DataFormats/L1TParticleFlow/interface/PFCandidate.h" +#include "FWCore/Utilities/interface/Exception.h" +#include "DataFormats/Math/interface/deltaR.h" + +#include "Math/ProbFunc.h" + +namespace { + std::vector vd2vf(const std::vector &vd) { + std::vector ret; + ret.insert(ret.end(), vd.begin(), vd.end()); + return ret; + } +} // namespace + +using namespace l1tpf_impl; + +PuppiAlgo::PuppiAlgo(const edm::ParameterSet &iConfig) + : PUAlgoBase(iConfig), + puppiDr_(iConfig.getParameter("puppiDr")), + puppiDrMin_(iConfig.getParameter("puppiDrMin")), + puppiPtMax_(iConfig.getParameter("puppiPtMax")), + puppiEtaCuts_(vd2vf(iConfig.getParameter>("puppiEtaCuts"))), + puppiPtCuts_(vd2vf(iConfig.getParameter>("puppiPtCuts"))), + puppiPtCutsPhotons_(vd2vf(iConfig.getParameter>("puppiPtCutsPhotons"))), + puppiUsingBareTracks_(iConfig.getParameter("puppiUsingBareTracks")) { + debug_ = iConfig.getUntrackedParameter("puppiDebug", debug_); + if (puppiEtaCuts_.size() != puppiPtCuts_.size() || puppiPtCuts_.size() != puppiPtCutsPhotons_.size()) { + throw cms::Exception("Configuration", "Bad PUPPI config"); + } + for (unsigned int i = 0, n = puppiEtaCuts_.size(); i < n; ++i) { + intPuppiEtaCuts_.push_back(std::round(puppiEtaCuts_[i] * CaloCluster::ETAPHI_SCALE)); + intPuppiPtCuts_.push_back(std::round(puppiPtCuts_[i] * CaloCluster::PT_SCALE)); + intPuppiPtCutsPhotons_.push_back(std::round(puppiPtCutsPhotons_[i] * CaloCluster::PT_SCALE)); + } +} + +PuppiAlgo::~PuppiAlgo() {} + +const std::vector &PuppiAlgo::puGlobalNames() const { + static const std::vector names_{"alphaCMed", "alphaCRms", "alphaFMed", "alphaFRms"}; + return names_; +} +void PuppiAlgo::doPUGlobals(const std::vector &rs, float npu, std::vector &globals) const { + globals.resize(4); + computePuppiMedRMS(rs, globals[0], globals[1], globals[2], globals[3]); +} + +void PuppiAlgo::runNeutralsPU(Region &r, float npu, const std::vector &globals) const { + std::vector alphaC, alphaF; + computePuppiAlphas(r, alphaC, alphaF); + computePuppiWeights(r, alphaC, alphaF, globals[0], globals[1], globals[2], globals[3]); + fillPuppi(r); +} + +void PuppiAlgo::computePuppiAlphas(const Region &r, std::vector &alphaC, std::vector &alphaF) const { + alphaC.resize(r.pf.size()); + alphaF.resize(r.pf.size()); + float puppiDr2 = std::pow(puppiDr_, 2), puppiDr2min = std::pow(puppiDrMin_, 2); + for (unsigned int ip = 0, np = r.pf.size(); ip < np; ++ip) { + const PFParticle &p = r.pf[ip]; + if (p.hwId <= 1) + continue; + // neutral + alphaC[ip] = 0; + alphaF[ip] = 0; + for (const PFParticle &p2 : r.pf) { + float dr2 = ::deltaR2(p.floatEta(), p.floatPhi(), p2.floatEta(), p2.floatPhi()); + if (dr2 > 0 && dr2 < puppiDr2) { + float w = std::pow(std::min(p2.floatPt(), puppiPtMax_), 2) / std::max(puppiDr2min, dr2); + alphaF[ip] += w; + if (p2.chargedPV) + alphaC[ip] += w; + } + } + if (puppiUsingBareTracks_) { + alphaC[ip] = 0; + for (const PropagatedTrack &p2 : r.track) { + if (!p2.fromPV) + continue; + float dr2 = ::deltaR2(p.floatEta(), p.floatPhi(), p2.floatEta(), p2.floatPhi()); + if (dr2 > 0 && dr2 < puppiDr2) { + alphaC[ip] += std::pow(std::min(p2.floatPt(), puppiPtMax_), 2) / std::max(puppiDr2min, dr2); + } + } + } + } +} + +void PuppiAlgo::computePuppiWeights(Region &r, + const std::vector &alphaC, + const std::vector &alphaF, + float alphaCMed, + float alphaCRms, + float alphaFMed, + float alphaFRms) const { + int16_t ietacut = std::round(etaCharged_ * CaloCluster::ETAPHI_SCALE); + for (unsigned int ip = 0, np = r.pf.size(); ip < np; ++ip) { + PFParticle &p = r.pf[ip]; + // charged + if (p.hwId == l1t::PFCandidate::ChargedHadron || p.hwId == l1t::PFCandidate::Electron || + p.hwId == l1t::PFCandidate::Muon) { + p.setPuppiW(p.chargedPV || p.hwId == l1t::PFCandidate::Muon ? 1.0 : 0); + if (debug_) + printf( + "PUPPI \t charged id %1d pt %7.2f eta %+5.2f phi %+5.2f alpha %+7.2f x2 %+7.2f --> puppi weight %.3f " + "puppi pt %7.2f \n", + p.hwId, + p.floatPt(), + p.floatEta(), + p.floatPhi(), + 0., + 0., + p.floatPuppiW(), + p.floatPt() * p.floatPuppiW()); + continue; + } + // neutral + float alpha = -99, x2 = -99; + bool central = std::abs(p.hwEta) < ietacut; + if (r.relativeCoordinates) + central = + (std::abs(r.globalAbsEta(p.floatEta())) < etaCharged_); // FIXME could make a better integer implementation + if (central) { + if (alphaC[ip] > 0) { + alpha = std::log(alphaC[ip]); + x2 = (alpha - alphaCMed) * std::abs(alpha - alphaCMed) / std::pow(alphaCRms, 2); + p.setPuppiW(ROOT::Math::chisquared_cdf(x2, 1)); + } else { + p.setPuppiW(0); + } + } else { + if (alphaF[ip] > 0) { + alpha = std::log(alphaF[ip]); + x2 = (alpha - alphaFMed) * std::abs(alpha - alphaFMed) / std::pow(alphaFRms, 2); + p.setPuppiW(ROOT::Math::chisquared_cdf(x2, 1)); + } else { + p.setPuppiW(0); + } + } + if (debug_) + printf( + "PUPPI \t neutral id %1d pt %7.2f eta %+5.2f phi %+5.2f alpha %+7.2f x2 %+7.2f --> puppi weight %.3f " + "puppi pt %7.2f \n", + p.hwId, + p.floatPt(), + p.floatEta(), + p.floatPhi(), + alpha, + x2, + p.floatPuppiW(), + p.floatPt() * p.floatPuppiW()); + } +} + +void PuppiAlgo::computePuppiMedRMS( + const std::vector &rs, float &alphaCMed, float &alphaCRms, float &alphaFMed, float &alphaFRms) const { + std::vector alphaFs; + std::vector alphaCs; + int16_t ietacut = std::round(etaCharged_ * CaloCluster::ETAPHI_SCALE); + float puppiDr2 = std::pow(puppiDr_, 2), puppiDr2min = std::pow(puppiDrMin_, 2); + for (const Region &r : rs) { + for (const PFParticle &p : r.pf) { + bool central = std::abs(p.hwEta) < ietacut; + if (r.relativeCoordinates) + central = (r.globalAbsEta(p.floatEta()) < etaCharged_); // FIXME could make a better integer implementation + if (central) { + if (p.hwId > 1 || p.chargedPV) + continue; + } + float alphaC = 0, alphaF = 0; + for (const PFParticle &p2 : r.pf) { + float dr2 = ::deltaR2(p.floatEta(), p.floatPhi(), p2.floatEta(), p2.floatPhi()); + if (dr2 > 0 && dr2 < puppiDr2) { + float w = std::pow(std::min(p2.floatPt(), puppiPtMax_), 2) / std::max(puppiDr2min, dr2); + alphaF += w; + if (p2.chargedPV) + alphaC += w; + } + } + if (puppiUsingBareTracks_) { + alphaC = 0; + for (const PropagatedTrack &p2 : r.track) { + if (!p2.fromPV) + continue; + float dr2 = ::deltaR2(p.floatEta(), p.floatPhi(), p2.floatEta(), p2.floatPhi()); + if (dr2 > 0 && dr2 < puppiDr2) { + alphaC += std::pow(std::min(p2.floatPt(), puppiPtMax_), 2) / std::max(puppiDr2min, dr2); + } + } + } + if (central) { + if (alphaC > 0) + alphaCs.push_back(std::log(alphaC)); + } else { + if (alphaF > 0) + alphaFs.push_back(std::log(alphaF)); + } + } + } + std::sort(alphaCs.begin(), alphaCs.end()); + std::sort(alphaFs.begin(), alphaFs.end()); + + if (alphaCs.size() > 1) { + alphaCMed = alphaCs[alphaCs.size() / 2 + 1]; + double sum = 0.0; + for (float alpha : alphaCs) + sum += std::pow(alpha - alphaCMed, 2); + alphaCRms = std::sqrt(float(sum) / alphaCs.size()); + } else { + alphaCMed = 8.; + alphaCRms = 8.; + } + + if (alphaFs.size() > 1) { + alphaFMed = alphaFs[alphaFs.size() / 2 + 1]; + double sum = 0.0; + for (float alpha : alphaFs) + sum += std::pow(alpha - alphaFMed, 2); + alphaFRms = std::sqrt(float(sum) / alphaFs.size()); + } else { + alphaFMed = 6.; + alphaFRms = 6.; + } + if (debug_) + printf("PUPPI \t alphaC = %+6.2f +- %6.2f (%4lu), alphaF = %+6.2f +- %6.2f (%4lu)\n", + alphaCMed, + alphaCRms, + alphaCs.size(), + alphaFMed, + alphaFRms, + alphaFs.size()); +} + +void PuppiAlgo::fillPuppi(Region &r) const { + constexpr uint16_t PUPPIW_0p01 = std::round(0.01 * PFParticle::PUPPI_SCALE); + r.puppi.clear(); + for (PFParticle &p : r.pf) { + if (p.hwId == l1t::PFCandidate::ChargedHadron || p.hwId == l1t::PFCandidate::Electron || + p.hwId == l1t::PFCandidate::Muon) { // charged + if (p.hwPuppiWeight > 0) { + r.puppi.push_back(p); + } + } else { // neutral + if (p.hwPuppiWeight > PUPPIW_0p01) { + // FIXME would work better with PUPPI_SCALE being a power of two, to do the shift + // FIXME done with floats + int16_t hwPt = (float(p.hwPt) * float(p.hwPuppiWeight) / float(PFParticle::PUPPI_SCALE)); + int16_t hwPtCut = 0, hwAbsEta = r.relativeCoordinates + ? round(r.globalAbsEta(p.floatEta()) * CaloCluster::ETAPHI_SCALE) + : std::abs(p.hwEta); + for (unsigned int ietaBin = 0, nBins = intPuppiEtaCuts_.size(); ietaBin < nBins; ++ietaBin) { + if (hwAbsEta < intPuppiEtaCuts_[ietaBin]) { + hwPtCut = (p.hwId == l1t::PFCandidate::Photon ? intPuppiPtCutsPhotons_[ietaBin] : intPuppiPtCuts_[ietaBin]); + break; + } + } + if (hwPt > hwPtCut) { + r.puppi.push_back(p); + r.puppi.back().hwPt = hwPt; + } + } + } + } +} diff --git a/L1Trigger/Phase2L1ParticleFlow/src/Region.cc b/L1Trigger/Phase2L1ParticleFlow/src/Region.cc new file mode 100644 index 0000000000000..0f603c7bd8e6c --- /dev/null +++ b/L1Trigger/Phase2L1ParticleFlow/src/Region.cc @@ -0,0 +1,124 @@ +#include "L1Trigger/Phase2L1ParticleFlow/interface/Region.h" +#include "DataFormats/L1TParticleFlow/interface/PFCandidate.h" +#include +#include + +const char *l1tpf_impl::Region::inputTypeName(int type) { + switch (InputType(type)) { + case calo_type: + return "Calo"; + case emcalo_type: + return "EmCalo"; + case track_type: + return "TK"; + case l1mu_type: + return "Mu"; + case n_input_types: + assert(false); + } + return "NO_SUCH_INPUT_TYPE"; +} +const char *l1tpf_impl::Region::outputTypeName(int type) { + switch (OutputType(type)) { + case any_type: + return ""; + case charged_type: + return "Charged"; + case neutral_type: + return "Neutral"; + case electron_type: + return "Electron"; + case pfmuon_type: + return "Muon"; + case charged_hadron_type: + return "ChargedHadron"; + case neutral_hadron_type: + return "NeutralHadron"; + case photon_type: + return "Photon"; + case n_output_types: + assert(false); + } + return "NO_SUCH_OUTPUT_TYPE"; +} + +unsigned int l1tpf_impl::Region::nInput(InputType type) const { + switch (type) { + case calo_type: + return calo.size(); + case emcalo_type: + return emcalo.size(); + case track_type: + return track.size(); + case l1mu_type: + return muon.size(); + case n_input_types: + assert(false); + } + return 9999; +} + +unsigned int l1tpf_impl::Region::nOutput(OutputType type, bool usePuppi, bool fiducial) const { + unsigned int ret = 0; + for (const auto &p : (usePuppi ? puppi : pf)) { + if (p.hwPt <= 0) + continue; + if (fiducial && !fiducialLocal(p.floatEta(), p.floatPhi())) + continue; + switch (type) { + case any_type: + ret++; + break; + case charged_type: + if (p.intCharge() != 0) + ret++; + break; + case neutral_type: + if (p.intCharge() == 0) + ret++; + break; + case electron_type: + if (p.hwId == l1t::PFCandidate::Electron) + ret++; + break; + case pfmuon_type: + if (p.hwId == l1t::PFCandidate::Muon) + ret++; + break; + case charged_hadron_type: + if (p.hwId == l1t::PFCandidate::ChargedHadron) + ret++; + break; + case neutral_hadron_type: + if (p.hwId == l1t::PFCandidate::NeutralHadron) + ret++; + break; + case photon_type: + if (p.hwId == l1t::PFCandidate::Photon) + ret++; + break; + case n_output_types: + assert(false); + } + } + return ret; +} + +void l1tpf_impl::Region::inputSort() { + std::sort(calo.begin(), calo.end()); + std::sort(emcalo.begin(), emcalo.end()); + std::sort(track.begin(), track.end()); + std::sort(muon.begin(), muon.end()); + if (ncaloMax > 0 && calo.size() > ncaloMax) { + caloOverflow = calo.size() - ncaloMax; + calo.resize(ncaloMax); + } + if (nemcaloMax > 0 && emcalo.size() > nemcaloMax) { + emcaloOverflow = emcalo.size() - nemcaloMax; + emcalo.resize(nemcaloMax); + } + if (ntrackMax > 0 && track.size() > ntrackMax) { + trackOverflow = track.size() - ntrackMax; + track.resize(ntrackMax); + } +} diff --git a/L1Trigger/Phase2L1ParticleFlow/src/RegionMapper.cc b/L1Trigger/Phase2L1ParticleFlow/src/RegionMapper.cc new file mode 100644 index 0000000000000..65e0ec9bdbc63 --- /dev/null +++ b/L1Trigger/Phase2L1ParticleFlow/src/RegionMapper.cc @@ -0,0 +1,341 @@ +#include "L1Trigger/Phase2L1ParticleFlow/interface/RegionMapper.h" + +using namespace l1tpf_impl; + +RegionMapper::RegionMapper(const edm::ParameterSet &iConfig) : useRelativeRegionalCoordinates_(false) { + if (iConfig.existsAs>("regions")) { + useRelativeRegionalCoordinates_ = iConfig.getParameter("useRelativeRegionalCoordinates"); + for (const edm::ParameterSet &preg : iConfig.getParameter>("regions")) { + std::vector etaBoundaries = preg.getParameter>("etaBoundaries"); + unsigned int phiSlices = preg.getParameter("phiSlices"); + float etaExtra = preg.getParameter("etaExtra"); + float phiExtra = preg.getParameter("phiExtra"); + float phiWidth = 2 * M_PI / phiSlices; + unsigned int ncalomax = 0, nemcalomax = 0, ntrackmax = 0, nmuonmax = 0, npfmax = 0, npuppimax = 0; + if (preg.existsAs("caloNMax")) + ncalomax = preg.getParameter("caloNMax"); + if (preg.existsAs("emcaloNMax")) + nemcalomax = preg.getParameter("emcaloNMax"); + if (preg.existsAs("trackNMax")) + ntrackmax = preg.getParameter("trackNMax"); + if (preg.existsAs("muonNMax")) + nmuonmax = preg.getParameter("muonNMax"); + if (preg.existsAs("pfNMax")) + npfmax = preg.getParameter("pfNMax"); + if (preg.existsAs("puppiNMax")) + npuppimax = preg.getParameter("puppiNMax"); + for (unsigned int ieta = 0, neta = etaBoundaries.size() - 1; ieta < neta; ++ieta) { + for (unsigned int iphi = 0; iphi < phiSlices; ++iphi) { + float phiCenter = (iphi + 0.5) * phiWidth - M_PI; + regions_.push_back(Region(etaBoundaries[ieta], + etaBoundaries[ieta + 1], + phiCenter, + phiWidth, + etaExtra, + phiExtra, + useRelativeRegionalCoordinates_, + ncalomax, + nemcalomax, + ntrackmax, + nmuonmax, + npfmax, + npuppimax)); + } + } + } + std::string trackRegionMode = "any"; + if (iConfig.existsAs("trackRegionMode")) + trackRegionMode = iConfig.getParameter("trackRegionMode"); + if (trackRegionMode == "atVertex") + trackRegionMode_ = atVertex; + else if (trackRegionMode == "atCalo") + trackRegionMode_ = atCalo; + else if (trackRegionMode == "any") + trackRegionMode_ = any; + else + throw cms::Exception( + "Configuration", + "Unsupported value for trackRegionMode: " + trackRegionMode + " (allowed are 'atVertex', 'atCalo', 'any')"); + std::cout << "L1 RegionMapper: made " << regions_.size() << " regions" << std::endl; + } else { + // start off with a dummy region + unsigned int ncalomax = 0, nemcalomax = 0, ntrackmax = 0, nmuonmax = 0, npfmax = 0, npuppimax = 0; + regions_.push_back(Region(-5.5, + 5.5, + 0, + 2 * M_PI, + 0.5, + 0.5, + useRelativeRegionalCoordinates_, + ncalomax, + nemcalomax, + ntrackmax, + nmuonmax, + npfmax, + npuppimax)); + } +} + +void RegionMapper::clear() { + for (Region &r : regions_) + r.zero(); + clusterRefMap_.clear(); + trackRefMap_.clear(); + muonRefMap_.clear(); +} + +void RegionMapper::addTrack(const l1t::PFTrack &t) { + // now let's be optimistic and make things very simple + // we propagate in floating point the track to the calo + // we add the track to the region corresponding to its vertex (eta,phi) coordinates AND its (eta,phi) calo coordinates + for (Region &r : regions_) { + bool inside = true; + switch (trackRegionMode_) { + case atVertex: + inside = r.contains(t.eta(), t.phi()); + break; + case atCalo: + inside = r.contains(t.caloEta(), t.caloPhi()); + break; + case any: + inside = r.contains(t.eta(), t.phi()) || r.contains(t.caloEta(), t.caloPhi()); + break; + } + if (inside) { + PropagatedTrack prop; + prop.fillInput(t.pt(), r.localEta(t.eta()), r.localPhi(t.phi()), t.charge(), t.vertex().Z(), t.quality(), &t); + prop.fillPropagated(t.pt(), + t.trkPtError(), + t.caloPtError(), + r.localEta(t.caloEta()), + r.localPhi(t.caloPhi()), + t.quality(), + t.isMuon()); + prop.hwStubs = t.nStubs(); + prop.hwChi2 = round(t.chi2() * 10); + r.track.push_back(prop); + } + } +} +void RegionMapper::addTrack(const l1t::PFTrack &t, l1t::PFTrackRef ref) { + addTrack(t); + trackRefMap_[&t] = ref; +} + +void RegionMapper::addMuon(const l1t::Muon &mu) { + // now let's be optimistic and make things very simple + // we don't propagate anything + for (Region &r : regions_) { + if (r.contains(mu.eta(), mu.phi())) { + Muon prop; + prop.fill(mu.pt(), r.localEta(mu.eta()), r.localPhi(mu.phi()), mu.charge(), mu.hwQual(), &mu); + r.muon.push_back(prop); + } + } +} + +void RegionMapper::addMuon(const l1t::TkMuon &mu) { + // now let's be optimistic and make things very simple + // we don't propagate anything + for (Region &r : regions_) { + if (r.contains(mu.eta(), mu.phi())) { + Muon prop; + prop.fill(mu.pt(), r.localEta(mu.eta()), r.localPhi(mu.phi()), mu.charge(), mu.hwQual()); + r.muon.push_back(prop); + } + } +} + +void RegionMapper::addMuon(const l1t::Muon &mu, l1t::PFCandidate::MuonRef ref) { + addMuon(mu); + muonRefMap_[&mu] = ref; +} + +void RegionMapper::addCalo(const l1t::PFCluster &p) { + if (p.pt() == 0) + return; + for (Region &r : regions_) { + if (r.contains(p.eta(), p.phi())) { + CaloCluster calo; + calo.fill(p.pt(), p.emEt(), p.ptError(), r.localEta(p.eta()), r.localPhi(p.phi()), p.isEM(), 0, &p); + r.calo.push_back(calo); + } + } +} +void RegionMapper::addCalo(const l1t::PFCluster &p, l1t::PFClusterRef ref) { + addCalo(p); + clusterRefMap_[&p] = ref; +} + +void RegionMapper::addEmCalo(const l1t::PFCluster &p) { + if (p.pt() == 0) + return; + for (Region &r : regions_) { + if (r.contains(p.eta(), p.phi())) { + CaloCluster calo; + calo.fill(p.pt(), p.emEt(), p.ptError(), r.localEta(p.eta()), r.localPhi(p.phi()), p.isEM(), 0, &p); + r.emcalo.push_back(calo); + } + } +} +void RegionMapper::addEmCalo(const l1t::PFCluster &p, l1t::PFClusterRef ref) { + addEmCalo(p); + clusterRefMap_[&p] = ref; +} + +std::unique_ptr RegionMapper::fetch(bool puppi, float ptMin) const { + auto ret = std::make_unique(); + for (const Region &r : regions_) { + for (const PFParticle &p : (puppi ? r.puppi : r.pf)) { + bool inside = true; + switch (trackRegionMode_) { + case atVertex: + inside = r.fiducialLocal(p.floatVtxEta(), p.floatVtxPhi()); + break; + case atCalo: + inside = r.fiducialLocal(p.floatEta(), p.floatPhi()); + break; + case any: + inside = r.fiducialLocal(p.floatVtxEta(), p.floatVtxPhi()); + break; // WARNING: this may not be the best choice + } + if (!inside) + continue; + if (p.floatPt() > ptMin) { + reco::Particle::PolarLorentzVector p4( + p.floatPt(), r.globalEta(p.floatVtxEta()), r.globalPhi(p.floatVtxPhi()), 0.13f); + ret->emplace_back(l1t::PFCandidate::ParticleType(p.hwId), p.intCharge(), p4, p.floatPuppiW()); + ret->back().setVertex(reco::Particle::Point(0, 0, p.floatDZ())); + ret->back().setStatus(p.hwStatus); + if (p.cluster.src) { + auto match = clusterRefMap_.find(p.cluster.src); + if (match == clusterRefMap_.end()) { + throw cms::Exception("CorruptData") << "Invalid cluster pointer in PF candidate id " << p.hwId << " pt " + << p4.pt() << " eta " << p4.eta() << " phi " << p4.phi(); + } + ret->back().setPFCluster(match->second); + } + if (p.track.src) { + auto match = trackRefMap_.find(p.track.src); + if (match == trackRefMap_.end()) { + throw cms::Exception("CorruptData") << "Invalid track pointer in PF candidate id " << p.hwId << " pt " + << p4.pt() << " eta " << p4.eta() << " phi " << p4.phi(); + } + ret->back().setPFTrack(match->second); + } + if (p.muonsrc) { + auto match = muonRefMap_.find(p.muonsrc); + if (match == muonRefMap_.end()) { + throw cms::Exception("CorruptData") << "Invalid muon pointer in PF candidate id " << p.hwId << " pt " + << p4.pt() << " eta " << p4.eta() << " phi " << p4.phi(); + } + ret->back().setMuon(match->second); + } + } + } + } + return ret; +} + +std::unique_ptr RegionMapper::fetchCalo(float ptMin, bool emcalo) const { + auto ret = std::make_unique(); + for (const Region &r : regions_) { + for (const CaloCluster &p : (emcalo ? r.emcalo : r.calo)) { + if (!r.fiducialLocal(p.floatEta(), p.floatPhi())) + continue; + if (p.floatPt() > ptMin) { + reco::Particle::PolarLorentzVector p4(p.floatPt(), r.globalEta(p.floatEta()), r.globalPhi(p.floatPhi()), 0.13f); + l1t::PFCandidate::ParticleType kind = + (p.isEM || emcalo) ? l1t::PFCandidate::Photon : l1t::PFCandidate::NeutralHadron; + ret->emplace_back(kind, 0, p4); + if (p.src) { + auto match = clusterRefMap_.find(p.src); + if (match == clusterRefMap_.end()) { + throw cms::Exception("CorruptData") + << "Invalid cluster pointer in cluster pt " << p4.pt() << " eta " << p4.eta() << " phi " << p4.phi(); + } + ret->back().setPFCluster(match->second); + } + } + } + } + return ret; +} + +std::unique_ptr RegionMapper::fetchTracks(float ptMin, bool fromPV) const { + auto ret = std::make_unique(); + for (const Region &r : regions_) { + for (const PropagatedTrack &p : r.track) { + if (fromPV && !p.fromPV) + continue; + bool inside = true; + switch (trackRegionMode_) { + case atVertex: + inside = r.fiducialLocal(p.floatVtxEta(), p.floatVtxPhi()); + break; + case atCalo: + inside = r.fiducialLocal(p.floatEta(), p.floatPhi()); + break; + case any: + inside = r.fiducialLocal(p.floatVtxEta(), p.floatVtxPhi()); + break; // WARNING: this may not be the best choice + } + if (!inside) + continue; + if (p.floatPt() > ptMin) { + reco::Particle::PolarLorentzVector p4( + p.floatVtxPt(), r.globalEta(p.floatVtxEta()), r.globalPhi(p.floatVtxPhi()), 0.13f); + l1t::PFCandidate::ParticleType kind = p.muonLink ? l1t::PFCandidate::Muon : l1t::PFCandidate::ChargedHadron; + ret->emplace_back(kind, p.intCharge(), p4); + ret->back().setVertex(reco::Particle::Point(0, 0, p.floatDZ())); + if (p.src) { + auto match = trackRefMap_.find(p.src); + if (match == trackRefMap_.end()) { + throw cms::Exception("CorruptData") + << "Invalid track pointer in PF track pt " << p4.pt() << " eta " << p4.eta() << " phi " << p4.phi(); + } + ret->back().setPFTrack(match->second); + } + } + } + } + return ret; +} + +std::pair RegionMapper::totAndMaxInput(int type) const { + unsigned ntot = 0, nmax = 0; + for (const auto &r : regions_) { + unsigned int ni = r.nInput(Region::InputType(type)); + ntot += ni; + nmax = std::max(nmax, ni); + } + return std::make_pair(ntot, nmax); +} + +std::unique_ptr> RegionMapper::vecInput(int type) const { + std::auto_ptr> v(new std::vector); + for (const auto &r : regions_) { + unsigned ni = r.nInput(Region::InputType(type)); + v->push_back(ni); + } + return v; +} + +std::pair RegionMapper::totAndMaxOutput(int type, bool puppi) const { + unsigned ntot = 0, nmax = 0; + for (const auto &r : regions_) { + unsigned int ni = r.nOutput(Region::OutputType(type), puppi); + ntot += ni; + nmax = std::max(nmax, ni); + } + return std::make_pair(ntot, nmax); +} + +std::unique_ptr> RegionMapper::vecOutput(int type, bool puppi) const { + std::auto_ptr> v(new std::vector); + for (const auto &r : regions_) { + unsigned ni = r.nOutput(Region::OutputType(type), puppi); + v->push_back(ni); + } + return v; +} diff --git a/L1Trigger/Phase2L1ParticleFlow/src/corrector.cc b/L1Trigger/Phase2L1ParticleFlow/src/corrector.cc new file mode 100644 index 0000000000000..cd897bf73dfaf --- /dev/null +++ b/L1Trigger/Phase2L1ParticleFlow/src/corrector.cc @@ -0,0 +1,193 @@ +#include "L1Trigger/Phase2L1ParticleFlow/src/corrector.h" + +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include "FWCore/Utilities/interface/CPUTimer.h" +#include "FWCore/Utilities/interface/Exception.h" +#include "FWCore/ParameterSet/interface/FileInPath.h" + +#include "DataFormats/L1TParticleFlow/interface/PFCluster.h" + +l1tpf::corrector::corrector(const std::string &filename, float emfMax, bool debug) : emfMax_(emfMax) { + if (!filename.empty()) + init_(filename, "", debug); +} +l1tpf::corrector::corrector(const std::string &filename, const std::string &directory, float emfMax, bool debug) + : emfMax_(emfMax) { + if (!filename.empty()) + init_(filename, directory, debug); +} + +l1tpf::corrector::corrector(TDirectory *src, float emfMax, bool debug) : emfMax_(emfMax) { init_(src, debug); } + +void l1tpf::corrector::init_(const std::string &filename, const std::string &directory, bool debug) { + std::string resolvedFileName = filename; + if (filename[0] != '/') + resolvedFileName = edm::FileInPath(filename).fullPath(); + TFile *lFile = TFile::Open(resolvedFileName.c_str()); + if (!lFile || lFile->IsZombie()) + throw cms::Exception("Configuration", "cannot read file " + filename); + + TDirectory *dir = directory.empty() ? lFile : lFile->GetDirectory(directory.c_str()); + if (!dir) + throw cms::Exception("Configuration", "cannot find directory '" + directory + "' in file " + filename); + init_(dir, debug); + + lFile->Close(); +} + +void l1tpf::corrector::init_(TDirectory *lFile, bool debug) { + TH1 *index = (TH1 *)lFile->Get("INDEX"); + if (!index) + throw cms::Exception("Configuration") + << "invalid input file " << lFile->GetPath() << ": INDEX histogram not found.\n"; + index_.reset((TH1 *)index->Clone()); + index_->SetDirectory(nullptr); + + is2d_ = index_->InheritsFrom("TH2"); + + edm::CPUTimer timer; + timer.start(); + std::unordered_map graphs; + TKey *key; + TIter nextkey(lFile->GetListOfKeys()); + while ((key = (TKey *)nextkey())) { + if (strncmp(key->GetName(), "eta_", 4) == 0) { + TGraph *gr = (TGraph *)key->ReadObj(); + if (!gr->TestBit(TGraph::kIsSortedX)) + gr->Sort(); + graphs[key->GetName()] = gr; + } + } + + neta_ = index_->GetNbinsX(); + nemf_ = (is2d_ ? index_->GetNbinsY() : 1); + corrections_.resize(neta_ * nemf_); + std::fill(corrections_.begin(), corrections_.end(), nullptr); + char buff[32]; + int ngraphs = 0; + for (unsigned int ieta = 0; ieta < neta_; ++ieta) { + for (unsigned int iemf = 0; iemf < nemf_; ++iemf) { + if (is2d_) { + snprintf(buff, 31, "eta_bin%d_emf_bin%d", ieta + 1, iemf + 1); + } else { + snprintf(buff, 31, "eta_bin%d", ieta + 1); + } + TGraph *graph = graphs[buff]; + if (debug) + std::cout << " eta bin " << ieta << " emf bin " << iemf << " graph " << buff + << (graph ? " " : " ") << std::endl; + if (graph) { + ngraphs++; + corrections_[ieta * nemf_ + iemf] = (TGraph *)graph->Clone(); + } + if (std::abs(index_->GetXaxis()->GetBinCenter(ieta + 1)) > 3.0) { + break; // no EMF bins beyond eta = 3 + } + } + } + timer.stop(); + if (debug) + std::cout << "Read " << ngraphs << " graphs from " << lFile->GetPath() << " in " << timer.realTime() << " s" + << std::endl; +} + +l1tpf::corrector::corrector(const TH1 *index, float emfMax) + : index_((TH1 *)index->Clone("INDEX")), + is2d_(index->InheritsFrom("TH2")), + neta_(index->GetNbinsX()), + nemf_(is2d_ ? index->GetNbinsY() : 1), + emfMax_(emfMax) { + index_->SetDirectory(nullptr); + corrections_.resize(neta_ * nemf_); + std::fill(corrections_.begin(), corrections_.end(), nullptr); +} + +l1tpf::corrector::~corrector() { + for (TGraph *&p : corrections_) { + delete p; + p = nullptr; + } + corrections_.clear(); +} + +l1tpf::corrector::corrector(corrector &&corr) + : index_(std::move(corr.index_)), + corrections_(std::move(corr.corrections_)), + is2d_(corr.is2d_), + neta_(corr.neta_), + nemf_(corr.nemf_), + emfMax_(corr.emfMax_) {} + +l1tpf::corrector &l1tpf::corrector::operator=(corrector &&corr) { + std::swap(is2d_, corr.is2d_); + std::swap(neta_, corr.neta_); + std::swap(nemf_, corr.nemf_); + std::swap(emfMax_, corr.emfMax_); + + index_.swap(corr.index_); + corrections_.swap(corr.corrections_); + return *this; +} + +float l1tpf::corrector::correctedPt(float pt, float emPt, float eta) const { + float total = std::max(pt, emPt), abseta = std::abs(eta); + float emf = emPt / total; + if (emfMax_ > 0 && emf > emfMax_) + return total; // no correction + unsigned int ieta = std::min(std::max(1, index_->GetXaxis()->FindBin(abseta)), neta_) - 1; + unsigned int iemf = + is2d_ && abseta < 3.0 ? std::min(std::max(1, index_->GetYaxis()->FindBin(emf)), nemf_) - 1 : 0; + TGraph *graph = corrections_[ieta * nemf_ + iemf]; + if (!graph) { + throw cms::Exception("RuntimeError") << "Error trying to read calibration for eta " << eta << " emf " << emf + << " which are not available." << std::endl; + } + float ptcorr = std::min(graph->Eval(total), 4 * total); + return ptcorr; +} + +void l1tpf::corrector::correctPt(l1t::PFCluster &cluster, float preserveEmEt) const { + float newpt = correctedPt(cluster.pt(), cluster.emEt(), cluster.eta()); + cluster.calibratePt(newpt, preserveEmEt); +} + +void l1tpf::corrector::setGraph(const TGraph &graph, int ieta, int iemf) { + char buff[32]; + if (is2d_) { + snprintf(buff, 31, "eta_bin%d_emf_bin%d", (unsigned int)(ieta + 1), (unsigned int)(iemf + 1)); + } else { + snprintf(buff, 31, "eta_bin%d", (unsigned int)(ieta + 1)); + } + TGraph *gclone = (TGraph *)graph.Clone(buff); + delete corrections_[ieta * nemf_ + iemf]; + corrections_[ieta * nemf_ + iemf] = gclone; +} + +void l1tpf::corrector::writeToFile(const std::string &filename, const std::string &directory) const { + TFile *lFile = TFile::Open(filename.c_str(), "RECREATE"); + TDirectory *dir = directory.empty() ? lFile : lFile->mkdir(directory.c_str()); + writeToFile(dir); + lFile->Close(); +} + +void l1tpf::corrector::writeToFile(TDirectory *dest) const { + TH1 *index = (TH1 *)index_->Clone(); + index->SetDirectory(dest); + dest->WriteTObject(index); + + for (const TGraph *p : corrections_) { + if (p != nullptr) { + dest->WriteTObject((TGraph *)p->Clone(), p->GetName()); + } + } +} diff --git a/L1Trigger/Phase2L1ParticleFlow/src/corrector.h b/L1Trigger/Phase2L1ParticleFlow/src/corrector.h new file mode 100644 index 0000000000000..3ade23a229eb0 --- /dev/null +++ b/L1Trigger/Phase2L1ParticleFlow/src/corrector.h @@ -0,0 +1,65 @@ +#ifndef L1Trigger_Phase2L1ParticleFlow_corrector_h +#define L1Trigger_Phase2L1ParticleFlow_corrector_h +#include +#include +#include +#include + +class TDirectory; + +namespace l1t { + class PFCluster; +} + +namespace l1tpf { + class corrector { + public: + corrector() : is2d_(false), neta_(0), nemf_(0), emfMax_(-1) {} + corrector(const std::string &iFile, float emfMax = -1, bool debug = false); + corrector(const std::string &iFile, const std::string &directory, float emfMax = -1, bool debug = false); + corrector(TDirectory *src, float emfMax = -1, bool debug = false); + // create an empty corrector (you'll need to fill the graphs later) + corrector(const TH1 *index, float emfMax = -1); + ~corrector(); + + // no copy, but can move + corrector(const corrector &corr) = delete; + corrector &operator=(const corrector &corr) = delete; + corrector(corrector &&corr); + corrector &operator=(corrector &&corr); + + float correctedPt(float et, float emEt, float eta) const; + float correctedPt(float et, float eta) const { return correctedPt(et, 0, eta); } + void correctPt(l1t::PFCluster &cluster, float preserveEmEt = true) const; + + bool valid() const { return (index_.get() != nullptr); } + + // set the graph (note: it is cloned, and the corrector owns the clone) + void setGraph(const TGraph &graph, int ieta, int iemf = 0); + + bool is2d() const { return is2d_; } + unsigned int neta() const { return neta_; } + unsigned int nemf() const { return nemf_; } + // access the index histogram + const TH1 &getIndex() const { return *index_; } + // access the graphs (owned by the corrector, may be null) + TGraph *getGraph(int ieta, int iemf = 0) { return corrections_[ieta * nemf_ + iemf]; } + const TGraph *getGraph(int ieta, int iemf = 0) const { return corrections_[ieta * nemf_ + iemf]; } + + // store the corrector + void writeToFile(const std::string &filename, const std::string &directory) const; + // store the corrector + void writeToFile(TDirectory *dest) const; + + private: + std::unique_ptr index_; + std::vector corrections_; + bool is2d_; + unsigned int neta_, nemf_; + float emfMax_; + + void init_(const std::string &iFile, const std::string &directory, bool debug); + void init_(TDirectory *src, bool debug); + }; +} // namespace l1tpf +#endif diff --git a/L1Trigger/Phase2L1ParticleFlow/src/firmware/data.h b/L1Trigger/Phase2L1ParticleFlow/src/firmware/data.h new file mode 100644 index 0000000000000..ceee9b283f679 --- /dev/null +++ b/L1Trigger/Phase2L1ParticleFlow/src/firmware/data.h @@ -0,0 +1,209 @@ +#ifndef FIRMWARE_DATA_H +#define FIRMWARE_DATA_H + +#include + +typedef ap_int<16> pt_t; +typedef ap_int<10> etaphi_t; +typedef ap_int<5> vtx_t; +typedef ap_uint<3> particleid_t; +typedef ap_int<10> z0_t; // 40cm / 0.1 +typedef ap_uint<14> tk2em_dr_t; +typedef ap_uint<14> tk2calo_dr_t; +typedef ap_uint<10> em2calo_dr_t; +typedef ap_uint<13> tk2calo_dq_t; + +enum PID { PID_Charged = 0, PID_Neutral = 1, PID_Photon = 2, PID_Electron = 3, PID_Muon = 4 }; + +// DEFINE MULTIPLICITIES +#if defined(REG_HGCal) +#define NTRACK 25 +#define NCALO 20 +#define NMU 4 +#define NSELCALO 15 +#define NALLNEUTRALS NSELCALO +// dummy +#define NEMCALO 1 +#define NPHOTON NEMCALO +// not used but must be there because used in header files +#define NNEUTRALS 1 +//-------------------------------- +#elif defined(REG_HGCalNoTK) +#define NCALO 12 +#define NNEUTRALS 8 +#define NALLNEUTRALS NCALO +// dummy +#define NMU 1 +#define NTRACK 1 +#define NEMCALO 1 +#define NPHOTON NEMCALO +#define NSELCALO 1 +//-------------------------------- +#elif defined(REG_HF) +#define NCALO 18 +#define NNEUTRALS 10 +#define NALLNEUTRALS NCALO +// dummy +#define NMU 1 +#define NTRACK 1 +#define NEMCALO 1 +#define NPHOTON NEMCALO +#define NSELCALO 1 +//-------------------------------- +#else // BARREL +#ifndef REG_Barrel +#ifndef CMSSW_GIT_HASH +#warning "No region defined, assuming it's barrel (#define REG_Barrel to suppress this)" +#endif +#endif +#if defined(BOARD_MP7) +#warning "MP7 NOT SUPPORTED ANYMORE" +#define NTRACK 14 +#define NCALO 10 +#define NMU 2 +#define NEMCALO 10 +#define NPHOTON NEMCALO +#define NSELCALO 10 +#define NALLNEUTRALS (NPHOTON + NSELCALO) +#define NNEUTRALS 15 +#elif defined(BOARD_CTP7) +#error "NOT SUPPORTED ANYMORE" +#elif defined(BOARD_KU15P) +#define NTRACK 14 +#define NCALO 10 +#define NMU 2 +#define NEMCALO 10 +#define NPHOTON NEMCALO +#define NSELCALO 10 +#define NALLNEUTRALS (NPHOTON + NSELCALO) +#define NNEUTRALS 15 +#elif defined(BOARD_VCU118) +#define NTRACK 22 +#define NCALO 15 +#define NEMCALO 13 +#define NMU 2 +#define NPHOTON NEMCALO +#define NSELCALO 10 +#define NALLNEUTRALS (NPHOTON + NSELCALO) +#define NNEUTRALS 25 +#else +#define NTRACK 22 +#define NCALO 15 +#define NEMCALO 13 +#define NMU 2 +#define NPHOTON NEMCALO +#define NSELCALO 10 +#define NALLNEUTRALS (NPHOTON + NSELCALO) +#define NNEUTRALS 25 +#endif + +#endif // region + +#if defined(BOARD_MP7) +#define PACKING_DATA_SIZE 32 +#define PACKING_NCHANN 72 +#elif defined(BOARD_KU15P) +#define PACKING_DATA_SIZE 64 +#define PACKING_NCHANN 42 +#elif defined(BOARD_VCU118) +#define PACKING_DATA_SIZE 64 +#define PACKING_NCHANN 96 +#elif defined(BOARD_APD1) +#define PACKING_DATA_SIZE 64 +#define PACKING_NCHANN 96 +#endif + +struct CaloObj { + pt_t hwPt; + etaphi_t hwEta, hwPhi; // relative to the region center, at calo +}; +struct HadCaloObj : public CaloObj { + pt_t hwEmPt; + bool hwIsEM; +}; +inline void clear(HadCaloObj& c) { + c.hwPt = 0; + c.hwEta = 0; + c.hwPhi = 0; + c.hwEmPt = 0; + c.hwIsEM = 0; +} + +struct EmCaloObj { + pt_t hwPt, hwPtErr; + etaphi_t hwEta, hwPhi; // relative to the region center, at calo +}; +inline void clear(EmCaloObj& c) { + c.hwPt = 0; + c.hwPtErr = 0; + c.hwEta = 0; + c.hwPhi = 0; +} + +struct TkObj { + pt_t hwPt, hwPtErr; + etaphi_t hwEta, hwPhi; // relative to the region center, at calo + z0_t hwZ0; + bool hwTightQuality; +}; +inline void clear(TkObj& c) { + c.hwPt = 0; + c.hwPtErr = 0; + c.hwEta = 0; + c.hwPhi = 0; + c.hwZ0 = 0; + c.hwTightQuality = 0; +} + +struct MuObj { + pt_t hwPt, hwPtErr; + etaphi_t hwEta, hwPhi; // relative to the region center, at vtx(?) +}; +inline void clear(MuObj& c) { + c.hwPt = 0; + c.hwPtErr = 0; + c.hwEta = 0; + c.hwPhi = 0; +} + +struct PFChargedObj { + pt_t hwPt; + etaphi_t hwEta, hwPhi; // relative to the region center, at calo + particleid_t hwId; + z0_t hwZ0; +}; +inline void clear(PFChargedObj& c) { + c.hwPt = 0; + c.hwEta = 0; + c.hwPhi = 0; + c.hwId = 0; + c.hwZ0 = 0; +} + +struct PFNeutralObj { + pt_t hwPt; + etaphi_t hwEta, hwPhi; // relative to the region center, at calo + particleid_t hwId; + pt_t hwPtPuppi; +}; +inline void clear(PFNeutralObj& c) { + c.hwPt = 0; + c.hwEta = 0; + c.hwPhi = 0; + c.hwId = 0; + c.hwPtPuppi = 0; +} + +//TMUX +#define NETA_TMUX 2 +#define NPHI_TMUX 1 +/* #define TMUX_IN 36 */ +/* #define TMUX_OUT 18 */ +#define TMUX_IN 18 +#define TMUX_OUT 6 +#define NTRACK_TMUX (NTRACK * TMUX_OUT * NETA_TMUX * NPHI_TMUX) +#define NCALO_TMUX (NCALO * TMUX_OUT * NETA_TMUX * NPHI_TMUX) +#define NEMCALO_TMUX (NEMCALO * TMUX_OUT * NETA_TMUX * NPHI_TMUX) +#define NMU_TMUX (NMU * TMUX_OUT * NETA_TMUX * NPHI_TMUX) + +#endif diff --git a/L1Trigger/Phase2L1ParticleFlow/src/firmware/pfalgo2hgc.h b/L1Trigger/Phase2L1ParticleFlow/src/firmware/pfalgo2hgc.h new file mode 100644 index 0000000000000..15ad83088dedc --- /dev/null +++ b/L1Trigger/Phase2L1ParticleFlow/src/firmware/pfalgo2hgc.h @@ -0,0 +1,46 @@ +#ifndef FIRMWARE_PFALGO2HGC_H +#define FIRMWARE_PFALGO2HGC_H + +#ifndef REG_HGCal +#ifndef CMSSW_GIT_HASH +#warning "REG_HGCal is not #defined, but this algorithm has only been tested there" +#endif +#endif + +#include "pfalgo_common.h" + +void pfalgo2hgc(const HadCaloObj calo[NCALO], + const TkObj track[NTRACK], + const MuObj mu[NMU], + PFChargedObj outch[NTRACK], + PFNeutralObj outne[NSELCALO], + PFChargedObj outmu[NMU]); + +#if defined(PACKING_DATA_SIZE) && defined(PACKING_NCHANN) +void packed_pfalgo2hgc(const ap_uint input[PACKING_NCHANN], + ap_uint output[PACKING_NCHANN]); +void pfalgo2hgc_pack_in(const HadCaloObj calo[NCALO], + const TkObj track[NTRACK], + const MuObj mu[NMU], + ap_uint input[PACKING_NCHANN]); +void pfalgo2hgc_unpack_in(const ap_uint input[PACKING_NCHANN], + HadCaloObj calo[NCALO], + TkObj track[NTRACK], + MuObj mu[NMU]); +void pfalgo2hgc_pack_out(const PFChargedObj outch[NTRACK], + const PFNeutralObj outne[NSELCALO], + const PFChargedObj outmu[NMU], + ap_uint output[PACKING_NCHANN]); +void pfalgo2hgc_unpack_out(const ap_uint output[PACKING_NCHANN], + PFChargedObj outch[NTRACK], + PFNeutralObj outne[NSELCALO], + PFChargedObj outmu[NMU]); +#endif + +#ifndef CMSSW_GIT_HASH +#define PFALGO_DR2MAX_TK_CALO 525 +#define PFALGO_TK_MAXINVPT_LOOSE 40 +#define PFALGO_TK_MAXINVPT_TIGHT 80 +#endif + +#endif diff --git a/L1Trigger/Phase2L1ParticleFlow/src/firmware/pfalgo3.h b/L1Trigger/Phase2L1ParticleFlow/src/firmware/pfalgo3.h new file mode 100644 index 0000000000000..73ef0e4cce912 --- /dev/null +++ b/L1Trigger/Phase2L1ParticleFlow/src/firmware/pfalgo3.h @@ -0,0 +1,56 @@ +#ifndef FIRMWARE_PFALGO3_H +#define FIRMWARE_PFALGO3_H + +#ifndef REG_Barrel +#ifndef CMSSW_GIT_HASH +#warning "REG_Barrel not defined in PFALGO3: not validated" +#endif +#endif + +#include "pfalgo_common.h" + +void pfalgo3(const EmCaloObj emcalo[NEMCALO], + const HadCaloObj hadcalo[NCALO], + const TkObj track[NTRACK], + const MuObj mu[NMU], + PFChargedObj outch[NTRACK], + PFNeutralObj outpho[NPHOTON], + PFNeutralObj outne[NSELCALO], + PFChargedObj outmu[NMU]); + +#if defined(PACKING_DATA_SIZE) && defined(PACKING_NCHANN) +void packed_pfalgo3(const ap_uint input[PACKING_NCHANN], + ap_uint output[PACKING_NCHANN]); +void pfalgo3_pack_in(const EmCaloObj emcalo[NEMCALO], + const HadCaloObj hadcalo[NCALO], + const TkObj track[NTRACK], + const MuObj mu[NMU], + ap_uint input[PACKING_NCHANN]); +void pfalgo3_unpack_in(const ap_uint input[PACKING_NCHANN], + EmCaloObj emcalo[NEMCALO], + HadCaloObj hadcalo[NCALO], + TkObj track[NTRACK], + MuObj mu[NMU]); +void pfalgo3_pack_out(const PFChargedObj outch[NTRACK], + const PFNeutralObj outpho[NPHOTON], + const PFNeutralObj outne[NSELCALO], + const PFChargedObj outmu[NMU], + ap_uint output[PACKING_NCHANN]); +void pfalgo3_unpack_out(const ap_uint output[PACKING_NCHANN], + PFChargedObj outch[NTRACK], + PFNeutralObj outpho[NPHOTON], + PFNeutralObj outne[NSELCALO], + PFChargedObj outmu[NMU]); +#endif + +void pfalgo3_set_debug(bool debug); + +#ifndef CMSSW_GIT_HASH +#define PFALGO_DR2MAX_TK_CALO 1182 +#define PFALGO_DR2MAX_EM_CALO 525 +#define PFALGO_DR2MAX_TK_EM 84 +#define PFALGO_TK_MAXINVPT_LOOSE 40 +#define PFALGO_TK_MAXINVPT_TIGHT 80 +#endif + +#endif diff --git a/L1Trigger/Phase2L1ParticleFlow/src/firmware/pfalgo_common.h b/L1Trigger/Phase2L1ParticleFlow/src/firmware/pfalgo_common.h new file mode 100644 index 0000000000000..030783f5850be --- /dev/null +++ b/L1Trigger/Phase2L1ParticleFlow/src/firmware/pfalgo_common.h @@ -0,0 +1,16 @@ +#ifndef FIRMWARE_PFALGO_COMMON_H +#define FIRMWARE_PFALGO_COMMON_H + +#include "data.h" + +inline int dr2_int(etaphi_t eta1, etaphi_t phi1, etaphi_t eta2, etaphi_t phi2) { + ap_int deta = (eta1 - eta2); + ap_int dphi = (phi1 - phi2); + return deta * deta + dphi * dphi; +} + +#ifndef CMSSW_GIT_HASH +#define PFALGO_DR2MAX_TK_MU 2101 +#endif + +#endif diff --git a/L1Trigger/Phase2L1ParticleFlow/src/ref/pfalgo2hgc_ref.cpp b/L1Trigger/Phase2L1ParticleFlow/src/ref/pfalgo2hgc_ref.cpp new file mode 100644 index 0000000000000..47b7ce0ce774b --- /dev/null +++ b/L1Trigger/Phase2L1ParticleFlow/src/ref/pfalgo2hgc_ref.cpp @@ -0,0 +1,196 @@ +#include "pfalgo2hgc_ref.h" + +#ifndef CMSSW_GIT_HASH +#include "../DiscretePFInputs.h" +#else +#include "../../interface/DiscretePFInputs.h" +#endif + +#include "../utils/Firmware2DiscretePF.h" +#include +#include +#include +#include + +int g_pfalgo2hgc_debug_ref_ = 0; + +void pfalgo2hgc_ref_set_debug(int debug) { g_pfalgo2hgc_debug_ref_ = debug; } + +void pfalgo2hgc_ref(const pfalgo_config &cfg, + const HadCaloObj calo[/*cfg.nCALO*/], + const TkObj track[/*cfg.nTRACK*/], + const MuObj mu[/*cfg.nMU*/], + PFChargedObj outch[/*cfg.nTRACK*/], + PFNeutralObj outne[/*cfg.nSELCALO*/], + PFChargedObj outmu[/*cfg.nMU*/]) { + if (g_pfalgo2hgc_debug_ref_) { +#ifdef L1Trigger_Phase2L1ParticleFlow_DiscretePFInputs_MORE + for (unsigned int i = 0; i < cfg.nTRACK; ++i) { + if (track[i].hwPt == 0) + continue; + l1tpf_impl::PropagatedTrack tk; + fw2dpf::convert(track[i], tk); + printf( + "FW \t track %3d: pt %8d [ %7.2f ] calo eta %+7d [ %+5.2f ] calo phi %+7d [ %+5.2f ] calo ptErr %6d [ " + "%7.2f ] tight %d\n", + i, + tk.hwPt, + tk.floatPt(), + tk.hwEta, + tk.floatEta(), + tk.hwPhi, + tk.floatPhi(), + tk.hwCaloPtErr, + tk.floatCaloPtErr(), + int(track[i].hwTightQuality)); + } + for (unsigned int i = 0; i < cfg.nCALO; ++i) { + if (calo[i].hwPt == 0) + continue; + l1tpf_impl::CaloCluster c; + fw2dpf::convert(calo[i], c); + printf( + "FW \t calo %3d: pt %8d [ %7.2f ] calo eta %+7d [ %+5.2f ] calo phi %+7d [ %+5.2f ] calo emPt %7d [ " + "%7.2f ] isEM %d \n", + i, + c.hwPt, + c.floatPt(), + c.hwEta, + c.floatEta(), + c.hwPhi, + c.floatPhi(), + c.hwEmPt, + c.floatEmPt(), + c.isEM); + } + for (unsigned int i = 0; i < cfg.nMU; ++i) { + if (mu[i].hwPt == 0) + continue; + l1tpf_impl::Muon muon; + fw2dpf::convert(mu[i], muon); + printf("FW \t muon %3d: pt %8d [ %7.2f ] muon eta %+7d [ %+5.2f ] muon phi %+7d [ %+5.2f ] \n", + i, + muon.hwPt, + muon.floatPt(), + muon.hwEta, + muon.floatEta(), + muon.hwPhi, + muon.floatPhi()); + } +#endif + } + + // constants + const pt_t TKPT_MAX_LOOSE = cfg.tk_MAXINVPT_LOOSE; + const pt_t TKPT_MAX_TIGHT = cfg.tk_MAXINVPT_TIGHT; + const int DR2MAX = cfg.dR2MAX_TK_CALO; + + //////////////////////////////////////////////////// + // TK-MU Linking + std::unique_ptr isMu(new bool[cfg.nTRACK]); + pfalgo_mu_ref(cfg, track, mu, &isMu[0], outmu, g_pfalgo2hgc_debug_ref_); + + //////////////////////////////////////////////////// + // TK-HAD Linking + + // initialize sum track pt + std::vector calo_sumtk(cfg.nCALO), calo_subpt(cfg.nCALO); + std::vector calo_sumtkErr2(cfg.nCALO); + for (unsigned int ic = 0; ic < cfg.nCALO; ++ic) { + calo_sumtk[ic] = 0; + calo_sumtkErr2[ic] = 0; + } + + // initialize good track bit + std::unique_ptr track_good(new bool[cfg.nTRACK]); + std::unique_ptr isEle(new bool[cfg.nTRACK]); + for (unsigned int it = 0; it < cfg.nTRACK; ++it) { + track_good[it] = (track[it].hwPt < (track[it].hwTightQuality ? TKPT_MAX_TIGHT : TKPT_MAX_LOOSE) || isMu[it]); + isEle[it] = false; + } + + // initialize output + for (unsigned int ipf = 0; ipf < cfg.nTRACK; ++ipf) + clear(outch[ipf]); + for (unsigned int ipf = 0; ipf < cfg.nSELCALO; ++ipf) + clear(outne[ipf]); + + // for each track, find the closest calo + for (unsigned int it = 0; it < cfg.nTRACK; ++it) { + if (track[it].hwPt > 0 && !isMu[it]) { + int ibest = best_match_with_pt_ref(cfg.nCALO, DR2MAX, calo, track[it]); + if (ibest != -1) { + if (g_pfalgo2hgc_debug_ref_) + printf("FW \t track %3d pt %7d matched to calo' %3d pt %7d\n", + it, + int(track[it].hwPt), + ibest, + int(calo[ibest].hwPt)); + track_good[it] = 1; + isEle[it] = calo[ibest].hwIsEM; + calo_sumtk[ibest] += track[it].hwPt; + calo_sumtkErr2[ibest] += sqr(track[it].hwPtErr); + } + } + } + + for (unsigned int ic = 0; ic < cfg.nCALO; ++ic) { + if (calo_sumtk[ic] > 0) { + pt_t ptdiff = calo[ic].hwPt - calo_sumtk[ic]; + int sigmamult = + calo_sumtkErr2[ic]; // + (calo_sumtkErr2[ic] >> 1)); // this multiplies by 1.5 = sqrt(1.5)^2 ~ (1.2)^2 + if (g_pfalgo2hgc_debug_ref_ && (calo[ic].hwPt > 0)) { +#ifdef L1Trigger_Phase2L1ParticleFlow_DiscretePFInputs_MORE + l1tpf_impl::CaloCluster floatcalo; + fw2dpf::convert(calo[ic], floatcalo); + printf( + "FW \t calo' %3d pt %7d [ %7.2f ] eta %+7d [ %+5.2f ] has a sum track pt %7d, difference %7d +- %.2f \n", + ic, + int(calo[ic].hwPt), + floatcalo.floatPt(), + int(calo[ic].hwEta), + floatcalo.floatEta(), + int(calo_sumtk[ic]), + int(ptdiff), + std::sqrt(float(int(calo_sumtkErr2[ic])))); +#endif + } + if (ptdiff > 0 && ptdiff * ptdiff > sigmamult) { + calo_subpt[ic] = ptdiff; + } else { + calo_subpt[ic] = 0; + } + } else { + calo_subpt[ic] = calo[ic].hwPt; + } + if (g_pfalgo2hgc_debug_ref_ && (calo[ic].hwPt > 0)) + printf("FW \t calo' %3d pt %7d ---> %7d \n", ic, int(calo[ic].hwPt), int(calo_subpt[ic])); + } + + // copy out charged hadrons + for (unsigned int it = 0; it < cfg.nTRACK; ++it) { + if (track_good[it]) { + assert(!(isEle[it] && isMu[it])); + outch[it].hwPt = track[it].hwPt; + outch[it].hwEta = track[it].hwEta; + outch[it].hwPhi = track[it].hwPhi; + outch[it].hwZ0 = track[it].hwZ0; + outch[it].hwId = isEle[it] ? PID_Electron : (isMu[it] ? PID_Muon : PID_Charged); + } + } + + // copy out neutral hadrons with sorting and cropping + std::vector outne_all(cfg.nCALO); + for (unsigned int ipf = 0; ipf < cfg.nCALO; ++ipf) + clear(outne_all[ipf]); + for (unsigned int ic = 0; ic < cfg.nCALO; ++ic) { + if (calo_subpt[ic] > 0) { + outne_all[ic].hwPt = calo_subpt[ic]; + outne_all[ic].hwEta = calo[ic].hwEta; + outne_all[ic].hwPhi = calo[ic].hwPhi; + outne_all[ic].hwId = calo[ic].hwIsEM ? PID_Photon : PID_Neutral; + } + } + + ptsort_ref(cfg.nCALO, cfg.nSELCALO, outne_all, outne); +} diff --git a/L1Trigger/Phase2L1ParticleFlow/src/ref/pfalgo2hgc_ref.h b/L1Trigger/Phase2L1ParticleFlow/src/ref/pfalgo2hgc_ref.h new file mode 100644 index 0000000000000..b1607b99ef046 --- /dev/null +++ b/L1Trigger/Phase2L1ParticleFlow/src/ref/pfalgo2hgc_ref.h @@ -0,0 +1,17 @@ +#ifndef PFALGO2HGC_REF_H +#define PFALGO2HGC_REF_H + +#include "../firmware/pfalgo2hgc.h" +#include "pfalgo_common_ref.h" + +void pfalgo2hgc_ref_set_debug(int debug); + +void pfalgo2hgc_ref(const pfalgo_config &cfg, + const HadCaloObj calo[/*cfg.nCALO*/], + const TkObj track[/*cfg.nTRACK*/], + const MuObj mu[/*cfg.nMU*/], + PFChargedObj outch[/*cfg.nTRACK*/], + PFNeutralObj outne[/*cfg.nSELCALO*/], + PFChargedObj outmu[/*cfg.nMU*/]); + +#endif diff --git a/L1Trigger/Phase2L1ParticleFlow/src/ref/pfalgo3_ref.cpp b/L1Trigger/Phase2L1ParticleFlow/src/ref/pfalgo3_ref.cpp new file mode 100644 index 0000000000000..c3a73d7410df3 --- /dev/null +++ b/L1Trigger/Phase2L1ParticleFlow/src/ref/pfalgo3_ref.cpp @@ -0,0 +1,485 @@ +#include "pfalgo3_ref.h" + +#ifndef CMSSW_GIT_HASH +#include "../DiscretePFInputs.h" +#else +#include "../../interface/DiscretePFInputs.h" +#endif + +#include "../utils/Firmware2DiscretePF.h" +#include +#include +#include +#include +#include + +int g_pfalgo3_debug_ref_ = 0; + +void pfalgo3_ref_set_debug(int debug) { g_pfalgo3_debug_ref_ = debug; } + +template +int tk_best_match_ref(unsigned int nCAL, unsigned int dR2MAX, const CO_t calo[/*nCAL*/], const TkObj &track) { + pt_t caloPtMin = track.hwPt - 2 * (track.hwPtErr); + if (caloPtMin < 0) + caloPtMin = 0; + int drmin = dR2MAX, ibest = -1; + for (unsigned int ic = 0; ic < nCAL; ++ic) { + if (calo[ic].hwPt <= 0) + continue; + if (doPtMin && calo[ic].hwPt <= caloPtMin) + continue; + int dr = dr2_int(track.hwEta, track.hwPhi, calo[ic].hwEta, calo[ic].hwPhi); + if (dr < drmin) { + drmin = dr; + ibest = ic; + } + } + return ibest; +} +int em_best_match_ref(unsigned int nCAL, unsigned int dR2MAX, const HadCaloObj calo[/*nCAL*/], const EmCaloObj &em) { + pt_t emPtMin = em.hwPt >> 1; + int drmin = dR2MAX, ibest = -1; + for (unsigned int ic = 0; ic < nCAL; ++ic) { + if (calo[ic].hwEmPt <= emPtMin) + continue; + int dr = dr2_int(em.hwEta, em.hwPhi, calo[ic].hwEta, calo[ic].hwPhi); + if (dr < drmin) { + drmin = dr; + ibest = ic; + } + } + return ibest; +} + +void pfalgo3_em_ref(const pfalgo3_config &cfg, + const EmCaloObj emcalo[/*cfg.nEMCALO*/], + const HadCaloObj hadcalo[/*cfg.nCALO*/], + const TkObj track[/*cfg.nTRACK*/], + const bool isMu[/*cfg.nTRACK*/], + bool isEle[/*cfg.nTRACK*/], + PFNeutralObj outpho[/*cfg.nPHOTON*/], + HadCaloObj hadcalo_out[/*cfg.nCALO*/]) { + // constants + const int DR2MAX_TE = cfg.dR2MAX_TK_EM; + const int DR2MAX_EH = cfg.dR2MAX_EM_CALO; + + // initialize sum track pt + std::vector calo_sumtk(cfg.nEMCALO); + for (unsigned int ic = 0; ic < cfg.nEMCALO; ++ic) { + calo_sumtk[ic] = 0; + } + std::vector tk2em(cfg.nTRACK); + std::vector isEM(cfg.nEMCALO); + // for each track, find the closest calo + for (unsigned int it = 0; it < cfg.nTRACK; ++it) { + if (track[it].hwPt > 0 && !isMu[it]) { + tk2em[it] = tk_best_match_ref(cfg.nEMCALO, DR2MAX_TE, emcalo, track[it]); + if (tk2em[it] != -1) { + if (g_pfalgo3_debug_ref_) + printf("FW \t track %3d pt %7d matched to em calo %3d pt %7d\n", + it, + int(track[it].hwPt), + tk2em[it], + int(emcalo[tk2em[it]].hwPt)); + calo_sumtk[tk2em[it]] += track[it].hwPt; + } + } else { + tk2em[it] = -1; + } + } + + if (g_pfalgo3_debug_ref_) { + for (unsigned int ic = 0; ic < cfg.nEMCALO; ++ic) { + if (emcalo[ic].hwPt > 0) + printf("FW \t emcalo %3d pt %7d has sumtk %7d\n", ic, int(emcalo[ic].hwPt), int(calo_sumtk[ic])); + } + } + + for (unsigned int ic = 0; ic < cfg.nEMCALO; ++ic) { + pt_t photonPt; + if (calo_sumtk[ic] > 0) { + pt_t ptdiff = emcalo[ic].hwPt - calo_sumtk[ic]; + int sigma2 = sqr(emcalo[ic].hwPtErr); + int sigma2Lo = 4 * sigma2, + sigma2Hi = sigma2; // + (sigma2>>1); // cut at 1 sigma instead of old cut at sqrt(1.5) sigma's + int ptdiff2 = ptdiff * ptdiff; + if ((ptdiff >= 0 && ptdiff2 <= sigma2Hi) || (ptdiff < 0 && ptdiff2 < sigma2Lo)) { + // electron + photonPt = 0; + isEM[ic] = true; + if (g_pfalgo3_debug_ref_) + printf("FW \t emcalo %3d pt %7d ptdiff %7d [match window: -%.2f / +%.2f] flagged as electron\n", + ic, + int(emcalo[ic].hwPt), + int(ptdiff), + std::sqrt(float(sigma2Lo)), + std::sqrt(float(sigma2Hi))); + } else if (ptdiff > 0) { + // electron + photon + photonPt = ptdiff; + isEM[ic] = true; + if (g_pfalgo3_debug_ref_) + printf( + "FW \t emcalo %3d pt %7d ptdiff %7d [match window: -%.2f / +%.2f] flagged as electron + photon of pt " + "%7d\n", + ic, + int(emcalo[ic].hwPt), + int(ptdiff), + std::sqrt(float(sigma2Lo)), + std::sqrt(float(sigma2Hi)), + int(photonPt)); + } else { + // pion + photonPt = 0; + isEM[ic] = false; + if (g_pfalgo3_debug_ref_) + printf("FW \t emcalo %3d pt %7d ptdiff %7d [match window: -%.2f / +%.2f] flagged as pion\n", + ic, + int(emcalo[ic].hwPt), + int(ptdiff), + std::sqrt(float(sigma2Lo)), + std::sqrt(float(sigma2Hi))); + } + } else { + // photon + isEM[ic] = true; + photonPt = emcalo[ic].hwPt; + if (g_pfalgo3_debug_ref_ && emcalo[ic].hwPt > 0) + printf("FW \t emcalo %3d pt %7d flagged as photon\n", ic, int(emcalo[ic].hwPt)); + } + outpho[ic].hwPt = photonPt; + outpho[ic].hwEta = photonPt ? emcalo[ic].hwEta : etaphi_t(0); + outpho[ic].hwPhi = photonPt ? emcalo[ic].hwPhi : etaphi_t(0); + outpho[ic].hwId = photonPt ? PID_Photon : particleid_t(0); + } + + for (unsigned int it = 0; it < cfg.nTRACK; ++it) { + isEle[it] = (tk2em[it] != -1) && isEM[tk2em[it]]; + if (g_pfalgo3_debug_ref_ && isEle[it]) + printf("FW \t track %3d pt %7d flagged as electron.\n", it, int(track[it].hwPt)); + } + + std::vector em2calo(cfg.nEMCALO); + for (unsigned int ic = 0; ic < cfg.nEMCALO; ++ic) { + em2calo[ic] = em_best_match_ref(cfg.nCALO, DR2MAX_EH, hadcalo, emcalo[ic]); + if (g_pfalgo3_debug_ref_ && (emcalo[ic].hwPt > 0)) { + printf("FW \t emcalo %3d pt %7d isEM %d matched to hadcalo %7d pt %7d emPt %7d isEM %d\n", + ic, + int(emcalo[ic].hwPt), + int(isEM[ic]), + em2calo[ic], + (em2calo[ic] >= 0 ? int(hadcalo[em2calo[ic]].hwPt) : -1), + (em2calo[ic] >= 0 ? int(hadcalo[em2calo[ic]].hwEmPt) : -1), + (em2calo[ic] >= 0 ? int(hadcalo[em2calo[ic]].hwIsEM) : 0)); + } + } + + for (unsigned int ih = 0; ih < cfg.nCALO; ++ih) { + hadcalo_out[ih] = hadcalo[ih]; + pt_t sub = 0; + bool keep = false; + for (unsigned int ic = 0; ic < cfg.nEMCALO; ++ic) { + if (em2calo[ic] == int(ih)) { + if (isEM[ic]) + sub += emcalo[ic].hwPt; + else + keep = true; + } + } + pt_t emdiff = hadcalo[ih].hwEmPt - sub; + pt_t alldiff = hadcalo[ih].hwPt - sub; + if (g_pfalgo3_debug_ref_ && (hadcalo[ih].hwPt > 0)) { + printf("FW \t calo %3d pt %7d has a subtracted pt of %7d, empt %7d -> %7d isem %d mustkeep %d \n", + ih, + int(hadcalo[ih].hwPt), + int(alldiff), + int(hadcalo[ih].hwEmPt), + int(emdiff), + int(hadcalo[ih].hwIsEM), + keep); + } + if (alldiff <= (hadcalo[ih].hwPt >> 4)) { + hadcalo_out[ih].hwPt = 0; // kill + hadcalo_out[ih].hwEmPt = 0; // kill + if (g_pfalgo3_debug_ref_ && (hadcalo[ih].hwPt > 0)) + printf("FW \t calo %3d pt %7d --> discarded (zero pt)\n", ih, int(hadcalo[ih].hwPt)); + } else if ((hadcalo[ih].hwIsEM && emdiff <= (hadcalo[ih].hwEmPt >> 3)) && !keep) { + hadcalo_out[ih].hwPt = 0; // kill + hadcalo_out[ih].hwEmPt = 0; // kill + if (g_pfalgo3_debug_ref_ && (hadcalo[ih].hwPt > 0)) + printf("FW \t calo %3d pt %7d --> discarded (zero em)\n", ih, int(hadcalo[ih].hwPt)); + } else { + hadcalo_out[ih].hwPt = alldiff; + hadcalo_out[ih].hwEmPt = (emdiff > 0 ? emdiff : pt_t(0)); + } + } +} + +void pfalgo3_ref(const pfalgo3_config &cfg, + const EmCaloObj emcalo[/*cfg.nEMCALO*/], + const HadCaloObj hadcalo[/*cfg.nCALO*/], + const TkObj track[/*cfg.nTRACK*/], + const MuObj mu[/*cfg.nMU*/], + PFChargedObj outch[/*cfg.nTRACK*/], + PFNeutralObj outpho[/*cfg.nPHOTON*/], + PFNeutralObj outne[/*cfg.nSELCALO*/], + PFChargedObj outmu[/*cfg.nMU*/]) { + if (g_pfalgo3_debug_ref_) { +#ifdef L1Trigger_Phase2L1ParticleFlow_DiscretePFInputs_MORE + for (unsigned int i = 0; i < cfg.nTRACK; ++i) { + if (track[i].hwPt == 0) + continue; + l1tpf_impl::PropagatedTrack tk; + fw2dpf::convert(track[i], tk); + printf( + "FW \t track %3d: pt %8d [ %7.2f ] calo eta %+7d [ %+5.2f ] calo phi %+7d [ %+5.2f ] calo ptErr %6d [ " + "%7.2f ] tight %d\n", + i, + tk.hwPt, + tk.floatPt(), + tk.hwEta, + tk.floatEta(), + tk.hwPhi, + tk.floatPhi(), + tk.hwCaloPtErr, + tk.floatCaloPtErr(), + int(track[i].hwTightQuality)); + } + for (unsigned int i = 0; i < cfg.nEMCALO; ++i) { + if (emcalo[i].hwPt == 0) + continue; + l1tpf_impl::CaloCluster em; + fw2dpf::convert(emcalo[i], em); + printf( + "FW \t EM %3d: pt %8d [ %7.2f ] calo eta %+7d [ %+5.2f ] calo phi %+7d [ %+5.2f ] calo ptErr %6d [ " + "%7.2f ] \n", + i, + em.hwPt, + em.floatPt(), + em.hwEta, + em.floatEta(), + em.hwPhi, + em.floatPhi(), + em.hwPtErr, + em.floatPtErr()); + } + for (unsigned int i = 0; i < cfg.nCALO; ++i) { + if (hadcalo[i].hwPt == 0) + continue; + l1tpf_impl::CaloCluster calo; + fw2dpf::convert(hadcalo[i], calo); + printf( + "FW \t calo %3d: pt %8d [ %7.2f ] calo eta %+7d [ %+5.2f ] calo phi %+7d [ %+5.2f ] calo emPt %7d [ " + "%7.2f ] isEM %d \n", + i, + calo.hwPt, + calo.floatPt(), + calo.hwEta, + calo.floatEta(), + calo.hwPhi, + calo.floatPhi(), + calo.hwEmPt, + calo.floatEmPt(), + calo.isEM); + } + for (unsigned int i = 0; i < cfg.nMU; ++i) { + if (mu[i].hwPt == 0) + continue; + l1tpf_impl::Muon muon; + fw2dpf::convert(mu[i], muon); + printf("FW \t muon %3d: pt %8d [ %7.2f ] muon eta %+7d [ %+5.2f ] muon phi %+7d [ %+5.2f ] \n", + i, + muon.hwPt, + muon.floatPt(), + muon.hwEta, + muon.floatEta(), + muon.hwPhi, + muon.floatPhi()); + } +#endif + } + + // constants + const pt_t TKPT_MAX_LOOSE = cfg.tk_MAXINVPT_LOOSE; + const pt_t TKPT_MAX_TIGHT = cfg.tk_MAXINVPT_TIGHT; + const int DR2MAX = cfg.dR2MAX_TK_CALO; + + //////////////////////////////////////////////////// + // TK-MU Linking + // // we can't use std::vector here because it's specialized + std::unique_ptr isMu(new bool[cfg.nTRACK]); + pfalgo_mu_ref(cfg, track, mu, &isMu[0], outmu, g_pfalgo3_debug_ref_); + + //////////////////////////////////////////////////// + // TK-EM Linking + std::unique_ptr isEle(new bool[cfg.nTRACK]); + std::vector hadcalo_subem(cfg.nCALO); + pfalgo3_em_ref(cfg, emcalo, hadcalo, track, &isMu[0], &isEle[0], outpho, &hadcalo_subem[0]); + + //////////////////////////////////////////////////// + // TK-HAD Linking + + // initialize sum track pt + std::vector calo_sumtk(cfg.nCALO), calo_subpt(cfg.nCALO); + std::vector calo_sumtkErr2(cfg.nCALO); + for (unsigned int ic = 0; ic < cfg.nCALO; ++ic) { + calo_sumtk[ic] = 0; + calo_sumtkErr2[ic] = 0; + } + + // initialize good track bit + std::unique_ptr track_good(new bool[cfg.nTRACK]); + for (unsigned int it = 0; it < cfg.nTRACK; ++it) { + track_good[it] = + (track[it].hwPt < (track[it].hwTightQuality ? TKPT_MAX_TIGHT : TKPT_MAX_LOOSE) || isEle[it] || isMu[it]); + } + + // initialize output + for (unsigned int ipf = 0; ipf < cfg.nTRACK; ++ipf) { + clear(outch[ipf]); + } + for (unsigned int ipf = 0; ipf < cfg.nSELCALO; ++ipf) { + clear(outne[ipf]); + } + + // for each track, find the closest calo + for (unsigned int it = 0; it < cfg.nTRACK; ++it) { + if (track[it].hwPt > 0 && !isEle[it] && !isMu[it]) { + int ibest = best_match_with_pt_ref(cfg.nCALO, DR2MAX, &hadcalo_subem[0], track[it]); + //int ibest = tk_best_match_ref(cfg.nCALO, DR2MAX, &hadcalo_subem[0], track[it]); + if (ibest != -1) { + if (g_pfalgo3_debug_ref_) + printf("FW \t track %3d pt %7d matched to calo %3d pt %7d\n", + it, + int(track[it].hwPt), + ibest, + int(hadcalo_subem[ibest].hwPt)); + track_good[it] = 1; + calo_sumtk[ibest] += track[it].hwPt; + calo_sumtkErr2[ibest] += sqr(track[it].hwPtErr); + } + } + } + + for (unsigned int ic = 0; ic < cfg.nCALO; ++ic) { + if (calo_sumtk[ic] > 0) { + pt_t ptdiff = hadcalo_subem[ic].hwPt - calo_sumtk[ic]; + int sigmamult = calo_sumtkErr2 + [ic]; // before we did (calo_sumtkErr2[ic] + (calo_sumtkErr2[ic] >> 1)); to multiply by 1.5 = sqrt(1.5)^2 ~ (1.2)^2 + if (g_pfalgo3_debug_ref_ && (hadcalo_subem[ic].hwPt > 0)) { +#ifdef L1Trigger_Phase2L1ParticleFlow_DiscretePFInputs_MORE + l1tpf_impl::CaloCluster floatcalo; + fw2dpf::convert(hadcalo_subem[ic], floatcalo); + printf( + "FW \t calo %3d pt %7d [ %7.2f ] eta %+7d [ %+5.2f ] has a sum track pt %7d, difference %7d +- %.2f \n", + ic, + int(hadcalo_subem[ic].hwPt), + floatcalo.floatPt(), + int(hadcalo_subem[ic].hwEta), + floatcalo.floatEta(), + int(calo_sumtk[ic]), + int(ptdiff), + std::sqrt(float(int(calo_sumtkErr2[ic])))); +#endif + } + if (ptdiff > 0 && ptdiff * ptdiff > sigmamult) { + calo_subpt[ic] = ptdiff; + } else { + calo_subpt[ic] = 0; + } + } else { + calo_subpt[ic] = hadcalo_subem[ic].hwPt; + } + if (g_pfalgo3_debug_ref_ && (hadcalo_subem[ic].hwPt > 0)) + printf("FW \t calo %3d pt %7d ---> %7d \n", ic, int(hadcalo_subem[ic].hwPt), int(calo_subpt[ic])); + } + + // copy out charged hadrons + for (unsigned int it = 0; it < cfg.nTRACK; ++it) { + if (track_good[it]) { + outch[it].hwPt = track[it].hwPt; + outch[it].hwEta = track[it].hwEta; + outch[it].hwPhi = track[it].hwPhi; + outch[it].hwZ0 = track[it].hwZ0; + outch[it].hwId = isEle[it] ? PID_Electron : (isMu[it] ? PID_Muon : PID_Charged); + } + } + + // copy out neutral hadrons + std::vector outne_all(cfg.nCALO); + for (unsigned int ipf = 0; ipf < cfg.nCALO; ++ipf) { + clear(outne_all[ipf]); + } + for (unsigned int ic = 0; ic < cfg.nCALO; ++ic) { + if (calo_subpt[ic] > 0) { + outne_all[ic].hwPt = calo_subpt[ic]; + outne_all[ic].hwEta = hadcalo_subem[ic].hwEta; + outne_all[ic].hwPhi = hadcalo_subem[ic].hwPhi; + outne_all[ic].hwId = PID_Neutral; + } + } + + ptsort_ref(cfg.nCALO, cfg.nSELCALO, outne_all, outne); + + if (g_pfalgo3_debug_ref_) { +#ifdef L1Trigger_Phase2L1ParticleFlow_DiscretePFInputs_MORE + std::vector tmp; + for (unsigned int i = 0; i < cfg.nTRACK; ++i) { + if (outch[i].hwPt == 0) + continue; + fw2dpf::convert(outch[i], track[i], tmp); + auto &pf = tmp.back(); + printf("FW \t outch %3d: pt %8d [ %7.2f ] calo eta %+7d [ %+5.2f ] calo phi %+7d [ %+5.2f ] pid %d\n", + i, + pf.hwPt, + pf.floatPt(), + pf.hwEta, + pf.floatEta(), + pf.hwPhi, + pf.floatPhi(), + pf.hwId); + } + for (unsigned int i = 0; i < cfg.nPHOTON; ++i) { + if (outpho[i].hwPt == 0) + continue; + fw2dpf::convert(outpho[i], tmp); + auto &pf = tmp.back(); + printf("FW \t outph %3d: pt %8d [ %7.2f ] calo eta %+7d [ %+5.2f ] calo phi %+7d [ %+5.2f ] pid %d\n", + i, + pf.hwPt, + pf.floatPt(), + pf.hwEta, + pf.floatEta(), + pf.hwPhi, + pf.floatPhi(), + pf.hwId); + } + for (unsigned int i = 0; i < cfg.nSELCALO; ++i) { + if (outne[i].hwPt == 0) + continue; + fw2dpf::convert(outne[i], tmp); + auto &pf = tmp.back(); + printf("FW \t outne %3d: pt %8d [ %7.2f ] calo eta %+7d [ %+5.2f ] calo phi %+7d [ %+5.2f ] pid %d\n", + i, + pf.hwPt, + pf.floatPt(), + pf.hwEta, + pf.floatEta(), + pf.hwPhi, + pf.floatPhi(), + pf.hwId); + } +#endif + } +} + +void pfalgo3_merge_neutrals_ref(const pfalgo3_config &cfg, + const PFNeutralObj pho[/*cfg.nPHOTON*/], + const PFNeutralObj ne[/*cfg.nSELCALO*/], + PFNeutralObj allne[/*cfg.nALLNEUTRALS*/]) { + int j = 0; + for (unsigned int i = 0; i < cfg.nPHOTON; ++i, ++j) + allne[j] = pho[i]; + for (unsigned int i = 0; i < cfg.nSELCALO; ++i, ++j) + allne[j] = ne[i]; +} diff --git a/L1Trigger/Phase2L1ParticleFlow/src/ref/pfalgo3_ref.h b/L1Trigger/Phase2L1ParticleFlow/src/ref/pfalgo3_ref.h new file mode 100644 index 0000000000000..8069529614b3c --- /dev/null +++ b/L1Trigger/Phase2L1ParticleFlow/src/ref/pfalgo3_ref.h @@ -0,0 +1,57 @@ +#ifndef PFALGO3_REF_H +#define PFALGO3_REF_H + +#include "../firmware/pfalgo3.h" +#include "pfalgo_common_ref.h" + +struct pfalgo3_config : public pfalgo_config { + unsigned int nEMCALO, nPHOTON, nALLNEUTRAL; + unsigned int dR2MAX_TK_EM; + unsigned int dR2MAX_EM_CALO; + + pfalgo3_config(unsigned int nTrack, + unsigned int nEmCalo, + unsigned int nCalo, + unsigned int nMu, + unsigned int nPhoton, + unsigned int nSelCalo, + unsigned int nAllNeutral, + unsigned int dR2Max_Tk_Mu, + unsigned int dR2Max_Tk_Em, + unsigned int dR2Max_Em_Calo, + unsigned int dR2Max_Tk_Calo, + unsigned int tk_MaxInvPt_Loose, + unsigned int tk_MaxInvPt_Tight) + : pfalgo_config(nTrack, nCalo, nMu, nSelCalo, dR2Max_Tk_Mu, dR2Max_Tk_Calo, tk_MaxInvPt_Loose, tk_MaxInvPt_Tight), + nEMCALO(nEmCalo), + nPHOTON(nPhoton), + nALLNEUTRAL(nAllNeutral), + dR2MAX_TK_EM(dR2Max_Tk_Em), + dR2MAX_EM_CALO(dR2Max_Em_Calo) {} +}; + +void pfalgo3_ref_set_debug(int debug); + +void pfalgo3_em_ref(const pfalgo3_config &cfg, + const EmCaloObj emcalo[/*cfg.nEMCALO*/], + const HadCaloObj hadcalo[/*cfg.nCALO*/], + const TkObj track[/*cfg.nTRACK*/], + const bool isMu[/*cfg.nTRACK*/], + bool isEle[/*cfg.nTRACK*/], + PFNeutralObj outpho[/*cfg.nPHOTON*/], + HadCaloObj hadcalo_out[/*cfg.nCALO*/]); +void pfalgo3_ref(const pfalgo3_config &cfg, + const EmCaloObj emcalo[/*cfg.nEMCALO*/], + const HadCaloObj hadcalo[/*cfg.nCALO*/], + const TkObj track[/*cfg.nTRACK*/], + const MuObj mu[/*cfg.nMU*/], + PFChargedObj outch[/*cfg.nTRACK*/], + PFNeutralObj outpho[/*cfg.nPHOTON*/], + PFNeutralObj outne[/*cfg.nSELCALO*/], + PFChargedObj outmu[/*cfg.nMU*/]); + +void pfalgo3_merge_neutrals_ref(const pfalgo3_config &cfg, + const PFNeutralObj pho[/*cfg.nPHOTON*/], + const PFNeutralObj ne[/*cfg.nSELCALO*/], + PFNeutralObj allne[/*cfg.nALLNEUTRALS*/]); +#endif diff --git a/L1Trigger/Phase2L1ParticleFlow/src/ref/pfalgo_common_ref.cpp b/L1Trigger/Phase2L1ParticleFlow/src/ref/pfalgo_common_ref.cpp new file mode 100644 index 0000000000000..46bc7d405d087 --- /dev/null +++ b/L1Trigger/Phase2L1ParticleFlow/src/ref/pfalgo_common_ref.cpp @@ -0,0 +1,49 @@ +#include "pfalgo_common_ref.h" + +#include +#include + +void pfalgo_mu_ref(const pfalgo_config &cfg, + const TkObj track[/*cfg.nTRACK*/], + const MuObj mu[/*cfg.nMU*/], + bool isMu[/*cfg.nTRACK*/], + PFChargedObj outmu[/*cfg.nMU*/], + bool debug) { + // init + for (unsigned int ipf = 0; ipf < cfg.nMU; ++ipf) + clear(outmu[ipf]); + for (unsigned int it = 0; it < cfg.nTRACK; ++it) + isMu[it] = 0; + + // for each muon, find the closest track + for (unsigned int im = 0; im < cfg.nMU; ++im) { + if (mu[im].hwPt > 0) { + int ibest = -1; + int dptmin = mu[im].hwPt >> 1; + for (unsigned int it = 0; it < cfg.nTRACK; ++it) { + unsigned int dr = dr2_int(mu[im].hwEta, mu[im].hwPhi, track[it].hwEta, track[it].hwPhi); + //printf("deltaR2(mu %d float pt %5.1f, tk %2d float pt %5.1f) = int %d (float deltaR = %.3f); int cut at %d\n", im, 0.25*int(mu[im].hwPt), it, 0.25*int(track[it].hwPt), dr, std::sqrt(float(dr))/229.2, cfg.dR2MAX_TK_MU); + if (dr < cfg.dR2MAX_TK_MU) { + int dpt = std::abs(int(track[it].hwPt - mu[im].hwPt)); + if (dpt < dptmin) { + dptmin = dpt; + ibest = it; + } + } + } + if (ibest != -1) { + outmu[im].hwPt = track[ibest].hwPt; + outmu[im].hwEta = track[ibest].hwEta; + outmu[im].hwPhi = track[ibest].hwPhi; + outmu[im].hwId = PID_Muon; + outmu[im].hwZ0 = track[ibest].hwZ0; + isMu[ibest] = 1; + if (debug) + printf("FW \t muon %3d linked to track %3d \n", im, ibest); + } else { + if (debug) + printf("FW \t muon %3d not linked to any track\n", im); + } + } + } +} diff --git a/L1Trigger/Phase2L1ParticleFlow/src/ref/pfalgo_common_ref.h b/L1Trigger/Phase2L1ParticleFlow/src/ref/pfalgo_common_ref.h new file mode 100644 index 0000000000000..1ee0618592f80 --- /dev/null +++ b/L1Trigger/Phase2L1ParticleFlow/src/ref/pfalgo_common_ref.h @@ -0,0 +1,93 @@ +#ifndef PFALGO_COMMON_REF_H +#define PFALGO_COMMON_REF_H + +#include "../firmware/data.h" +#include "../firmware/pfalgo_common.h" +#include + +template +inline int sqr(const T &t) { + return t * t; +} + +template +int best_match_with_pt_ref(int nCAL, int dR2MAX, const CO_t calo[/*nCAL*/], const TkObj &track); + +template +void ptsort_ref(int nIn, int nOut, const T in[/*nIn*/], T out[/*nOut*/]); + +struct pfalgo_config { + unsigned int nTRACK, nCALO, nMU; + unsigned int nSELCALO; + unsigned int dR2MAX_TK_MU; + unsigned int dR2MAX_TK_CALO; + unsigned int tk_MAXINVPT_LOOSE, tk_MAXINVPT_TIGHT; + + pfalgo_config(unsigned int nTrack, + unsigned int nCalo, + unsigned int nMu, + unsigned int nSelCalo, + unsigned int dR2Max_Tk_Mu, + unsigned int dR2Max_Tk_Calo, + unsigned int tk_MaxInvPt_Loose, + unsigned int tk_MaxInvPt_Tight) + : nTRACK(nTrack), + nCALO(nCalo), + nMU(nMu), + nSELCALO(nSelCalo), + dR2MAX_TK_MU(dR2Max_Tk_Mu), + dR2MAX_TK_CALO(dR2Max_Tk_Calo), + tk_MAXINVPT_LOOSE(tk_MaxInvPt_Loose), + tk_MAXINVPT_TIGHT(tk_MaxInvPt_Tight) {} +}; + +void pfalgo_mu_ref(const pfalgo_config &cfg, + const TkObj track[/*cfg.nTRACK*/], + const MuObj mu[/*cfg.nMU*/], + bool isMu[/*cfg.nTRACK*/], + PFChargedObj outmu[/*cfg.nMU*/], + bool debug); + +//=== begin implementation part + +template +int best_match_with_pt_ref(int nCAL, int dR2MAX, const CO_t calo[/*nCAL*/], const TkObj &track) { + pt_t caloPtMin = track.hwPt - 2 * (track.hwPtErr); + if (caloPtMin < 0) + caloPtMin = 0; + int dptscale = (dR2MAX << 8) / std::max(1, sqr(track.hwPtErr)); + int drmin = 0, ibest = -1; + for (int ic = 0; ic < nCAL; ++ic) { + if (calo[ic].hwPt <= caloPtMin) + continue; + int dr = dr2_int(track.hwEta, track.hwPhi, calo[ic].hwEta, calo[ic].hwPhi); + if (dr >= dR2MAX) + continue; + dr += ((sqr(std::max(track.hwPt - calo[ic].hwPt, 0)) * dptscale) >> 8); + if (ibest == -1 || dr < drmin) { + drmin = dr; + ibest = ic; + } + } + return ibest; +} + +template +void ptsort_ref(int nIn, int nOut, const TV &in /*[nIn]*/, T out[/*nOut*/]) { + for (int iout = 0; iout < nOut; ++iout) { + out[iout].hwPt = 0; + } + for (int it = 0; it < nIn; ++it) { + for (int iout = 0; iout < nOut; ++iout) { + if (in[it].hwPt >= out[iout].hwPt) { + for (int i2 = nOut - 1; i2 > iout; --i2) { + out[i2] = out[i2 - 1]; + } + out[iout] = in[it]; + break; + } + } + } +} + +#endif diff --git a/L1Trigger/Phase2L1ParticleFlow/src/utils/DiscretePF2Firmware.h b/L1Trigger/Phase2L1ParticleFlow/src/utils/DiscretePF2Firmware.h new file mode 100644 index 0000000000000..30a2a88f0d6e8 --- /dev/null +++ b/L1Trigger/Phase2L1ParticleFlow/src/utils/DiscretePF2Firmware.h @@ -0,0 +1,69 @@ +#ifndef FASTPUPPI_NTUPLERPRODUCER_DISCRETEPF2FIRMWARE_H +#define FASTPUPPI_NTUPLERPRODUCER_DISCRETEPF2FIRMWARE_H + +/// NOTE: this include is not standalone, since the path to DiscretePFInputs is different in CMSSW & Vivado_HLS + +#include "../firmware/data.h" +#include + +namespace dpf2fw { + + // convert inputs from discrete to firmware + void convert(const l1tpf_impl::PropagatedTrack &in, TkObj &out) { + out.hwPt = in.hwPt; + out.hwPtErr = in.hwCaloPtErr; + out.hwEta = in.hwEta; // @calo + out.hwPhi = in.hwPhi; // @calo + out.hwZ0 = in.hwZ0; + out.hwTightQuality = (in.hwStubs >= 6 && in.hwChi2 < 500); + } + + TkObj transformConvert(const l1tpf_impl::PropagatedTrack &in) { + TkObj out; + convert(in, out); + return out; + } + + void convert(const l1tpf_impl::CaloCluster &in, HadCaloObj &out) { + out.hwPt = in.hwPt; + out.hwEmPt = in.hwEmPt; + out.hwEta = in.hwEta; + out.hwPhi = in.hwPhi; + out.hwIsEM = in.isEM; + } + void convert(const l1tpf_impl::CaloCluster &in, EmCaloObj &out) { + out.hwPt = in.hwPt; + out.hwPtErr = in.hwPtErr; + out.hwEta = in.hwEta; + out.hwPhi = in.hwPhi; + } + void convert(const l1tpf_impl::Muon &in, MuObj &out) { + out.hwPt = in.hwPt; + out.hwPtErr = 0; // does not exist in input + out.hwEta = in.hwEta; // @calo + out.hwPhi = in.hwPhi; // @calo + } + + template + void convert(const std::vector &in, Out out[NMAX]) { + for (unsigned int i = 0, n = std::min(NMAX, in.size()); i < n; ++i) { + convert(in[i], out[i]); + } + for (unsigned int i = in.size(); i < NMAX; ++i) { + clear(out[i]); + } + } + + template + void convert(unsigned int NMAX, const std::vector &in, Out out[]) { + for (unsigned int i = 0, n = std::min(NMAX, in.size()); i < n; ++i) { + convert(in[i], out[i]); + } + for (unsigned int i = in.size(); i < NMAX; ++i) { + clear(out[i]); + } + } + +} // namespace dpf2fw + +#endif diff --git a/L1Trigger/Phase2L1ParticleFlow/src/utils/Firmware2DiscretePF.h b/L1Trigger/Phase2L1ParticleFlow/src/utils/Firmware2DiscretePF.h new file mode 100644 index 0000000000000..3c9f193143a5d --- /dev/null +++ b/L1Trigger/Phase2L1ParticleFlow/src/utils/Firmware2DiscretePF.h @@ -0,0 +1,161 @@ +#ifndef FASTPUPPI_NTUPLERPRODUCER_FIRMWARE2DISCRETEPF_H +#define FASTPUPPI_NTUPLERPRODUCER_FIRMWARE2DISCRETEPF_H + +/// NOTE: this include is not standalone, since the path to DiscretePFInputs is different in CMSSW & Vivado_HLS + +#include "../firmware/data.h" +#include +#include + +namespace fw2dpf { + + // convert inputs from discrete to firmware + inline void convert(const PFChargedObj &src, + const l1tpf_impl::PropagatedTrack &track, + std::vector &out) { + l1tpf_impl::PFParticle pf; + pf.hwPt = src.hwPt; + pf.hwEta = src.hwEta; + pf.hwPhi = src.hwPhi; + pf.hwVtxEta = src.hwEta; // FIXME: get from the track + pf.hwVtxPhi = src.hwPhi; // before propagation + pf.track = track; // FIXME: ok only as long as there is a 1-1 mapping + pf.cluster.hwPt = 0; + pf.cluster.src = nullptr; + pf.muonsrc = nullptr; + switch (src.hwId) { + case PID_Electron: + pf.hwId = 1; + break; + case PID_Muon: + pf.hwId = 4; + break; + default: + pf.hwId = 0; + break; + }; + pf.hwStatus = 0; + out.push_back(pf); + } + // convert inputs from discrete to firmware + inline void convert(const TkObj &in, l1tpf_impl::PropagatedTrack &out); + inline void convert(const PFChargedObj &src, const TkObj &track, std::vector &out) { + l1tpf_impl::PFParticle pf; + pf.hwPt = src.hwPt; + pf.hwEta = src.hwEta; + pf.hwPhi = src.hwPhi; + pf.hwVtxEta = src.hwEta; // FIXME: get from the track + pf.hwVtxPhi = src.hwPhi; // before propagation + convert(track, pf.track); // FIXME: ok only as long as there is a 1-1 mapping + pf.cluster.hwPt = 0; + pf.cluster.src = nullptr; + pf.muonsrc = nullptr; + switch (src.hwId) { + case PID_Electron: + pf.hwId = 1; + break; + case PID_Muon: + pf.hwId = 4; + break; + default: + pf.hwId = 0; + break; + }; + pf.hwStatus = 0; + out.push_back(pf); + } + inline void convert(const PFNeutralObj &src, std::vector &out) { + l1tpf_impl::PFParticle pf; + pf.hwPt = src.hwPt; + pf.hwEta = src.hwEta; + pf.hwPhi = src.hwPhi; + pf.hwVtxEta = src.hwEta; + pf.hwVtxPhi = src.hwPhi; + pf.track.hwPt = 0; + pf.track.src = nullptr; + pf.cluster.hwPt = src.hwPt; + pf.cluster.src = nullptr; + pf.muonsrc = nullptr; + switch (src.hwId) { + case PID_Photon: + pf.hwId = 3; + break; + default: + pf.hwId = 2; + break; + } + pf.hwStatus = 0; + out.push_back(pf); + } + + // convert inputs from discrete to firmware + inline void convert(const TkObj &in, l1tpf_impl::PropagatedTrack &out) { + out.hwPt = in.hwPt; + out.hwCaloPtErr = in.hwPtErr; + out.hwEta = in.hwEta; // @calo + out.hwPhi = in.hwPhi; // @calo + out.hwZ0 = in.hwZ0; + out.src = nullptr; + } + inline void convert(const HadCaloObj &in, l1tpf_impl::CaloCluster &out) { + out.hwPt = in.hwPt; + out.hwEmPt = in.hwEmPt; + out.hwEta = in.hwEta; + out.hwPhi = in.hwPhi; + out.isEM = in.hwIsEM; + out.src = nullptr; + } + inline void convert(const EmCaloObj &in, l1tpf_impl::CaloCluster &out) { + out.hwPt = in.hwPt; + out.hwPtErr = in.hwPtErr; + out.hwEta = in.hwEta; + out.hwPhi = in.hwPhi; + out.src = nullptr; + } + inline void convert(const MuObj &in, l1tpf_impl::Muon &out) { + out.hwPt = in.hwPt; + out.hwEta = in.hwEta; // @calo + out.hwPhi = in.hwPhi; // @calo + out.src = nullptr; + } + + template + void convert(const In in[NMAX], std::vector &out) { + for (unsigned int i = 0; i < NMAX; ++i) { + if (in[i].hwPt > 0) + convert(in[i], out); + } + } + template + void convert(unsigned int NMAX, const In in[], std::vector &out) { + for (unsigned int i = 0; i < NMAX; ++i) { + if (in[i].hwPt > 0) + convert(in[i], out); + } + } + template + void convert(const PFChargedObj in[NMAX], + std::vector srctracks, + std::vector &out) { + for (unsigned int i = 0; i < NMAX; ++i) { + if (in[i].hwPt > 0) { + assert(i < srctracks.size()); + convert(in[i], srctracks[i], out); + } + } + } + inline void convert(unsigned int NMAX, + const PFChargedObj in[], + std::vector srctracks, + std::vector &out) { + for (unsigned int i = 0; i < NMAX; ++i) { + if (in[i].hwPt > 0) { + assert(i < srctracks.size()); + convert(in[i], srctracks[i], out); + } + } + } + +} // namespace fw2dpf + +#endif diff --git a/L1Trigger/Phase2L1ParticleFlow/test/BuildFile.xml b/L1Trigger/Phase2L1ParticleFlow/test/BuildFile.xml new file mode 100644 index 0000000000000..6bb089624a4d9 --- /dev/null +++ b/L1Trigger/Phase2L1ParticleFlow/test/BuildFile.xml @@ -0,0 +1,9 @@ + + + + + + + + + \ No newline at end of file diff --git a/L1Trigger/Phase2L1ParticleFlow/test/l1pfJetMetTreeProducer.py b/L1Trigger/Phase2L1ParticleFlow/test/l1pfJetMetTreeProducer.py new file mode 100644 index 0000000000000..c2ec3df0ffa56 --- /dev/null +++ b/L1Trigger/Phase2L1ParticleFlow/test/l1pfJetMetTreeProducer.py @@ -0,0 +1,31 @@ +import FWCore.ParameterSet.Config as cms +from Configuration.StandardSequences.Eras import eras + +process = cms.Process("IN", eras.phase2_trigger) +process.load('Configuration.StandardSequences.Services_cff') +process.load("FWCore.MessageLogger.MessageLogger_cfi") +process.load('Configuration.Geometry.GeometryExtended2023D17Reco_cff') +process.load('Configuration.StandardSequences.MagneticField_cff') +process.load('Configuration.StandardSequences.EndOfProcess_cff') +process.load('Configuration.StandardSequences.FrontierConditions_GlobalTag_cff') +from Configuration.AlCa.GlobalTag import GlobalTag +process.GlobalTag = GlobalTag(process.GlobalTag, '100X_upgrade2023_realistic_v1', '') + +process.source = cms.Source("PoolSource", + fileNames = cms.untracked.vstring('/store/relval/CMSSW_9_3_7/RelValTTbar_14TeV/GEN-SIM-DIGI-RAW/93X_upgrade2023_realistic_v5_2023D17noPU-v2/10000/7EC7DD7F-782C-E811-B469-0CC47A4D76A0.root'), + duplicateCheckMode = cms.untracked.string("noDuplicateCheck"), + inputCommands = cms.untracked.vstring("keep *", + "drop l1tEMTFHit2016Extras_simEmtfDigis_CSC_HLT", + "drop l1tEMTFHit2016Extras_simEmtfDigis_RPC_HLT", + "drop l1tEMTFHit2016s_simEmtfDigis__HLT", + "drop l1tEMTFTrack2016Extras_simEmtfDigis__HLT", + "drop l1tEMTFTrack2016s_simEmtfDigis__HLT") + +) +process.maxEvents = cms.untracked.PSet( input = cms.untracked.int32(500)) +process.options = cms.untracked.PSet( wantSummary = cms.untracked.bool(True) ) + +process.load('L1Trigger.Phase2L1ParticleFlow.l1pfJetMetTreeProducer_cff') + +process.p = cms.Path(process.l1pfJetMetTreeProducer) +process.TFileService = cms.Service("TFileService", fileName = cms.string("jetmetTuple.root")) diff --git a/L1Trigger/Phase2L1ParticleFlow/test/testOutputFiles.cpp b/L1Trigger/Phase2L1ParticleFlow/test/testOutputFiles.cpp new file mode 100644 index 0000000000000..3591beb5ef50e --- /dev/null +++ b/L1Trigger/Phase2L1ParticleFlow/test/testOutputFiles.cpp @@ -0,0 +1,611 @@ +// STL includes +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + +// ROOT includes +#include "TROOT.h" +#include "TSystem.h" +#include "TFile.h" +#include "TTree.h" +#include "TLorentzVector.h" + +// CMSSW includes +#include "FWCore/FWLite/interface/FWLiteEnabler.h" +#include "FWCore/Utilities/interface/InputTag.h" +#include "DataFormats/FWLite/interface/Handle.h" +#include "DataFormats/FWLite/interface/Run.h" +#include "DataFormats/FWLite/interface/LuminosityBlock.h" +#include "DataFormats/FWLite/interface/Event.h" +#include "DataFormats/L1TParticleFlow/interface/PFTrack.h" +#include "L1Trigger/Phase2L1ParticleFlow/interface/DiscretePFInputsIO.h" +#include "L1Trigger/Phase2L1ParticleFlow/interface/Region.h" + +#define NTEST 64 +#define REPORT_EVERY_N 50 +#define NTRACKS_PER_SECTOR 110 +#define NBITS_PER_TRACK 96 +static std::vector regions_; + +typedef l1tpf_impl::InputRegion Region; +typedef std::pair SectorTrackIndex; +typedef std::map TrackMap; + +struct Event { + uint32_t run, lumi; + uint64_t event; + float z0, genZ0; + std::vector puGlobals; // [float] alphaCMed, alphaCRms, alphaFMed, alphaFRms + std::vector regions; + + Event() : run(0), lumi(0), event(0), z0(0.), regions() {} + bool readFromFile(FILE *fRegionDump) { + if (!fread(&run, sizeof(uint32_t), 1, fRegionDump)) + return false; + fread(&lumi, sizeof(uint32_t), 1, fRegionDump); + fread(&event, sizeof(uint64_t), 1, fRegionDump); + l1tpf_impl::readManyFromFile(regions, fRegionDump); + fread(&z0, sizeof(float), 1, fRegionDump); + fread(&genZ0, sizeof(float), 1, fRegionDump); + l1tpf_impl::readManyFromFile(puGlobals, fRegionDump); + return true; + } +}; + +TLorentzVector *makeTLorentzVectorPtEtaPhiE(float pt, float eta, float phi, float e) { + TLorentzVector *v = new TLorentzVector(); + v->SetPtEtaPhiE(pt, eta, phi, e); + return v; +} + +/* + * Convert a bitset to a signed int64_t. + * std::bitset has built-ins for ulong and ullong. + */ +template 0 && N < 64)>> +int64_t to_int64_from_bitset(const std::bitset &b) { + int const shift = 64 - N; + return (((int64_t)b.to_ullong() << shift) >> shift); +} + +/* + * Generic implementation to search if a given value exists in a map or not. + * Adds all the keys with given value in the vector + */ +template +bool findAllInRegion(std::vector &vec, std::map mapOfElemen, T value) { + bool bResult = false; + auto it = mapOfElemen.begin(); + // Iterate through the map + while (it != mapOfElemen.end()) { + // Check if value of this entry matches with given value + if (it->first.first == value) { + // Yes found + bResult = true; + // Push the key in given map + vec.push_back(it->first); + } + // Go to next entry in map + it++; + } + return bResult; +} + +TrackMap get_tracks_from_root_file(fwlite::Event &ev, int entry = 0, bool print = false) { + TrackMap tracks_root; + + // clear the tracks currently stored in the regions + for (l1tpf_impl::Region &r : regions_) { + r.track.clear(); + } + + // go to the event under test + if (!ev.to(entry)) { + std::cerr << "ERROR::testDumpFile::get_tracks_from_root_file Unable to load the event at entry " << entry + << std::endl; + assert(ev.to(entry)); + } + if (print) + printf("ROOT::Run %u, lumi %u, event %llu \n", + ev.getRun().id().run(), + ev.getLuminosityBlock().id().luminosityBlock(), + ev.eventAuxiliary().id().event()); + + edm::InputTag trackLabel("pfTracksFromL1TracksBarrel"); + edm::Handle> h_track; + ev.getByLabel(trackLabel, h_track); + assert(h_track.isValid()); + + int ntrackstotal(0); + const auto &tracks = *h_track; + for (unsigned int itk = 0, ntk = tracks.size(); itk < ntk; ++itk) { + const auto &tk = tracks[itk]; + if (tk.pt() <= 2.0 || tk.nStubs() < 4 || tk.normalizedChi2() >= 15.0) + continue; + for (l1tpf_impl::Region &r : regions_) { + bool inside = r.contains(tk.eta(), tk.phi()); + ; + if (inside) { + l1tpf_impl::PropagatedTrack prop; + prop.fillInput( + tk.pt(), r.localEta(tk.eta()), r.localPhi(tk.phi()), tk.charge(), tk.vertex().Z(), tk.quality(), &tk); + prop.fillPropagated(tk.pt(), + tk.trkPtError(), + tk.caloPtError(), + r.localEta(tk.caloEta()), + r.localPhi(tk.caloPhi()), + tk.quality(), + tk.isMuon()); + prop.hwStubs = tk.nStubs(); + prop.hwChi2 = round(tk.chi2() * 10); + r.track.push_back(prop); + } + } + //if (print) printf("\t\t Track %u (pT,eta,phi): (%.4f,%.4f,%.4f)\n", ntrackstotal, tk.pt(), tk.eta(), tk.phi()); + ntrackstotal++; + } + for (unsigned int iregion = 0; iregion < regions_.size(); ++iregion) { + std::vector tracks_in_region = regions_[iregion].track; + if (print) + printf("\tFound region %u (eta=[%0.4f,%0.4f] phi=[%0.4f,%0.4f]) with %lu tracks\n", + iregion, + regions_[iregion].etaMin, + regions_[iregion].etaMax, + regions_[iregion].phiCenter - regions_[iregion].phiHalfWidth, + regions_[iregion].phiCenter + regions_[iregion].phiHalfWidth, + tracks_in_region.size()); + for (unsigned int it = 0; it < tracks_in_region.size(); it++) { + if (print) + printf("\t\t Track %u (pT,eta,phi): (%.4f,%.4f,%.4f)\n", + it, + tracks_in_region[it].src->p4().pt(), + tracks_in_region[it].src->p4().eta(), + tracks_in_region[it].src->p4().phi()); + tracks_root[std::make_pair(iregion, it)] = makeTLorentzVectorPtEtaPhiE(tracks_in_region[it].src->pt(), + tracks_in_region[it].src->eta(), + tracks_in_region[it].src->phi(), + tracks_in_region[it].src->pt()); + } + } + if (print) { + printf("\t================================= \n"); + printf("\tTotal tracks %u \n\n", ntrackstotal); + } + + return tracks_root; +} + +std::map, TLorentzVector *> get_tracks_from_dump_file(FILE *dfile_ = nullptr, bool print = false) { + std::map, TLorentzVector *> tracks_dump; + Event event_; + + if (feof(dfile_)) { + std::cerr << "ERROR::testDumpFile::get_tracks_from_dump_file We have already reached the end of the dump file" + << std::endl; + assert(!feof(dfile_)); + } + if (!event_.readFromFile(dfile_)) { + std::cerr << "ERROR::testDumpFile::get_tracks_from_dump_file Something went wrong reading from the dump file" + << std::endl; + assert(event_.readFromFile(dfile_)); + } + if (event_.regions.size() != regions_.size()) { + printf("ERROR::testDumpFile::get_tracks_from_dump_file Mismatching number of input regions: %lu\n", + event_.regions.size()); + assert(event_.regions.size() == regions_.size()); + } + if (print) + printf("Dump::Run %u, lumi %u, event %lu, regions %lu \n", + event_.run, + event_.lumi, + event_.event, + event_.regions.size()); + + unsigned int ntrackstotal(0); + float maxabseta(0), maxz(0), minz(0); + + int pv_gen = round(event_.genZ0 * l1tpf_impl::InputTrack::Z0_SCALE); + int pv_cmssw = round(event_.z0 * l1tpf_impl::InputTrack::Z0_SCALE); + + for (unsigned int is = 0; is < regions_.size(); ++is) { + const Region &r = event_.regions[is]; + if (print) + printf("\tRead region %u [%0.2f,%0.2f] with %lu tracks\n", + is, + r.phiCenter - r.phiHalfWidth, + r.phiCenter + r.phiHalfWidth, + r.track.size()); + ntrackstotal += r.track.size(); + for (unsigned int it = 0; it < r.track.size(); it++) { + tracks_dump[std::make_pair(is, it)] = makeTLorentzVectorPtEtaPhiE( + r.track[it].floatVtxPt(), r.track[it].floatVtxEta(), r.track[it].floatVtxPhi(), r.track[it].floatVtxPt()); + if (abs(r.track[it].hwVtxEta) > maxabseta) + maxabseta = abs(r.track[it].hwVtxEta); + if (r.track[it].hwZ0 > maxz) + maxz = r.track[it].hwZ0; + if (r.track[it].hwZ0 < minz) + minz = r.track[it].hwZ0; + if (print) + printf("\t\t Track %u (pT,eta,phi): (%.4f,%.4f,%.4f)\n", + it, + r.track[it].floatVtxPt(), + r.track[it].floatVtxEta(), + r.track[it].floatVtxPhi()); + } + } + + if (print) { + printf("\t================================= \n"); + printf("\tTotal tracks %u \n", ntrackstotal); + printf("\tMax abs(eta) %.2f [hw units] \n", maxabseta); + printf("\tMax abs(eta) %.4f \n", maxabseta / l1tpf_impl::InputTrack::VTX_ETA_SCALE); + printf("\t[Min,max] track z0 [%.2f,%.2f] [hw units] \n", minz, maxz); + printf("\t[Min,max] track z0 [%.2f,%.2f] [cm] \n", + minz / l1tpf_impl::InputTrack::Z0_SCALE, + maxz / l1tpf_impl::InputTrack::Z0_SCALE); + printf("\tPV (GEN) %u \n", pv_gen); + printf("\tPV (CMSSW) %u \n\n", pv_cmssw); + } + + return tracks_dump; +} + +std::map, TLorentzVector *> get_tracks_from_coe_file(std::ifstream &cfile_, + bool print = false, + bool debug = false) { + std::map, TLorentzVector *> tracks_coe; + std::string bset_string_; + int ntrackstotal(0); + bool skip(false); + + // check that we haven't reached the end of the file (i.e. there a more events to be read out) + if (cfile_.eof()) { + std::cerr << "ERROR::testDumpFile::get_tracks_from_coe_file We have already reached the end of the coe file" + << std::endl; + assert(!cfile_.eof()); + } + if (print) + printf("COE::Run \"unknown\", lumi \"unknown\", event \"unknown\", regions %lu? \n", regions_.size()); + + // read the lines one by one + for (unsigned int iline = 0; iline < NTRACKS_PER_SECTOR; iline++) { + bset_string_.resize(NBITS_PER_TRACK); + for (unsigned int isector = 0; isector < regions_.size(); isector++) { + cfile_.read(&bset_string_[0], 96); + std::bitset bset_(bset_string_); + if (bset_.none()) { + skip = true; + continue; + } else { + skip = false; + } + + std::bitset<14> hwPt; + std::bitset<16> hwVtxEta; + std::bitset<12> hwVtxPhi; + for (int i = 14 - 1; i >= 0; i--) { + hwPt.set(i, bset_[i]); + } + for (int i = 12 - 1; i >= 0; i--) { + hwVtxPhi.set(i, bset_[i + 15]); + } + for (int i = 16 - 1; i >= 0; i--) { + hwVtxEta.set(i, bset_[i + 27]); + } + float hwVtxPt_f = (float(hwPt.to_ulong()) / l1tpf_impl::CaloCluster::PT_SCALE); + float hwVtxEta_f = float(to_int64_from_bitset(hwVtxEta)) / l1tpf_impl::InputTrack::VTX_ETA_SCALE; + float hwVtxPhi_f = float(to_int64_from_bitset(hwVtxPhi)) / l1tpf_impl::InputTrack::VTX_PHI_SCALE; + + if (debug) { + std::cout << "bset_string_ = " << bset_string_ << std::endl; + std::cout << "\thwPt (0b) = " << std::flush; + for (int i = 14 - 1; i >= 0; i--) { + std::cout << bset_[i] << std::flush; + } + std::cout << std::endl; + std::cout << "\thwVtxPhi (0b) = " << std::flush; + for (int i = 12 - 1; i >= 0; i--) { + std::cout << bset_[i + 15] << std::flush; + } + std::cout << std::endl; + std::cout << "\thwVtxEta (0b) = " << std::flush; + for (int i = 16 - 1; i >= 0; i--) { + std::cout << bset_[i + 27] << std::flush; + } + std::cout << std::endl; + std::cout << "\thwPt (int) = " << hwPt.to_ulong() << std::endl; + std::cout << "\thwVtxPhi (int) = " << to_int64_from_bitset(hwVtxPhi) << std::endl; + std::cout << "\thwVtxEta (int) = " << to_int64_from_bitset(hwVtxEta) << std::endl; + std::cout << "\thwVtxPt_f (float) = " << hwVtxPt_f << std::endl; + std::cout << "\thwVtxPhi_f (float) = " << hwVtxPhi_f << std::endl; + std::cout << "\thwVtxEta_f (float) = " << hwVtxEta_f << std::endl; + } + + if (bset_.any()) { + ntrackstotal++; + tracks_coe[std::make_pair(isector, iline)] = + makeTLorentzVectorPtEtaPhiE(hwVtxPt_f, hwVtxEta_f, hwVtxPhi_f, hwVtxPt_f); + //if (print) printf("\t\t Track %u (pT,eta,phi): (%.4f,%.4f,%.4f)\n", it, hwPt_f, hwVtxEta_f, hwVtxPhi_f); + } + } + + // remove the trailing character + bset_string_.resize(2); + cfile_.read(&bset_string_[0], 2); + if (debug && !skip) + std::cout << "bset_string_ = " << bset_string_ << std::endl; + if (bset_string_ != ",\n" && bset_string_ != ";\n") { + std::cerr << "ERROR::testDumpFile::get_tracks_from_coe_file Something went wrong reading line " << 11 + iline + << " of the COE file" << std::endl + << "\tThe line should have ended with \',\' or \';\', but instead ended with \'" + << bset_string_ << "\'" << std::endl; + assert(bset_string_ != "," || bset_string_ != ";"); + } + } + for (unsigned int is = 0; is < regions_.size(); ++is) { + std::vector tracks_in_sector; + findAllInRegion(tracks_in_sector, tracks_coe, is); + if (print) + printf("\tRead region %u (eta=[%0.4f,%0.4f] phi=[%0.4f,%0.4f]) with %lu tracks\n", + is, + regions_[is].etaMin, + regions_[is].etaMax, + regions_[is].phiCenter - regions_[is].phiHalfWidth, + regions_[is].phiCenter + regions_[is].phiHalfWidth, + tracks_in_sector.size()); + for (unsigned int it = 0; it < tracks_in_sector.size(); it++) { + if (print) + printf("\t\t Track %u (pT,eta,phi): (%.4f,%.4f,%.4f)\n", + it, + tracks_coe[tracks_in_sector[it]]->Pt(), + tracks_coe[tracks_in_sector[it]]->Eta(), + tracks_coe[tracks_in_sector[it]]->Phi()); + } + } + + if (print) { + printf("\t================================= \n"); + printf("\tTotal tracks %u \n\n", ntrackstotal); + } + + return tracks_coe; +} + +std::ifstream &GotoLine(std::ifstream &file, unsigned int num) { + file.seekg(std::ios::beg); + for (unsigned int i = 0; i < num - 1; ++i) { + file.ignore(std::numeric_limits::max(), '\n'); + } + return file; +} + +bool compare_lv_with_tolerance(TLorentzVector a, TLorentzVector b, const std::vector &tolerance = {0, 0, 0, 0}) { + /* + Example (Tolerance = 0.0005): + Track from ROOT file: pt=16.3452797 + InputTrack::INVPT_SCALE = 2E4 + std::numeric_limits::max() = 65535 + hwInvpt = std::min(round(1/pt * InputTrack::INVPT_SCALE), std::numeric_limits::max()) = 1224.0000 + floatVtxPt() = 1/(float(hwInvpt) / InputTrack::INVPT_SCALE) = 16.339869 + So loss of precision comes from rounding + Difference is DeltaPt=0.00541114807 + */ + if (abs(a.Pt() - b.Pt()) > tolerance[0] || abs(a.Eta() - b.Eta()) > tolerance[1] || + abs(a.Phi() - b.Phi()) > tolerance[2] || abs(a.E() - b.E()) > tolerance[3]) { + std::cerr << std::setprecision(9); + std::cerr << std::endl << "\tMismatching " << std::flush; + if (abs(a.Pt() - b.Pt()) > tolerance[0]) + std::cerr << "pT! " << a.Pt() << " vs " << b.Pt() << " where DeltaPt=" << abs(a.Pt() - b.Pt()) + << " and epsilon=" << tolerance[0] << std::endl; + else if (abs(a.Eta() - b.Eta()) > tolerance[1]) + std::cerr << "eta! " << a.Eta() << " vs " << b.Eta() << " where DeltaEta=" << abs(a.Eta() - b.Eta()) + << " and epsilon=" << tolerance[1] << std::endl; + else if (abs(a.Phi() - b.Phi()) > tolerance[2]) + std::cerr << "phi! " << a.Phi() << " vs " << b.Phi() << " where DeltaPhi=" << abs(a.Phi() - b.Phi()) + << " and epsilon=" << tolerance[2] << std::endl; + else if (abs(a.E() - b.E()) > tolerance[3]) + std::cerr << "E! " << a.E() << " vs " << b.E() << " where DeltaE=" << abs(a.E() - b.E()) + << " and epsilon=" << tolerance[3] << std::endl; + return false; + } + return true; +} + +bool compare_maps(TrackMap ref, TrackMap test) { + TLorentzVector tlv; + for (auto it = ref.begin(); it != ref.end(); it++) { + if (test.find(it->first) == test.end()) { + std::cerr << std::endl + << "\tERROR::compare_maps Can't find the test track with (sector,index)=(" << it->first.first << "," + << it->first.second << ")" << std::endl; + return false; + } + tlv = *(test.find(it->first)->second); + // The pT tolerance should be 1.0/l1tpf_impl::CaloCluster::PT_SCALE, but because of the rounding this is not true and the actual resolution isn't always as good + // Instead, we will use max(1% of the pT of the reference TLorentzVector,0.25) + // We use the max statement because at low pT, the 1% definition doesn't hold anymore. This wouldn't be a problem if 1/pT were encoded rather than pT. + if (!compare_lv_with_tolerance( + *(it->second), + tlv, + {float(std::max(it->second->Pt() * 1E-2, 1.0 / l1tpf_impl::CaloCluster::PT_SCALE)), + 1.0 / l1tpf_impl::InputTrack::VTX_ETA_SCALE, + 1.0 / l1tpf_impl::InputTrack::VTX_PHI_SCALE, + float(std::max(it->second->Pt() * 1E-2, 1.0 / l1tpf_impl::CaloCluster::PT_SCALE))})) { + std::cerr << std::endl + << "\tERROR::compare_maps Can't find the test track with TLorentzVector (" << it->second->Pt() << "," + << it->second->Eta() << "," << it->second->Phi() << "," << it->second->E() << ")" << std::endl + << "\t\tInstead found (" << tlv.Pt() << "," << tlv.Eta() << "," << tlv.Phi() << "," << tlv.E() + << ") at the position (sector,index)=(" << it->first.first << "," << it->first.second << ")" + << std::endl; + return false; + } + } + return true; +} + +int main(int argc, char *argv[]) { + // store some programatic information + std::stringstream usage; + usage << "usage: " << argv[0] + << " .root .dump .coe "; + + // load framework libraries + gSystem->Load("libFWCoreFWLite"); + FWLiteEnabler::enable(); + + // argc should be 5 for correct execution + // We print argv[0] assuming it is the program name + if (argc < 9) { + std::cerr << "ERROR::testDumpFile " << argc << " arguments provided" << std::endl; + for (int i = 0; i < argc; i++) { + std::cerr << "\tArgument " << i << ": " << argv[i] << std::endl; + } + std::cerr << usage.str() << std::endl; + return -1; + } + + // assign the command-line parameters to variables and setup the regions + std::string filename_root = argv[1]; + std::string filename_dump = argv[2]; + std::string filename_coe = argv[3]; + float etaExtra, phiExtra; + unsigned int nRegionsPhi; + std::vector etaBoundaries; + try { + etaExtra = atof(argv[4]); + phiExtra = atof(argv[5]); + nRegionsPhi = atoi(argv[6]); + std::vector etaBoundariesStrings(argv + 7, argv + argc); + std::size_t pos; + for (unsigned int i = 0; i < etaBoundariesStrings.size(); i++) { + etaBoundaries.push_back(std::stoi(etaBoundariesStrings[i], &pos)); + if (pos < etaBoundariesStrings[i].size()) { + std::cerr << "Trailing characters after number: " << etaBoundariesStrings[i] << '\n'; + } + } + float phiWidth = 2 * M_PI / nRegionsPhi; + for (unsigned int ieta = 0, neta = etaBoundaries.size() - 1; ieta < neta; ++ieta) { + for (unsigned int iphi = 0; iphi < nRegionsPhi; ++iphi) { + float phiCenter = (iphi + 0.5) * phiWidth - M_PI; + regions_.push_back(l1tpf_impl::Region(etaBoundaries[ieta], + etaBoundaries[ieta + 1], + phiCenter, + phiWidth, + phiExtra, + etaExtra, + false, + 0, + 0, + 0, + 0, + 0, + 0)); + } + } + } catch (std::invalid_argument const &ex) { + std::cerr << "Invalid number in one of the eta-phi arguments" << std::endl; + return -2; + } catch (std::out_of_range const &ex) { + std::cerr << "Number out of range in one of the eta-phi arguments" << std::endl; + return -3; + } + + // check the filenames + if (filename_root.find(".root") == std::string::npos) { + std::cerr << "ERROR::testDumpFile Filename 1 must be a ROOT (.root) file" << std::endl << usage.str() << std::endl; + return -4; + } else if (filename_dump.find(".dump") == std::string::npos) { + std::cerr << "ERROR::testDumpFile Filename 2 must be a binary (.dump) file" << std::endl + << usage.str() << std::endl; + return -5; + } else if (filename_coe.find(".coe") == std::string::npos) { + std::cerr << "ERROR::testDumpFile Filename 3 must be a COE (.coe) file" << std::endl << usage.str() << std::endl; + return -6; + } + + // report the program configuraion + std::cout << "Configuration:" << std::endl + << "==============" << std::endl + << "Number of tests (events): " << NTEST << std::endl + << "Report every N tests: " << REPORT_EVERY_N << std::endl + << "Number of regions (in eta-phi): " << regions_.size() << std::endl; + for (unsigned int iregion = 0; iregion < regions_.size(); iregion++) { + printf("\t%i : eta=[%0.4f,%0.4f] phi=[%0.4f,%0.4f]\n", + iregion, + regions_[iregion].etaMin, + regions_[iregion].etaMax, + regions_[iregion].phiCenter - regions_[iregion].phiHalfWidth, + regions_[iregion].phiCenter + regions_[iregion].phiHalfWidth); + } + std::cout << "Number of tracks per sector: " << NTRACKS_PER_SECTOR << std::endl + << "Number of bits per track: " << NBITS_PER_TRACK << std::endl + << "==============" << std::endl + << std::endl; + + // open the files for testing + TFile *rfile_ = TFile::Open(filename_root.c_str(), "READ"); + if (!rfile_) { + std::cerr << "ERROR::testDumpFile Cannot open '" << filename_root << "'" << std::endl; + return -7; + } + fwlite::Event rfileentry_(rfile_); + FILE *dfile_(fopen(filename_dump.c_str(), "rb")); + if (!dfile_) { + std::cerr << "ERROR::testDumpFile Cannot read '" << filename_dump << "'" << std::endl; + return -8; + } + std::ifstream cfile_(filename_coe); + if (!cfile_) { + std::cerr << "ERROR::testDumpFile Cannot read '" << filename_coe << "'" << std::endl; + return -9; + } + GotoLine(cfile_, 11); //Skip the header of the COE file + + TrackMap tracks_root, tracks_dump, tracks_coe; + + // run the tests for multiple events + for (int test = 1; test <= NTEST; ++test) { + if (test % REPORT_EVERY_N == 1) + std::cout << "Doing test " << test << " ... " << std::endl; + + tracks_root = get_tracks_from_root_file(rfileentry_, test - 1, test == 1); + tracks_dump = get_tracks_from_dump_file(dfile_, test == 1); + tracks_coe = get_tracks_from_coe_file(cfile_, test == 1); + + if (test % REPORT_EVERY_N == 1) + std::cout << "Comparing the ROOT tracks to the dump tracks in event " << test << " ... " << std::flush; + if (!compare_maps(tracks_root, tracks_dump)) + return -10; + if (test % REPORT_EVERY_N == 1) + std::cout << "DONE" << std::endl; + + if (test % REPORT_EVERY_N == 1) + std::cout << "Comparing the ROOT tracks to the coe tracks in event " << test << " ... " << std::flush; + if (!compare_maps(tracks_root, tracks_coe)) + return -11; + if (test % REPORT_EVERY_N == 1) + std::cout << "DONE" << std::endl << std::endl; + } + + std::cout << std::endl << "The dump and coe outputs match the ROOT outputs for all events!" << std::endl; + return 0; +} + +/* +USE: +g++ -I/uscms_data/d2/aperloff/YOURWORKINGAREA/TSABoard/slc7/CMSSW_10_6_0_pre4/src/L1Trigger/Phase2L1ParticleFlow/interface/ -O0 -g3 -Wall -std=c++0x -c -fmessage-length=0 testDumpFile.cpp +g++ -o testDumpFile testDumpFile.o +./testDumpFile trackerRegion_alltracks_sectors_1x18_TTbar_PU200.dump 18 + +scram b runtests +*/ \ No newline at end of file From e31d639f38732d883ae55ac3f40009df12d29b61 Mon Sep 17 00:00:00 2001 From: Vladimir Date: Tue, 16 Jun 2020 01:17:38 +0200 Subject: [PATCH 02/13] code-checks. --- .../Phase2L1ParticleFlow/interface/BitwisePFAlgo.h | 4 ++-- .../Phase2L1ParticleFlow/interface/CaloClusterer.h | 6 +++--- .../interface/LinearizedPuppiAlgo.h | 2 +- .../Phase2L1ParticleFlow/interface/PFAlgo2HGC.h | 2 +- L1Trigger/Phase2L1ParticleFlow/interface/PFAlgo3.h | 2 +- .../Phase2L1ParticleFlow/interface/PuppiAlgo.h | 2 +- .../plugins/L1TPFCaloProducer.cc | 2 +- .../plugins/L1TPFJetMetTreeProducer.cc | 4 ++-- .../Phase2L1ParticleFlow/plugins/L1TPFProducer.cc | 4 ++-- .../plugins/PFClusterProducerFromHGC3DClusters.cc | 14 +++++++------- .../plugins/PFClusterProducerFromL1EGClusters.cc | 4 ++-- .../plugins/PFTrackProducerFromL1Tracks.cc | 6 +++--- L1Trigger/Phase2L1ParticleFlow/src/COEFile.cc | 8 ++++---- .../src/ref/pfalgo2hgc_ref.cpp | 2 +- .../Phase2L1ParticleFlow/src/ref/pfalgo3_ref.cpp | 2 +- .../src/ref/pfalgo_common_ref.cpp | 4 ++-- 16 files changed, 34 insertions(+), 34 deletions(-) diff --git a/L1Trigger/Phase2L1ParticleFlow/interface/BitwisePFAlgo.h b/L1Trigger/Phase2L1ParticleFlow/interface/BitwisePFAlgo.h index 4729841216dff..22faa23ba91ea 100644 --- a/L1Trigger/Phase2L1ParticleFlow/interface/BitwisePFAlgo.h +++ b/L1Trigger/Phase2L1ParticleFlow/interface/BitwisePFAlgo.h @@ -9,8 +9,8 @@ namespace l1tpf_impl { class BitwisePFAlgo : public PFAlgoBase { public: BitwisePFAlgo(const edm::ParameterSet&); - ~BitwisePFAlgo(); - virtual void runPF(Region& r) const override; + ~BitwisePFAlgo() override; + void runPF(Region& r) const override; protected: enum AlgoChoice { algo3, algo2hgc } algo_; diff --git a/L1Trigger/Phase2L1ParticleFlow/interface/CaloClusterer.h b/L1Trigger/Phase2L1ParticleFlow/interface/CaloClusterer.h index 6823d243a6053..eddc3bc3b77da 100644 --- a/L1Trigger/Phase2L1ParticleFlow/interface/CaloClusterer.h +++ b/L1Trigger/Phase2L1ParticleFlow/interface/CaloClusterer.h @@ -52,7 +52,7 @@ namespace l1tpf_calo { public: Phase1GridBase(int nEta, int nPhi, int ietaCoarse, int ietaVeryCoarse, const float *towerEtas); - virtual int find_cell(float eta, float phi) const override; + int find_cell(float eta, float phi) const override; int ifind_cell(int ieta, int iphi) const { return cell_map_[(ieta + nEta_) + 2 * nEta_ * (iphi - 1)]; } protected: @@ -269,7 +269,7 @@ namespace l1tpf_calo { class SimpleCaloLinker : public SimpleCaloLinkerBase { public: SimpleCaloLinker(const edm::ParameterSet &pset, const SingleCaloClusterer &ecal, const SingleCaloClusterer &hcal); - ~SimpleCaloLinker(); + ~SimpleCaloLinker() override; void clear() override; void run() override; @@ -279,7 +279,7 @@ namespace l1tpf_calo { class FlatCaloLinker : public SimpleCaloLinkerBase { public: FlatCaloLinker(const edm::ParameterSet &pset, const SingleCaloClusterer &ecal, const SingleCaloClusterer &hcal); - ~FlatCaloLinker(); + ~FlatCaloLinker() override; void clear() override; void run() override; diff --git a/L1Trigger/Phase2L1ParticleFlow/interface/LinearizedPuppiAlgo.h b/L1Trigger/Phase2L1ParticleFlow/interface/LinearizedPuppiAlgo.h index 72395d72ad358..fe5bd5378ec03 100644 --- a/L1Trigger/Phase2L1ParticleFlow/interface/LinearizedPuppiAlgo.h +++ b/L1Trigger/Phase2L1ParticleFlow/interface/LinearizedPuppiAlgo.h @@ -8,7 +8,7 @@ namespace l1tpf_impl { class LinearizedPuppiAlgo : public PuppiAlgo { public: LinearizedPuppiAlgo(const edm::ParameterSet &); - virtual ~LinearizedPuppiAlgo(); + ~LinearizedPuppiAlgo() override; const std::vector &puGlobalNames() const override; void doPUGlobals(const std::vector &rs, float npu, std::vector &globals) const override; diff --git a/L1Trigger/Phase2L1ParticleFlow/interface/PFAlgo2HGC.h b/L1Trigger/Phase2L1ParticleFlow/interface/PFAlgo2HGC.h index 4345bebf3f134..9835612e3b180 100644 --- a/L1Trigger/Phase2L1ParticleFlow/interface/PFAlgo2HGC.h +++ b/L1Trigger/Phase2L1ParticleFlow/interface/PFAlgo2HGC.h @@ -7,7 +7,7 @@ namespace l1tpf_impl { class PFAlgo2HGC : public PFAlgoBase { public: PFAlgo2HGC(const edm::ParameterSet &); - virtual void runPF(Region &r) const override; + void runPF(Region &r) const override; protected: float drMatchMu_; diff --git a/L1Trigger/Phase2L1ParticleFlow/interface/PFAlgo3.h b/L1Trigger/Phase2L1ParticleFlow/interface/PFAlgo3.h index 84bef59cea90e..725388ac801fc 100644 --- a/L1Trigger/Phase2L1ParticleFlow/interface/PFAlgo3.h +++ b/L1Trigger/Phase2L1ParticleFlow/interface/PFAlgo3.h @@ -7,7 +7,7 @@ namespace l1tpf_impl { class PFAlgo3 : public PFAlgoBase { public: PFAlgo3(const edm::ParameterSet &); - virtual void runPF(Region &r) const override; + void runPF(Region &r) const override; protected: float drMatchMu_; diff --git a/L1Trigger/Phase2L1ParticleFlow/interface/PuppiAlgo.h b/L1Trigger/Phase2L1ParticleFlow/interface/PuppiAlgo.h index 43847e0b0ea0a..bea12d7efdd27 100644 --- a/L1Trigger/Phase2L1ParticleFlow/interface/PuppiAlgo.h +++ b/L1Trigger/Phase2L1ParticleFlow/interface/PuppiAlgo.h @@ -8,7 +8,7 @@ namespace l1tpf_impl { class PuppiAlgo : public PUAlgoBase { public: PuppiAlgo(const edm::ParameterSet &); - virtual ~PuppiAlgo(); + ~PuppiAlgo() override; const std::vector &puGlobalNames() const override; void doPUGlobals(const std::vector &rs, float npu, std::vector &globals) const override; diff --git a/L1Trigger/Phase2L1ParticleFlow/plugins/L1TPFCaloProducer.cc b/L1Trigger/Phase2L1ParticleFlow/plugins/L1TPFCaloProducer.cc index a63cb36947c93..b5f42c8147d48 100644 --- a/L1Trigger/Phase2L1ParticleFlow/plugins/L1TPFCaloProducer.cc +++ b/L1Trigger/Phase2L1ParticleFlow/plugins/L1TPFCaloProducer.cc @@ -52,7 +52,7 @@ class L1TPFCaloProducer : public edm::stream::EDProducer<> { l1tpf::ParametricResolution resol_; - virtual void produce(edm::Event &, const edm::EventSetup &) override; + void produce(edm::Event &, const edm::EventSetup &) override; void readHcalDigis_(edm::Event &event, const edm::EventSetup &); void readPhase2BarrelCaloTowers_(edm::Event &event, const edm::EventSetup &); diff --git a/L1Trigger/Phase2L1ParticleFlow/plugins/L1TPFJetMetTreeProducer.cc b/L1Trigger/Phase2L1ParticleFlow/plugins/L1TPFJetMetTreeProducer.cc index 7341f594b5ba8..220297ee66b55 100644 --- a/L1Trigger/Phase2L1ParticleFlow/plugins/L1TPFJetMetTreeProducer.cc +++ b/L1Trigger/Phase2L1ParticleFlow/plugins/L1TPFJetMetTreeProducer.cc @@ -51,10 +51,10 @@ class L1TPFJetMetTreeProducer : public edm::one::EDAnalyzer { public: explicit L1TPFJetMetTreeProducer(const edm::ParameterSet &); - ~L1TPFJetMetTreeProducer(); + ~L1TPFJetMetTreeProducer() override; private: - virtual void analyze(const edm::Event &, const edm::EventSetup &) override; + void analyze(const edm::Event &, const edm::EventSetup &) override; struct JetInput { std::string name; diff --git a/L1Trigger/Phase2L1ParticleFlow/plugins/L1TPFProducer.cc b/L1Trigger/Phase2L1ParticleFlow/plugins/L1TPFProducer.cc index d4766d8494200..ddd9c5bf52cc6 100644 --- a/L1Trigger/Phase2L1ParticleFlow/plugins/L1TPFProducer.cc +++ b/L1Trigger/Phase2L1ParticleFlow/plugins/L1TPFProducer.cc @@ -34,7 +34,7 @@ class L1TPFProducer : public edm::stream::EDProducer<> { public: explicit L1TPFProducer(const edm::ParameterSet&); - ~L1TPFProducer(); + ~L1TPFProducer() override; private: int debug_; @@ -71,7 +71,7 @@ class L1TPFProducer : public edm::stream::EDProducer<> { // region of interest debugging float debugEta_, debugPhi_, debugR_; - virtual void produce(edm::Event&, const edm::EventSetup&) override; + void produce(edm::Event&, const edm::EventSetup&) override; void addUInt(unsigned int value, std::string iLabel, edm::Event& iEvent); }; diff --git a/L1Trigger/Phase2L1ParticleFlow/plugins/PFClusterProducerFromHGC3DClusters.cc b/L1Trigger/Phase2L1ParticleFlow/plugins/PFClusterProducerFromHGC3DClusters.cc index bfa2e7cdeedb6..6d5d45e481e81 100644 --- a/L1Trigger/Phase2L1ParticleFlow/plugins/PFClusterProducerFromHGC3DClusters.cc +++ b/L1Trigger/Phase2L1ParticleFlow/plugins/PFClusterProducerFromHGC3DClusters.cc @@ -15,7 +15,7 @@ namespace l1tpf { class PFClusterProducerFromHGC3DClusters : public edm::stream::EDProducer<> { public: explicit PFClusterProducerFromHGC3DClusters(const edm::ParameterSet &); - ~PFClusterProducerFromHGC3DClusters() {} + ~PFClusterProducerFromHGC3DClusters() override {} private: edm::EDGetTokenT src_; @@ -27,7 +27,7 @@ namespace l1tpf { l1tpf::corrector corrector_; l1tpf::ParametricResolution resol_; - virtual void produce(edm::Event &, const edm::EventSetup &) override; + void produce(edm::Event &, const edm::EventSetup &) override; }; // class } // namespace l1tpf @@ -40,16 +40,16 @@ l1tpf::PFClusterProducerFromHGC3DClusters::PFClusterProducerFromHGC3DClusters(co emVsPionID_(iConfig.getParameter("emVsPionID")), emVsPUID_(iConfig.getParameter("emVsPUID")), hasEmId_((iConfig.existsAs("preEmId") && !iConfig.getParameter("preEmId").empty()) || - emVsPionID_.method() != ""), + !emVsPionID_.method().empty()), corrector_(iConfig.getParameter("corrector"), emOnly_ || iConfig.getParameter("corrector").empty() ? -1 : iConfig.getParameter("correctorEmfMax")), resol_(iConfig.getParameter("resol")) { - if (emVsPionID_.method() != "") { + if (!emVsPionID_.method().empty()) { emVsPionID_.prepareTMVA(); } - if (emVsPUID_.method() != "") { + if (!emVsPUID_.method().empty()) { emVsPUID_.prepareTMVA(); } @@ -82,12 +82,12 @@ void l1tpf::PFClusterProducerFromHGC3DClusters::produce(edm::Event &iEvent, cons continue; l1t::PFCluster cluster(pt, it->eta(), it->phi(), hoe, /*isEM=*/isEM); - if (emVsPUID_.method() != "") { + if (!emVsPUID_.method().empty()) { if (!emVsPUID_.passID(*it, cluster)) { continue; } } - if (emVsPionID_.method() != "") { + if (!emVsPionID_.method().empty()) { cluster.setIsEM(emVsPionID_.passID(*it, cluster)); } if (corrector_.valid()) diff --git a/L1Trigger/Phase2L1ParticleFlow/plugins/PFClusterProducerFromL1EGClusters.cc b/L1Trigger/Phase2L1ParticleFlow/plugins/PFClusterProducerFromL1EGClusters.cc index 779f9a7a25282..085110ff0c2d9 100644 --- a/L1Trigger/Phase2L1ParticleFlow/plugins/PFClusterProducerFromL1EGClusters.cc +++ b/L1Trigger/Phase2L1ParticleFlow/plugins/PFClusterProducerFromL1EGClusters.cc @@ -13,7 +13,7 @@ namespace l1tpf { class PFClusterProducerFromL1EGClusters : public edm::stream::EDProducer<> { public: explicit PFClusterProducerFromL1EGClusters(const edm::ParameterSet &); - ~PFClusterProducerFromL1EGClusters() {} + ~PFClusterProducerFromL1EGClusters() override {} private: edm::EDGetTokenT src_; @@ -21,7 +21,7 @@ namespace l1tpf { l1tpf::corrector corrector_; l1tpf::ParametricResolution resol_; - virtual void produce(edm::Event &, const edm::EventSetup &) override; + void produce(edm::Event &, const edm::EventSetup &) override; }; // class } // namespace l1tpf diff --git a/L1Trigger/Phase2L1ParticleFlow/plugins/PFTrackProducerFromL1Tracks.cc b/L1Trigger/Phase2L1ParticleFlow/plugins/PFTrackProducerFromL1Tracks.cc index 8a2d8f1dfc3f1..df82cee16ee33 100644 --- a/L1Trigger/Phase2L1ParticleFlow/plugins/PFTrackProducerFromL1Tracks.cc +++ b/L1Trigger/Phase2L1ParticleFlow/plugins/PFTrackProducerFromL1Tracks.cc @@ -16,7 +16,7 @@ namespace l1tpf { class PFTrackProducerFromL1Tracks : public edm::stream::EDProducer<> { public: explicit PFTrackProducerFromL1Tracks(const edm::ParameterSet &); - ~PFTrackProducerFromL1Tracks() {} + ~PFTrackProducerFromL1Tracks() override {} private: edm::EDGetTokenT> TrackTag_; @@ -24,9 +24,9 @@ namespace l1tpf { float fBz_; l1tpf::ParametricResolution resolCalo_, resolTrk_; - virtual void produce(edm::Event &, const edm::EventSetup &) override; + void produce(edm::Event &, const edm::EventSetup &) override; - virtual void beginRun(edm::Run const &, edm::EventSetup const &iSetup) override { + void beginRun(edm::Run const &, edm::EventSetup const &iSetup) override { edm::ESHandle magneticField; iSetup.get().get(magneticField); fBz_ = magneticField->inTesla(GlobalPoint(0, 0, 0)).z(); diff --git a/L1Trigger/Phase2L1ParticleFlow/src/COEFile.cc b/L1Trigger/Phase2L1ParticleFlow/src/COEFile.cc index b571ec829b8f9..efd314a354da4 100644 --- a/L1Trigger/Phase2L1ParticleFlow/src/COEFile.cc +++ b/L1Trigger/Phase2L1ParticleFlow/src/COEFile.cc @@ -31,7 +31,7 @@ void COEFile::writeHeaderToFile() { "memory_initialization_radix=2;\n", "memory_initialization_vector=\n"}; for (uint32_t i = 0; i < vheader.size(); ++i) - fprintf(file, vheader[i].c_str()); + fprintf(file, "%s", vheader[i].c_str()); } void COEFile::writeTracksToFile(const std::vector& regions, bool print) { @@ -69,19 +69,19 @@ void COEFile::writeTracksToFile(const std::vector& regions, bool print) bset_.set(ibit + offset, getBit(current_track.hwZ0, ibit)); break; case 5: - bset_.set(ibit + offset, 0); + bset_.set(ibit + offset, false); break; case 6: bset_.set(ibit + offset, getBit(current_track.hwChi2, ibit)); break; case 7: - bset_.set(ibit + offset, 0); + bset_.set(ibit + offset, false); break; case 8: bset_.set(ibit + offset, getBit(current_track.hwStubs, ibit)); break; case 9: - bset_.set(ibit + offset, 0); + bset_.set(ibit + offset, false); break; } } diff --git a/L1Trigger/Phase2L1ParticleFlow/src/ref/pfalgo2hgc_ref.cpp b/L1Trigger/Phase2L1ParticleFlow/src/ref/pfalgo2hgc_ref.cpp index 47b7ce0ce774b..7d407a60ef7a8 100644 --- a/L1Trigger/Phase2L1ParticleFlow/src/ref/pfalgo2hgc_ref.cpp +++ b/L1Trigger/Phase2L1ParticleFlow/src/ref/pfalgo2hgc_ref.cpp @@ -126,7 +126,7 @@ void pfalgo2hgc_ref(const pfalgo_config &cfg, int(track[it].hwPt), ibest, int(calo[ibest].hwPt)); - track_good[it] = 1; + track_good[it] = true; isEle[it] = calo[ibest].hwIsEM; calo_sumtk[ibest] += track[it].hwPt; calo_sumtkErr2[ibest] += sqr(track[it].hwPtErr); diff --git a/L1Trigger/Phase2L1ParticleFlow/src/ref/pfalgo3_ref.cpp b/L1Trigger/Phase2L1ParticleFlow/src/ref/pfalgo3_ref.cpp index c3a73d7410df3..6a2d06a9551ef 100644 --- a/L1Trigger/Phase2L1ParticleFlow/src/ref/pfalgo3_ref.cpp +++ b/L1Trigger/Phase2L1ParticleFlow/src/ref/pfalgo3_ref.cpp @@ -354,7 +354,7 @@ void pfalgo3_ref(const pfalgo3_config &cfg, int(track[it].hwPt), ibest, int(hadcalo_subem[ibest].hwPt)); - track_good[it] = 1; + track_good[it] = true; calo_sumtk[ibest] += track[it].hwPt; calo_sumtkErr2[ibest] += sqr(track[it].hwPtErr); } diff --git a/L1Trigger/Phase2L1ParticleFlow/src/ref/pfalgo_common_ref.cpp b/L1Trigger/Phase2L1ParticleFlow/src/ref/pfalgo_common_ref.cpp index 46bc7d405d087..8844c0617149b 100644 --- a/L1Trigger/Phase2L1ParticleFlow/src/ref/pfalgo_common_ref.cpp +++ b/L1Trigger/Phase2L1ParticleFlow/src/ref/pfalgo_common_ref.cpp @@ -13,7 +13,7 @@ void pfalgo_mu_ref(const pfalgo_config &cfg, for (unsigned int ipf = 0; ipf < cfg.nMU; ++ipf) clear(outmu[ipf]); for (unsigned int it = 0; it < cfg.nTRACK; ++it) - isMu[it] = 0; + isMu[it] = false; // for each muon, find the closest track for (unsigned int im = 0; im < cfg.nMU; ++im) { @@ -37,7 +37,7 @@ void pfalgo_mu_ref(const pfalgo_config &cfg, outmu[im].hwPhi = track[ibest].hwPhi; outmu[im].hwId = PID_Muon; outmu[im].hwZ0 = track[ibest].hwZ0; - isMu[ibest] = 1; + isMu[ibest] = true; if (debug) printf("FW \t muon %3d linked to track %3d \n", im, ibest); } else { From 3772d46d748625610d4886fee2bc2f8d52f0cc5d Mon Sep 17 00:00:00 2001 From: Vladimir Date: Tue, 16 Jun 2020 01:51:24 +0200 Subject: [PATCH 03/13] fix code-checks. --- L1Trigger/Phase2L1ParticleFlow/src/PuppiAlgo.cc | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/L1Trigger/Phase2L1ParticleFlow/src/PuppiAlgo.cc b/L1Trigger/Phase2L1ParticleFlow/src/PuppiAlgo.cc index faba1fce17053..9c69028cac187 100644 --- a/L1Trigger/Phase2L1ParticleFlow/src/PuppiAlgo.cc +++ b/L1Trigger/Phase2L1ParticleFlow/src/PuppiAlgo.cc @@ -233,7 +233,7 @@ void PuppiAlgo::computePuppiMedRMS( } void PuppiAlgo::fillPuppi(Region &r) const { - constexpr uint16_t PUPPIW_0p01 = std::round(0.01 * PFParticle::PUPPI_SCALE); + uint16_t PUPPIW_0p01 = std::round(0.01 * PFParticle::PUPPI_SCALE); r.puppi.clear(); for (PFParticle &p : r.pf) { if (p.hwId == l1t::PFCandidate::ChargedHadron || p.hwId == l1t::PFCandidate::Electron || From ffe03d34637d44d2b92d7957087e9c7f8135b628 Mon Sep 17 00:00:00 2001 From: Vladimir Date: Tue, 16 Jun 2020 02:29:36 +0200 Subject: [PATCH 04/13] Fix clang. --- .../Phase2L1ParticleFlow/interface/PuppiAlgo.h | 14 +++++++------- 1 file changed, 7 insertions(+), 7 deletions(-) diff --git a/L1Trigger/Phase2L1ParticleFlow/interface/PuppiAlgo.h b/L1Trigger/Phase2L1ParticleFlow/interface/PuppiAlgo.h index bea12d7efdd27..297209cde949d 100644 --- a/L1Trigger/Phase2L1ParticleFlow/interface/PuppiAlgo.h +++ b/L1Trigger/Phase2L1ParticleFlow/interface/PuppiAlgo.h @@ -19,13 +19,13 @@ namespace l1tpf_impl { const std::vector &rs, float &alphaCMed, float &alphaCRms, float &alphaFMed, float &alphaFRms) const; virtual void fillPuppi(Region &r) const; virtual void computePuppiAlphas(const Region &r, std::vector &alphaC, std::vector &alphaF) const; - virtual void computePuppiWeights(Region &r, - const std::vector &alphaC, - const std::vector &alphaF, - float alphaCMed, - float alphaCRms, - float alphaFMed, - float alphaFRms) const; + void computePuppiWeights(Region &r, + const std::vector &alphaC, + const std::vector &alphaF, + float alphaCMed, + float alphaCRms, + float alphaFMed, + float alphaFRms) const; float puppiDr_, puppiDrMin_, puppiPtMax_; std::vector puppiEtaCuts_, puppiPtCuts_, puppiPtCutsPhotons_; From f0f47d8b882e688f09eb4f2fe40dbd487355e81f Mon Sep 17 00:00:00 2001 From: Giovanni Date: Thu, 25 Jun 2020 21:20:36 +0200 Subject: [PATCH 05/13] Code review comments (first pass) --- .../interface/BitwisePFAlgo.h | 2 +- .../Phase2L1ParticleFlow/interface/COEFile.h | 3 +- .../interface/CaloClusterer.h | 4 +- .../interface/ParametricResolution.h | 12 ++--- .../interface/SimpleCalibrations.h | 10 ++--- .../plugins/L1TPFCaloProducer.cc | 40 +++++++++-------- .../plugins/L1TPFCandMultiMerger.cc | 2 +- .../plugins/L1TPFProducer.cc | 19 ++++---- .../PFClusterProducerFromHGC3DClusters.cc | 3 +- .../plugins/PFTrackProducerFromL1Tracks.cc | 16 ++++--- .../Phase2L1ParticleFlow/src/BitwisePFAlgo.cc | 12 ++--- L1Trigger/Phase2L1ParticleFlow/src/COEFile.cc | 5 ++- .../Phase2L1ParticleFlow/src/CaloClusterer.cc | 45 +++++++++---------- .../src/LinearizedPuppiAlgo.cc | 2 +- .../Phase2L1ParticleFlow/src/PFAlgo2HGC.cc | 2 - L1Trigger/Phase2L1ParticleFlow/src/Region.cc | 8 ++-- .../Phase2L1ParticleFlow/src/RegionMapper.cc | 8 ++-- .../Phase2L1ParticleFlow/src/corrector.cc | 6 --- 18 files changed, 99 insertions(+), 100 deletions(-) diff --git a/L1Trigger/Phase2L1ParticleFlow/interface/BitwisePFAlgo.h b/L1Trigger/Phase2L1ParticleFlow/interface/BitwisePFAlgo.h index 22faa23ba91ea..f4b422706e07f 100644 --- a/L1Trigger/Phase2L1ParticleFlow/interface/BitwisePFAlgo.h +++ b/L1Trigger/Phase2L1ParticleFlow/interface/BitwisePFAlgo.h @@ -13,7 +13,7 @@ namespace l1tpf_impl { void runPF(Region& r) const override; protected: - enum AlgoChoice { algo3, algo2hgc } algo_; + enum class AlgoChoice { algo3, algo2hgc } algo_; pfalgo_config* config_; }; diff --git a/L1Trigger/Phase2L1ParticleFlow/interface/COEFile.h b/L1Trigger/Phase2L1ParticleFlow/interface/COEFile.h index b9b11b49165c4..3a61bf2ee8ecd 100644 --- a/L1Trigger/Phase2L1ParticleFlow/interface/COEFile.h +++ b/L1Trigger/Phase2L1ParticleFlow/interface/COEFile.h @@ -5,6 +5,7 @@ #include #include #include +#include #include #include @@ -40,4 +41,4 @@ namespace l1tpf_impl { }; } // namespace l1tpf_impl -#endif \ No newline at end of file +#endif diff --git a/L1Trigger/Phase2L1ParticleFlow/interface/CaloClusterer.h b/L1Trigger/Phase2L1ParticleFlow/interface/CaloClusterer.h index eddc3bc3b77da..cef7f31f9b172 100644 --- a/L1Trigger/Phase2L1ParticleFlow/interface/CaloClusterer.h +++ b/L1Trigger/Phase2L1ParticleFlow/interface/CaloClusterer.h @@ -215,7 +215,7 @@ namespace l1tpf_calo { float ptMin = 0.) const; private: - enum EnergyShareAlgo { + enum class EnergyShareAlgo { Fractions, /* each local maximum neighbour takes a share proportional to its value */ None, /* each local maximum neighbour takes all the value (double counting!) */ Greedy, /* assing cell to the highest local maximum neighbour */ @@ -288,7 +288,7 @@ namespace l1tpf_calo { }; // makes a calo linker (pointer will be owned by the callee) - SimpleCaloLinkerBase *makeCaloLinker(const edm::ParameterSet &pset, + std::unique_ptr makeCaloLinker(const edm::ParameterSet &pset, const SingleCaloClusterer &ecal, const SingleCaloClusterer &hcal); diff --git a/L1Trigger/Phase2L1ParticleFlow/interface/ParametricResolution.h b/L1Trigger/Phase2L1ParticleFlow/interface/ParametricResolution.h index 323fdaa0c9b11..cb6ba8cdaae83 100644 --- a/L1Trigger/Phase2L1ParticleFlow/interface/ParametricResolution.h +++ b/L1Trigger/Phase2L1ParticleFlow/interface/ParametricResolution.h @@ -31,11 +31,11 @@ namespace l1tpf { } std::string skind = cpset.getParameter("kind"); if (skind == "track") - kind = Track; + kind = Kind::Track; else if (skind == "calo") - kind = Calo; + kind = Kind::Calo; else - throw cms::Exception("Configuration", "Bad kind of resolution"); + throw cms::Exception("Configuration", "Bad kind of resolution: "+skind); } float operator()(const float pt, const float abseta) const { for (unsigned int i = 0, n = etas.size(); i < n; ++i) { @@ -43,9 +43,9 @@ namespace l1tpf { continue; if (abseta < etas[i]) { switch (kind) { - case Track: + case Kind::Track: return pt * std::min(1.f, std::hypot(pt * scales[i] * 0.001, offsets[i])); - case Calo: + case Kind::Calo: return std::min(pt, pt * scales[i] + offsets[i]); if (pt < ptMins[i]) return pt * std::min(1, scales[i] + offsets[i] / ptMins[i]); @@ -58,7 +58,7 @@ namespace l1tpf { protected: std::vector etas, offsets, scales, ptMins, ptMaxs; - enum Kind { Calo, Track }; + enum class Kind { Calo, Track }; Kind kind; }; diff --git a/L1Trigger/Phase2L1ParticleFlow/interface/SimpleCalibrations.h b/L1Trigger/Phase2L1ParticleFlow/interface/SimpleCalibrations.h index 733f1c4fa3697..65a5d1a91432a 100644 --- a/L1Trigger/Phase2L1ParticleFlow/interface/SimpleCalibrations.h +++ b/L1Trigger/Phase2L1ParticleFlow/interface/SimpleCalibrations.h @@ -136,9 +136,9 @@ namespace l1tpf { } std::string skind = cpset.getParameter("kind"); if (skind == "track") - kind = Track; + kind = Kind::Track; else if (skind == "calo") - kind = Calo; + kind = Kind::Calo; else throw cms::Exception("Configuration", "Bad kind of resolution"); } @@ -149,9 +149,9 @@ namespace l1tpf { continue; if (abseta < etas[i]) { switch (kind) { - case Track: + case Kind::Track: return pt * std::min(1.f, std::hypot(pt * scales[i] * 0.001, offsets[i])); - case Calo: + case Kind::Calo: return std::min(pt, pt * scales[i] + offsets[i]); if (pt < ptMins[i]) return pt * std::min(1, scales[i] + offsets[i] / ptMins[i]); @@ -165,7 +165,7 @@ namespace l1tpf { protected: std::vector etas, offsets, scales, ptMins, ptMaxs; - enum Kind { Calo, Track }; + enum class Kind { Calo, Track }; Kind kind; }; diff --git a/L1Trigger/Phase2L1ParticleFlow/plugins/L1TPFCaloProducer.cc b/L1Trigger/Phase2L1ParticleFlow/plugins/L1TPFCaloProducer.cc index b5f42c8147d48..631f7c91eea09 100644 --- a/L1Trigger/Phase2L1ParticleFlow/plugins/L1TPFCaloProducer.cc +++ b/L1Trigger/Phase2L1ParticleFlow/plugins/L1TPFCaloProducer.cc @@ -9,6 +9,7 @@ #include "FWCore/Framework/interface/ESHandle.h" #include "FWCore/ParameterSet/interface/ParameterSet.h" #include "FWCore/ParameterSet/interface/FileInPath.h" +#include "FWCore/MessageLogger/interface/MessageLogger.h" #include "DataFormats/HcalDetId/interface/HcalTrigTowerDetId.h" #include "DataFormats/HcalDigi/interface/HcalDigiCollections.h" @@ -37,7 +38,7 @@ class L1TPFCaloProducer : public edm::stream::EDProducer<> { std::vector> hcalCands_; std::vector> hcalDigis_; - edm::ESHandle decoder_; + edm::ESGetToken decoderTag_; bool hcalDigisBarrel_, hcalDigisHF_; std::vector> phase2barrelTowers_; std::vector> hcalHGCTowers_; @@ -69,6 +70,7 @@ class L1TPFCaloProducer : public edm::stream::EDProducer<> { L1TPFCaloProducer::L1TPFCaloProducer(const edm::ParameterSet &iConfig) : ecalOnly_(iConfig.existsAs("ecalOnly") ? iConfig.getParameter("ecalOnly") : false), debug_(iConfig.getUntrackedParameter("debug", 0)), + decoderTag_(esConsumes(edm::ESInputTag("",""))), emCorrector_(iConfig.getParameter("emCorrector"), -1, debug_), hcCorrector_(iConfig.getParameter("hcCorrector"), -1, debug_), hadCorrector_(iConfig.getParameter("hadCorrector"), @@ -131,8 +133,8 @@ void L1TPFCaloProducer::produce(edm::Event &iEvent, const edm::EventSetup &iSetu iEvent.getByToken(token, ecals); for (const reco::Candidate &it : *ecals) { if (debug_) - std::cout << "L1TPFCaloProducer: adding ECal input pt " << it.pt() << ", eta " << it.eta() << ", phi " - << it.phi() << std::endl; + edm::LogWarning("L1TPFCaloProducer") << "adding ECal input pt " << it.pt() << ", eta " << it.eta() << ", phi " + << it.phi() << "\n"; ecalClusterer_.add(it); } } @@ -144,8 +146,8 @@ void L1TPFCaloProducer::produce(edm::Event &iEvent, const edm::EventSetup &iSetu iEvent.getByToken(token, hcals); for (const reco::Candidate &it : *hcals) { if (debug_) - std::cout << "L1TPFCaloProducer: adding HCal cand input pt " << it.pt() << ", eta " << it.eta() << ", phi " - << it.phi() << std::endl; + edm::LogWarning("L1TPFCaloProducer") << "adding HCal cand input pt " << it.pt() << ", eta " << it.eta() << ", phi " + << it.phi() << "\n"; hcalClusterer_.add(it); } } @@ -176,8 +178,8 @@ void L1TPFCaloProducer::produce(edm::Event &iEvent, const edm::EventSetup &iSetu if (debug_) { for (const l1t::PFCluster &it : *corrEcal) { - std::cout << "L1TPFCaloProducer: corrected ECal cluster pt " << it.pt() << ", eta " << it.eta() << ", phi " - << it.phi() << std::endl; + edm::LogWarning("L1TPFCaloProducer") << "corrected ECal cluster pt " << it.pt() << ", eta " << it.eta() << ", phi " + << it.phi() << "\n"; } } @@ -212,8 +214,8 @@ void L1TPFCaloProducer::produce(edm::Event &iEvent, const edm::EventSetup &iSetu if (hadCorrector_.valid()) { caloLinker_->correct([&](const l1tpf_calo::CombinedCluster &c) -> float { if (debug_) - std::cout << "L1TPFCaloProducer: raw linked cluster pt " << c.et << ", eta " << c.eta << ", phi " << c.phi - << ", emPt " << c.ecal_et << std::endl; + edm::LogWarning("L1TPFCaloProducer") << "raw linked cluster pt " << c.et << ", eta " << c.eta << ", phi " << c.phi + << ", emPt " << c.ecal_et << "\n"; return hadCorrector_.correctedPt(c.et, c.ecal_et, std::abs(c.eta)); }); } @@ -222,8 +224,8 @@ void L1TPFCaloProducer::produce(edm::Event &iEvent, const edm::EventSetup &iSetu for (l1t::PFCluster &c : *clusters) { c.setPtError(resol_(c.pt(), std::abs(c.eta()))); if (debug_) - std::cout << "L1TPFCaloProducer: calibrated linked cluster pt " << c.pt() << ", eta " << c.eta() << ", phi " - << c.phi() << ", emPt " << c.emEt() << std::endl; + edm::LogWarning("L1TPFCaloProducer") << "calibrated linked cluster pt " << c.pt() << ", eta " << c.eta() << ", phi " + << c.phi() << ", emPt " << c.emEt() << "\n"; } iEvent.put(std::move(clusters), "calibrated"); @@ -233,13 +235,13 @@ void L1TPFCaloProducer::produce(edm::Event &iEvent, const edm::EventSetup &iSetu } void L1TPFCaloProducer::readHcalDigis_(edm::Event &iEvent, const edm::EventSetup &iSetup) { - iSetup.get().get(decoder_); + const auto & decoder = iSetup.getData(decoderTag_); edm::Handle hcalTPs; for (const auto &token : hcalDigis_) { iEvent.getByToken(token, hcalTPs); for (const auto &itr : *hcalTPs) { HcalTrigTowerDetId id = itr.id(); - double et = decoder_->hcaletValue(itr.id(), itr.t0()); + double et = decoder.hcaletValue(itr.id(), itr.t0()); if (et <= 0) continue; float towerEta = l1t::CaloTools::towerEta(id.ieta()); @@ -249,8 +251,8 @@ void L1TPFCaloProducer::readHcalDigis_(edm::Event &iEvent, const edm::EventSetup if (!hcalDigisHF_ && std::abs(towerEta) > 2) continue; if (debug_) - std::cout << "L1TPFCaloProducer: adding HCal digi input pt " << et << ", eta " << towerEta << ", phi " - << towerPhi << std::endl; + edm::LogWarning("L1TPFCaloProducer") << "adding HCal digi input pt " << et << ", eta " << towerEta << ", phi " + << towerPhi << "\n"; hcalClusterer_.add(et, towerEta, towerPhi); } } @@ -265,9 +267,9 @@ void L1TPFCaloProducer::readPhase2BarrelCaloTowers_(edm::Event &event, const edm if ((int)t.towerIEta() == -1016 && (int)t.towerIPhi() == -962) continue; if (debug_ && (t.hcalTowerEt() > 0 || t.ecalTowerEt() > 0)) { - std::cout << "L1TPFCaloProducer: adding phase2 L1 CaloTower eta " << t.towerEta() << " phi " << t.towerIPhi() + edm::LogWarning("L1TPFCaloProducer") << "adding phase2 L1 CaloTower eta " << t.towerEta() << " phi " << t.towerIPhi() << " ieta " << t.towerIEta() << " iphi " << t.towerIPhi() << " ecal " << t.ecalTowerEt() - << " hcal " << t.hcalTowerEt() << std::endl; + << " hcal " << t.hcalTowerEt() << "\n"; } hcalClusterer_.add(t.hcalTowerEt(), t.towerEta(), t.towerIPhi()); ecalClusterer_.add(t.ecalTowerEt(), t.towerEta(), t.towerIPhi()); @@ -282,8 +284,8 @@ void L1TPFCaloProducer::readHcalHGCTowers_(edm::Event &iEvent, const edm::EventS iEvent.getByToken(token, hgcTowers); for (auto it = hgcTowers->begin(0), ed = hgcTowers->end(0); it != ed; ++it) { if (debug_) - std::cout << "L1TPFCaloProducer: adding HGC Tower hadEt " << it->etHad() << ", emEt " << it->etEm() << ", pt " - << it->pt() << ", eta " << it->eta() << ", phi " << it->phi() << std::endl; + edm::LogWarning("L1TPFCaloProducer") << "adding HGC Tower hadEt " << it->etHad() << ", emEt " << it->etEm() << ", pt " + << it->pt() << ", eta " << it->eta() << ", phi " << it->phi() << "\n"; hcalClusterer_.add(it->etHad(), it->eta(), it->phi()); if (!hcalHGCTowersHadOnly_) ecalClusterer_.add(it->etEm(), it->eta(), it->phi()); diff --git a/L1Trigger/Phase2L1ParticleFlow/plugins/L1TPFCandMultiMerger.cc b/L1Trigger/Phase2L1ParticleFlow/plugins/L1TPFCandMultiMerger.cc index ee1654af24822..96f36c36b794d 100644 --- a/L1Trigger/Phase2L1ParticleFlow/plugins/L1TPFCandMultiMerger.cc +++ b/L1Trigger/Phase2L1ParticleFlow/plugins/L1TPFCandMultiMerger.cc @@ -38,7 +38,7 @@ L1TPFCandMultiMerger::~L1TPFCandMultiMerger() {} void L1TPFCandMultiMerger::produce(edm::StreamID, edm::Event& iEvent, const edm::EventSetup&) const { edm::Handle> handle; for (unsigned int ii = 0, it = 0, ni = instances_.size(), np = tokens_.size() / ni; ii < ni; ++ii) { - std::unique_ptr> out(new std::vector()); + auto out = std::make_unique>(); for (unsigned int ip = 0; ip < np; ++ip, ++it) { iEvent.getByToken(tokens_[it], handle); out->insert(out->end(), handle->begin(), handle->end()); diff --git a/L1Trigger/Phase2L1ParticleFlow/plugins/L1TPFProducer.cc b/L1Trigger/Phase2L1ParticleFlow/plugins/L1TPFProducer.cc index ddd9c5bf52cc6..2d4ab577b7d01 100644 --- a/L1Trigger/Phase2L1ParticleFlow/plugins/L1TPFProducer.cc +++ b/L1Trigger/Phase2L1ParticleFlow/plugins/L1TPFProducer.cc @@ -2,6 +2,7 @@ #include #include #include +#include // user include files #include "FWCore/Framework/interface/Frameworkfwd.h" @@ -65,7 +66,7 @@ class L1TPFProducer : public edm::stream::EDProducer<> { // Region dump/coe FILE* fRegionDump; - l1tpf_impl::COEFile* fRegionCOE; + std::unique_ptr fRegionCOE; unsigned int neventscoemax, neventsproduced; // region of interest debugging @@ -103,9 +104,6 @@ L1TPFProducer::L1TPFProducer(const edm::ParameterSet& iConfig) produces("PF"); produces("Puppi"); - //produces("RawEmCalo"); - //produces("RawCalo"); - produces("EmCalo"); produces("Calo"); produces("TK"); @@ -113,10 +111,10 @@ L1TPFProducer::L1TPFProducer(const edm::ParameterSet& iConfig) produces("z0"); - for (auto& tag : iConfig.getParameter>("emClusters")) { + for (const auto& tag : iConfig.getParameter>("emClusters")) { emCands_.push_back(consumes(tag)); } - for (auto& tag : iConfig.getParameter>("hadClusters")) { + for (const auto& tag : iConfig.getParameter>("hadClusters")) { hadCands_.push_back(consumes(tag)); } @@ -164,7 +162,7 @@ L1TPFProducer::L1TPFProducer(const edm::ParameterSet& iConfig) } std::string coeFileName = iConfig.getUntrackedParameter("coeFileName", ""); if (!coeFileName.empty()) { - fRegionCOE = new l1tpf_impl::COEFile(iConfig); + fRegionCOE.reset(new l1tpf_impl::COEFile(iConfig)); neventscoemax = iConfig.getUntrackedParameter("neventscoemax"); neventsproduced = 0; } @@ -198,6 +196,10 @@ L1TPFProducer::~L1TPFProducer() { // ------------ method called to produce the data ------------ void L1TPFProducer::produce(edm::Event& iEvent, const edm::EventSetup& iSetup) { + + // clear the regions also at the beginning, in case one event didn't complete but the job continues on + l1regions_.clear(); + /// ------ READ TRACKS ---- if (hasTracks_) { edm::Handle htracks; @@ -270,7 +272,6 @@ void L1TPFProducer::produce(edm::Event& iEvent, const edm::EventSetup& iSetup) { } // First, get a copy of the discretized and corrected inputs, and write them out - // FIXME: to be implemented iEvent.put(l1regions_.fetchCalo(/*ptmin=*/0.1, /*em=*/true), "EmCalo"); iEvent.put(l1regions_.fetchCalo(/*ptmin=*/0.1, /*em=*/false), "Calo"); iEvent.put(l1regions_.fetchTracks(/*ptmin=*/0.0, /*fromPV=*/false), "TK"); @@ -368,7 +369,7 @@ void L1TPFProducer::produce(edm::Event& iEvent, const edm::EventSetup& iSetup) { iEvent.put(l1regions_.vecOutput(i, true), std::string("vecNL1Puppi") + l1tpf_impl::Region::outputTypeName(i)); } - // finall clear the regions + // finally clear the regions l1regions_.clear(); } diff --git a/L1Trigger/Phase2L1ParticleFlow/plugins/PFClusterProducerFromHGC3DClusters.cc b/L1Trigger/Phase2L1ParticleFlow/plugins/PFClusterProducerFromHGC3DClusters.cc index 6d5d45e481e81..65443eb176fdf 100644 --- a/L1Trigger/Phase2L1ParticleFlow/plugins/PFClusterProducerFromHGC3DClusters.cc +++ b/L1Trigger/Phase2L1ParticleFlow/plugins/PFClusterProducerFromHGC3DClusters.cc @@ -61,7 +61,8 @@ l1tpf::PFClusterProducerFromHGC3DClusters::PFClusterProducerFromHGC3DClusters(co } void l1tpf::PFClusterProducerFromHGC3DClusters::produce(edm::Event &iEvent, const edm::EventSetup &) { - std::unique_ptr out(new l1t::PFClusterCollection()), outEm, outHad; + auto out = std::make_unique(); + std::unique_ptr outEm, outHad; if (hasEmId_) { outEm.reset(new l1t::PFClusterCollection()); outHad.reset(new l1t::PFClusterCollection()); diff --git a/L1Trigger/Phase2L1ParticleFlow/plugins/PFTrackProducerFromL1Tracks.cc b/L1Trigger/Phase2L1ParticleFlow/plugins/PFTrackProducerFromL1Tracks.cc index df82cee16ee33..622383af7077d 100644 --- a/L1Trigger/Phase2L1ParticleFlow/plugins/PFTrackProducerFromL1Tracks.cc +++ b/L1Trigger/Phase2L1ParticleFlow/plugins/PFTrackProducerFromL1Tracks.cc @@ -7,6 +7,7 @@ #include "FWCore/Framework/interface/ESHandle.h" #include "MagneticField/Engine/interface/MagneticField.h" #include "MagneticField/Records/interface/IdealMagneticFieldRecord.h" +#include "FWCore/Framework/interface/ESWatcher.h" #include "DataFormats/L1TParticleFlow/interface/PFTrack.h" #include "L1Trigger/Phase2L1ParticleFlow/interface/L1TPFUtils.h" @@ -20,18 +21,13 @@ namespace l1tpf { private: edm::EDGetTokenT> TrackTag_; + edm::ESWatcher BFieldWatcher_; int nParam_; float fBz_; l1tpf::ParametricResolution resolCalo_, resolTrk_; void produce(edm::Event &, const edm::EventSetup &) override; - void beginRun(edm::Run const &, edm::EventSetup const &iSetup) override { - edm::ESHandle magneticField; - iSetup.get().get(magneticField); - fBz_ = magneticField->inTesla(GlobalPoint(0, 0, 0)).z(); - } - }; // class } // namespace l1tpf @@ -43,7 +39,13 @@ l1tpf::PFTrackProducerFromL1Tracks::PFTrackProducerFromL1Tracks(const edm::Param produces(); } -void l1tpf::PFTrackProducerFromL1Tracks::produce(edm::Event &iEvent, const edm::EventSetup &) { +void l1tpf::PFTrackProducerFromL1Tracks::produce(edm::Event &iEvent, const edm::EventSetup &iSetup) { + if (BFieldWatcher_.check(iSetup)) { + edm::ESHandle magneticField; + iSetup.get().get(magneticField); + fBz_ = magneticField->inTesla(GlobalPoint(0, 0, 0)).z(); + } + std::unique_ptr out(new l1t::PFTrackCollection()); // https://github.com/skinnari/cmssw/blob/80c19f1b721325c3a02ee0482f72fb974a4c3bf7/L1Trigger/TrackFindingTracklet/test/L1TrackNtupleMaker.cc diff --git a/L1Trigger/Phase2L1ParticleFlow/src/BitwisePFAlgo.cc b/L1Trigger/Phase2L1ParticleFlow/src/BitwisePFAlgo.cc index 6de0a21492a89..471af670af5af 100644 --- a/L1Trigger/Phase2L1ParticleFlow/src/BitwisePFAlgo.cc +++ b/L1Trigger/Phase2L1ParticleFlow/src/BitwisePFAlgo.cc @@ -14,7 +14,7 @@ BitwisePFAlgo::BitwisePFAlgo(const edm::ParameterSet &iConfig) : PFAlgoBase(iCon const std::string &algo = iConfig.getParameter("bitwiseAlgo"); debug_ = iConfig.getUntrackedParameter("debugBitwisePFAlgo", iConfig.getUntrackedParameter("debug", 0)); if (algo == "pfalgo3") { - algo_ = algo3; + algo_ = AlgoChoice::algo3; config_ = new pfalgo3_config(bitwiseConfig.getParameter("NTRACK"), bitwiseConfig.getParameter("NEMCALO"), bitwiseConfig.getParameter("NCALO"), @@ -30,7 +30,7 @@ BitwisePFAlgo::BitwisePFAlgo(const edm::ParameterSet &iConfig) : PFAlgoBase(iCon bitwiseConfig.getParameter("TK_MAXINVPT_TIGHT")); pfalgo3_ref_set_debug(debug_); } else if (algo == "pfalgo2hgc") { - algo_ = algo2hgc; + algo_ = AlgoChoice::algo2hgc; config_ = new pfalgo_config(bitwiseConfig.getParameter("NTRACK"), bitwiseConfig.getParameter("NCALO"), bitwiseConfig.getParameter("NMU"), @@ -47,7 +47,7 @@ BitwisePFAlgo::BitwisePFAlgo(const edm::ParameterSet &iConfig) : PFAlgoBase(iCon BitwisePFAlgo::~BitwisePFAlgo() { switch (algo_) { - case algo3: + case AlgoChoice::algo3: delete (static_cast(config_)); break; default: @@ -82,7 +82,7 @@ void BitwisePFAlgo::runPF(Region &r) const { r.etaMax, r.phiCenter - r.phiHalfWidth, r.phiCenter + r.phiHalfWidth, - int(algo_)); + static_cast(algo_)); printf("BitwisePF \t N(track) %3lu N(em) %3lu N(calo) %3lu N(mu) %3lu\n", r.track.size(), r.emcalo.size(), @@ -151,7 +151,7 @@ void BitwisePFAlgo::runPF(Region &r) const { } } switch (algo_) { - case algo3: { + case AlgoChoice::algo3: { pfalgo3_config *config3 = static_cast(config_); std::unique_ptr emcalo(new EmCaloObj[config3->nEMCALO]); std::unique_ptr outpho(new PFNeutralObj[config3->nPHOTON]); @@ -171,7 +171,7 @@ void BitwisePFAlgo::runPF(Region &r) const { fw2dpf::convert(config3->nPHOTON, outpho.get(), r.pf); fw2dpf::convert(config3->nSELCALO, outne.get(), r.pf); } break; - case algo2hgc: { + case AlgoChoice::algo2hgc: { pfalgo2hgc_ref(*config_, calo.get(), track.get(), mu.get(), outch.get(), outne.get(), outmu.get()); fw2dpf::convert(config_->nTRACK, outch.get(), r.track, r.pf); // FIXME works only with a 1-1 mapping fw2dpf::convert(config_->nSELCALO, outne.get(), r.pf); diff --git a/L1Trigger/Phase2L1ParticleFlow/src/COEFile.cc b/L1Trigger/Phase2L1ParticleFlow/src/COEFile.cc index efd314a354da4..92761ade87d20 100644 --- a/L1Trigger/Phase2L1ParticleFlow/src/COEFile.cc +++ b/L1Trigger/Phase2L1ParticleFlow/src/COEFile.cc @@ -14,9 +14,12 @@ COEFile::COEFile(const edm::ParameterSet& iConfig) bset_.resize(tracksize); } +COEFile::~COEFile() { +} + void COEFile::writeHeaderToFile() { char depth_width[256]; - sprintf(depth_width, + snprintf(depth_width, 255, "; of depth=%i, and width=%i. In this case, values are specified\n", ntracksmax, tracksize * phiSlices); diff --git a/L1Trigger/Phase2L1ParticleFlow/src/CaloClusterer.cc b/L1Trigger/Phase2L1ParticleFlow/src/CaloClusterer.cc index 165ccbff504cb..010282cb58345 100644 --- a/L1Trigger/Phase2L1ParticleFlow/src/CaloClusterer.cc +++ b/L1Trigger/Phase2L1ParticleFlow/src/CaloClusterer.cc @@ -149,8 +149,8 @@ int l1tpf_calo::Phase1GridBase::imove(int ieta, int iphi, int deta, int dphi) { } const l1tpf_calo::Grid *l1tpf_calo::getGrid(const std::string &type) { - static Phase1Grid _phase1Grid; - static Phase2Grid _phase2Grid; + static const Phase1Grid _phase1Grid; + static const Phase2Grid _phase2Grid; if (type == "phase1") return &_phase1Grid; else if (type == "phase2") @@ -175,13 +175,13 @@ l1tpf_calo::SingleCaloClusterer::SingleCaloClusterer(const edm::ParameterSet &ps energyWeightedPosition_(pset.getParameter("energyWeightedPosition")) { std::string energyShareAlgo = pset.getParameter("energyShareAlgo"); if (energyShareAlgo == "fractions") - energyShareAlgo_ = Fractions; + energyShareAlgo_ = EnergyShareAlgo::Fractions; else if (energyShareAlgo == "none") - energyShareAlgo_ = None; + energyShareAlgo_ = EnergyShareAlgo::None; else if (energyShareAlgo == "greedy") - energyShareAlgo_ = Greedy; + energyShareAlgo_ = EnergyShareAlgo::Greedy; else if (energyShareAlgo == "crude") - energyShareAlgo_ = Crude; + energyShareAlgo_ = EnergyShareAlgo::Crude; else throw cms::Exception("Configuration") << "Unsupported energyShareAlgo '" << energyShareAlgo << "'\n"; } @@ -235,24 +235,24 @@ void l1tpf_calo::SingleCaloClusterer::run() { for (i = 0; i < ncells; ++i) { if (precluster_[i].ptLocalMax == 0) { switch (energyShareAlgo_) { - case Fractions: { + case EnergyShareAlgo::Fractions: { float tot = 0; for (int ineigh = 0; ineigh < 8; ++ineigh) { tot += precluster_.neigh(i, ineigh).ptLocalMax; } precluster_[i].ptOverNeighLocalMaxSum = tot ? rawet_[i] / tot : 0; } break; - case None: + case EnergyShareAlgo::None: precluster_[i].ptOverNeighLocalMaxSum = rawet_[i]; break; - case Greedy: { + case EnergyShareAlgo::Greedy: { float maxet = 0; for (int ineigh = 0; ineigh < 8; ++ineigh) { maxet = std::max(maxet, precluster_.neigh(i, ineigh).ptLocalMax); } precluster_[i].ptOverNeighLocalMaxSum = maxet; } break; - case Crude: { + case EnergyShareAlgo::Crude: { int number = 0; for (int ineigh = 0; ineigh < 8; ++ineigh) { number += (precluster_.neigh(i, ineigh).ptLocalMax > 0); @@ -282,16 +282,16 @@ void l1tpf_calo::SingleCaloClusterer::run() { continue; // skip dummy cells float fracet = 0; switch (energyShareAlgo_) { - case Fractions: + case EnergyShareAlgo::Fractions: fracet = myet * precluster_.neigh(i, ineigh).ptOverNeighLocalMaxSum; break; - case None: + case EnergyShareAlgo::None: fracet = precluster_.neigh(i, ineigh).ptOverNeighLocalMaxSum; break; - case Greedy: + case EnergyShareAlgo::Greedy: fracet = (myet == precluster_.neigh(i, ineigh).ptOverNeighLocalMaxSum ? rawet_.neigh(i, ineigh) : 0); break; - case Crude: + case EnergyShareAlgo::Crude: fracet = precluster_.neigh(i, ineigh).ptOverNeighLocalMaxSum; break; } @@ -317,10 +317,7 @@ void l1tpf_calo::SingleCaloClusterer::run() { cluster.eta = grid_->eta(i) + avg_eta / tot; cluster.phi = grid_->phi(i) + avg_phi / tot; // wrap around phi - if (cluster.phi > M_PI) - cluster.phi -= 2 * M_PI; - if (cluster.phi < -M_PI) - cluster.phi += 2 * M_PI; + cluster.phi = reco::reduceRange(cluster.phi); } else { cluster.eta = grid_->eta(i); cluster.phi = grid_->phi(i); @@ -394,7 +391,7 @@ std::unique_ptr l1tpf_calo::SingleCaloClusterer::fetch for (const Cluster &cluster : clusters_) { if (cluster.et > ptMin) { ret->emplace_back(cluster.et, cluster.eta, cluster.phi); - for (auto &pair : cluster.constituents) { + for (const auto &pair : cluster.constituents) { edm::Ptr ref(cells, cellKey_[pair.first]); ret->back().addConstituent(ref, pair.second); } @@ -449,7 +446,7 @@ std::unique_ptr l1tpf_calo::SimpleCaloLinkerBase::fetc cluster.ecal_et > 0 ? std::max(cluster.et - cluster.ecal_et, 0.f) / cluster.ecal_et : -1, photon); if (setRefs) { - for (auto &pair : cluster.constituents) { + for (const auto &pair : cluster.constituents) { assert(pair.first != 0); if (pair.first > 0) { // 1+hcal index ret->back().addConstituent(edm::Ptr(hcal, +pair.first - 1), pair.second); @@ -613,7 +610,7 @@ void l1tpf_calo::FlatCaloLinker::run() { dst.phi = src.phi; dst.ecal_et = 0; dst.hcal_et = 0; - for (auto &pair : src.constituents) { + for (const auto &pair : src.constituents) { if (eraw[pair.first]) { dst.ecal_et += pair.second * eraw[pair.first]; dst.constituents.emplace_back(-pair.first - 1, pair.second); @@ -626,14 +623,14 @@ void l1tpf_calo::FlatCaloLinker::run() { } } -l1tpf_calo::SimpleCaloLinkerBase *l1tpf_calo::makeCaloLinker(const edm::ParameterSet &pset, +std::unique_ptr l1tpf_calo::makeCaloLinker(const edm::ParameterSet &pset, const SingleCaloClusterer &ecal, const SingleCaloClusterer &hcal) { const std::string &algo = pset.getParameter("algo"); if (algo == "simple") { - return new l1tpf_calo::SimpleCaloLinker(pset, ecal, hcal); + return std::make_unique(pset, ecal, hcal); } else if (algo == "flat") { - return new l1tpf_calo::FlatCaloLinker(pset, ecal, hcal); + return std::make_unique(pset, ecal, hcal); } else { throw cms::Exception("Configuration") << "Unsupported linker algo '" << algo << "'\n"; } diff --git a/L1Trigger/Phase2L1ParticleFlow/src/LinearizedPuppiAlgo.cc b/L1Trigger/Phase2L1ParticleFlow/src/LinearizedPuppiAlgo.cc index 96b46a2ec9fbc..c7005abd4f2d1 100644 --- a/L1Trigger/Phase2L1ParticleFlow/src/LinearizedPuppiAlgo.cc +++ b/L1Trigger/Phase2L1ParticleFlow/src/LinearizedPuppiAlgo.cc @@ -111,7 +111,7 @@ void LinearizedPuppiAlgo::computePuppiWeights(Region &r, float alphaZero = (photon ? puppiAlphaZerosPhotons_ : puppiAlphaZeros_)[ietaBin]; float alphaSlope = (photon ? puppiAlphaSlopesPhotons_ : puppiAlphaSlopes_)[ietaBin]; float alphaCrop = (photon ? puppiAlphaCropsPhotons_ : puppiAlphaCrops_)[ietaBin]; - float x2a = std::min(std::max(alphaSlope * (alpha - alphaZero), -alphaCrop), alphaCrop); + float x2a = std::clamp(alphaSlope * (alpha - alphaZero), -alphaCrop, alphaCrop); // weight by pT float ptZero = (photon ? puppiPtZerosPhotons_ : puppiPtZeros_)[ietaBin]; float ptSlope = (photon ? puppiPtSlopesPhotons_ : puppiPtSlopes_)[ietaBin]; diff --git a/L1Trigger/Phase2L1ParticleFlow/src/PFAlgo2HGC.cc b/L1Trigger/Phase2L1ParticleFlow/src/PFAlgo2HGC.cc index 1125386c7c441..9c044025f342d 100644 --- a/L1Trigger/Phase2L1ParticleFlow/src/PFAlgo2HGC.cc +++ b/L1Trigger/Phase2L1ParticleFlow/src/PFAlgo2HGC.cc @@ -397,7 +397,6 @@ void PFAlgo2HGC::unlinkedtk_algo(Region &r, const std::vector &tk2calo) con } else { if (debug_) printf("PFAlgo2HGC \t track %3d (pt %7.2f) not matched to calo, dropped\n", itk, tk.floatPt()); - //discardTrack(r, tk, BadTK_NoCalo); // log this as discarded, for debugging } } } @@ -538,7 +537,6 @@ void PFAlgo2HGC::linkedcalo_algo(Region &r, if (debug_) printf( "PFAlgo2HGC \t calo %3d (pt %7.2f) ---> to be deleted, will use tracks instead\n", ic, calo.floatPt()); - //discardCalo(r, calo, 0); // log this as discarded, for debugging } else { // tracks overshoot, rescale to tracks to calo calo2alpha[ic] = rescaleTracks_ ? calo.floatPt() / calo2sumtkpt[ic] : 1.0; diff --git a/L1Trigger/Phase2L1ParticleFlow/src/Region.cc b/L1Trigger/Phase2L1ParticleFlow/src/Region.cc index 0f603c7bd8e6c..d1c084ae7a411 100644 --- a/L1Trigger/Phase2L1ParticleFlow/src/Region.cc +++ b/L1Trigger/Phase2L1ParticleFlow/src/Region.cc @@ -14,7 +14,7 @@ const char *l1tpf_impl::Region::inputTypeName(int type) { case l1mu_type: return "Mu"; case n_input_types: - assert(false); + throw cms::Exception("LogicError", "n_input_types is not a type to be used, but only a compile-time const for iterating on types"); } return "NO_SUCH_INPUT_TYPE"; } @@ -37,7 +37,7 @@ const char *l1tpf_impl::Region::outputTypeName(int type) { case photon_type: return "Photon"; case n_output_types: - assert(false); + throw cms::Exception("LogicError", "n_output_types is not a type to be used, but only a compile-time const for iterating on types"); } return "NO_SUCH_OUTPUT_TYPE"; } @@ -53,7 +53,7 @@ unsigned int l1tpf_impl::Region::nInput(InputType type) const { case l1mu_type: return muon.size(); case n_input_types: - assert(false); + throw cms::Exception("LogicError", "n_input_types is not a type to be used, but only a compile-time const for iterating on types"); } return 9999; } @@ -98,7 +98,7 @@ unsigned int l1tpf_impl::Region::nOutput(OutputType type, bool usePuppi, bool fi ret++; break; case n_output_types: - assert(false); + throw cms::Exception("LogicError", "n_output_types is not a type to be used, but only a compile-time const for iterating on types"); } } return ret; diff --git a/L1Trigger/Phase2L1ParticleFlow/src/RegionMapper.cc b/L1Trigger/Phase2L1ParticleFlow/src/RegionMapper.cc index 65e0ec9bdbc63..c2ff89c7502b9 100644 --- a/L1Trigger/Phase2L1ParticleFlow/src/RegionMapper.cc +++ b/L1Trigger/Phase2L1ParticleFlow/src/RegionMapper.cc @@ -60,7 +60,7 @@ RegionMapper::RegionMapper(const edm::ParameterSet &iConfig) : useRelativeRegion } else { // start off with a dummy region unsigned int ncalomax = 0, nemcalomax = 0, ntrackmax = 0, nmuonmax = 0, npfmax = 0, npuppimax = 0; - regions_.push_back(Region(-5.5, + regions_.emplace_back(-5.5, 5.5, 0, 2 * M_PI, @@ -72,7 +72,7 @@ RegionMapper::RegionMapper(const edm::ParameterSet &iConfig) : useRelativeRegion ntrackmax, nmuonmax, npfmax, - npuppimax)); + npuppimax); } } @@ -313,7 +313,7 @@ std::pair RegionMapper::totAndMaxInput(int type) const { } std::unique_ptr> RegionMapper::vecInput(int type) const { - std::auto_ptr> v(new std::vector); + auto v = std::make_unique>(); for (const auto &r : regions_) { unsigned ni = r.nInput(Region::InputType(type)); v->push_back(ni); @@ -332,7 +332,7 @@ std::pair RegionMapper::totAndMaxOutput(int type, bool puppi } std::unique_ptr> RegionMapper::vecOutput(int type, bool puppi) const { - std::auto_ptr> v(new std::vector); + auto v = std::make_unique>(); for (const auto &r : regions_) { unsigned ni = r.nOutput(Region::OutputType(type), puppi); v->push_back(ni); diff --git a/L1Trigger/Phase2L1ParticleFlow/src/corrector.cc b/L1Trigger/Phase2L1ParticleFlow/src/corrector.cc index cd897bf73dfaf..c4066f7d1c17e 100644 --- a/L1Trigger/Phase2L1ParticleFlow/src/corrector.cc +++ b/L1Trigger/Phase2L1ParticleFlow/src/corrector.cc @@ -55,8 +55,6 @@ void l1tpf::corrector::init_(TDirectory *lFile, bool debug) { is2d_ = index_->InheritsFrom("TH2"); - edm::CPUTimer timer; - timer.start(); std::unordered_map graphs; TKey *key; TIter nextkey(lFile->GetListOfKeys()); @@ -95,10 +93,6 @@ void l1tpf::corrector::init_(TDirectory *lFile, bool debug) { } } } - timer.stop(); - if (debug) - std::cout << "Read " << ngraphs << " graphs from " << lFile->GetPath() << " in " << timer.realTime() << " s" - << std::endl; } l1tpf::corrector::corrector(const TH1 *index, float emfMax) From 414a02a713e8ded17f1ff419c57f0ac8942e4421 Mon Sep 17 00:00:00 2001 From: Giovanni Date: Fri, 26 Jun 2020 12:37:58 +0200 Subject: [PATCH 06/13] More code review comments --- L1Trigger/Phase2L1ParticleFlow/README.md | 37 -- .../interface/HGC3DClusterEgID.h | 44 +-- .../interface/ParametricResolution.h | 28 +- .../interface/SimpleCalibrations.h | 174 ---------- .../plugins/L1TPFJetMetTreeProducer.cc | 321 ------------------ .../plugins/L1TPFProducer.cc | 2 +- .../src/HGC3DClusterEgID.cc | 49 +++ .../Phase2L1ParticleFlow/src/firmware/data.h | 4 +- .../src/firmware/pfalgo2hgc.h | 10 +- .../src/firmware/pfalgo3.h | 10 +- .../src/firmware/pfalgo_common.h | 4 +- .../src/ref/pfalgo2hgc_ref.h | 4 +- .../src/ref/pfalgo3_ref.h | 4 +- .../src/ref/pfalgo_common_ref.h | 4 +- .../src/utils/DiscretePF2Firmware.h | 4 +- .../src/utils/Firmware2DiscretePF.h | 4 +- 16 files changed, 86 insertions(+), 617 deletions(-) delete mode 100644 L1Trigger/Phase2L1ParticleFlow/README.md delete mode 100644 L1Trigger/Phase2L1ParticleFlow/interface/SimpleCalibrations.h delete mode 100644 L1Trigger/Phase2L1ParticleFlow/plugins/L1TPFJetMetTreeProducer.cc diff --git a/L1Trigger/Phase2L1ParticleFlow/README.md b/L1Trigger/Phase2L1ParticleFlow/README.md deleted file mode 100644 index c308910cbdb1f..0000000000000 --- a/L1Trigger/Phase2L1ParticleFlow/README.md +++ /dev/null @@ -1,37 +0,0 @@ -1) Basic Instructions - -``` -cmsrel CMSSW_10_1_0_pre3 -cd CMSSW_10_1_0_pre3/src -cmsenv -git cms-init -git remote add cms-l1t-offline git@github.com:cms-l1t-offline/cmssw.git -git fetch cms-l1t-offline phase2-l1t-integration-CMSSW_10_1_0_pre3 -git cms-merge-topic -u cms-l1t-offline:l1t-phase2-v2.7 - -# -# Tracklet Tracks -# -git remote add rekovic git@github.com:rekovic/cmssw.git -git fetch rekovic Tracklet-10_1_0_pre3 -git cms-merge-topic -u rekovic:Tracklet-10_1_0_pre3-from-skinnari - -# Remove tracklets from history -git reset --soft cms-l1t-offline/l1t-phase2-v2.7 -git reset HEAD L1Trigger - -# Get L1PF_CMSSW -git remote add p2l1pfp git@github.com:p2l1pfp/cmssw.git -git fetch p2l1pfp L1PF_CMSSW -echo -e '/DataFormats/L1TParticleFlow/\n/L1Trigger/Phase2L1ParticleFlow/' >> .git/info/sparse-checkout -git read-tree -mu HEAD -git checkout -b L1PF_CMSSW p2l1pfp/L1PF_CMSSW - -scram b -j8 -``` - -2) Ntuple for jets, jet HT and MET studies - -``` -cmsRun test/l1pfJetMetTreeProducer.py -``` diff --git a/L1Trigger/Phase2L1ParticleFlow/interface/HGC3DClusterEgID.h b/L1Trigger/Phase2L1ParticleFlow/interface/HGC3DClusterEgID.h index 6b68dffc6db94..90f985e62aef0 100644 --- a/L1Trigger/Phase2L1ParticleFlow/interface/HGC3DClusterEgID.h +++ b/L1Trigger/Phase2L1ParticleFlow/interface/HGC3DClusterEgID.h @@ -10,7 +10,6 @@ #include "DataFormats/L1TParticleFlow/interface/PFCluster.h" #include "CommonTools/Utils/interface/StringCutObjectSelector.h" #include "CommonTools/Utils/interface/StringObjectFunction.h" -#include "CommonTools/MVAUtils/interface/TMVAZipReader.h" #include "TMVA/Factory.h" #include "TMVA/Reader.h" @@ -21,48 +20,11 @@ namespace l1tpf { class HGC3DClusterEgID { public: - HGC3DClusterEgID(const edm::ParameterSet &pset) - : isPUFilter_(pset.getParameter("isPUFilter")), - preselection_(pset.getParameter("preselection")), - method_(pset.getParameter("method")), - weightsFile_(pset.getParameter("weightsFile")), - reader_(new TMVA::Reader()), - wp_(pset.getParameter("wp")) { - // first create all the variables - for (const auto &psvar : pset.getParameter>("variables")) { - variables_.emplace_back(psvar.getParameter("name"), psvar.getParameter("value")); - } - } + HGC3DClusterEgID(const edm::ParameterSet &pset) ; - void prepareTMVA() { - // Declare the variables - for (auto &var : variables_) - var.declare(*reader_); - // then read the weights - if (weightsFile_[0] != '/' && weightsFile_[0] != '.') { - weightsFile_ = edm::FileInPath(weightsFile_).fullPath(); - } - reco::details::loadTMVAWeights(&*reader_, method_, weightsFile_); - } + void prepareTMVA() ; - float passID(l1t::HGCalMulticluster c, l1t::PFCluster &cpf) { - if (preselection_(c)) { - for (auto &var : variables_) - var.fill(c); - float mvaOut = reader_->EvaluateMVA(method_); - if (isPUFilter_) - cpf.setEgVsPUMVAOut(mvaOut); - else - cpf.setEgVsPionMVAOut(mvaOut); - return (mvaOut > wp_(c) ? 1 : 0); - } else { - if (isPUFilter_) - cpf.setEgVsPUMVAOut(-100.0); - else - cpf.setEgVsPionMVAOut(-100.0); - return 0; - } - } + float passID(l1t::HGCalMulticluster c, l1t::PFCluster &cpf) ; std::string method() { return method_; } diff --git a/L1Trigger/Phase2L1ParticleFlow/interface/ParametricResolution.h b/L1Trigger/Phase2L1ParticleFlow/interface/ParametricResolution.h index cb6ba8cdaae83..c654759a5d0e9 100644 --- a/L1Trigger/Phase2L1ParticleFlow/interface/ParametricResolution.h +++ b/L1Trigger/Phase2L1ParticleFlow/interface/ParametricResolution.h @@ -6,28 +6,30 @@ #include namespace l1tpf { + class ParametricResolution { public: + static std::vector getVFloat(const edm::ParameterSet &cpset, const std::string & name) { + std::vector vd = cpset.getParameter>(name); + return std::vector(vd.begin(),vd.end()); + } + ParametricResolution() {} - ParametricResolution(const edm::ParameterSet &cpset) { - std::vector etaBins = cpset.getParameter>("etaBins"); - std::vector offset = cpset.getParameter>("offset"); - std::vector scale = cpset.getParameter>("scale"); - etas.insert(etas.end(), etaBins.begin(), etaBins.end()); - scales.insert(scales.end(), scale.begin(), scale.end()); - offsets.insert(offsets.end(), offset.begin(), offset.end()); + ParametricResolution(const edm::ParameterSet &cpset) : + etas(getVFloat(cpset,"etaBins")), + offsets(getVFloat(cpset,"offset")), + scales(getVFloat(cpset,"scale")) + { if (cpset.existsAs>("ptMin")) { - std::vector ptMin = cpset.getParameter>("ptMin"); - ptMins.insert(ptMins.end(), ptMin.begin(), ptMin.end()); + ptMins = getVFloat(cpset,"ptMin"); } else { float ptMin = cpset.existsAs("ptMin") ? cpset.getParameter("ptMin") : 0; - ptMins = std::vector(etaBins.size(), ptMin); + ptMins = std::vector(etas.size(), ptMin); } if (cpset.existsAs>("ptMax")) { - std::vector ptMax = cpset.getParameter>("ptMax"); - ptMaxs.insert(ptMaxs.end(), ptMax.begin(), ptMax.end()); + ptMaxs = getVFloat(cpset,"ptMax"); } else { - ptMaxs = std::vector(etaBins.size(), 1e6); + ptMaxs = std::vector(etas.size(), 1e6); } std::string skind = cpset.getParameter("kind"); if (skind == "track") diff --git a/L1Trigger/Phase2L1ParticleFlow/interface/SimpleCalibrations.h b/L1Trigger/Phase2L1ParticleFlow/interface/SimpleCalibrations.h deleted file mode 100644 index 65a5d1a91432a..0000000000000 --- a/L1Trigger/Phase2L1ParticleFlow/interface/SimpleCalibrations.h +++ /dev/null @@ -1,174 +0,0 @@ -#ifndef L1Trigger_Phase2L1ParticleFlow_SimpleCalibrations_h -#define L1Trigger_Phase2L1ParticleFlow_SimpleCalibrations_h -#include "FWCore/ParameterSet/interface/ParameterSet.h" -#include - -namespace l1tpf { - class SimpleCorrEm { - public: - SimpleCorrEm() {} - SimpleCorrEm(const edm::ParameterSet &iConfig, const std::string &name) { - if (iConfig.existsAs(name)) { - edm::ParameterSet cpset = iConfig.getParameter(name); - std::vector etaBins = cpset.getParameter>("etaBins"); - std::vector offset = cpset.getParameter>("offset"); - std::vector scale = cpset.getParameter>("scale"); - etas.insert(etas.end(), etaBins.begin(), etaBins.end()); - scales.insert(scales.end(), scale.begin(), scale.end()); - offsets.insert(offsets.end(), offset.begin(), offset.end()); - if (cpset.existsAs>("ptMin")) { - std::vector ptMin = cpset.getParameter>("ptMin"); - ptMins.insert(ptMins.end(), ptMin.begin(), ptMin.end()); - } else { - float ptMin = cpset.existsAs("ptMin") ? cpset.getParameter("ptMin") : 0; - ptMins = std::vector(etaBins.size(), ptMin); - } - if (cpset.existsAs>("ptMax")) { - std::vector ptMax = cpset.getParameter>("ptMax"); - ptMaxs.insert(ptMaxs.end(), ptMax.begin(), ptMax.end()); - } else { - ptMaxs = std::vector(etaBins.size(), 1e6); - } - } - } - - bool empty() const { return etas.empty(); } - float operator()(float pt, float abseta) const { - for (unsigned int i = 0, n = etas.size(); i < n; ++i) { - if (pt > ptMaxs[i]) - continue; - if (abseta < etas[i]) { - if (pt < ptMins[i]) - return (pt / ptMins[i]) * (ptMins[i] - offsets[i]) / scales[i]; - return (pt - offsets[i]) / scales[i]; - } - } - return pt; - } - - protected: - std::vector etas, scales, offsets, ptMins, ptMaxs; - }; - class SimpleCorrHad { - public: - SimpleCorrHad() {} - SimpleCorrHad(const edm::ParameterSet &iConfig, const std::string &name) { - if (iConfig.existsAs(name)) { - edm::ParameterSet cpset = iConfig.getParameter(name); - std::vector etaBins = cpset.getParameter>("etaBins"); - std::vector emfBins = cpset.getParameter>("emfBins"); - std::vector offset = cpset.getParameter>("offset"); - std::vector scale = cpset.getParameter>("scale"); - etas.insert(etas.end(), etaBins.begin(), etaBins.end()); - emfs.insert(emfs.end(), emfBins.begin(), emfBins.end()); - scales.insert(scales.end(), scale.begin(), scale.end()); - offsets.insert(offsets.end(), offset.begin(), offset.end()); - if (cpset.existsAs>("ptMin")) { - std::vector ptMin = cpset.getParameter>("ptMin"); - ptMins.insert(ptMins.end(), ptMin.begin(), ptMin.end()); - } else { - float ptMin = cpset.existsAs("ptMin") ? cpset.getParameter("ptMin") : 0; - ptMins = std::vector(etaBins.size(), ptMin); - } - if (cpset.existsAs>("ptMax")) { - std::vector ptMax = cpset.getParameter>("ptMax"); - ptMaxs.insert(ptMaxs.end(), ptMax.begin(), ptMax.end()); - } else { - ptMaxs = std::vector(etaBins.size(), 1e6); - } - } - } - - bool empty() const { return etas.empty(); } - float operator()(float pt, float abseta, float emf) const { - unsigned int i = 0, n = emfs.size(); - // step 0 get to the right pt bin - while (i < n && pt > ptMaxs[i]) - i++; - // step 1: find the first emf bin for this eta - while (i < n && abseta > etas[i]) - i++; - if (i == n) { - //printf("for pt %7.2f eta %4.2f emf %4.2f will not apply any correction (no eta bin found)\n", pt, abseta, emf); - return pt; - } - unsigned int i2 = i; - while (i < n && etas[i] == etas[i2] && emf > emfs[i]) - i++; - if (i == n || etas[i] != etas[i2]) { - //printf("for pt %7.2f eta %4.2f emf %4.2f will not apply any correction (no emf bin found)\n", pt, abseta, emf); - return pt; - } - //printf("for pt %7.2f eta %4.2f emf %4.2f will use bin %d eta [ * , %4.2f ] emf [ * , %4.2f ] offset = %+5.2f scale=%.3f -> corr pt %7.2f\n", - // pt, abseta, emf, i, etas[i], emfs[i], offsets[i], scales[i], (pt-offsets[i])/scales[i]); - if (pt < ptMins[i]) - return (pt / ptMins[i]) * (ptMins[i] - offsets[i]) / scales[i]; - return (pt - offsets[i]) / scales[i]; - } - - protected: - std::vector etas, emfs, scales, offsets, ptMins, ptMaxs; - }; - class SimpleResol { - public: - SimpleResol() {} - SimpleResol(const edm::ParameterSet &iConfig, const std::string &name, bool throwIfMissing = false) { - if (iConfig.existsAs(name) || throwIfMissing) { - edm::ParameterSet cpset = iConfig.getParameter(name); - std::vector etaBins = cpset.getParameter>("etaBins"); - std::vector offset = cpset.getParameter>("offset"); - std::vector scale = cpset.getParameter>("scale"); - etas.insert(etas.end(), etaBins.begin(), etaBins.end()); - scales.insert(scales.end(), scale.begin(), scale.end()); - offsets.insert(offsets.end(), offset.begin(), offset.end()); - if (cpset.existsAs>("ptMin")) { - std::vector ptMin = cpset.getParameter>("ptMin"); - ptMins.insert(ptMins.end(), ptMin.begin(), ptMin.end()); - } else { - float ptMin = cpset.existsAs("ptMin") ? cpset.getParameter("ptMin") : 0; - ptMins = std::vector(etaBins.size(), ptMin); - } - if (cpset.existsAs>("ptMax")) { - std::vector ptMax = cpset.getParameter>("ptMax"); - ptMaxs.insert(ptMaxs.end(), ptMax.begin(), ptMax.end()); - } else { - ptMaxs = std::vector(etaBins.size(), 1e6); - } - std::string skind = cpset.getParameter("kind"); - if (skind == "track") - kind = Kind::Track; - else if (skind == "calo") - kind = Kind::Calo; - else - throw cms::Exception("Configuration", "Bad kind of resolution"); - } - } - float operator()(const float pt, const float abseta) const { - for (unsigned int i = 0, n = etas.size(); i < n; ++i) { - if (pt > ptMaxs[i]) - continue; - if (abseta < etas[i]) { - switch (kind) { - case Kind::Track: - return pt * std::min(1.f, std::hypot(pt * scales[i] * 0.001, offsets[i])); - case Kind::Calo: - return std::min(pt, pt * scales[i] + offsets[i]); - if (pt < ptMins[i]) - return pt * std::min(1, scales[i] + offsets[i] / ptMins[i]); - return std::min(pt, pt * scales[i] + offsets[i]); - } - } - } - return std::min(pt, 0.3 * pt + 7); // saturate to 100% at 10 GeV, and to 30% at high pt - } - bool empty() const { return etas.empty(); } - - protected: - std::vector etas, offsets, scales, ptMins, ptMaxs; - enum class Kind { Calo, Track }; - Kind kind; - }; - -}; // namespace l1tpf - -#endif diff --git a/L1Trigger/Phase2L1ParticleFlow/plugins/L1TPFJetMetTreeProducer.cc b/L1Trigger/Phase2L1ParticleFlow/plugins/L1TPFJetMetTreeProducer.cc deleted file mode 100644 index 220297ee66b55..0000000000000 --- a/L1Trigger/Phase2L1ParticleFlow/plugins/L1TPFJetMetTreeProducer.cc +++ /dev/null @@ -1,321 +0,0 @@ -// -*- C++ -*- -// -// Package: Giovanni/NTuplizer -// Class: NTuplizer -// -/**\class NTuplizer NTuplizer.cc Giovanni/NTuplizer/plugins/NTuplizer.cc - - Description: [one line class summary] - - Implementation: - [Notes on implementation] -*/ -// -// Original Author: Giovanni Petrucciani -// Created: Thu, 01 Sep 2016 11:30:38 GMT -// -// - -// user include files -#include "FWCore/Framework/interface/Frameworkfwd.h" -#include "FWCore/Framework/interface/one/EDAnalyzer.h" - -#include "FWCore/Framework/interface/Event.h" -#include "DataFormats/Common/interface/Handle.h" -#include "DataFormats/Common/interface/View.h" - -#include "DataFormats/Candidate/interface/Candidate.h" -#include "DataFormats/HepMCCandidate/interface/GenParticle.h" -#include "DataFormats/JetReco/interface/GenJet.h" -#include "DataFormats/JetReco/interface/PFJet.h" -#include "DataFormats/METReco/interface/CaloMET.h" -#include "DataFormats/METReco/interface/PFMET.h" -#include "DataFormats/METReco/interface/GenMET.h" - -#include "DataFormats/Math/interface/deltaR.h" - -#include "FWCore/ParameterSet/interface/ParameterSet.h" -#include "FWCore/Framework/interface/ConsumesCollector.h" -#include "FWCore/Utilities/interface/InputTag.h" - -#include "FWCore/ServiceRegistry/interface/Service.h" -#include "CommonTools/UtilAlgos/interface/TFileService.h" -#include "CommonTools/Utils/interface/StringCutObjectSelector.h" -#include "CommonTools/Utils/interface/StringObjectFunction.h" -#include "L1Trigger/Phase2L1ParticleFlow/interface/SimpleCalibrations.h" - -#include -#include -#include - -class L1TPFJetMetTreeProducer : public edm::one::EDAnalyzer { -public: - explicit L1TPFJetMetTreeProducer(const edm::ParameterSet &); - ~L1TPFJetMetTreeProducer() override; - -private: - void analyze(const edm::Event &, const edm::EventSetup &) override; - - struct JetInput { - std::string name; - edm::EDGetTokenT> token; - l1tpf::SimpleCorrEm jec; - JetInput() {} - JetInput(const std::string &n, - const edm::EDGetTokenT> &t, - const l1tpf::SimpleCorrEm &c) - : name(n), token(t), jec(c) {} - }; - std::vector jets_; - std::vector>> jetSels_; - - struct MetInput { - std::string name; - edm::EDGetTokenT> token; - MetInput() {} - MetInput(const std::string &n, const edm::EDGetTokenT> &t) : name(n), token(t) {} - }; - std::vector mets_; - - struct JetCollectionBranch { - std::string name; - std::vector ak4jet_pt_corr; - std::vector ak4jet_pt_raw; - std::vector ak4jet_eta; - std::vector ak4jet_phi; - std::vector ak4jet_mass_raw; - std::vector ak4jet_mass_corr; - std::vector ak4jet_e_raw; - std::vector ak4jet_e_corr; - int ak4jet_N; - JetCollectionBranch(const std::string &n) : name(n) {} - void makeBranches(TTree *tree) { - tree->Branch((name + "_N").c_str(), &ak4jet_N); - tree->Branch((name + "_pt_raw").c_str(), &ak4jet_pt_raw); - tree->Branch((name + "_pt_corr").c_str(), &ak4jet_pt_corr); - tree->Branch((name + "_eta").c_str(), &ak4jet_eta); - tree->Branch((name + "_phu").c_str(), &ak4jet_phi); - tree->Branch((name + "_mass_raw").c_str(), &ak4jet_mass_raw); - tree->Branch((name + "_mass_corr").c_str(), &ak4jet_mass_corr); - tree->Branch((name + "_e_raw").c_str(), &ak4jet_pt_raw); - tree->Branch((name + "_e_corr").c_str(), &ak4jet_pt_corr); - } - void fill(const edm::View &jets, const l1tpf::SimpleCorrEm &corr) { - ak4jet_pt_corr.clear(); - ak4jet_pt_raw.clear(); - ak4jet_eta.clear(); - ak4jet_phi.clear(); - ak4jet_mass_raw.clear(); - ak4jet_mass_corr.clear(); - ak4jet_e_raw.clear(); - ak4jet_e_corr.clear(); - ak4jet_N = 0; - reco::Particle::LorentzVector sum_raw, sum_corr; - for (reco::LeafCandidate jet : jets) { - ak4jet_N++; - ak4jet_pt_raw.push_back(jet.pt()); - ak4jet_e_raw.push_back(jet.energy()); - ak4jet_mass_raw.push_back(jet.mass()); - ak4jet_eta.push_back(jet.eta()); - ak4jet_phi.push_back(jet.phi()); - float correction = corr(jet.pt(), std::abs(jet.eta())); - jet.setP4(reco::Particle::PolarLorentzVector(correction, jet.eta(), jet.phi(), jet.mass())); - correction = correction / jet.pt(); - ak4jet_pt_corr.push_back(jet.pt()); - ak4jet_mass_corr.push_back(correction * jet.mass()); - ak4jet_e_corr.push_back(correction * jet.energy()); - } - } - }; - std::vector jetCollbranches_; - - struct JetBranch { - std::string name; - int count_raw, count_corr; - float ht_raw, ht_corr; - float mht_raw, mht_corr; - JetBranch(const std::string &n) : name(n) {} - void makeBranches(TTree *tree) { - tree->Branch((name + "_ht_raw").c_str(), &ht_raw, (name + "_ht_raw/F").c_str()); - tree->Branch((name + "_mht_raw").c_str(), &mht_raw, (name + "_mht_raw/F").c_str()); - tree->Branch((name + "_num_raw").c_str(), &count_raw, (name + "_num_raw/I").c_str()); - tree->Branch((name + "_ht_corr").c_str(), &ht_corr, (name + "_ht_corr/F").c_str()); - tree->Branch((name + "_mht_corr").c_str(), &mht_corr, (name + "_mht_corr/F").c_str()); - tree->Branch((name + "_num_corr").c_str(), &count_corr, (name + "_num_corr/I").c_str()); - } - void fill(const edm::View &jets, - const l1tpf::SimpleCorrEm &corr, - const StringCutObjectSelector &sel) { - count_raw = 0; - ht_raw = 0; - count_corr = 0; - ht_corr = 0; - reco::Particle::LorentzVector sum_raw, sum_corr; - for (reco::LeafCandidate jet : jets) { - if (sel(jet)) { - count_raw++; - ht_raw += std::min(jet.pt(), 500.); - sum_raw += jet.p4(); - } - jet.setP4( - reco::Particle::PolarLorentzVector(corr(jet.pt(), std::abs(jet.eta())), jet.eta(), jet.phi(), jet.mass())); - if (sel(jet)) { - count_corr++; - ht_corr += std::min(jet.pt(), 500.); - sum_corr += jet.p4(); - } - } - mht_raw = sum_raw.Pt(); - mht_corr = sum_corr.Pt(); - } - }; - std::vector jetbranches_; - - struct MetBranch { - std::string name; - float met, met_phi; - MetBranch(const std::string &n) : name(n) {} - void makeBranches(TTree *tree) { - tree->Branch((name).c_str(), &met, (name + "/F").c_str()); - tree->Branch((name + "_phi").c_str(), &met_phi, (name + "_phi/F").c_str()); - } - void fill(const edm::View &recoMets) { - met = 0; - met_phi = 0; - for (reco::LeafCandidate recoMet : recoMets) { - met = recoMet.et(); - met_phi = recoMet.phi(); - } - } - }; - std::vector metbranches_; - - struct SpecialBranch { - std::string name; - edm::EDGetTokenT> token; - StringCutObjectSelector sel; - StringObjectFunction func; - float val; - SpecialBranch() : sel(""), func("1") {} - SpecialBranch(const std::string &n, - const edm::EDGetTokenT> &t, - const std::string &cut, - const std::string &expr) - : name(n), token(t), sel(cut, true), func(expr, true) {} - void makeBranches(TTree *tree) { tree->Branch((name).c_str(), &val, (name + "/F").c_str()); } - void fill(const edm::View &view) { - val = 0; - for (const reco::Candidate &c : view) { - if (sel(c)) { - val += func(c); - } - } - } - }; - std::vector specials_; - - TTree *tree_; - uint32_t run_, lumi_; - uint64_t event_; -}; - -L1TPFJetMetTreeProducer::L1TPFJetMetTreeProducer(const edm::ParameterSet &iConfig) { - usesResource("TFileService"); - edm::Service fs; - tree_ = fs->make("tree", "tree"); - tree_->Branch("run", &run_, "run/i"); - tree_->Branch("lumi", &lumi_, "lumi/i"); - tree_->Branch("event", &event_, "event/l"); - - // jet branches - edm::ParameterSet jets = iConfig.getParameter("jets"); - edm::ParameterSet jecs = iConfig.getParameter("jecs"); - for (const std::string &name : jets.getParameterNamesForType()) { - jets_.emplace_back(name, - consumes>(jets.getParameter(name)), - l1tpf::SimpleCorrEm(jecs, name)); - } - edm::ParameterSet sels = iConfig.getParameter("sels"); - for (const std::string &name : sels.getParameterNamesForType()) { - jetSels_.emplace_back(name, StringCutObjectSelector(sels.getParameter(name))); - } - jetbranches_.reserve(jets_.size() * jetSels_.size()); - for (const auto &j : jets_) { - for (const auto &s : jetSels_) { - jetbranches_.emplace_back(j.name + s.first); - } - } - for (auto &b : jetbranches_) - b.makeBranches(tree_); - - jetCollbranches_.reserve(jets_.size()); - for (const auto &j : jets_) - jetCollbranches_.emplace_back(j.name); - for (auto &b : jetCollbranches_) - b.makeBranches(tree_); - - //met branches - edm::ParameterSet mets = iConfig.getParameter("mets"); - for (const std::string &name : mets.getParameterNamesForType()) { - mets_.emplace_back(name, consumes>(mets.getParameter(name))); - } - metbranches_.reserve(mets_.size()); - for (const auto &m : mets_) - metbranches_.emplace_back(m.name); - for (auto &b : metbranches_) - b.makeBranches(tree_); - - edm::ParameterSet specials = iConfig.getParameter("specials"); - for (const std::string &name : specials.getParameterNamesForType()) { - edm::ParameterSet conf = specials.getParameter(name); - specials_.emplace_back(name, - consumes>(conf.getParameter("src")), - conf.getParameter("cut"), - conf.getParameter("expr")); - } - for (auto &b : specials_) - b.makeBranches(tree_); -} - -L1TPFJetMetTreeProducer::~L1TPFJetMetTreeProducer() {} - -// ------------ method called for each event ------------ -void L1TPFJetMetTreeProducer::analyze(const edm::Event &iEvent, const edm::EventSetup &iSetup) { - run_ = iEvent.id().run(); - lumi_ = iEvent.id().luminosityBlock(); - event_ = iEvent.id().event(); - - int ibranch = 0; - for (const auto &j : jets_) { - edm::Handle> jets; - iEvent.getByToken(j.token, jets); - jetCollbranches_[ibranch++].fill(*jets, j.jec); - } - - ibranch = 0; - for (const auto &j : jets_) { - edm::Handle> jets; - iEvent.getByToken(j.token, jets); - for (const auto &s : jetSels_) { - jetbranches_[ibranch++].fill(*jets, j.jec, s.second); - } - } - - ibranch = 0; - for (const auto &m : mets_) { - edm::Handle> mets; - iEvent.getByToken(m.token, mets); - metbranches_[ibranch++].fill(*mets); - } - - for (SpecialBranch &s : specials_) { - edm::Handle> specials; - iEvent.getByToken(s.token, specials); - s.fill(*specials); - } - tree_->Fill(); -} - -//define this as a plug-in -#include "FWCore/Framework/interface/MakerMacros.h" -DEFINE_FWK_MODULE(L1TPFJetMetTreeProducer); diff --git a/L1Trigger/Phase2L1ParticleFlow/plugins/L1TPFProducer.cc b/L1Trigger/Phase2L1ParticleFlow/plugins/L1TPFProducer.cc index 2d4ab577b7d01..608183ed63fa9 100644 --- a/L1Trigger/Phase2L1ParticleFlow/plugins/L1TPFProducer.cc +++ b/L1Trigger/Phase2L1ParticleFlow/plugins/L1TPFProducer.cc @@ -335,7 +335,7 @@ void L1TPFProducer::produce(edm::Event& iEvent, const edm::EventSetup& iSetup) { std::vector puGlobals; l1pualgo_->doPUGlobals(l1regions_.regions(), -1., puGlobals); // FIXME we don't have yet an external PU estimate const std::vector& puGlobalNames = l1pualgo_->puGlobalNames(); - assert(puGlobals.size() == puGlobalNames.size()); + if (puGlobals.size() != puGlobalNames.size()) throw cms::Exception("LogicError", "Mismatch in the number of global pileup inputs"); for (unsigned int i = 0, n = puGlobalNames.size(); i < n; ++i) { iEvent.put(std::make_unique(puGlobals[i]), puGlobalNames[i]); } diff --git a/L1Trigger/Phase2L1ParticleFlow/src/HGC3DClusterEgID.cc b/L1Trigger/Phase2L1ParticleFlow/src/HGC3DClusterEgID.cc index b1243a38611b4..650d8a1c0b41d 100644 --- a/L1Trigger/Phase2L1ParticleFlow/src/HGC3DClusterEgID.cc +++ b/L1Trigger/Phase2L1ParticleFlow/src/HGC3DClusterEgID.cc @@ -1 +1,50 @@ #include "L1Trigger/Phase2L1ParticleFlow/interface/HGC3DClusterEgID.h" +#include "CommonTools/MVAUtils/interface/TMVAZipReader.h" + +l1tpf::HGC3DClusterEgID::HGC3DClusterEgID(const edm::ParameterSet &pset) : + isPUFilter_(pset.getParameter("isPUFilter")), + preselection_(pset.getParameter("preselection")), + method_(pset.getParameter("method")), + weightsFile_(pset.getParameter("weightsFile")), + reader_(new TMVA::Reader()), + wp_(pset.getParameter("wp")) +{ + // first create all the variables + for (const auto &psvar : pset.getParameter>("variables")) { + variables_.emplace_back(psvar.getParameter("name"), psvar.getParameter("value")); + } +} + +void l1tpf::HGC3DClusterEgID::prepareTMVA() { + // Declare the variables + for (auto &var : variables_) + var.declare(*reader_); + // then read the weights + if (weightsFile_[0] != '/' && weightsFile_[0] != '.') { + weightsFile_ = edm::FileInPath(weightsFile_).fullPath(); + } + reco::details::loadTMVAWeights(&*reader_, method_, weightsFile_); +} + +float l1tpf::HGC3DClusterEgID::passID(l1t::HGCalMulticluster c, l1t::PFCluster &cpf) +{ + if (preselection_(c)) { + for (auto &var : variables_) + var.fill(c); + float mvaOut = reader_->EvaluateMVA(method_); + if (isPUFilter_) + cpf.setEgVsPUMVAOut(mvaOut); + else + cpf.setEgVsPionMVAOut(mvaOut); + return (mvaOut > wp_(c) ? 1 : 0); + } else { + if (isPUFilter_) + cpf.setEgVsPUMVAOut(-100.0); + else + cpf.setEgVsPionMVAOut(-100.0); + return 0; + } +} + + + diff --git a/L1Trigger/Phase2L1ParticleFlow/src/firmware/data.h b/L1Trigger/Phase2L1ParticleFlow/src/firmware/data.h index ceee9b283f679..395d4c61f707c 100644 --- a/L1Trigger/Phase2L1ParticleFlow/src/firmware/data.h +++ b/L1Trigger/Phase2L1ParticleFlow/src/firmware/data.h @@ -1,5 +1,5 @@ -#ifndef FIRMWARE_DATA_H -#define FIRMWARE_DATA_H +#ifndef L1Trigger_Phase2L1ParticleFlow_FIRMWARE_DATA_H +#define L1Trigger_Phase2L1ParticleFlow_FIRMWARE_DATA_H #include diff --git a/L1Trigger/Phase2L1ParticleFlow/src/firmware/pfalgo2hgc.h b/L1Trigger/Phase2L1ParticleFlow/src/firmware/pfalgo2hgc.h index 15ad83088dedc..3d36fa37c2b0c 100644 --- a/L1Trigger/Phase2L1ParticleFlow/src/firmware/pfalgo2hgc.h +++ b/L1Trigger/Phase2L1ParticleFlow/src/firmware/pfalgo2hgc.h @@ -1,11 +1,5 @@ -#ifndef FIRMWARE_PFALGO2HGC_H -#define FIRMWARE_PFALGO2HGC_H - -#ifndef REG_HGCal -#ifndef CMSSW_GIT_HASH -#warning "REG_HGCal is not #defined, but this algorithm has only been tested there" -#endif -#endif +#ifndef L1Trigger_Phase2L1ParticleFlow_FIRMWARE_PFALGO2HGC_H +#define L1Trigger_Phase2L1ParticleFlow_FIRMWARE_PFALGO2HGC_H #include "pfalgo_common.h" diff --git a/L1Trigger/Phase2L1ParticleFlow/src/firmware/pfalgo3.h b/L1Trigger/Phase2L1ParticleFlow/src/firmware/pfalgo3.h index 73ef0e4cce912..cc7c48bff14d4 100644 --- a/L1Trigger/Phase2L1ParticleFlow/src/firmware/pfalgo3.h +++ b/L1Trigger/Phase2L1ParticleFlow/src/firmware/pfalgo3.h @@ -1,11 +1,5 @@ -#ifndef FIRMWARE_PFALGO3_H -#define FIRMWARE_PFALGO3_H - -#ifndef REG_Barrel -#ifndef CMSSW_GIT_HASH -#warning "REG_Barrel not defined in PFALGO3: not validated" -#endif -#endif +#ifndef L1Trigger_Phase2L1ParticleFlow_FIRMWARE_PFALGO3_H +#define L1Trigger_Phase2L1ParticleFlow_FIRMWARE_PFALGO3_H #include "pfalgo_common.h" diff --git a/L1Trigger/Phase2L1ParticleFlow/src/firmware/pfalgo_common.h b/L1Trigger/Phase2L1ParticleFlow/src/firmware/pfalgo_common.h index 030783f5850be..5fe4e1181b9db 100644 --- a/L1Trigger/Phase2L1ParticleFlow/src/firmware/pfalgo_common.h +++ b/L1Trigger/Phase2L1ParticleFlow/src/firmware/pfalgo_common.h @@ -1,5 +1,5 @@ -#ifndef FIRMWARE_PFALGO_COMMON_H -#define FIRMWARE_PFALGO_COMMON_H +#ifndef L1Trigger_Phase2L1ParticleFlow_FIRMWARE_PFALGO_COMMON_H +#define L1Trigger_Phase2L1ParticleFlow_FIRMWARE_PFALGO_COMMON_H #include "data.h" diff --git a/L1Trigger/Phase2L1ParticleFlow/src/ref/pfalgo2hgc_ref.h b/L1Trigger/Phase2L1ParticleFlow/src/ref/pfalgo2hgc_ref.h index b1607b99ef046..c24af621fa28d 100644 --- a/L1Trigger/Phase2L1ParticleFlow/src/ref/pfalgo2hgc_ref.h +++ b/L1Trigger/Phase2L1ParticleFlow/src/ref/pfalgo2hgc_ref.h @@ -1,5 +1,5 @@ -#ifndef PFALGO2HGC_REF_H -#define PFALGO2HGC_REF_H +#ifndef L1Trigger_Phase2L1ParticleFlow_PFALGO2HGC_REF_H +#define L1Trigger_Phase2L1ParticleFlow_PFALGO2HGC_REF_H #include "../firmware/pfalgo2hgc.h" #include "pfalgo_common_ref.h" diff --git a/L1Trigger/Phase2L1ParticleFlow/src/ref/pfalgo3_ref.h b/L1Trigger/Phase2L1ParticleFlow/src/ref/pfalgo3_ref.h index 8069529614b3c..d29329699c4f9 100644 --- a/L1Trigger/Phase2L1ParticleFlow/src/ref/pfalgo3_ref.h +++ b/L1Trigger/Phase2L1ParticleFlow/src/ref/pfalgo3_ref.h @@ -1,5 +1,5 @@ -#ifndef PFALGO3_REF_H -#define PFALGO3_REF_H +#ifndef L1Trigger_Phase2L1ParticleFlow_PFALGO3_REF_H +#define L1Trigger_Phase2L1ParticleFlow_PFALGO3_REF_H #include "../firmware/pfalgo3.h" #include "pfalgo_common_ref.h" diff --git a/L1Trigger/Phase2L1ParticleFlow/src/ref/pfalgo_common_ref.h b/L1Trigger/Phase2L1ParticleFlow/src/ref/pfalgo_common_ref.h index 1ee0618592f80..675f46fa2fc2c 100644 --- a/L1Trigger/Phase2L1ParticleFlow/src/ref/pfalgo_common_ref.h +++ b/L1Trigger/Phase2L1ParticleFlow/src/ref/pfalgo_common_ref.h @@ -1,5 +1,5 @@ -#ifndef PFALGO_COMMON_REF_H -#define PFALGO_COMMON_REF_H +#ifndef L1Trigger_Phase2L1ParticleFlow_PFALGO_COMMON_REF_H +#define L1Trigger_Phase2L1ParticleFlow_PFALGO_COMMON_REF_H #include "../firmware/data.h" #include "../firmware/pfalgo_common.h" diff --git a/L1Trigger/Phase2L1ParticleFlow/src/utils/DiscretePF2Firmware.h b/L1Trigger/Phase2L1ParticleFlow/src/utils/DiscretePF2Firmware.h index 30a2a88f0d6e8..0fbf23b86c8e8 100644 --- a/L1Trigger/Phase2L1ParticleFlow/src/utils/DiscretePF2Firmware.h +++ b/L1Trigger/Phase2L1ParticleFlow/src/utils/DiscretePF2Firmware.h @@ -1,5 +1,5 @@ -#ifndef FASTPUPPI_NTUPLERPRODUCER_DISCRETEPF2FIRMWARE_H -#define FASTPUPPI_NTUPLERPRODUCER_DISCRETEPF2FIRMWARE_H +#ifndef L1Trigger_Phase2L1ParticleFlow_DISCRETEPF2FIRMWARE_H +#define L1Trigger_Phase2L1ParticleFlow_DISCRETEPF2FIRMWARE_H /// NOTE: this include is not standalone, since the path to DiscretePFInputs is different in CMSSW & Vivado_HLS diff --git a/L1Trigger/Phase2L1ParticleFlow/src/utils/Firmware2DiscretePF.h b/L1Trigger/Phase2L1ParticleFlow/src/utils/Firmware2DiscretePF.h index 3c9f193143a5d..7956a7044861d 100644 --- a/L1Trigger/Phase2L1ParticleFlow/src/utils/Firmware2DiscretePF.h +++ b/L1Trigger/Phase2L1ParticleFlow/src/utils/Firmware2DiscretePF.h @@ -1,5 +1,5 @@ -#ifndef FASTPUPPI_NTUPLERPRODUCER_FIRMWARE2DISCRETEPF_H -#define FASTPUPPI_NTUPLERPRODUCER_FIRMWARE2DISCRETEPF_H +#ifndef L1Trigger_Phase2L1ParticleFlow_FIRMWARE2DISCRETEPF_H +#define L1Trigger_Phase2L1ParticleFlow_FIRMWARE2DISCRETEPF_H /// NOTE: this include is not standalone, since the path to DiscretePFInputs is different in CMSSW & Vivado_HLS From 6f3938f16adeca3ddb378fd2f33ba09658236b76 Mon Sep 17 00:00:00 2001 From: Giovanni Date: Fri, 26 Jun 2020 12:46:34 +0200 Subject: [PATCH 07/13] Put the TLorentzVector on the stack and not the heap, and disable automatic running of the test (not indented, as input files can't be available) --- .../Phase2L1ParticleFlow/test/BuildFile.xml | 3 +- .../test/testOutputFiles.cpp | 38 +++++++++---------- 2 files changed, 21 insertions(+), 20 deletions(-) diff --git a/L1Trigger/Phase2L1ParticleFlow/test/BuildFile.xml b/L1Trigger/Phase2L1ParticleFlow/test/BuildFile.xml index 6bb089624a4d9..0b22a9c4949f8 100644 --- a/L1Trigger/Phase2L1ParticleFlow/test/BuildFile.xml +++ b/L1Trigger/Phase2L1ParticleFlow/test/BuildFile.xml @@ -1,4 +1,5 @@ + @@ -6,4 +7,4 @@ - \ No newline at end of file + diff --git a/L1Trigger/Phase2L1ParticleFlow/test/testOutputFiles.cpp b/L1Trigger/Phase2L1ParticleFlow/test/testOutputFiles.cpp index 3591beb5ef50e..f67243bdf9360 100644 --- a/L1Trigger/Phase2L1ParticleFlow/test/testOutputFiles.cpp +++ b/L1Trigger/Phase2L1ParticleFlow/test/testOutputFiles.cpp @@ -39,7 +39,7 @@ static std::vector regions_; typedef l1tpf_impl::InputRegion Region; typedef std::pair SectorTrackIndex; -typedef std::map TrackMap; +typedef std::map TrackMap; struct Event { uint32_t run, lumi; @@ -62,9 +62,9 @@ struct Event { } }; -TLorentzVector *makeTLorentzVectorPtEtaPhiE(float pt, float eta, float phi, float e) { - TLorentzVector *v = new TLorentzVector(); - v->SetPtEtaPhiE(pt, eta, phi, e); +TLorentzVector makeTLorentzVectorPtEtaPhiE(float pt, float eta, float phi, float e) { + TLorentzVector v; + v.SetPtEtaPhiE(pt, eta, phi, e); return v; } @@ -185,8 +185,8 @@ TrackMap get_tracks_from_root_file(fwlite::Event &ev, int entry = 0, bool print return tracks_root; } -std::map, TLorentzVector *> get_tracks_from_dump_file(FILE *dfile_ = nullptr, bool print = false) { - std::map, TLorentzVector *> tracks_dump; +std::map, TLorentzVector> get_tracks_from_dump_file(FILE *dfile_ = nullptr, bool print = false) { + std::map, TLorentzVector> tracks_dump; Event event_; if (feof(dfile_)) { @@ -260,10 +260,10 @@ std::map, TLorentzVector *> get_tracks_from_dump_file(FILE * return tracks_dump; } -std::map, TLorentzVector *> get_tracks_from_coe_file(std::ifstream &cfile_, +std::map, TLorentzVector> get_tracks_from_coe_file(std::ifstream &cfile_, bool print = false, bool debug = false) { - std::map, TLorentzVector *> tracks_coe; + std::map, TLorentzVector> tracks_coe; std::string bset_string_; int ntrackstotal(0); bool skip(false); @@ -354,7 +354,7 @@ std::map, TLorentzVector *> get_tracks_from_coe_file(std::if } for (unsigned int is = 0; is < regions_.size(); ++is) { std::vector tracks_in_sector; - findAllInRegion(tracks_in_sector, tracks_coe, is); + findAllInRegion(tracks_in_sector, tracks_coe, is); if (print) printf("\tRead region %u (eta=[%0.4f,%0.4f] phi=[%0.4f,%0.4f]) with %lu tracks\n", is, @@ -367,9 +367,9 @@ std::map, TLorentzVector *> get_tracks_from_coe_file(std::if if (print) printf("\t\t Track %u (pT,eta,phi): (%.4f,%.4f,%.4f)\n", it, - tracks_coe[tracks_in_sector[it]]->Pt(), - tracks_coe[tracks_in_sector[it]]->Eta(), - tracks_coe[tracks_in_sector[it]]->Phi()); + tracks_coe[tracks_in_sector[it]].Pt(), + tracks_coe[tracks_in_sector[it]].Eta(), + tracks_coe[tracks_in_sector[it]].Phi()); } } @@ -430,20 +430,20 @@ bool compare_maps(TrackMap ref, TrackMap test) { << it->first.second << ")" << std::endl; return false; } - tlv = *(test.find(it->first)->second); + tlv = (test.find(it->first)->second); // The pT tolerance should be 1.0/l1tpf_impl::CaloCluster::PT_SCALE, but because of the rounding this is not true and the actual resolution isn't always as good // Instead, we will use max(1% of the pT of the reference TLorentzVector,0.25) // We use the max statement because at low pT, the 1% definition doesn't hold anymore. This wouldn't be a problem if 1/pT were encoded rather than pT. if (!compare_lv_with_tolerance( - *(it->second), + (it->second), tlv, - {float(std::max(it->second->Pt() * 1E-2, 1.0 / l1tpf_impl::CaloCluster::PT_SCALE)), + {float(std::max(it->second.Pt() * 1E-2, 1.0 / l1tpf_impl::CaloCluster::PT_SCALE)), 1.0 / l1tpf_impl::InputTrack::VTX_ETA_SCALE, 1.0 / l1tpf_impl::InputTrack::VTX_PHI_SCALE, - float(std::max(it->second->Pt() * 1E-2, 1.0 / l1tpf_impl::CaloCluster::PT_SCALE))})) { + float(std::max(it->second.Pt() * 1E-2, 1.0 / l1tpf_impl::CaloCluster::PT_SCALE))})) { std::cerr << std::endl - << "\tERROR::compare_maps Can't find the test track with TLorentzVector (" << it->second->Pt() << "," - << it->second->Eta() << "," << it->second->Phi() << "," << it->second->E() << ")" << std::endl + << "\tERROR::compare_maps Can't find the test track with TLorentzVector (" << it->second.Pt() << "," + << it->second.Eta() << "," << it->second.Phi() << "," << it->second.E() << ")" << std::endl << "\t\tInstead found (" << tlv.Pt() << "," << tlv.Eta() << "," << tlv.Phi() << "," << tlv.E() << ") at the position (sector,index)=(" << it->first.first << "," << it->first.second << ")" << std::endl; @@ -608,4 +608,4 @@ g++ -o testDumpFile testDumpFile.o ./testDumpFile trackerRegion_alltracks_sectors_1x18_TTbar_PU200.dump 18 scram b runtests -*/ \ No newline at end of file +*/ From 5fd532e27c9fab4064658a31cd07493289545e59 Mon Sep 17 00:00:00 2001 From: Giovanni Date: Fri, 26 Jun 2020 12:55:10 +0200 Subject: [PATCH 08/13] Forgot the ESGetToken --- .../plugins/PFTrackProducerFromL1Tracks.cc | 5 ++--- 1 file changed, 2 insertions(+), 3 deletions(-) diff --git a/L1Trigger/Phase2L1ParticleFlow/plugins/PFTrackProducerFromL1Tracks.cc b/L1Trigger/Phase2L1ParticleFlow/plugins/PFTrackProducerFromL1Tracks.cc index 622383af7077d..72c502edb70ca 100644 --- a/L1Trigger/Phase2L1ParticleFlow/plugins/PFTrackProducerFromL1Tracks.cc +++ b/L1Trigger/Phase2L1ParticleFlow/plugins/PFTrackProducerFromL1Tracks.cc @@ -22,6 +22,7 @@ namespace l1tpf { private: edm::EDGetTokenT> TrackTag_; edm::ESWatcher BFieldWatcher_; + edm::ESGetToken BFieldTag_; int nParam_; float fBz_; l1tpf::ParametricResolution resolCalo_, resolTrk_; @@ -41,9 +42,7 @@ l1tpf::PFTrackProducerFromL1Tracks::PFTrackProducerFromL1Tracks(const edm::Param void l1tpf::PFTrackProducerFromL1Tracks::produce(edm::Event &iEvent, const edm::EventSetup &iSetup) { if (BFieldWatcher_.check(iSetup)) { - edm::ESHandle magneticField; - iSetup.get().get(magneticField); - fBz_ = magneticField->inTesla(GlobalPoint(0, 0, 0)).z(); + fBz_ = iSetup.getData(BFieldTag_).inTesla(GlobalPoint(0, 0, 0)).z(); } std::unique_ptr out(new l1t::PFTrackCollection()); From c72202fbe525487a6df690a65c197c6640c4caec Mon Sep 17 00:00:00 2001 From: Giovanni Date: Fri, 26 Jun 2020 13:20:36 +0200 Subject: [PATCH 09/13] More enum class prettyness --- .../interface/PFAlgo2HGC.h | 4 +-- .../Phase2L1ParticleFlow/src/PFAlgo2HGC.cc | 36 +++++++++---------- 2 files changed, 20 insertions(+), 20 deletions(-) diff --git a/L1Trigger/Phase2L1ParticleFlow/interface/PFAlgo2HGC.h b/L1Trigger/Phase2L1ParticleFlow/interface/PFAlgo2HGC.h index 9835612e3b180..c6342d9efddfe 100644 --- a/L1Trigger/Phase2L1ParticleFlow/interface/PFAlgo2HGC.h +++ b/L1Trigger/Phase2L1ParticleFlow/interface/PFAlgo2HGC.h @@ -11,10 +11,10 @@ namespace l1tpf_impl { protected: float drMatchMu_; - enum MuMatchMode { BoxBestByPtRatio, DrBestByPtRatio, DrBestByPtDiff } muMatchMode_; + enum class MuMatchMode { BoxBestByPtRatio, DrBestByPtRatio, DrBestByPtDiff } muMatchMode_; float drMatch_, ptMatchLow_, ptMatchHigh_, maxInvisiblePt_; bool useTrackCaloSigma_, rescaleUnmatchedTrack_, caloTrkWeightedAverage_; - enum TkCaloLinkMetric { BestByDR = 0, BestByDRPt = 1, BestByDR2Pt2 = 2 }; + enum class TkCaloLinkMetric { BestByDR = 0, BestByDRPt = 1, BestByDR2Pt2 = 2 }; TkCaloLinkMetric tkCaloLinkMetric_; bool caloReLinkStep_; float caloReLinkDr_, caloReLinkThreshold_; diff --git a/L1Trigger/Phase2L1ParticleFlow/src/PFAlgo2HGC.cc b/L1Trigger/Phase2L1ParticleFlow/src/PFAlgo2HGC.cc index 9c044025f342d..840a476a05fc0 100644 --- a/L1Trigger/Phase2L1ParticleFlow/src/PFAlgo2HGC.cc +++ b/L1Trigger/Phase2L1ParticleFlow/src/PFAlgo2HGC.cc @@ -22,21 +22,21 @@ PFAlgo2HGC::PFAlgo2HGC(const edm::ParameterSet &iConfig) : PFAlgoBase(iConfig) { std::string muMatchMode = linkcfg.getParameter("trackMuMatch"); if (muMatchMode == "boxBestByPtRatio") - muMatchMode_ = BoxBestByPtRatio; + muMatchMode_ = MuMatchMode::BoxBestByPtRatio; else if (muMatchMode == "drBestByPtRatio") - muMatchMode_ = DrBestByPtRatio; + muMatchMode_ = MuMatchMode::DrBestByPtRatio; else if (muMatchMode == "drBestByPtDiff") - muMatchMode_ = DrBestByPtDiff; + muMatchMode_ = MuMatchMode::DrBestByPtDiff; else throw cms::Exception("Configuration", "bad value for trackMuMatch configurable"); std::string tkCaloLinkMetric = linkcfg.getParameter("trackCaloLinkMetric"); if (tkCaloLinkMetric == "bestByDR") - tkCaloLinkMetric_ = BestByDR; + tkCaloLinkMetric_ = TkCaloLinkMetric::BestByDR; else if (tkCaloLinkMetric == "bestByDRPt") - tkCaloLinkMetric_ = BestByDRPt; + tkCaloLinkMetric_ = TkCaloLinkMetric::BestByDRPt; else if (tkCaloLinkMetric == "bestByDR2Pt2") - tkCaloLinkMetric_ = BestByDR2Pt2; + tkCaloLinkMetric_ = TkCaloLinkMetric::BestByDR2Pt2; else throw cms::Exception("Configuration", "bad value for tkCaloLinkMetric configurable"); @@ -178,13 +178,13 @@ void PFAlgo2HGC::link_tk2mu(Region &r, std::vector &tk2mu, std::vector mu.floatPhi()); float minDistance = 9e9; switch (muMatchMode_) { - case BoxBestByPtRatio: + case MuMatchMode::BoxBestByPtRatio: minDistance = 4.; break; - case DrBestByPtRatio: + case MuMatchMode::DrBestByPtRatio: minDistance = 4.; break; - case DrBestByPtDiff: + case MuMatchMode::DrBestByPtDiff: minDistance = 0.5 * mu.floatPt(); break; } @@ -199,15 +199,15 @@ void PFAlgo2HGC::link_tk2mu(Region &r, std::vector &tk2mu, std::vector bool ok = false; float distance = 9e9; switch (muMatchMode_) { - case BoxBestByPtRatio: + case MuMatchMode::BoxBestByPtRatio: ok = (deta < intDrMuonMatchBox) && (dphi < intDrMuonMatchBox); distance = dptr; break; - case DrBestByPtRatio: + case MuMatchMode::DrBestByPtRatio: ok = (dr < drMatchMu_); distance = dptr; break; - case DrBestByPtDiff: + case MuMatchMode::DrBestByPtDiff: ok = (dr < drMatchMu_); distance = dpt; break; @@ -260,14 +260,14 @@ void PFAlgo2HGC::link_tk2calo(Region &r, std::vector &tk2calo) const { continue; // not necessary but just a waste of CPU otherwise float drbest = drMatch_, dptscale = 0; switch (tkCaloLinkMetric_) { - case BestByDR: + case TkCaloLinkMetric::BestByDR: drbest = drMatch_; break; - case BestByDRPt: + case TkCaloLinkMetric::BestByDRPt: drbest = 1.0; dptscale = drMatch_ / tk.floatCaloPtErr(); break; - case BestByDR2Pt2: + case TkCaloLinkMetric::BestByDR2Pt2: drbest = 1.0; dptscale = drMatch_ / tk.floatCaloPtErr(); break; @@ -281,13 +281,13 @@ void PFAlgo2HGC::link_tk2calo(Region &r, std::vector &tk2calo) const { continue; float dr = floatDR(tk, calo), dq; switch (tkCaloLinkMetric_) { - case BestByDR: + case TkCaloLinkMetric::BestByDR: if (dr < drbest) { tk2calo[itk] = ic; drbest = dr; } break; - case BestByDRPt: + case TkCaloLinkMetric::BestByDRPt: dq = dr + std::max(tk.floatPt() - calo.floatPt(), 0.) * dptscale; if (debug_ > 2 && dr < 0.3) printf("PFAlgo2HGC \t\t\t track %3d (pt %7.2f) vs calo %3d (pt %7.2f): dr %.3f, dq %.3f\n", @@ -302,7 +302,7 @@ void PFAlgo2HGC::link_tk2calo(Region &r, std::vector &tk2calo) const { drbest = dq; } break; - case BestByDR2Pt2: + case TkCaloLinkMetric::BestByDR2Pt2: dq = hypot(dr, std::max(tk.floatPt() - calo.floatPt(), 0.) * dptscale); if (debug_ > 2 && dr < 0.3) printf("PFAlgo2HGC \t\t\t track %3d (pt %7.2f) vs calo %3d (pt %7.2f): dr %.3f, dq %.3f\n", From 467dd0b02592e8436578d330b796f174940a277a Mon Sep 17 00:00:00 2001 From: Vladimir Date: Mon, 29 Jun 2020 08:20:47 +0200 Subject: [PATCH 10/13] Code-format. --- .../interface/CaloClusterer.h | 4 +- .../interface/HGC3DClusterEgID.h | 6 +- .../interface/ParametricResolution.h | 19 ++--- .../plugins/L1TPFCaloProducer.cc | 42 +++++----- .../plugins/L1TPFProducer.cc | 4 +- .../plugins/PFTrackProducerFromL1Tracks.cc | 4 +- L1Trigger/Phase2L1ParticleFlow/src/COEFile.cc | 12 +-- .../Phase2L1ParticleFlow/src/CaloClusterer.cc | 4 +- .../src/HGC3DClusterEgID.cc | 77 +++++++++---------- L1Trigger/Phase2L1ParticleFlow/src/Region.cc | 14 +++- .../Phase2L1ParticleFlow/src/RegionMapper.cc | 24 +++--- .../test/testOutputFiles.cpp | 4 +- 12 files changed, 107 insertions(+), 107 deletions(-) diff --git a/L1Trigger/Phase2L1ParticleFlow/interface/CaloClusterer.h b/L1Trigger/Phase2L1ParticleFlow/interface/CaloClusterer.h index cef7f31f9b172..64f0a663b14c2 100644 --- a/L1Trigger/Phase2L1ParticleFlow/interface/CaloClusterer.h +++ b/L1Trigger/Phase2L1ParticleFlow/interface/CaloClusterer.h @@ -289,8 +289,8 @@ namespace l1tpf_calo { // makes a calo linker (pointer will be owned by the callee) std::unique_ptr makeCaloLinker(const edm::ParameterSet &pset, - const SingleCaloClusterer &ecal, - const SingleCaloClusterer &hcal); + const SingleCaloClusterer &ecal, + const SingleCaloClusterer &hcal); } // namespace l1tpf_calo diff --git a/L1Trigger/Phase2L1ParticleFlow/interface/HGC3DClusterEgID.h b/L1Trigger/Phase2L1ParticleFlow/interface/HGC3DClusterEgID.h index 90f985e62aef0..8eae585f77f1c 100644 --- a/L1Trigger/Phase2L1ParticleFlow/interface/HGC3DClusterEgID.h +++ b/L1Trigger/Phase2L1ParticleFlow/interface/HGC3DClusterEgID.h @@ -20,11 +20,11 @@ namespace l1tpf { class HGC3DClusterEgID { public: - HGC3DClusterEgID(const edm::ParameterSet &pset) ; + HGC3DClusterEgID(const edm::ParameterSet &pset); - void prepareTMVA() ; + void prepareTMVA(); - float passID(l1t::HGCalMulticluster c, l1t::PFCluster &cpf) ; + float passID(l1t::HGCalMulticluster c, l1t::PFCluster &cpf); std::string method() { return method_; } diff --git a/L1Trigger/Phase2L1ParticleFlow/interface/ParametricResolution.h b/L1Trigger/Phase2L1ParticleFlow/interface/ParametricResolution.h index c654759a5d0e9..82ab1ba6ca886 100644 --- a/L1Trigger/Phase2L1ParticleFlow/interface/ParametricResolution.h +++ b/L1Trigger/Phase2L1ParticleFlow/interface/ParametricResolution.h @@ -9,25 +9,22 @@ namespace l1tpf { class ParametricResolution { public: - static std::vector getVFloat(const edm::ParameterSet &cpset, const std::string & name) { - std::vector vd = cpset.getParameter>(name); - return std::vector(vd.begin(),vd.end()); + static std::vector getVFloat(const edm::ParameterSet &cpset, const std::string &name) { + std::vector vd = cpset.getParameter>(name); + return std::vector(vd.begin(), vd.end()); } ParametricResolution() {} - ParametricResolution(const edm::ParameterSet &cpset) : - etas(getVFloat(cpset,"etaBins")), - offsets(getVFloat(cpset,"offset")), - scales(getVFloat(cpset,"scale")) - { + ParametricResolution(const edm::ParameterSet &cpset) + : etas(getVFloat(cpset, "etaBins")), offsets(getVFloat(cpset, "offset")), scales(getVFloat(cpset, "scale")) { if (cpset.existsAs>("ptMin")) { - ptMins = getVFloat(cpset,"ptMin"); + ptMins = getVFloat(cpset, "ptMin"); } else { float ptMin = cpset.existsAs("ptMin") ? cpset.getParameter("ptMin") : 0; ptMins = std::vector(etas.size(), ptMin); } if (cpset.existsAs>("ptMax")) { - ptMaxs = getVFloat(cpset,"ptMax"); + ptMaxs = getVFloat(cpset, "ptMax"); } else { ptMaxs = std::vector(etas.size(), 1e6); } @@ -37,7 +34,7 @@ namespace l1tpf { else if (skind == "calo") kind = Kind::Calo; else - throw cms::Exception("Configuration", "Bad kind of resolution: "+skind); + throw cms::Exception("Configuration", "Bad kind of resolution: " + skind); } float operator()(const float pt, const float abseta) const { for (unsigned int i = 0, n = etas.size(); i < n; ++i) { diff --git a/L1Trigger/Phase2L1ParticleFlow/plugins/L1TPFCaloProducer.cc b/L1Trigger/Phase2L1ParticleFlow/plugins/L1TPFCaloProducer.cc index 631f7c91eea09..bcb1924754b05 100644 --- a/L1Trigger/Phase2L1ParticleFlow/plugins/L1TPFCaloProducer.cc +++ b/L1Trigger/Phase2L1ParticleFlow/plugins/L1TPFCaloProducer.cc @@ -38,7 +38,7 @@ class L1TPFCaloProducer : public edm::stream::EDProducer<> { std::vector> hcalCands_; std::vector> hcalDigis_; - edm::ESGetToken decoderTag_; + edm::ESGetToken decoderTag_; bool hcalDigisBarrel_, hcalDigisHF_; std::vector> phase2barrelTowers_; std::vector> hcalHGCTowers_; @@ -70,7 +70,7 @@ class L1TPFCaloProducer : public edm::stream::EDProducer<> { L1TPFCaloProducer::L1TPFCaloProducer(const edm::ParameterSet &iConfig) : ecalOnly_(iConfig.existsAs("ecalOnly") ? iConfig.getParameter("ecalOnly") : false), debug_(iConfig.getUntrackedParameter("debug", 0)), - decoderTag_(esConsumes(edm::ESInputTag("",""))), + decoderTag_(esConsumes(edm::ESInputTag("", ""))), emCorrector_(iConfig.getParameter("emCorrector"), -1, debug_), hcCorrector_(iConfig.getParameter("hcCorrector"), -1, debug_), hadCorrector_(iConfig.getParameter("hadCorrector"), @@ -133,8 +133,8 @@ void L1TPFCaloProducer::produce(edm::Event &iEvent, const edm::EventSetup &iSetu iEvent.getByToken(token, ecals); for (const reco::Candidate &it : *ecals) { if (debug_) - edm::LogWarning("L1TPFCaloProducer") << "adding ECal input pt " << it.pt() << ", eta " << it.eta() << ", phi " - << it.phi() << "\n"; + edm::LogWarning("L1TPFCaloProducer") + << "adding ECal input pt " << it.pt() << ", eta " << it.eta() << ", phi " << it.phi() << "\n"; ecalClusterer_.add(it); } } @@ -146,8 +146,8 @@ void L1TPFCaloProducer::produce(edm::Event &iEvent, const edm::EventSetup &iSetu iEvent.getByToken(token, hcals); for (const reco::Candidate &it : *hcals) { if (debug_) - edm::LogWarning("L1TPFCaloProducer") << "adding HCal cand input pt " << it.pt() << ", eta " << it.eta() << ", phi " - << it.phi() << "\n"; + edm::LogWarning("L1TPFCaloProducer") + << "adding HCal cand input pt " << it.pt() << ", eta " << it.eta() << ", phi " << it.phi() << "\n"; hcalClusterer_.add(it); } } @@ -178,8 +178,8 @@ void L1TPFCaloProducer::produce(edm::Event &iEvent, const edm::EventSetup &iSetu if (debug_) { for (const l1t::PFCluster &it : *corrEcal) { - edm::LogWarning("L1TPFCaloProducer") << "corrected ECal cluster pt " << it.pt() << ", eta " << it.eta() << ", phi " - << it.phi() << "\n"; + edm::LogWarning("L1TPFCaloProducer") + << "corrected ECal cluster pt " << it.pt() << ", eta " << it.eta() << ", phi " << it.phi() << "\n"; } } @@ -214,8 +214,8 @@ void L1TPFCaloProducer::produce(edm::Event &iEvent, const edm::EventSetup &iSetu if (hadCorrector_.valid()) { caloLinker_->correct([&](const l1tpf_calo::CombinedCluster &c) -> float { if (debug_) - edm::LogWarning("L1TPFCaloProducer") << "raw linked cluster pt " << c.et << ", eta " << c.eta << ", phi " << c.phi - << ", emPt " << c.ecal_et << "\n"; + edm::LogWarning("L1TPFCaloProducer") << "raw linked cluster pt " << c.et << ", eta " << c.eta << ", phi " + << c.phi << ", emPt " << c.ecal_et << "\n"; return hadCorrector_.correctedPt(c.et, c.ecal_et, std::abs(c.eta)); }); } @@ -224,8 +224,8 @@ void L1TPFCaloProducer::produce(edm::Event &iEvent, const edm::EventSetup &iSetu for (l1t::PFCluster &c : *clusters) { c.setPtError(resol_(c.pt(), std::abs(c.eta()))); if (debug_) - edm::LogWarning("L1TPFCaloProducer") << "calibrated linked cluster pt " << c.pt() << ", eta " << c.eta() << ", phi " - << c.phi() << ", emPt " << c.emEt() << "\n"; + edm::LogWarning("L1TPFCaloProducer") << "calibrated linked cluster pt " << c.pt() << ", eta " << c.eta() + << ", phi " << c.phi() << ", emPt " << c.emEt() << "\n"; } iEvent.put(std::move(clusters), "calibrated"); @@ -235,7 +235,7 @@ void L1TPFCaloProducer::produce(edm::Event &iEvent, const edm::EventSetup &iSetu } void L1TPFCaloProducer::readHcalDigis_(edm::Event &iEvent, const edm::EventSetup &iSetup) { - const auto & decoder = iSetup.getData(decoderTag_); + const auto &decoder = iSetup.getData(decoderTag_); edm::Handle hcalTPs; for (const auto &token : hcalDigis_) { iEvent.getByToken(token, hcalTPs); @@ -251,8 +251,8 @@ void L1TPFCaloProducer::readHcalDigis_(edm::Event &iEvent, const edm::EventSetup if (!hcalDigisHF_ && std::abs(towerEta) > 2) continue; if (debug_) - edm::LogWarning("L1TPFCaloProducer") << "adding HCal digi input pt " << et << ", eta " << towerEta << ", phi " - << towerPhi << "\n"; + edm::LogWarning("L1TPFCaloProducer") + << "adding HCal digi input pt " << et << ", eta " << towerEta << ", phi " << towerPhi << "\n"; hcalClusterer_.add(et, towerEta, towerPhi); } } @@ -267,9 +267,10 @@ void L1TPFCaloProducer::readPhase2BarrelCaloTowers_(edm::Event &event, const edm if ((int)t.towerIEta() == -1016 && (int)t.towerIPhi() == -962) continue; if (debug_ && (t.hcalTowerEt() > 0 || t.ecalTowerEt() > 0)) { - edm::LogWarning("L1TPFCaloProducer") << "adding phase2 L1 CaloTower eta " << t.towerEta() << " phi " << t.towerIPhi() - << " ieta " << t.towerIEta() << " iphi " << t.towerIPhi() << " ecal " << t.ecalTowerEt() - << " hcal " << t.hcalTowerEt() << "\n"; + edm::LogWarning("L1TPFCaloProducer") + << "adding phase2 L1 CaloTower eta " << t.towerEta() << " phi " << t.towerIPhi() << " ieta " + << t.towerIEta() << " iphi " << t.towerIPhi() << " ecal " << t.ecalTowerEt() << " hcal " + << t.hcalTowerEt() << "\n"; } hcalClusterer_.add(t.hcalTowerEt(), t.towerEta(), t.towerIPhi()); ecalClusterer_.add(t.ecalTowerEt(), t.towerEta(), t.towerIPhi()); @@ -284,8 +285,9 @@ void L1TPFCaloProducer::readHcalHGCTowers_(edm::Event &iEvent, const edm::EventS iEvent.getByToken(token, hgcTowers); for (auto it = hgcTowers->begin(0), ed = hgcTowers->end(0); it != ed; ++it) { if (debug_) - edm::LogWarning("L1TPFCaloProducer") << "adding HGC Tower hadEt " << it->etHad() << ", emEt " << it->etEm() << ", pt " - << it->pt() << ", eta " << it->eta() << ", phi " << it->phi() << "\n"; + edm::LogWarning("L1TPFCaloProducer") + << "adding HGC Tower hadEt " << it->etHad() << ", emEt " << it->etEm() << ", pt " << it->pt() << ", eta " + << it->eta() << ", phi " << it->phi() << "\n"; hcalClusterer_.add(it->etHad(), it->eta(), it->phi()); if (!hcalHGCTowersHadOnly_) ecalClusterer_.add(it->etEm(), it->eta(), it->phi()); diff --git a/L1Trigger/Phase2L1ParticleFlow/plugins/L1TPFProducer.cc b/L1Trigger/Phase2L1ParticleFlow/plugins/L1TPFProducer.cc index 608183ed63fa9..768b501706146 100644 --- a/L1Trigger/Phase2L1ParticleFlow/plugins/L1TPFProducer.cc +++ b/L1Trigger/Phase2L1ParticleFlow/plugins/L1TPFProducer.cc @@ -196,7 +196,6 @@ L1TPFProducer::~L1TPFProducer() { // ------------ method called to produce the data ------------ void L1TPFProducer::produce(edm::Event& iEvent, const edm::EventSetup& iSetup) { - // clear the regions also at the beginning, in case one event didn't complete but the job continues on l1regions_.clear(); @@ -335,7 +334,8 @@ void L1TPFProducer::produce(edm::Event& iEvent, const edm::EventSetup& iSetup) { std::vector puGlobals; l1pualgo_->doPUGlobals(l1regions_.regions(), -1., puGlobals); // FIXME we don't have yet an external PU estimate const std::vector& puGlobalNames = l1pualgo_->puGlobalNames(); - if (puGlobals.size() != puGlobalNames.size()) throw cms::Exception("LogicError", "Mismatch in the number of global pileup inputs"); + if (puGlobals.size() != puGlobalNames.size()) + throw cms::Exception("LogicError", "Mismatch in the number of global pileup inputs"); for (unsigned int i = 0, n = puGlobalNames.size(); i < n; ++i) { iEvent.put(std::make_unique(puGlobals[i]), puGlobalNames[i]); } diff --git a/L1Trigger/Phase2L1ParticleFlow/plugins/PFTrackProducerFromL1Tracks.cc b/L1Trigger/Phase2L1ParticleFlow/plugins/PFTrackProducerFromL1Tracks.cc index 72c502edb70ca..5c53c47334c24 100644 --- a/L1Trigger/Phase2L1ParticleFlow/plugins/PFTrackProducerFromL1Tracks.cc +++ b/L1Trigger/Phase2L1ParticleFlow/plugins/PFTrackProducerFromL1Tracks.cc @@ -22,7 +22,7 @@ namespace l1tpf { private: edm::EDGetTokenT> TrackTag_; edm::ESWatcher BFieldWatcher_; - edm::ESGetToken BFieldTag_; + edm::ESGetToken BFieldTag_; int nParam_; float fBz_; l1tpf::ParametricResolution resolCalo_, resolTrk_; @@ -42,7 +42,7 @@ l1tpf::PFTrackProducerFromL1Tracks::PFTrackProducerFromL1Tracks(const edm::Param void l1tpf::PFTrackProducerFromL1Tracks::produce(edm::Event &iEvent, const edm::EventSetup &iSetup) { if (BFieldWatcher_.check(iSetup)) { - fBz_ = iSetup.getData(BFieldTag_).inTesla(GlobalPoint(0, 0, 0)).z(); + fBz_ = iSetup.getData(BFieldTag_).inTesla(GlobalPoint(0, 0, 0)).z(); } std::unique_ptr out(new l1t::PFTrackCollection()); diff --git a/L1Trigger/Phase2L1ParticleFlow/src/COEFile.cc b/L1Trigger/Phase2L1ParticleFlow/src/COEFile.cc index 92761ade87d20..b0b2c8364803e 100644 --- a/L1Trigger/Phase2L1ParticleFlow/src/COEFile.cc +++ b/L1Trigger/Phase2L1ParticleFlow/src/COEFile.cc @@ -14,15 +14,15 @@ COEFile::COEFile(const edm::ParameterSet& iConfig) bset_.resize(tracksize); } -COEFile::~COEFile() { -} +COEFile::~COEFile() {} void COEFile::writeHeaderToFile() { char depth_width[256]; - snprintf(depth_width, 255, - "; of depth=%i, and width=%i. In this case, values are specified\n", - ntracksmax, - tracksize * phiSlices); + snprintf(depth_width, + 255, + "; of depth=%i, and width=%i. In this case, values are specified\n", + ntracksmax, + tracksize * phiSlices); std::vector vheader = {"; Sample memory initialization file for Dual Port Block Memory,\n", "; v3.0 or later.\n", "; Board: VCU118\n", diff --git a/L1Trigger/Phase2L1ParticleFlow/src/CaloClusterer.cc b/L1Trigger/Phase2L1ParticleFlow/src/CaloClusterer.cc index 010282cb58345..4bba7d10506e0 100644 --- a/L1Trigger/Phase2L1ParticleFlow/src/CaloClusterer.cc +++ b/L1Trigger/Phase2L1ParticleFlow/src/CaloClusterer.cc @@ -624,8 +624,8 @@ void l1tpf_calo::FlatCaloLinker::run() { } std::unique_ptr l1tpf_calo::makeCaloLinker(const edm::ParameterSet &pset, - const SingleCaloClusterer &ecal, - const SingleCaloClusterer &hcal) { + const SingleCaloClusterer &ecal, + const SingleCaloClusterer &hcal) { const std::string &algo = pset.getParameter("algo"); if (algo == "simple") { return std::make_unique(pset, ecal, hcal); diff --git a/L1Trigger/Phase2L1ParticleFlow/src/HGC3DClusterEgID.cc b/L1Trigger/Phase2L1ParticleFlow/src/HGC3DClusterEgID.cc index 650d8a1c0b41d..6cf9b028ad7f6 100644 --- a/L1Trigger/Phase2L1ParticleFlow/src/HGC3DClusterEgID.cc +++ b/L1Trigger/Phase2L1ParticleFlow/src/HGC3DClusterEgID.cc @@ -1,50 +1,45 @@ #include "L1Trigger/Phase2L1ParticleFlow/interface/HGC3DClusterEgID.h" #include "CommonTools/MVAUtils/interface/TMVAZipReader.h" -l1tpf::HGC3DClusterEgID::HGC3DClusterEgID(const edm::ParameterSet &pset) : - isPUFilter_(pset.getParameter("isPUFilter")), - preselection_(pset.getParameter("preselection")), - method_(pset.getParameter("method")), - weightsFile_(pset.getParameter("weightsFile")), - reader_(new TMVA::Reader()), - wp_(pset.getParameter("wp")) -{ - // first create all the variables - for (const auto &psvar : pset.getParameter>("variables")) { - variables_.emplace_back(psvar.getParameter("name"), psvar.getParameter("value")); - } +l1tpf::HGC3DClusterEgID::HGC3DClusterEgID(const edm::ParameterSet &pset) + : isPUFilter_(pset.getParameter("isPUFilter")), + preselection_(pset.getParameter("preselection")), + method_(pset.getParameter("method")), + weightsFile_(pset.getParameter("weightsFile")), + reader_(new TMVA::Reader()), + wp_(pset.getParameter("wp")) { + // first create all the variables + for (const auto &psvar : pset.getParameter>("variables")) { + variables_.emplace_back(psvar.getParameter("name"), psvar.getParameter("value")); + } } void l1tpf::HGC3DClusterEgID::prepareTMVA() { - // Declare the variables - for (auto &var : variables_) - var.declare(*reader_); - // then read the weights - if (weightsFile_[0] != '/' && weightsFile_[0] != '.') { - weightsFile_ = edm::FileInPath(weightsFile_).fullPath(); - } - reco::details::loadTMVAWeights(&*reader_, method_, weightsFile_); + // Declare the variables + for (auto &var : variables_) + var.declare(*reader_); + // then read the weights + if (weightsFile_[0] != '/' && weightsFile_[0] != '.') { + weightsFile_ = edm::FileInPath(weightsFile_).fullPath(); + } + reco::details::loadTMVAWeights(&*reader_, method_, weightsFile_); } -float l1tpf::HGC3DClusterEgID::passID(l1t::HGCalMulticluster c, l1t::PFCluster &cpf) -{ - if (preselection_(c)) { - for (auto &var : variables_) - var.fill(c); - float mvaOut = reader_->EvaluateMVA(method_); - if (isPUFilter_) - cpf.setEgVsPUMVAOut(mvaOut); - else - cpf.setEgVsPionMVAOut(mvaOut); - return (mvaOut > wp_(c) ? 1 : 0); - } else { - if (isPUFilter_) - cpf.setEgVsPUMVAOut(-100.0); - else - cpf.setEgVsPionMVAOut(-100.0); - return 0; - } +float l1tpf::HGC3DClusterEgID::passID(l1t::HGCalMulticluster c, l1t::PFCluster &cpf) { + if (preselection_(c)) { + for (auto &var : variables_) + var.fill(c); + float mvaOut = reader_->EvaluateMVA(method_); + if (isPUFilter_) + cpf.setEgVsPUMVAOut(mvaOut); + else + cpf.setEgVsPionMVAOut(mvaOut); + return (mvaOut > wp_(c) ? 1 : 0); + } else { + if (isPUFilter_) + cpf.setEgVsPUMVAOut(-100.0); + else + cpf.setEgVsPionMVAOut(-100.0); + return 0; + } } - - - diff --git a/L1Trigger/Phase2L1ParticleFlow/src/Region.cc b/L1Trigger/Phase2L1ParticleFlow/src/Region.cc index d1c084ae7a411..116b95410c94d 100644 --- a/L1Trigger/Phase2L1ParticleFlow/src/Region.cc +++ b/L1Trigger/Phase2L1ParticleFlow/src/Region.cc @@ -14,7 +14,8 @@ const char *l1tpf_impl::Region::inputTypeName(int type) { case l1mu_type: return "Mu"; case n_input_types: - throw cms::Exception("LogicError", "n_input_types is not a type to be used, but only a compile-time const for iterating on types"); + throw cms::Exception( + "LogicError", "n_input_types is not a type to be used, but only a compile-time const for iterating on types"); } return "NO_SUCH_INPUT_TYPE"; } @@ -37,7 +38,9 @@ const char *l1tpf_impl::Region::outputTypeName(int type) { case photon_type: return "Photon"; case n_output_types: - throw cms::Exception("LogicError", "n_output_types is not a type to be used, but only a compile-time const for iterating on types"); + throw cms::Exception( + "LogicError", + "n_output_types is not a type to be used, but only a compile-time const for iterating on types"); } return "NO_SUCH_OUTPUT_TYPE"; } @@ -53,7 +56,8 @@ unsigned int l1tpf_impl::Region::nInput(InputType type) const { case l1mu_type: return muon.size(); case n_input_types: - throw cms::Exception("LogicError", "n_input_types is not a type to be used, but only a compile-time const for iterating on types"); + throw cms::Exception( + "LogicError", "n_input_types is not a type to be used, but only a compile-time const for iterating on types"); } return 9999; } @@ -98,7 +102,9 @@ unsigned int l1tpf_impl::Region::nOutput(OutputType type, bool usePuppi, bool fi ret++; break; case n_output_types: - throw cms::Exception("LogicError", "n_output_types is not a type to be used, but only a compile-time const for iterating on types"); + throw cms::Exception( + "LogicError", + "n_output_types is not a type to be used, but only a compile-time const for iterating on types"); } } return ret; diff --git a/L1Trigger/Phase2L1ParticleFlow/src/RegionMapper.cc b/L1Trigger/Phase2L1ParticleFlow/src/RegionMapper.cc index c2ff89c7502b9..65a5e8c4d400b 100644 --- a/L1Trigger/Phase2L1ParticleFlow/src/RegionMapper.cc +++ b/L1Trigger/Phase2L1ParticleFlow/src/RegionMapper.cc @@ -61,18 +61,18 @@ RegionMapper::RegionMapper(const edm::ParameterSet &iConfig) : useRelativeRegion // start off with a dummy region unsigned int ncalomax = 0, nemcalomax = 0, ntrackmax = 0, nmuonmax = 0, npfmax = 0, npuppimax = 0; regions_.emplace_back(-5.5, - 5.5, - 0, - 2 * M_PI, - 0.5, - 0.5, - useRelativeRegionalCoordinates_, - ncalomax, - nemcalomax, - ntrackmax, - nmuonmax, - npfmax, - npuppimax); + 5.5, + 0, + 2 * M_PI, + 0.5, + 0.5, + useRelativeRegionalCoordinates_, + ncalomax, + nemcalomax, + ntrackmax, + nmuonmax, + npfmax, + npuppimax); } } diff --git a/L1Trigger/Phase2L1ParticleFlow/test/testOutputFiles.cpp b/L1Trigger/Phase2L1ParticleFlow/test/testOutputFiles.cpp index f67243bdf9360..6be399b4e477f 100644 --- a/L1Trigger/Phase2L1ParticleFlow/test/testOutputFiles.cpp +++ b/L1Trigger/Phase2L1ParticleFlow/test/testOutputFiles.cpp @@ -261,8 +261,8 @@ std::map, TLorentzVector> get_tracks_from_dump_file(FILE *df } std::map, TLorentzVector> get_tracks_from_coe_file(std::ifstream &cfile_, - bool print = false, - bool debug = false) { + bool print = false, + bool debug = false) { std::map, TLorentzVector> tracks_coe; std::string bset_string_; int ntrackstotal(0); From d849e06ff76be7295fa2565f937c93212c06e401 Mon Sep 17 00:00:00 2001 From: Giovanni Date: Mon, 29 Jun 2020 09:25:46 +0200 Subject: [PATCH 11/13] More code review --- .../interface/BitwisePFAlgo.h | 2 +- .../interface/DiscretePFInputs.h | 19 +++- .../Phase2L1ParticleFlow/interface/PFAlgo3.h | 4 +- .../interface/PUAlgoBase.h | 2 +- .../Phase2L1ParticleFlow/interface/Region.h | 8 ++ .../interface/RegionMapper.h | 2 +- .../plugins/L1TPFProducer.cc | 92 +++++++++++-------- .../Phase2L1ParticleFlow/src/BitwisePFAlgo.cc | 55 +++++------ L1Trigger/Phase2L1ParticleFlow/src/PFAlgo3.cc | 36 ++++---- .../Phase2L1ParticleFlow/src/PUAlgoBase.cc | 10 +- .../Phase2L1ParticleFlow/src/RegionMapper.cc | 26 +++--- .../Phase2L1ParticleFlow/src/firmware/data.h | 4 +- .../src/ref/pfalgo3_ref.h | 1 + .../src/ref/pfalgo_common_ref.h | 2 + .../test/testOutputFiles.cpp | 16 ++-- 15 files changed, 157 insertions(+), 122 deletions(-) diff --git a/L1Trigger/Phase2L1ParticleFlow/interface/BitwisePFAlgo.h b/L1Trigger/Phase2L1ParticleFlow/interface/BitwisePFAlgo.h index f4b422706e07f..28f804be48937 100644 --- a/L1Trigger/Phase2L1ParticleFlow/interface/BitwisePFAlgo.h +++ b/L1Trigger/Phase2L1ParticleFlow/interface/BitwisePFAlgo.h @@ -14,7 +14,7 @@ namespace l1tpf_impl { protected: enum class AlgoChoice { algo3, algo2hgc } algo_; - pfalgo_config* config_; + std::shared_ptr config_; }; } // namespace l1tpf_impl diff --git a/L1Trigger/Phase2L1ParticleFlow/interface/DiscretePFInputs.h b/L1Trigger/Phase2L1ParticleFlow/interface/DiscretePFInputs.h index c697c88eb5ada..4de6832b8806b 100644 --- a/L1Trigger/Phase2L1ParticleFlow/interface/DiscretePFInputs.h +++ b/L1Trigger/Phase2L1ParticleFlow/interface/DiscretePFInputs.h @@ -228,7 +228,18 @@ namespace l1tpf_impl { std::vector track; std::vector muon; - InputRegion() : etaCenter(), etaMin(), etaMax(), phiCenter(), phiHalfWidth(), etaExtra(), phiExtra() {} + InputRegion() + : etaCenter(), + etaMin(), + etaMax(), + phiCenter(), + phiHalfWidth(), + etaExtra(), + phiExtra(), + calo(), + emcalo(), + track(), + muon() {} InputRegion( float etacenter, float etamin, float etamax, float phicenter, float phihalfwidth, float etaextra, float phiextra) : etaCenter(etacenter), @@ -237,7 +248,11 @@ namespace l1tpf_impl { phiCenter(phicenter), phiHalfWidth(phihalfwidth), etaExtra(etaextra), - phiExtra(phiextra) {} + phiExtra(phiextra), + calo(), + emcalo(), + track(), + muon() {} }; } // namespace l1tpf_impl diff --git a/L1Trigger/Phase2L1ParticleFlow/interface/PFAlgo3.h b/L1Trigger/Phase2L1ParticleFlow/interface/PFAlgo3.h index 725388ac801fc..5972218dc10fd 100644 --- a/L1Trigger/Phase2L1ParticleFlow/interface/PFAlgo3.h +++ b/L1Trigger/Phase2L1ParticleFlow/interface/PFAlgo3.h @@ -11,10 +11,10 @@ namespace l1tpf_impl { protected: float drMatchMu_; - enum MuMatchMode { BoxBestByPtRatio, DrBestByPtRatio, DrBestByPtDiff } muMatchMode_; + enum class MuMatchMode { BoxBestByPtRatio, DrBestByPtRatio, DrBestByPtDiff } muMatchMode_; float drMatch_, ptMatchLow_, ptMatchHigh_, maxInvisiblePt_; bool useTrackCaloSigma_, rescaleUnmatchedTrack_, caloTrkWeightedAverage_; - enum TkCaloLinkMetric { BestByDR = 0, BestByDRPt = 1, BestByDR2Pt2 = 2 }; + enum class TkCaloLinkMetric { BestByDR = 0, BestByDRPt = 1, BestByDR2Pt2 = 2 }; float drMatchEm_, ptMinFracMatchEm_, drMatchEmHad_; float emHadSubtractionPtSlope_; TkCaloLinkMetric tkCaloLinkMetric_; diff --git a/L1Trigger/Phase2L1ParticleFlow/interface/PUAlgoBase.h b/L1Trigger/Phase2L1ParticleFlow/interface/PUAlgoBase.h index 1f19bd693e3ef..0b6cfa60f6fca 100644 --- a/L1Trigger/Phase2L1ParticleFlow/interface/PUAlgoBase.h +++ b/L1Trigger/Phase2L1ParticleFlow/interface/PUAlgoBase.h @@ -12,7 +12,7 @@ namespace l1tpf_impl { virtual ~PUAlgoBase(); /// global operations - enum VertexAlgo { OldVtxAlgo, TPVtxAlgo, ExternalVtxAlgo }; + enum class VertexAlgo { Old, TP, External }; virtual void doVertexing(std::vector &rs, VertexAlgo algo, float &vz) const; // region is not const since it sets the fromPV bit of the tracks diff --git a/L1Trigger/Phase2L1ParticleFlow/interface/Region.h b/L1Trigger/Phase2L1ParticleFlow/interface/Region.h index 65ffba84dc503..b022bace35f69 100644 --- a/L1Trigger/Phase2L1ParticleFlow/interface/Region.h +++ b/L1Trigger/Phase2L1ParticleFlow/interface/Region.h @@ -26,6 +26,14 @@ namespace l1tpf_impl { unsigned int npfmax, unsigned int npuppimax) : InputRegion(0.5 * (etamin + etamax), etamin, etamax, phicenter, 0.5 * phiwidth, etaextra, phiextra), + pf(), + puppi(), + caloOverflow(), + emcaloOverflow(), + trackOverflow(), + muonOverflow(), + pfOverflow(), + puppiOverflow(), relativeCoordinates(useRelativeCoordinates), ncaloMax(ncalomax), nemcaloMax(nemcalomax), diff --git a/L1Trigger/Phase2L1ParticleFlow/interface/RegionMapper.h b/L1Trigger/Phase2L1ParticleFlow/interface/RegionMapper.h index bbe370597106e..11ca55c1d981e 100644 --- a/L1Trigger/Phase2L1ParticleFlow/interface/RegionMapper.h +++ b/L1Trigger/Phase2L1ParticleFlow/interface/RegionMapper.h @@ -45,7 +45,7 @@ namespace l1tpf_impl { protected: std::vector regions_; bool useRelativeRegionalCoordinates_; // whether the eta,phi in each region are global or relative to the region center - enum TrackAssoMode { atVertex, atCalo, any = 999 } trackRegionMode_; + enum class TrackAssoMode { atVertex, atCalo, any = 999 } trackRegionMode_; // these are used to link items back std::unordered_map clusterRefMap_; diff --git a/L1Trigger/Phase2L1ParticleFlow/plugins/L1TPFProducer.cc b/L1Trigger/Phase2L1ParticleFlow/plugins/L1TPFProducer.cc index 768b501706146..8c358b30d2967 100644 --- a/L1Trigger/Phase2L1ParticleFlow/plugins/L1TPFProducer.cc +++ b/L1Trigger/Phase2L1ParticleFlow/plugins/L1TPFProducer.cc @@ -38,6 +38,7 @@ class L1TPFProducer : public edm::stream::EDProducer<> { ~L1TPFProducer() override; private: + edm::ParameterSet config_; int debug_; bool useStandaloneMuons_; @@ -65,13 +66,15 @@ class L1TPFProducer : public edm::stream::EDProducer<> { edm::EDGetTokenT TokGenOrigin_; // Region dump/coe - FILE* fRegionDump; - std::unique_ptr fRegionCOE; - unsigned int neventscoemax, neventsproduced; + const std::string regionDumpName_, regionCOEName_; + FILE* fRegionDump_; + std::unique_ptr fRegionCOE_; + unsigned int neventscoemax_, neventsproduced_; // region of interest debugging float debugEta_, debugPhi_, debugR_; + void beginStream(edm::StreamID) override; void produce(edm::Event&, const edm::EventSetup&) override; void addUInt(unsigned int value, std::string iLabel, edm::Event& iEvent); }; @@ -80,7 +83,8 @@ class L1TPFProducer : public edm::stream::EDProducer<> { // constructors and destructor // L1TPFProducer::L1TPFProducer(const edm::ParameterSet& iConfig) - : debug_(iConfig.getUntrackedParameter("debug", 0)), + : config_(iConfig), + debug_(iConfig.getUntrackedParameter("debug", 0)), useStandaloneMuons_(iConfig.getParameter("useStandaloneMuons")), useTrackerMuons_(iConfig.getParameter("useTrackerMuons")), hasTracks_(!iConfig.getParameter("tracks").label().empty()), @@ -96,8 +100,12 @@ L1TPFProducer::L1TPFProducer(const edm::ParameterSet& iConfig) l1regions_(iConfig), l1pfalgo_(nullptr), l1pualgo_(nullptr), - fRegionDump(nullptr), - fRegionCOE(nullptr), + regionDumpName_(iConfig.getUntrackedParameter("dumpFileName", "")), + regionCOEName_(iConfig.getUntrackedParameter("coeFileName", "")), + fRegionDump_(nullptr), + fRegionCOE_(nullptr), + neventscoemax_(iConfig.getUntrackedParameter("neventscoemax_", 0)), + neventsproduced_(0), debugEta_(iConfig.getUntrackedParameter("debugEta", 0)), debugPhi_(iConfig.getUntrackedParameter("debugPhi", 0)), debugR_(iConfig.getUntrackedParameter("debugR", -1)) { @@ -138,11 +146,11 @@ L1TPFProducer::L1TPFProducer(const edm::ParameterSet& iConfig) std::string vtxAlgo = iConfig.getParameter("vtxAlgo"); if (vtxAlgo == "TP") - vtxAlgo_ = l1tpf_impl::PUAlgoBase::TPVtxAlgo; + vtxAlgo_ = l1tpf_impl::PUAlgoBase::VertexAlgo::TP; else if (vtxAlgo == "old") - vtxAlgo_ = l1tpf_impl::PUAlgoBase::OldVtxAlgo; + vtxAlgo_ = l1tpf_impl::PUAlgoBase::VertexAlgo::Old; else if (vtxAlgo == "external") { - vtxAlgo_ = l1tpf_impl::PUAlgoBase::ExternalVtxAlgo; + vtxAlgo_ = l1tpf_impl::PUAlgoBase::VertexAlgo::External; const std::string& vtxFormat = iConfig.getParameter("vtxFormat"); if (vtxFormat == "TkPrimaryVertex") { extTkVtx_ = consumes>(iConfig.getParameter("vtxCollection")); @@ -155,18 +163,9 @@ L1TPFProducer::L1TPFProducer(const edm::ParameterSet& iConfig) produces(label); } - std::string dumpFileName = iConfig.getUntrackedParameter("dumpFileName", ""); - if (!dumpFileName.empty()) { - fRegionDump = fopen(dumpFileName.c_str(), "wb"); + if (!regionDumpName_.empty()) { TokGenOrigin_ = consumes(iConfig.getParameter("genOrigin")); } - std::string coeFileName = iConfig.getUntrackedParameter("coeFileName", ""); - if (!coeFileName.empty()) { - fRegionCOE.reset(new l1tpf_impl::COEFile(iConfig)); - neventscoemax = iConfig.getUntrackedParameter("neventscoemax"); - neventsproduced = 0; - } - for (int tot = 0; tot <= 1; ++tot) { for (int i = 0; i < l1tpf_impl::Region::n_input_types; ++i) { produces(std::string(tot ? "totNL1" : "maxNL1") + l1tpf_impl::Region::inputTypeName(i)); @@ -188,10 +187,29 @@ L1TPFProducer::L1TPFProducer(const edm::ParameterSet& iConfig) L1TPFProducer::~L1TPFProducer() { // do anything here that needs to be done at desctruction time // (e.g. close files, deallocate resources etc.) - if (fRegionDump) - fclose(fRegionDump); - if (fRegionCOE) - fRegionCOE->close(); + if (fRegionDump_) + fclose(fRegionDump_); + if (fRegionCOE_) + fRegionCOE_->close(); +} + +void L1TPFProducer::beginStream(edm::StreamID id) { + if (!regionDumpName_.empty()) { + if (id == 0) { + fRegionDump_ = fopen(regionDumpName_.c_str(), "wb"); + } else { + edm::LogWarning("L1TPFProducer") + << "Job running with multiple streams, but dump file will have only events on stream zero."; + } + } + if (!regionCOEName_.empty()) { + if (id == 0) { + fRegionCOE_.reset(new l1tpf_impl::COEFile(config_)); + } else { + edm::LogWarning("L1TPFProducer") + << "Job running with multiple streams, but COE file will dump only events on stream zero."; + } + } } // ------------ method called to produce the data ------------ @@ -274,26 +292,26 @@ void L1TPFProducer::produce(edm::Event& iEvent, const edm::EventSetup& iSetup) { iEvent.put(l1regions_.fetchCalo(/*ptmin=*/0.1, /*em=*/true), "EmCalo"); iEvent.put(l1regions_.fetchCalo(/*ptmin=*/0.1, /*em=*/false), "Calo"); iEvent.put(l1regions_.fetchTracks(/*ptmin=*/0.0, /*fromPV=*/false), "TK"); - if (fRegionDump) { + if (fRegionDump_) { uint32_t run = iEvent.id().run(), lumi = iEvent.id().luminosityBlock(); uint64_t event = iEvent.id().event(); - fwrite(&run, sizeof(uint32_t), 1, fRegionDump); - fwrite(&lumi, sizeof(uint32_t), 1, fRegionDump); - fwrite(&event, sizeof(uint64_t), 1, fRegionDump); - l1tpf_impl::writeManyToFile(l1regions_.regions(), fRegionDump); + fwrite(&run, sizeof(uint32_t), 1, fRegionDump_); + fwrite(&lumi, sizeof(uint32_t), 1, fRegionDump_); + fwrite(&event, sizeof(uint64_t), 1, fRegionDump_); + l1tpf_impl::writeManyToFile(l1regions_.regions(), fRegionDump_); } // Then save the regions to the COE file // Do it here because there is some sorting going on in a later function - if (fRegionCOE && fRegionCOE->is_open() && neventsproduced < neventscoemax) { + if (fRegionCOE_ && fRegionCOE_->is_open() && neventsproduced_ < neventscoemax_) { std::vector regions = l1regions_.regions(); - fRegionCOE->writeTracksToFile(regions, neventsproduced == 0); + fRegionCOE_->writeTracksToFile(regions, neventsproduced_ == 0); } - neventsproduced++; + neventsproduced_++; // Then do the vertexing, and save it out float z0; - if (vtxAlgo_ == l1tpf_impl::PUAlgoBase::ExternalVtxAlgo) { + if (vtxAlgo_ == l1tpf_impl::PUAlgoBase::VertexAlgo::External) { z0 = 0; double ptsum = 0; if (!extTkVtx_.isUninitialized()) { @@ -310,13 +328,13 @@ void L1TPFProducer::produce(edm::Event& iEvent, const edm::EventSetup& iSetup) { } l1pualgo_->doVertexing(l1regions_.regions(), vtxAlgo_, z0); iEvent.put(std::make_unique(z0), "z0"); - if (fRegionDump) { - fwrite(&z0, sizeof(float), 1, fRegionDump); + if (fRegionDump_) { + fwrite(&z0, sizeof(float), 1, fRegionDump_); edm::Handle hGenOrigin; iEvent.getByToken(TokGenOrigin_, hGenOrigin); const math::XYZPointF& genOrigin = *hGenOrigin; float genZ = genOrigin.Z(); - fwrite(&genZ, sizeof(float), 1, fRegionDump); + fwrite(&genZ, sizeof(float), 1, fRegionDump_); } // Then also save the tracks with a vertex cut @@ -339,8 +357,8 @@ void L1TPFProducer::produce(edm::Event& iEvent, const edm::EventSetup& iSetup) { for (unsigned int i = 0, n = puGlobalNames.size(); i < n; ++i) { iEvent.put(std::make_unique(puGlobals[i]), puGlobalNames[i]); } - if (fRegionDump) { - l1tpf_impl::writeManyToFile(puGlobals, fRegionDump); + if (fRegionDump_) { + l1tpf_impl::writeManyToFile(puGlobals, fRegionDump_); } // Then run puppi (regionally) diff --git a/L1Trigger/Phase2L1ParticleFlow/src/BitwisePFAlgo.cc b/L1Trigger/Phase2L1ParticleFlow/src/BitwisePFAlgo.cc index 471af670af5af..16e39f667bcaf 100644 --- a/L1Trigger/Phase2L1ParticleFlow/src/BitwisePFAlgo.cc +++ b/L1Trigger/Phase2L1ParticleFlow/src/BitwisePFAlgo.cc @@ -15,46 +15,37 @@ BitwisePFAlgo::BitwisePFAlgo(const edm::ParameterSet &iConfig) : PFAlgoBase(iCon debug_ = iConfig.getUntrackedParameter("debugBitwisePFAlgo", iConfig.getUntrackedParameter("debug", 0)); if (algo == "pfalgo3") { algo_ = AlgoChoice::algo3; - config_ = new pfalgo3_config(bitwiseConfig.getParameter("NTRACK"), - bitwiseConfig.getParameter("NEMCALO"), - bitwiseConfig.getParameter("NCALO"), - bitwiseConfig.getParameter("NMU"), - bitwiseConfig.getParameter("NPHOTON"), - bitwiseConfig.getParameter("NSELCALO"), - bitwiseConfig.getParameter("NALLNEUTRAL"), - bitwiseConfig.getParameter("DR2MAX_TK_MU"), - bitwiseConfig.getParameter("DR2MAX_TK_EM"), - bitwiseConfig.getParameter("DR2MAX_EM_CALO"), - bitwiseConfig.getParameter("DR2MAX_TK_CALO"), - bitwiseConfig.getParameter("TK_MAXINVPT_LOOSE"), - bitwiseConfig.getParameter("TK_MAXINVPT_TIGHT")); + config_ = std::make_shared(bitwiseConfig.getParameter("NTRACK"), + bitwiseConfig.getParameter("NEMCALO"), + bitwiseConfig.getParameter("NCALO"), + bitwiseConfig.getParameter("NMU"), + bitwiseConfig.getParameter("NPHOTON"), + bitwiseConfig.getParameter("NSELCALO"), + bitwiseConfig.getParameter("NALLNEUTRAL"), + bitwiseConfig.getParameter("DR2MAX_TK_MU"), + bitwiseConfig.getParameter("DR2MAX_TK_EM"), + bitwiseConfig.getParameter("DR2MAX_EM_CALO"), + bitwiseConfig.getParameter("DR2MAX_TK_CALO"), + bitwiseConfig.getParameter("TK_MAXINVPT_LOOSE"), + bitwiseConfig.getParameter("TK_MAXINVPT_TIGHT")); pfalgo3_ref_set_debug(debug_); } else if (algo == "pfalgo2hgc") { algo_ = AlgoChoice::algo2hgc; - config_ = new pfalgo_config(bitwiseConfig.getParameter("NTRACK"), - bitwiseConfig.getParameter("NCALO"), - bitwiseConfig.getParameter("NMU"), - bitwiseConfig.getParameter("NSELCALO"), - bitwiseConfig.getParameter("DR2MAX_TK_MU"), - bitwiseConfig.getParameter("DR2MAX_TK_CALO"), - bitwiseConfig.getParameter("TK_MAXINVPT_LOOSE"), - bitwiseConfig.getParameter("TK_MAXINVPT_TIGHT")); + config_ = std::make_shared(bitwiseConfig.getParameter("NTRACK"), + bitwiseConfig.getParameter("NCALO"), + bitwiseConfig.getParameter("NMU"), + bitwiseConfig.getParameter("NSELCALO"), + bitwiseConfig.getParameter("DR2MAX_TK_MU"), + bitwiseConfig.getParameter("DR2MAX_TK_CALO"), + bitwiseConfig.getParameter("TK_MAXINVPT_LOOSE"), + bitwiseConfig.getParameter("TK_MAXINVPT_TIGHT")); pfalgo2hgc_ref_set_debug(debug_); } else { throw cms::Exception("Configuration", "Unsupported bitwiseAlgo " + algo); } } -BitwisePFAlgo::~BitwisePFAlgo() { - switch (algo_) { - case AlgoChoice::algo3: - delete (static_cast(config_)); - break; - default: - delete config_; - } - config_ = nullptr; -} +BitwisePFAlgo::~BitwisePFAlgo() {} void BitwisePFAlgo::runPF(Region &r) const { initRegion(r); @@ -152,7 +143,7 @@ void BitwisePFAlgo::runPF(Region &r) const { } switch (algo_) { case AlgoChoice::algo3: { - pfalgo3_config *config3 = static_cast(config_); + pfalgo3_config *config3 = static_cast(config_.get()); std::unique_ptr emcalo(new EmCaloObj[config3->nEMCALO]); std::unique_ptr outpho(new PFNeutralObj[config3->nPHOTON]); diff --git a/L1Trigger/Phase2L1ParticleFlow/src/PFAlgo3.cc b/L1Trigger/Phase2L1ParticleFlow/src/PFAlgo3.cc index 6e6d615ebae87..700a96e507f7d 100644 --- a/L1Trigger/Phase2L1ParticleFlow/src/PFAlgo3.cc +++ b/L1Trigger/Phase2L1ParticleFlow/src/PFAlgo3.cc @@ -22,21 +22,21 @@ PFAlgo3::PFAlgo3(const edm::ParameterSet &iConfig) : PFAlgoBase(iConfig) { std::string muMatchMode = linkcfg.getParameter("trackMuMatch"); if (muMatchMode == "boxBestByPtRatio") - muMatchMode_ = BoxBestByPtRatio; + muMatchMode_ = MuMatchMode::BoxBestByPtRatio; else if (muMatchMode == "drBestByPtRatio") - muMatchMode_ = DrBestByPtRatio; + muMatchMode_ = MuMatchMode::DrBestByPtRatio; else if (muMatchMode == "drBestByPtDiff") - muMatchMode_ = DrBestByPtDiff; + muMatchMode_ = MuMatchMode::DrBestByPtDiff; else throw cms::Exception("Configuration", "bad value for trackMuMatch configurable"); std::string tkCaloLinkMetric = linkcfg.getParameter("trackCaloLinkMetric"); if (tkCaloLinkMetric == "bestByDR") - tkCaloLinkMetric_ = BestByDR; + tkCaloLinkMetric_ = TkCaloLinkMetric::BestByDR; else if (tkCaloLinkMetric == "bestByDRPt") - tkCaloLinkMetric_ = BestByDRPt; + tkCaloLinkMetric_ = TkCaloLinkMetric::BestByDRPt; else if (tkCaloLinkMetric == "bestByDR2Pt2") - tkCaloLinkMetric_ = BestByDR2Pt2; + tkCaloLinkMetric_ = TkCaloLinkMetric::BestByDR2Pt2; else throw cms::Exception("Configuration", "bad value for tkCaloLinkMetric configurable"); @@ -225,13 +225,13 @@ void PFAlgo3::link_tk2mu(Region &r, std::vector &tk2mu, std::vector &m "PFAlgo3 \t muon %3d (pt %7.2f, eta %+5.2f, phi %+5.2f) \n", imu, mu.floatPt(), mu.floatEta(), mu.floatPhi()); float minDistance = 9e9; switch (muMatchMode_) { - case BoxBestByPtRatio: + case MuMatchMode::BoxBestByPtRatio: minDistance = 4.; break; - case DrBestByPtRatio: + case MuMatchMode::DrBestByPtRatio: minDistance = 4.; break; - case DrBestByPtDiff: + case MuMatchMode::DrBestByPtDiff: minDistance = 0.5 * mu.floatPt(); break; } @@ -246,15 +246,15 @@ void PFAlgo3::link_tk2mu(Region &r, std::vector &tk2mu, std::vector &m bool ok = false; float distance = 9e9; switch (muMatchMode_) { - case BoxBestByPtRatio: + case MuMatchMode::BoxBestByPtRatio: ok = (deta < intDrMuonMatchBox) && (dphi < intDrMuonMatchBox); distance = dptr; break; - case DrBestByPtRatio: + case MuMatchMode::DrBestByPtRatio: ok = (dr < drMatchMu_); distance = dptr; break; - case DrBestByPtDiff: + case MuMatchMode::DrBestByPtDiff: ok = (dr < drMatchMu_); distance = dpt; break; @@ -541,14 +541,14 @@ void PFAlgo3::link_tk2calo(Region &r, std::vector &tk2calo) const { continue; // not necessary but just a waste of CPU otherwise float drbest = drMatch_, dptscale = 0; switch (tkCaloLinkMetric_) { - case BestByDR: + case TkCaloLinkMetric::BestByDR: drbest = drMatch_; break; - case BestByDRPt: + case TkCaloLinkMetric::BestByDRPt: drbest = 1.0; dptscale = drMatch_ / tk.floatCaloPtErr(); break; - case BestByDR2Pt2: + case TkCaloLinkMetric::BestByDR2Pt2: drbest = 1.0; dptscale = drMatch_ / tk.floatCaloPtErr(); break; @@ -562,13 +562,13 @@ void PFAlgo3::link_tk2calo(Region &r, std::vector &tk2calo) const { continue; float dr = floatDR(tk, calo), dq; switch (tkCaloLinkMetric_) { - case BestByDR: + case TkCaloLinkMetric::BestByDR: if (dr < drbest) { tk2calo[itk] = ic; drbest = dr; } break; - case BestByDRPt: + case TkCaloLinkMetric::BestByDRPt: dq = dr + std::max(tk.floatPt() - calo.floatPt(), 0.) * dptscale; //if (debug_ && dr < 0.2) printf("PFAlgo3 \t\t\t track %3d (pt %7.2f) vs calo %3d (pt %7.2f): dr %.3f, dq %.3f\n", itk, tk.floatPt(), ic, calo.floatPt(), dr, dq); if (dr < drMatch_ && dq < drbest) { @@ -576,7 +576,7 @@ void PFAlgo3::link_tk2calo(Region &r, std::vector &tk2calo) const { drbest = dq; } break; - case BestByDR2Pt2: + case TkCaloLinkMetric::BestByDR2Pt2: dq = hypot(dr, std::max(tk.floatPt() - calo.floatPt(), 0.) * dptscale); //if (debug_ && dr < 0.2) printf("PFAlgo3 \t\t\t track %3d (pt %7.2f) vs calo %3d (pt %7.2f): dr %.3f, dq %.3f\n", itk, tk.floatPt(), ic, calo.floatPt(), dr, dq); if (dr < drMatch_ && dq < drbest) { diff --git a/L1Trigger/Phase2L1ParticleFlow/src/PUAlgoBase.cc b/L1Trigger/Phase2L1ParticleFlow/src/PUAlgoBase.cc index 05bd650154d49..b1c55079b0aa2 100644 --- a/L1Trigger/Phase2L1ParticleFlow/src/PUAlgoBase.cc +++ b/L1Trigger/Phase2L1ParticleFlow/src/PUAlgoBase.cc @@ -27,10 +27,10 @@ void PUAlgoBase::runChargedPV(Region &r, float z0) const { void PUAlgoBase::doVertexing(std::vector &rs, VertexAlgo algo, float &pvdz) const { int lNBins = int(40. / vtxRes_); - if (algo == TPVtxAlgo) + if (algo == VertexAlgo::TP) lNBins *= 3; std::unique_ptr h_dz(new TH1F("h_dz", "h_dz", lNBins, -20, 20)); - if (algo != ExternalVtxAlgo) { + if (algo != VertexAlgo::External) { for (const Region &r : rs) { for (const PropagatedTrack &p : r.track) { if (rs.size() > 1) { @@ -42,13 +42,13 @@ void PUAlgoBase::doVertexing(std::vector &rs, VertexAlgo algo, float &pv } } switch (algo) { - case ExternalVtxAlgo: + case VertexAlgo::External: break; - case OldVtxAlgo: { + case VertexAlgo::Old: { int imaxbin = h_dz->GetMaximumBin(); pvdz = h_dz->GetXaxis()->GetBinCenter(imaxbin); }; break; - case TPVtxAlgo: { + case VertexAlgo::TP: { float max = 0; int bmax = -1; for (int b = 1; b <= lNBins; ++b) { diff --git a/L1Trigger/Phase2L1ParticleFlow/src/RegionMapper.cc b/L1Trigger/Phase2L1ParticleFlow/src/RegionMapper.cc index 65a5e8c4d400b..d98f6b1b171cb 100644 --- a/L1Trigger/Phase2L1ParticleFlow/src/RegionMapper.cc +++ b/L1Trigger/Phase2L1ParticleFlow/src/RegionMapper.cc @@ -43,15 +43,15 @@ RegionMapper::RegionMapper(const edm::ParameterSet &iConfig) : useRelativeRegion } } } - std::string trackRegionMode = "any"; + std::string trackRegionMode = "TrackAssoMode::any"; if (iConfig.existsAs("trackRegionMode")) trackRegionMode = iConfig.getParameter("trackRegionMode"); if (trackRegionMode == "atVertex") - trackRegionMode_ = atVertex; + trackRegionMode_ = TrackAssoMode::atVertex; else if (trackRegionMode == "atCalo") - trackRegionMode_ = atCalo; + trackRegionMode_ = TrackAssoMode::atCalo; else if (trackRegionMode == "any") - trackRegionMode_ = any; + trackRegionMode_ = TrackAssoMode::any; else throw cms::Exception( "Configuration", @@ -91,13 +91,13 @@ void RegionMapper::addTrack(const l1t::PFTrack &t) { for (Region &r : regions_) { bool inside = true; switch (trackRegionMode_) { - case atVertex: + case TrackAssoMode::atVertex: inside = r.contains(t.eta(), t.phi()); break; - case atCalo: + case TrackAssoMode::atCalo: inside = r.contains(t.caloEta(), t.caloPhi()); break; - case any: + case TrackAssoMode::any: inside = r.contains(t.eta(), t.phi()) || r.contains(t.caloEta(), t.caloPhi()); break; } @@ -189,13 +189,13 @@ std::unique_ptr RegionMapper::fetch(bool puppi, floa for (const PFParticle &p : (puppi ? r.puppi : r.pf)) { bool inside = true; switch (trackRegionMode_) { - case atVertex: + case TrackAssoMode::atVertex: inside = r.fiducialLocal(p.floatVtxEta(), p.floatVtxPhi()); break; - case atCalo: + case TrackAssoMode::atCalo: inside = r.fiducialLocal(p.floatEta(), p.floatPhi()); break; - case any: + case TrackAssoMode::any: inside = r.fiducialLocal(p.floatVtxEta(), p.floatVtxPhi()); break; // WARNING: this may not be the best choice } @@ -270,13 +270,13 @@ std::unique_ptr RegionMapper::fetchTracks(float ptMi continue; bool inside = true; switch (trackRegionMode_) { - case atVertex: + case TrackAssoMode::atVertex: inside = r.fiducialLocal(p.floatVtxEta(), p.floatVtxPhi()); break; - case atCalo: + case TrackAssoMode::atCalo: inside = r.fiducialLocal(p.floatEta(), p.floatPhi()); break; - case any: + case TrackAssoMode::any: inside = r.fiducialLocal(p.floatVtxEta(), p.floatVtxPhi()); break; // WARNING: this may not be the best choice } diff --git a/L1Trigger/Phase2L1ParticleFlow/src/firmware/data.h b/L1Trigger/Phase2L1ParticleFlow/src/firmware/data.h index 395d4c61f707c..c1ccd93ac5812 100644 --- a/L1Trigger/Phase2L1ParticleFlow/src/firmware/data.h +++ b/L1Trigger/Phase2L1ParticleFlow/src/firmware/data.h @@ -126,7 +126,7 @@ inline void clear(HadCaloObj& c) { c.hwEta = 0; c.hwPhi = 0; c.hwEmPt = 0; - c.hwIsEM = 0; + c.hwIsEM = false; } struct EmCaloObj { @@ -152,7 +152,7 @@ inline void clear(TkObj& c) { c.hwEta = 0; c.hwPhi = 0; c.hwZ0 = 0; - c.hwTightQuality = 0; + c.hwTightQuality = false; } struct MuObj { diff --git a/L1Trigger/Phase2L1ParticleFlow/src/ref/pfalgo3_ref.h b/L1Trigger/Phase2L1ParticleFlow/src/ref/pfalgo3_ref.h index d29329699c4f9..43fb37ef40509 100644 --- a/L1Trigger/Phase2L1ParticleFlow/src/ref/pfalgo3_ref.h +++ b/L1Trigger/Phase2L1ParticleFlow/src/ref/pfalgo3_ref.h @@ -28,6 +28,7 @@ struct pfalgo3_config : public pfalgo_config { nALLNEUTRAL(nAllNeutral), dR2MAX_TK_EM(dR2Max_Tk_Em), dR2MAX_EM_CALO(dR2Max_Em_Calo) {} + ~pfalgo3_config() override {} }; void pfalgo3_ref_set_debug(int debug); diff --git a/L1Trigger/Phase2L1ParticleFlow/src/ref/pfalgo_common_ref.h b/L1Trigger/Phase2L1ParticleFlow/src/ref/pfalgo_common_ref.h index 675f46fa2fc2c..87b2b7194697c 100644 --- a/L1Trigger/Phase2L1ParticleFlow/src/ref/pfalgo_common_ref.h +++ b/L1Trigger/Phase2L1ParticleFlow/src/ref/pfalgo_common_ref.h @@ -39,6 +39,8 @@ struct pfalgo_config { dR2MAX_TK_CALO(dR2Max_Tk_Calo), tk_MAXINVPT_LOOSE(tk_MaxInvPt_Loose), tk_MAXINVPT_TIGHT(tk_MaxInvPt_Tight) {} + + virtual ~pfalgo_config() {} }; void pfalgo_mu_ref(const pfalgo_config &cfg, diff --git a/L1Trigger/Phase2L1ParticleFlow/test/testOutputFiles.cpp b/L1Trigger/Phase2L1ParticleFlow/test/testOutputFiles.cpp index 6be399b4e477f..fbd92c4a82221 100644 --- a/L1Trigger/Phase2L1ParticleFlow/test/testOutputFiles.cpp +++ b/L1Trigger/Phase2L1ParticleFlow/test/testOutputFiles.cpp @@ -1,17 +1,17 @@ // STL includes +#include +#include #include -#include -#include -#include -#include -#include #include +#include +#include #include -#include #include +#include +#include +#include #include -#include -#include +#include // ROOT includes #include "TROOT.h" From d01ba2382f609eee89777a40304c3ef03941b419 Mon Sep 17 00:00:00 2001 From: Giovanni Date: Mon, 29 Jun 2020 16:55:21 +0200 Subject: [PATCH 12/13] Even more code review --- .../interface/ParametricResolution.h | 51 +++---------------- .../src/ParametricResolution.cc | 47 +++++++++++++++++ 2 files changed, 53 insertions(+), 45 deletions(-) diff --git a/L1Trigger/Phase2L1ParticleFlow/interface/ParametricResolution.h b/L1Trigger/Phase2L1ParticleFlow/interface/ParametricResolution.h index 82ab1ba6ca886..6079f96807beb 100644 --- a/L1Trigger/Phase2L1ParticleFlow/interface/ParametricResolution.h +++ b/L1Trigger/Phase2L1ParticleFlow/interface/ParametricResolution.h @@ -9,56 +9,17 @@ namespace l1tpf { class ParametricResolution { public: - static std::vector getVFloat(const edm::ParameterSet &cpset, const std::string &name) { - std::vector vd = cpset.getParameter>(name); - return std::vector(vd.begin(), vd.end()); - } + static std::vector getVFloat(const edm::ParameterSet &cpset, const std::string &name); ParametricResolution() {} - ParametricResolution(const edm::ParameterSet &cpset) - : etas(getVFloat(cpset, "etaBins")), offsets(getVFloat(cpset, "offset")), scales(getVFloat(cpset, "scale")) { - if (cpset.existsAs>("ptMin")) { - ptMins = getVFloat(cpset, "ptMin"); - } else { - float ptMin = cpset.existsAs("ptMin") ? cpset.getParameter("ptMin") : 0; - ptMins = std::vector(etas.size(), ptMin); - } - if (cpset.existsAs>("ptMax")) { - ptMaxs = getVFloat(cpset, "ptMax"); - } else { - ptMaxs = std::vector(etas.size(), 1e6); - } - std::string skind = cpset.getParameter("kind"); - if (skind == "track") - kind = Kind::Track; - else if (skind == "calo") - kind = Kind::Calo; - else - throw cms::Exception("Configuration", "Bad kind of resolution: " + skind); - } - float operator()(const float pt, const float abseta) const { - for (unsigned int i = 0, n = etas.size(); i < n; ++i) { - if (pt > ptMaxs[i]) - continue; - if (abseta < etas[i]) { - switch (kind) { - case Kind::Track: - return pt * std::min(1.f, std::hypot(pt * scales[i] * 0.001, offsets[i])); - case Kind::Calo: - return std::min(pt, pt * scales[i] + offsets[i]); - if (pt < ptMins[i]) - return pt * std::min(1, scales[i] + offsets[i] / ptMins[i]); - return std::min(pt, pt * scales[i] + offsets[i]); - } - } - } - return std::min(pt, 0.3 * pt + 7); // saturate to 100% at 10 GeV, and to 30% at high pt - } + ParametricResolution(const edm::ParameterSet &cpset); + + float operator()(const float pt, const float abseta) const; protected: - std::vector etas, offsets, scales, ptMins, ptMaxs; + std::vector etas_, offsets_, scales_, ptMins_, ptMaxs_; enum class Kind { Calo, Track }; - Kind kind; + Kind kind_; }; }; // namespace l1tpf diff --git a/L1Trigger/Phase2L1ParticleFlow/src/ParametricResolution.cc b/L1Trigger/Phase2L1ParticleFlow/src/ParametricResolution.cc index 22d0c9cd26bee..a37c76bf2ca17 100644 --- a/L1Trigger/Phase2L1ParticleFlow/src/ParametricResolution.cc +++ b/L1Trigger/Phase2L1ParticleFlow/src/ParametricResolution.cc @@ -1 +1,48 @@ #include "L1Trigger/Phase2L1ParticleFlow/interface/ParametricResolution.h" + +std::vector l1tpf::ParametricResolution::getVFloat(const edm::ParameterSet &cpset, const std::string &name) { + std::vector vd = cpset.getParameter>(name); + return std::vector(vd.begin(), vd.end()); +} + +l1tpf::ParametricResolution::ParametricResolution(const edm::ParameterSet &cpset) + : etas_(getVFloat(cpset, "etaBins")), offsets_(getVFloat(cpset, "offset")), scales_(getVFloat(cpset, "scale")) { + if (cpset.existsAs>("ptMin")) { + ptMins_ = getVFloat(cpset, "ptMin"); + } else { + float ptMin = cpset.existsAs("ptMin") ? cpset.getParameter("ptMin") : 0; + ptMins_ = std::vector(etas_.size(), ptMin); + } + if (cpset.existsAs>("ptMax")) { + ptMaxs_ = getVFloat(cpset, "ptMax"); + } else { + ptMaxs_ = std::vector(etas_.size(), 1e6); + } + + std::string skind = cpset.getParameter("kind"); + if (skind == "track") + kind_ = Kind::Track; + else if (skind == "calo") + kind_ = Kind::Calo; + else + throw cms::Exception("Configuration", "Bad kind of resolution: " + skind); +} + +float l1tpf::ParametricResolution::operator()(const float pt, const float abseta) const { + for (unsigned int i = 0, n = etas_.size(); i < n; ++i) { + if (pt > ptMaxs_[i]) + continue; + if (abseta < etas_[i]) { + switch (kind_) { + case Kind::Track: + return pt * std::min(1.f, std::hypot(pt * scales_[i] * 0.001, offsets_[i])); + case Kind::Calo: + return std::min(pt, pt * scales_[i] + offsets_[i]); + if (pt < ptMins_[i]) + return pt * std::min(1, scales_[i] + offsets_[i] / ptMins_[i]); + return std::min(pt, pt * scales_[i] + offsets_[i]); + } + } + } + return std::min(pt, 0.3 * pt + 7); // saturate to 100% at 10 GeV, and to 30% at high pt +} From c47db98560ef3995acf306ee2026c44feea9140e Mon Sep 17 00:00:00 2001 From: Giovanni Date: Mon, 29 Jun 2020 21:13:44 +0200 Subject: [PATCH 13/13] printf and more cleanup --- .../interface/PFAlgoBase.h | 10 - .../plugins/L1TPFCaloProducer.cc | 6 +- .../Phase2L1ParticleFlow/src/BitwisePFAlgo.cc | 37 +-- .../Phase2L1ParticleFlow/src/CaloClusterer.cc | 23 +- .../src/LinearizedPuppiAlgo.cc | 7 +- .../Phase2L1ParticleFlow/src/PFAlgo2HGC.cc | 160 ++++++------ L1Trigger/Phase2L1ParticleFlow/src/PFAlgo3.cc | 231 +++++++++--------- .../Phase2L1ParticleFlow/src/PuppiAlgo.cc | 19 +- .../Phase2L1ParticleFlow/src/corrector.cc | 5 +- .../Phase2L1ParticleFlow/src/dbgPrintf.h | 11 + 10 files changed, 260 insertions(+), 249 deletions(-) create mode 100644 L1Trigger/Phase2L1ParticleFlow/src/dbgPrintf.h diff --git a/L1Trigger/Phase2L1ParticleFlow/interface/PFAlgoBase.h b/L1Trigger/Phase2L1ParticleFlow/interface/PFAlgoBase.h index dbc8e7e844bd2..f0286a221222f 100644 --- a/L1Trigger/Phase2L1ParticleFlow/interface/PFAlgoBase.h +++ b/L1Trigger/Phase2L1ParticleFlow/interface/PFAlgoBase.h @@ -19,16 +19,6 @@ namespace l1tpf_impl { void initRegion(Region &r) const; PFParticle &addTrackToPF(Region &r, const PropagatedTrack &tk) const { return addTrackToPF(r.pf, tk); } PFParticle &addCaloToPF(Region &r, const CaloCluster &calo) const { return addCaloToPF(r.pf, calo); } - //PFParticle & discardTrack(Region &r, const PropagatedTrack &tk, int status) const { - // PFParticle & ret = addTrackToPF(r.pfdiscarded, tk); - // ret.hwStatus = status; - // return ret; - //} - //PFParticle & discardCalo(Region &r, const CaloCluster &calo, int status) const { - // PFParticle & ret = addCaloToPF(r.pfdiscarded, calo); - // ret.hwStatus = status; - // return ret; - //} PFParticle &addTrackToPF(std::vector &pfs, const PropagatedTrack &tk) const; PFParticle &addCaloToPF(std::vector &pfs, const CaloCluster &calo) const; }; diff --git a/L1Trigger/Phase2L1ParticleFlow/plugins/L1TPFCaloProducer.cc b/L1Trigger/Phase2L1ParticleFlow/plugins/L1TPFCaloProducer.cc index bcb1924754b05..bcf7806c1b0b0 100644 --- a/L1Trigger/Phase2L1ParticleFlow/plugins/L1TPFCaloProducer.cc +++ b/L1Trigger/Phase2L1ParticleFlow/plugins/L1TPFCaloProducer.cc @@ -246,9 +246,9 @@ void L1TPFCaloProducer::readHcalDigis_(edm::Event &iEvent, const edm::EventSetup continue; float towerEta = l1t::CaloTools::towerEta(id.ieta()); float towerPhi = l1t::CaloTools::towerPhi(id.ieta(), id.iphi()); - if (!hcalDigisBarrel_ && std::abs(towerEta) < 2) + if (!hcalDigisBarrel_ && std::abs(towerEta) < 2) // |eta| < 2 => barrel (there's no HE in Phase2) continue; - if (!hcalDigisHF_ && std::abs(towerEta) > 2) + if (!hcalDigisHF_ && std::abs(towerEta) > 2) // |eta| > 2 => HF continue; if (debug_) edm::LogWarning("L1TPFCaloProducer") @@ -263,7 +263,7 @@ void L1TPFCaloProducer::readPhase2BarrelCaloTowers_(edm::Event &event, const edm for (const auto &token : phase2barrelTowers_) { event.getByToken(token, towers); for (const auto &t : *towers) { - // sanity check from https://github.com/cms-l1t-offline/cmssw/blob/phase2-l1t-integration-CMSSW_10_5_0_pre1/L1Trigger/L1CaloTrigger/plugins/L1TowerCalibrator.cc#L248-L252 + // sanity check from https://github.com/cms-l1t-offline/cmssw/blob/l1t-phase2-v3.0.2/L1Trigger/L1CaloTrigger/plugins/L1TowerCalibrator.cc#L259-L263 if ((int)t.towerIEta() == -1016 && (int)t.towerIPhi() == -962) continue; if (debug_ && (t.hcalTowerEt() > 0 || t.ecalTowerEt() > 0)) { diff --git a/L1Trigger/Phase2L1ParticleFlow/src/BitwisePFAlgo.cc b/L1Trigger/Phase2L1ParticleFlow/src/BitwisePFAlgo.cc index 16e39f667bcaf..570d899939449 100644 --- a/L1Trigger/Phase2L1ParticleFlow/src/BitwisePFAlgo.cc +++ b/L1Trigger/Phase2L1ParticleFlow/src/BitwisePFAlgo.cc @@ -1,5 +1,6 @@ #include "L1Trigger/Phase2L1ParticleFlow/interface/BitwisePFAlgo.h" #include "FWCore/Utilities/interface/Exception.h" +#include "L1Trigger/Phase2L1ParticleFlow/src/dbgPrintf.h" //#define REG_HGCal #include "ref/pfalgo2hgc_ref.h" @@ -62,7 +63,7 @@ void BitwisePFAlgo::runPF(Region &r) const { dpf2fw::convert(config_->nMU, r.muon, mu.get()); if (debug_) { - printf( + dbgPrintf( "BitwisePF\nBitwisePF region eta [ %+5.2f , %+5.2f ], phi [ %+5.2f , %+5.2f ], fiducial eta [ %+5.2f , %+5.2f " "], phi [ %+5.2f , %+5.2f ], algo = %d\n", r.etaMin - r.etaExtra, @@ -74,14 +75,14 @@ void BitwisePFAlgo::runPF(Region &r) const { r.phiCenter - r.phiHalfWidth, r.phiCenter + r.phiHalfWidth, static_cast(algo_)); - printf("BitwisePF \t N(track) %3lu N(em) %3lu N(calo) %3lu N(mu) %3lu\n", - r.track.size(), - r.emcalo.size(), - r.calo.size(), - r.muon.size()); + dbgPrintf("BitwisePF \t N(track) %3lu N(em) %3lu N(calo) %3lu N(mu) %3lu\n", + r.track.size(), + r.emcalo.size(), + r.calo.size(), + r.muon.size()); for (int itk = 0, ntk = r.track.size(); itk < ntk; ++itk) { const auto &tk = r.track[itk]; - printf( + dbgPrintf( "BitwisePF \t track %3d: pt %7.2f +- %5.2f vtx eta %+5.2f vtx phi %+5.2f calo eta %+5.2f calo phi %+5.2f " " fid %1d calo ptErr %7.2f stubs %2d chi2 %7.1f\n", itk, @@ -98,7 +99,7 @@ void BitwisePFAlgo::runPF(Region &r) const { } for (int iem = 0, nem = r.emcalo.size(); iem < nem; ++iem) { const auto &em = r.emcalo[iem]; - printf( + dbgPrintf( "BitwisePF \t EM %3d: pt %7.2f +- %5.2f vtx eta %+5.2f vtx phi %+5.2f calo eta %+5.2f calo phi %+5.2f " " fid %1d calo ptErr %7.2f\n", iem, @@ -113,7 +114,7 @@ void BitwisePFAlgo::runPF(Region &r) const { } for (int ic = 0, nc = r.calo.size(); ic < nc; ++ic) { auto &calo = r.calo[ic]; - printf( + dbgPrintf( "BitwisePF \t calo %3d: pt %7.2f +- %5.2f vtx eta %+5.2f vtx phi %+5.2f calo eta %+5.2f calo phi %+5.2f " " fid %1d calo ptErr %7.2f em pt %7.2f \n", ic, @@ -129,7 +130,7 @@ void BitwisePFAlgo::runPF(Region &r) const { } for (int im = 0, nm = r.muon.size(); im < nm; ++im) { auto &mu = r.muon[im]; - printf( + dbgPrintf( "BitwisePF \t muon %3d: pt %7.2f vtx eta %+5.2f vtx phi %+5.2f calo eta %+5.2f calo phi %+5.2f " " fid %1d \n", im, @@ -170,16 +171,16 @@ void BitwisePFAlgo::runPF(Region &r) const { }; if (debug_) { - printf("BitwisePF \t Output N(ch) %3u/%3u N(nh) %3u/%3u N(ph) %3u/%u [all/fiducial]\n", - r.nOutput(l1tpf_impl::Region::charged_type, false, false), - r.nOutput(l1tpf_impl::Region::charged_type, false, true), - r.nOutput(l1tpf_impl::Region::neutral_hadron_type, false, false), - r.nOutput(l1tpf_impl::Region::neutral_hadron_type, false, true), - r.nOutput(l1tpf_impl::Region::photon_type, false, false), - r.nOutput(l1tpf_impl::Region::photon_type, false, true)); + dbgPrintf("BitwisePF \t Output N(ch) %3u/%3u N(nh) %3u/%3u N(ph) %3u/%u [all/fiducial]\n", + r.nOutput(l1tpf_impl::Region::charged_type, false, false), + r.nOutput(l1tpf_impl::Region::charged_type, false, true), + r.nOutput(l1tpf_impl::Region::neutral_hadron_type, false, false), + r.nOutput(l1tpf_impl::Region::neutral_hadron_type, false, true), + r.nOutput(l1tpf_impl::Region::photon_type, false, false), + r.nOutput(l1tpf_impl::Region::photon_type, false, true)); for (int ipf = 0, npf = r.pf.size(); ipf < npf; ++ipf) { const auto &pf = r.pf[ipf]; - printf( + dbgPrintf( "BitwisePF \t pf %3d: pt %7.2f pid %d vtx eta %+5.2f vtx phi %+5.2f calo eta %+5.2f calo phi %+5.2f " "fid %1d\n", ipf, diff --git a/L1Trigger/Phase2L1ParticleFlow/src/CaloClusterer.cc b/L1Trigger/Phase2L1ParticleFlow/src/CaloClusterer.cc index 4bba7d10506e0..7696909ce64c2 100644 --- a/L1Trigger/Phase2L1ParticleFlow/src/CaloClusterer.cc +++ b/L1Trigger/Phase2L1ParticleFlow/src/CaloClusterer.cc @@ -63,6 +63,7 @@ l1tpf_calo::Phase1GridBase::Phase1GridBase( } } //// consistency check 1: check that find_cell works + //// uncomment to check that there's no holes in the grid //for (float teta = 0; teta <= 5.0; teta += 0.02) { // for (float tphi = -M_PI; tphi <= M_PI; tphi += 0.02) { // find_cell(+teta, tphi); @@ -81,9 +82,8 @@ int l1tpf_calo::Phase1GridBase::find_cell(float eta, float phi) const { ieta = nEta_; if (eta < 0) ieta = -ieta; - if (phi > 2 * M_PI) - phi -= 2 * M_PI; - if (phi < 0) + phi = reco::reduceRange(phi); // [-PI, PI] + if (phi < 0) // then bring to [0, 2*PI] phi += 2 * M_PI; int iphi = std::floor(phi * nPhi_ / (2 * M_PI)); if (phi >= 2 * M_PI) @@ -94,6 +94,7 @@ int l1tpf_calo::Phase1GridBase::find_cell(float eta, float phi) const { else if (std::abs(ieta) >= ietaCoarse_) iphi -= (iphi % 2); iphi += 1; + //// uncomment to check validity of derived coordinates //if (!valid_ieta_iphi(ieta,iphi)) { // printf("Error in finding cell for eta %+7.4f phi %+7.4f, got ieta = %+3d iphi %2d which is not valid\n", // eta, phi, ieta, iphi); @@ -102,6 +103,7 @@ int l1tpf_calo::Phase1GridBase::find_cell(float eta, float phi) const { int icell = ifind_cell(ieta, iphi); assert(icell != -1); + //// uncomment to check that the point is really in the cell //if (std::abs(eta - eta_[icell]) > 0.501*etaWidth_[icell] || std::abs(deltaPhi(phi, phi_[icell])) > 0.501*phiWidth_[icell]) { // printf("Mismatch in finding cell for eta %+7.4f phi %+7.4f, got ieta = %+3d iphi %2d which has eta %+7.4f +- %.4f phi %+7.4f +- %.4f ; deta = %+7.4f dphi = %+7.4f\n", // eta, phi, ieta, iphi, eta_[icell], etaWidth_[icell], phi_[icell], phiWidth_[icell], eta - eta_[icell], deltaPhi(phi, phi_[icell])); @@ -214,10 +216,12 @@ void l1tpf_calo::SingleCaloClusterer::run() { for (i = 0; i < ncells; ++i) { if (rawet_[i] > seedEt_) { precluster_[i].ptLocalMax = rawet_[i]; + //// uncommment code below for debugging the clustering //printf(" candidate precluster pt %7.2f at %4d (ieta %+3d iphi %2d)\n", rawet_[i], i, grid_->ieta(i), grid_->iphi(i)); for (int ineigh = 0; ineigh <= 3; ++ineigh) { if (rawet_.neigh(i, ineigh) > rawet_[i]) precluster_[i].ptLocalMax = 0; + //// uncommment code below for debugging the clustering //int ncell = grid_->neighbour(i,ineigh); //if (ncell == -1) printf(" \t neigh %d is null\n", ineigh); //else printf(" \t neigh %d at %4d (ieta %+3d iphi %2d) has pt %7.2f: comparison %1d \n", ineigh, ncell, grid_->ieta(ncell), grid_->iphi(ncell), rawet_[ncell], precluster_[i].ptLocalMax > 0); @@ -225,6 +229,7 @@ void l1tpf_calo::SingleCaloClusterer::run() { for (int ineigh = 4; ineigh < 8; ++ineigh) { if (rawet_.neigh(i, ineigh) >= rawet_[i]) precluster_[i].ptLocalMax = 0; + //// uncommment code below for debugging the clustering //int ncell = grid_->neighbour(i,ineigh); //if (ncell == -1) printf(" \t neigh %d is null\n", ineigh); //else printf(" \t neigh %d at %4d (ieta %+3d iphi %2d) has pt %7.2f: comparison %1d \n", ineigh, ncell, grid_->ieta(ncell), grid_->iphi(ncell), rawet_[ncell], precluster_[i].ptLocalMax > 0); @@ -435,7 +440,7 @@ std::unique_ptr l1tpf_calo::SimpleCaloLinkerBase::fetc if (cluster.et > 0) { bool photon = (cluster.hcal_et < hoeCut_ * cluster.ecal_et); if (photon && noEmInHGC_) { - if (std::abs(cluster.eta) > 1.5 && std::abs(cluster.eta) < 3.0) { + if (std::abs(cluster.eta) > 1.5 && std::abs(cluster.eta) < 3.0) { // 1.5-3 = eta range of HGCal continue; } } @@ -516,10 +521,7 @@ void l1tpf_calo::SimpleCaloLinker::run() { cluster.eta = ecal.eta * wecal + hcal.eta * whcal; cluster.phi = ecal.phi * wecal + hcal.phi * whcal; // wrap around phi - if (cluster.phi > M_PI) - cluster.phi -= 2 * M_PI; - if (cluster.phi < -M_PI) - cluster.phi += 2 * M_PI; + cluster.phi = reco::reduceRange(cluster.phi); cluster.constituents.emplace_back(-i - 1, 1); } } else { @@ -547,10 +549,7 @@ void l1tpf_calo::SimpleCaloLinker::run() { cluster.eta = hcal.eta + avg_eta / cluster.et; cluster.phi = hcal.phi + avg_phi / cluster.et; // wrap around phi - if (cluster.phi > M_PI) - cluster.phi -= 2 * M_PI; - if (cluster.phi < -M_PI) - cluster.phi += 2 * M_PI; + cluster.phi = reco::reduceRange(cluster.phi); } } if (cluster.et > 0) { diff --git a/L1Trigger/Phase2L1ParticleFlow/src/LinearizedPuppiAlgo.cc b/L1Trigger/Phase2L1ParticleFlow/src/LinearizedPuppiAlgo.cc index c7005abd4f2d1..463a114b53f6e 100644 --- a/L1Trigger/Phase2L1ParticleFlow/src/LinearizedPuppiAlgo.cc +++ b/L1Trigger/Phase2L1ParticleFlow/src/LinearizedPuppiAlgo.cc @@ -2,6 +2,7 @@ #include "DataFormats/L1TParticleFlow/interface/PFCandidate.h" #include "FWCore/Utilities/interface/Exception.h" #include "DataFormats/Math/interface/deltaR.h" +#include "L1Trigger/Phase2L1ParticleFlow/src/dbgPrintf.h" #include "Math/ProbFunc.h" @@ -76,7 +77,7 @@ void LinearizedPuppiAlgo::computePuppiWeights(Region &r, const std::vector &alphaC, const std::vector &alphaF) const { if (debug_ && npu > 0) - printf("LinPup\t npu estimate %7.2f --> log(npu/200) = %+6.2f \n", npu, std::log(npu / 200.f)); + dbgPrintf("LinPup\t npu estimate %7.2f --> log(npu/200) = %+6.2f \n", npu, std::log(npu / 200.f)); for (unsigned int ip = 0, np = r.pf.size(); ip < np; ++ip) { PFParticle &p = r.pf[ip]; // charged @@ -84,7 +85,7 @@ void LinearizedPuppiAlgo::computePuppiWeights(Region &r, p.hwId == l1t::PFCandidate::Muon) { p.setPuppiW(p.chargedPV || p.hwId == l1t::PFCandidate::Muon ? 1.0 : 0); if (debug_ == 2) - printf( + dbgPrintf( "LinPup\t charged id %1d pt %7.2f eta %+5.2f phi %+5.2f fromPV %1d " " --> puppi weight %.3f puppi pt %7.2f \n", p.hwId, @@ -123,7 +124,7 @@ void LinearizedPuppiAlgo::computePuppiWeights(Region &r, float x2 = x2a + x2pt - x2prior; p.setPuppiW(1.0 / (1.0 + std::exp(-x2))); if (debug_ == 1 || debug_ == 2 || debug_ == int(10 + ietaBin)) - printf( + dbgPrintf( "LinPup\t neutral id %1d pt %7.2f eta %+5.2f phi %+5.2f alpha %+6.2f x2a %+5.2f x2pt %+6.2f x2prior " "%+6.2f --> x2 %+6.2f --> puppi weight %.3f puppi pt %7.2f \n", p.hwId, diff --git a/L1Trigger/Phase2L1ParticleFlow/src/PFAlgo2HGC.cc b/L1Trigger/Phase2L1ParticleFlow/src/PFAlgo2HGC.cc index 840a476a05fc0..e5984288e9c4a 100644 --- a/L1Trigger/Phase2L1ParticleFlow/src/PFAlgo2HGC.cc +++ b/L1Trigger/Phase2L1ParticleFlow/src/PFAlgo2HGC.cc @@ -1,4 +1,5 @@ #include "L1Trigger/Phase2L1ParticleFlow/interface/PFAlgo2HGC.h" +#include "L1Trigger/Phase2L1ParticleFlow/src/dbgPrintf.h" #include "DataFormats/L1TParticleFlow/interface/PFCandidate.h" @@ -64,7 +65,7 @@ void PFAlgo2HGC::runPF(Region &r) const { /// ------------- first step (can all go in parallel) ---------------- if (debug_) { - printf( + dbgPrintf( "PFAlgo2HGC\nPFAlgo2HGC region eta [ %+5.2f , %+5.2f ], phi [ %+5.2f , %+5.2f ], fiducial eta [ %+5.2f , " "%+5.2f ], phi [ %+5.2f , %+5.2f ]\n", r.etaMin - r.etaExtra, @@ -75,10 +76,11 @@ void PFAlgo2HGC::runPF(Region &r) const { r.etaMax, r.phiCenter - r.phiHalfWidth, r.phiCenter + r.phiHalfWidth); - printf("PFAlgo2HGC \t N(track) %3lu N(calo) %3lu N(mu) %3lu\n", r.track.size(), r.calo.size(), r.muon.size()); + dbgPrintf( + "PFAlgo2HGC \t N(track) %3lu N(calo) %3lu N(mu) %3lu\n", r.track.size(), r.calo.size(), r.muon.size()); for (int itk = 0, ntk = r.track.size(); itk < ntk; ++itk) { const auto &tk = r.track[itk]; - printf( + dbgPrintf( "PFAlgo2HGC \t track %3d: pt %7.2f +- %5.2f vtx eta %+5.2f vtx phi %+5.2f calo eta %+5.2f calo phi " "%+5.2f fid %1d calo ptErr %7.2f stubs %2d chi2 %7.1f\n", itk, @@ -95,7 +97,7 @@ void PFAlgo2HGC::runPF(Region &r) const { } for (int ic = 0, nc = r.calo.size(); ic < nc; ++ic) { auto &calo = r.calo[ic]; - printf( + dbgPrintf( "PFAlgo2HGC \t calo %3d: pt %7.2f +- %5.2f vtx eta %+5.2f vtx phi %+5.2f calo eta %+5.2f calo phi " "%+5.2f fid %1d calo ptErr %7.2f em pt %7.2f isEM %1d \n", ic, @@ -112,7 +114,7 @@ void PFAlgo2HGC::runPF(Region &r) const { } for (int im = 0, nm = r.muon.size(); im < nm; ++im) { auto &mu = r.muon[im]; - printf( + dbgPrintf( "PFAlgo2HGC \t muon %3d: pt %7.2f vtx eta %+5.2f vtx phi %+5.2f calo eta %+5.2f calo phi " "%+5.2f fid %1d\n", im, @@ -171,11 +173,11 @@ void PFAlgo2HGC::link_tk2mu(Region &r, std::vector &tk2mu, std::vector for (int imu = 0, nmu = r.muon.size(); imu < nmu; ++imu) { const auto &mu = r.muon[imu]; if (debug_) - printf("PFAlgo2HGC \t muon %3d (pt %7.2f, eta %+5.2f, phi %+5.2f) \n", - imu, - mu.floatPt(), - mu.floatEta(), - mu.floatPhi()); + dbgPrintf("PFAlgo2HGC \t muon %3d (pt %7.2f, eta %+5.2f, phi %+5.2f) \n", + imu, + mu.floatPt(), + mu.floatEta(), + mu.floatPhi()); float minDistance = 9e9; switch (muMatchMode_) { case MuMatchMode::BoxBestByPtRatio: @@ -213,7 +215,7 @@ void PFAlgo2HGC::link_tk2mu(Region &r, std::vector &tk2mu, std::vector break; } if (debug_ && dr < 0.4) { - printf( + dbgPrintf( "PFAlgo2HGC \t\t possible match with track %3d (pt %7.2f, caloeta %+5.2f, calophi %+5.2f, dr %.2f, eta " "%+5.2f, phi %+5.2f, dr %.2f): angular %1d, distance %.3f (vs %.3f)\n", itk, @@ -237,13 +239,13 @@ void PFAlgo2HGC::link_tk2mu(Region &r, std::vector &tk2mu, std::vector } } if (debug_ && imatch > -1) - printf("PFAlgo2HGC \t muon %3d (pt %7.2f) linked to track %3d (pt %7.2f)\n", - imu, - mu.floatPt(), - imatch, - r.track[imatch].floatPt()); + dbgPrintf("PFAlgo2HGC \t muon %3d (pt %7.2f) linked to track %3d (pt %7.2f)\n", + imu, + mu.floatPt(), + imatch, + r.track[imatch].floatPt()); if (debug_ && imatch == -1) - printf("PFAlgo2HGC \t muon %3d (pt %7.2f) not linked to any track\n", imu, mu.floatPt()); + dbgPrintf("PFAlgo2HGC \t muon %3d (pt %7.2f) not linked to any track\n", imu, mu.floatPt()); mu2tk[imu] = imatch; if (imatch > -1) { tk2mu[imatch] = imu; @@ -274,7 +276,8 @@ void PFAlgo2HGC::link_tk2calo(Region &r, std::vector &tk2calo) const { } float minCaloPt = tk.floatPt() - ptMatchLow_ * tk.floatCaloPtErr(); if (debug_) - printf("PFAlgo2HGC \t track %3d (pt %7.2f) to be matched to calo, min pT %7.2f\n", itk, tk.floatPt(), minCaloPt); + dbgPrintf( + "PFAlgo2HGC \t track %3d (pt %7.2f) to be matched to calo, min pT %7.2f\n", itk, tk.floatPt(), minCaloPt); for (int ic = 0, nc = r.calo.size(); ic < nc; ++ic) { auto &calo = r.calo[ic]; if (calo.used || calo.floatPt() <= minCaloPt) @@ -290,13 +293,13 @@ void PFAlgo2HGC::link_tk2calo(Region &r, std::vector &tk2calo) const { case TkCaloLinkMetric::BestByDRPt: dq = dr + std::max(tk.floatPt() - calo.floatPt(), 0.) * dptscale; if (debug_ > 2 && dr < 0.3) - printf("PFAlgo2HGC \t\t\t track %3d (pt %7.2f) vs calo %3d (pt %7.2f): dr %.3f, dq %.3f\n", - itk, - tk.floatPt(), - ic, - calo.floatPt(), - dr, - dq); + dbgPrintf("PFAlgo2HGC \t\t\t track %3d (pt %7.2f) vs calo %3d (pt %7.2f): dr %.3f, dq %.3f\n", + itk, + tk.floatPt(), + ic, + calo.floatPt(), + dr, + dq); if (dr < drMatch_ && dq < drbest) { tk2calo[itk] = ic; drbest = dq; @@ -305,13 +308,13 @@ void PFAlgo2HGC::link_tk2calo(Region &r, std::vector &tk2calo) const { case TkCaloLinkMetric::BestByDR2Pt2: dq = hypot(dr, std::max(tk.floatPt() - calo.floatPt(), 0.) * dptscale); if (debug_ > 2 && dr < 0.3) - printf("PFAlgo2HGC \t\t\t track %3d (pt %7.2f) vs calo %3d (pt %7.2f): dr %.3f, dq %.3f\n", - itk, - tk.floatPt(), - ic, - calo.floatPt(), - dr, - dq); + dbgPrintf("PFAlgo2HGC \t\t\t track %3d (pt %7.2f) vs calo %3d (pt %7.2f): dr %.3f, dq %.3f\n", + itk, + tk.floatPt(), + ic, + calo.floatPt(), + dr, + dq); if (dr < drMatch_ && dq < drbest) { tk2calo[itk] = ic; drbest = dq; @@ -320,13 +323,13 @@ void PFAlgo2HGC::link_tk2calo(Region &r, std::vector &tk2calo) const { } } if (debug_ && tk2calo[itk] != -1) - printf("PFAlgo2HGC \t track %3d (pt %7.2f) matches to calo %3d (pt %7.2f) with dist %.3f (dr %.3f)\n", - itk, - tk.floatPt(), - tk2calo[itk], - r.calo[tk2calo[itk]].floatPt(), - drbest, - floatDR(tk, r.calo[tk2calo[itk]])); + dbgPrintf("PFAlgo2HGC \t track %3d (pt %7.2f) matches to calo %3d (pt %7.2f) with dist %.3f (dr %.3f)\n", + itk, + tk.floatPt(), + tk2calo[itk], + r.calo[tk2calo[itk]].floatPt(), + drbest, + floatDR(tk, r.calo[tk2calo[itk]])); // now we re-do this for debugging sake, it may be done for real later if (debug_ && tk2calo[itk] == -1) { int ibest = -1; @@ -342,7 +345,7 @@ void PFAlgo2HGC::link_tk2calo(Region &r, std::vector &tk2calo) const { } } if (ibest != -1) - printf( + dbgPrintf( "PFAlgo2HGC \t track %3d (pt %7.2f) would match to calo %3d (pt %7.2f) with dr %.3f if the pt min and dr " "requirement had been relaxed\n", itk, @@ -390,13 +393,14 @@ void PFAlgo2HGC::unlinkedtk_algo(Region &r, const std::vector &tk2calo) con : maxInvisiblePt_; if (tk.floatPt() < maxPt) { if (debug_) - printf("PFAlgo2HGC \t track %3d (pt %7.2f) not matched to calo, kept as charged hadron\n", itk, tk.floatPt()); + dbgPrintf( + "PFAlgo2HGC \t track %3d (pt %7.2f) not matched to calo, kept as charged hadron\n", itk, tk.floatPt()); auto &p = addTrackToPF(r, tk); p.hwStatus = GoodTK_NoCalo; tk.used = true; } else { if (debug_) - printf("PFAlgo2HGC \t track %3d (pt %7.2f) not matched to calo, dropped\n", itk, tk.floatPt()); + dbgPrintf("PFAlgo2HGC \t track %3d (pt %7.2f) not matched to calo, dropped\n", itk, tk.floatPt()); } } } @@ -422,7 +426,7 @@ void PFAlgo2HGC::calo_relink(Region &r, continue; float dr = floatDR(calo, calo2); //// uncomment below for more verbose debugging - //if (debug_ && dr < 0.5) printf("PFAlgo2HGC \t calo %3d (pt %7.2f) with no tracks is at dr %.3f from calo %3d with pt %7.2f (sum tk pt %7.2f), track excess %7.2f +- %7.2f\n", ic, calo.floatPt(), dr, ic2, calo2.floatPt(), calo2sumtkpt[ic2], calo2sumtkpt[ic2] - calo2.floatPt(), useTrackCaloSigma_ ? calo2sumtkpterr[ic2] : calo2.floatPtErr()); + //if (debug_ && dr < 0.5) dbgPrintf("PFAlgo2HGC \t calo %3d (pt %7.2f) with no tracks is at dr %.3f from calo %3d with pt %7.2f (sum tk pt %7.2f), track excess %7.2f +- %7.2f\n", ic, calo.floatPt(), dr, ic2, calo2.floatPt(), calo2sumtkpt[ic2], calo2sumtkpt[ic2] - calo2.floatPt(), useTrackCaloSigma_ ? calo2sumtkpterr[ic2] : calo2.floatPtErr()); if (dr < drbest) { float ptdiff = calo2sumtkpt[ic2] - calo2.floatPt() + (useTrackCaloSigma_ ? calo2sumtkpterr[ic2] : calo2.floatPtErr()); @@ -435,7 +439,7 @@ void PFAlgo2HGC::calo_relink(Region &r, if (i2best != -1) { const auto &calo2 = r.calo[i2best]; if (debug_) - printf( + dbgPrintf( "PFAlgo2HGC \t calo %3d (pt %7.2f) with no tracks matched within dr %.3f with calo %3d with pt %7.2f (sum " "tk pt %7.2f), track excess %7.2f +- %7.2f\n", ic, @@ -455,11 +459,11 @@ void PFAlgo2HGC::calo_relink(Region &r, if (addtopt[ic]) { auto &calo = r.calo[ic]; if (debug_) - printf("PFAlgo2HGC \t calo %3d (pt %7.2f, sum tk pt %7.2f) is increased to pt %7.2f after merging\n", - ic, - calo.floatPt(), - calo2sumtkpt[ic], - calo.floatPt() + addtopt[ic]); + dbgPrintf("PFAlgo2HGC \t calo %3d (pt %7.2f, sum tk pt %7.2f) is increased to pt %7.2f after merging\n", + ic, + calo.floatPt(), + calo2sumtkpt[ic], + calo.floatPt() + addtopt[ic]); calo.setFloatPt(calo.floatPt() + addtopt[ic]); } } @@ -479,7 +483,7 @@ void PFAlgo2HGC::linkedcalo_algo(Region &r, float ptdiff = calo.floatPt() - calo2sumtkpt[ic]; float pterr = useTrackCaloSigma_ ? calo2sumtkpterr[ic] : calo.floatPtErr(); if (debug_) - printf( + dbgPrintf( "PFAlgo2HGC \t calo %3d (pt %7.2f +- %7.2f, empt %7.2f) has %2d tracks (sumpt %7.2f, sumpterr %7.2f), ptdif " "%7.2f +- %7.2f\n", ic, @@ -496,7 +500,7 @@ void PFAlgo2HGC::linkedcalo_algo(Region &r, if (calo.floatEmPt() > 1) { float emptdiff = std::min(ptdiff, calo.floatEmPt()); if (debug_) - printf( + dbgPrintf( "PFAlgo2HGC \t calo %3d (pt %7.2f, empt %7.2f) ---> make photon with pt %7.2f, reduce ptdiff to " "%7.2f +- %7.2f\n", ic, @@ -512,21 +516,21 @@ void PFAlgo2HGC::linkedcalo_algo(Region &r, } if (ptdiff > 2) { if (debug_) - printf("PFAlgo2HGC \t calo %3d (pt %7.2f, empt %7.2f) ---> make also neutral hadron with pt %7.2f\n", - ic, - calo.floatPt(), - calo.floatEmPt(), - ptdiff); + dbgPrintf("PFAlgo2HGC \t calo %3d (pt %7.2f, empt %7.2f) ---> make also neutral hadron with pt %7.2f\n", + ic, + calo.floatPt(), + calo.floatEmPt(), + ptdiff); auto &p = addCaloToPF(r, calo); p.setFloatPt(ptdiff); p.hwId = l1t::PFCandidate::NeutralHadron; } } else { if (debug_) - printf("PFAlgo2HGC \t calo %3d (pt %7.2f) ---> promoted to neutral with pt %7.2f\n", - ic, - calo.floatPt(), - ptdiff); + dbgPrintf("PFAlgo2HGC \t calo %3d (pt %7.2f) ---> promoted to neutral with pt %7.2f\n", + ic, + calo.floatPt(), + ptdiff); auto &p = addCaloToPF(r, calo); p.setFloatPt(ptdiff); calo.hwFlags = 0; @@ -535,22 +539,22 @@ void PFAlgo2HGC::linkedcalo_algo(Region &r, // nothing to do (weighted average happens when we process the tracks) calo.hwFlags = 1; if (debug_) - printf( + dbgPrintf( "PFAlgo2HGC \t calo %3d (pt %7.2f) ---> to be deleted, will use tracks instead\n", ic, calo.floatPt()); } else { // tracks overshoot, rescale to tracks to calo calo2alpha[ic] = rescaleTracks_ ? calo.floatPt() / calo2sumtkpt[ic] : 1.0; calo.hwFlags = 2; if (debug_ && rescaleTracks_) - printf("PFAlgo2HGC \t calo %3d (pt %7.2f) ---> tracks overshoot and will be scaled down by %.4f\n", - ic, - calo.floatPt(), - calo2alpha[ic]); + dbgPrintf("PFAlgo2HGC \t calo %3d (pt %7.2f) ---> tracks overshoot and will be scaled down by %.4f\n", + ic, + calo.floatPt(), + calo2alpha[ic]); if (debug_ && !rescaleTracks_) - printf("PFAlgo2HGC \t calo %3d (pt %7.2f) ---> tracks overshoot by %.4f\n", - ic, - calo.floatPt(), - calo2sumtkpt[ic] / calo.floatPt()); + dbgPrintf("PFAlgo2HGC \t calo %3d (pt %7.2f) ---> tracks overshoot by %.4f\n", + ic, + calo.floatPt(), + calo2sumtkpt[ic] / calo.floatPt()); } calo.used = true; } @@ -584,7 +588,7 @@ void PFAlgo2HGC::linkedtk_algo(Region &r, } p.setFloatPt(ptavg); if (debug_) - printf( + dbgPrintf( "PFAlgo2HGC \t track %3d (pt %7.2f +- %7.2f) combined with calo %3d (pt %7.2f +- %7.2f (from tk) " "yielding candidate of pt %7.2f\n", itk, @@ -597,18 +601,18 @@ void PFAlgo2HGC::linkedtk_algo(Region &r, } else { p.hwStatus = GoodTK_Calo_TkPt; if (debug_) - printf("PFAlgo2HGC \t track %3d (pt %7.2f) linked to calo %3d promoted to %s\n", - itk, - tk.floatPt(), - tk2calo[itk], - (p.hwId == l1t::PFCandidate::Electron ? "electron" : "charged hadron")); + dbgPrintf("PFAlgo2HGC \t track %3d (pt %7.2f) linked to calo %3d promoted to %s\n", + itk, + tk.floatPt(), + tk2calo[itk], + (p.hwId == l1t::PFCandidate::Electron ? "electron" : "charged hadron")); } } else if (calo.hwFlags == 2) { // must rescale p.setFloatPt(tk.floatPt() * calo2alpha[tk2calo[itk]]); p.hwStatus = GoodTk_Calo_CaloPt; if (debug_) - printf( + dbgPrintf( "PFAlgo2HGC \t track %3d (pt %7.2f, stubs %2d chi2 %7.1f) linked to calo %3d promoted to %s with pt %7.2f " "after maybe rescaling\n", itk, @@ -628,7 +632,7 @@ void PFAlgo2HGC::unlinkedcalo_algo(Region &r) const { if (!r.calo[ic].used) { addCaloToPF(r, r.calo[ic]); if (debug_) - printf("PFAlgo2HGC \t calo %3d (pt %7.2f) not linked, promoted to neutral\n", ic, r.calo[ic].floatPt()); + dbgPrintf("PFAlgo2HGC \t calo %3d (pt %7.2f) not linked, promoted to neutral\n", ic, r.calo[ic].floatPt()); } } } @@ -640,7 +644,7 @@ void PFAlgo2HGC::save_muons(Region &r, const std::vector &tk2mu) const { auto &p = addTrackToPF(r, r.track[itk]); p.muonsrc = r.muon[tk2mu[itk]].src; if (debug_) - printf("PFAlgo2HGC \t track %3d (pt %7.2f) promoted to muon.\n", itk, r.track[itk].floatPt()); + dbgPrintf("PFAlgo2HGC \t track %3d (pt %7.2f) promoted to muon.\n", itk, r.track[itk].floatPt()); } } } diff --git a/L1Trigger/Phase2L1ParticleFlow/src/PFAlgo3.cc b/L1Trigger/Phase2L1ParticleFlow/src/PFAlgo3.cc index 700a96e507f7d..41402a431eb6e 100644 --- a/L1Trigger/Phase2L1ParticleFlow/src/PFAlgo3.cc +++ b/L1Trigger/Phase2L1ParticleFlow/src/PFAlgo3.cc @@ -1,4 +1,5 @@ #include "L1Trigger/Phase2L1ParticleFlow/interface/PFAlgo3.h" +#include "L1Trigger/Phase2L1ParticleFlow/src/dbgPrintf.h" #include "DataFormats/L1TParticleFlow/interface/PFCandidate.h" @@ -71,7 +72,7 @@ void PFAlgo3::runPF(Region &r) const { /// ------------- first step (can all go in parallel) ---------------- if (debug_) { - printf( + dbgPrintf( "PFAlgo3\nPFAlgo3 region eta [ %+5.2f , %+5.2f ], phi [ %+5.2f , %+5.2f ], fiducial eta [ %+5.2f , %+5.2f ], " "phi [ %+5.2f , %+5.2f ]\n", r.etaMin - r.etaExtra, @@ -82,14 +83,14 @@ void PFAlgo3::runPF(Region &r) const { r.etaMax, r.phiCenter - r.phiHalfWidth, r.phiCenter + r.phiHalfWidth); - printf("PFAlgo3 \t N(track) %3lu N(em) %3lu N(calo) %3lu N(mu) %3lu\n", - r.track.size(), - r.emcalo.size(), - r.calo.size(), - r.muon.size()); + dbgPrintf("PFAlgo3 \t N(track) %3lu N(em) %3lu N(calo) %3lu N(mu) %3lu\n", + r.track.size(), + r.emcalo.size(), + r.calo.size(), + r.muon.size()); for (int itk = 0, ntk = r.track.size(); itk < ntk; ++itk) { const auto &tk = r.track[itk]; - printf( + dbgPrintf( "PFAlgo3 \t track %3d: pt %7.2f +- %5.2f vtx eta %+5.2f vtx phi %+5.2f calo eta %+5.2f calo phi %+5.2f " "fid %1d calo ptErr %7.2f stubs %2d chi2 %7.1f\n", itk, @@ -106,7 +107,7 @@ void PFAlgo3::runPF(Region &r) const { } for (int iem = 0, nem = r.emcalo.size(); iem < nem; ++iem) { const auto &em = r.emcalo[iem]; - printf( + dbgPrintf( "PFAlgo3 \t EM %3d: pt %7.2f +- %5.2f vtx eta %+5.2f vtx phi %+5.2f calo eta %+5.2f calo phi %+5.2f " "fid %1d calo ptErr %7.2f\n", iem, @@ -121,7 +122,7 @@ void PFAlgo3::runPF(Region &r) const { } for (int ic = 0, nc = r.calo.size(); ic < nc; ++ic) { auto &calo = r.calo[ic]; - printf( + dbgPrintf( "PFAlgo3 \t calo %3d: pt %7.2f +- %5.2f vtx eta %+5.2f vtx phi %+5.2f calo eta %+5.2f calo phi %+5.2f " "fid %1d calo ptErr %7.2f em pt %7.2f \n", ic, @@ -137,7 +138,7 @@ void PFAlgo3::runPF(Region &r) const { } for (int im = 0, nm = r.muon.size(); im < nm; ++im) { auto &mu = r.muon[im]; - printf( + dbgPrintf( "PFAlgo3 \t muon %3d: pt %7.2f vtx eta %+5.2f vtx phi %+5.2f calo eta %+5.2f calo phi %+5.2f " "fid %1d \n", im, @@ -221,7 +222,7 @@ void PFAlgo3::link_tk2mu(Region &r, std::vector &tk2mu, std::vector &m for (int imu = 0, nmu = r.muon.size(); imu < nmu; ++imu) { const auto &mu = r.muon[imu]; if (debug_) - printf( + dbgPrintf( "PFAlgo3 \t muon %3d (pt %7.2f, eta %+5.2f, phi %+5.2f) \n", imu, mu.floatPt(), mu.floatEta(), mu.floatPhi()); float minDistance = 9e9; switch (muMatchMode_) { @@ -260,7 +261,7 @@ void PFAlgo3::link_tk2mu(Region &r, std::vector &tk2mu, std::vector &m break; } if (debug_ && dr < 0.4) { - printf( + dbgPrintf( "PFAlgo3 \t\t possible match with track %3d (pt %7.2f, caloeta %+5.2f, calophi %+5.2f, dr %.2f, eta " "%+5.2f, phi %+5.2f, dr %.2f): angular %1d, distance %.3f (vs %.3f)\n", itk, @@ -284,13 +285,13 @@ void PFAlgo3::link_tk2mu(Region &r, std::vector &tk2mu, std::vector &m } } if (debug_ && imatch > -1) - printf("PFAlgo3 \t muon %3d (pt %7.2f) linked to track %3d (pt %7.2f)\n", - imu, - mu.floatPt(), - imatch, - r.track[imatch].floatPt()); + dbgPrintf("PFAlgo3 \t muon %3d (pt %7.2f) linked to track %3d (pt %7.2f)\n", + imu, + mu.floatPt(), + imatch, + r.track[imatch].floatPt()); if (debug_ && imatch == -1) - printf("PFAlgo3 \t muon %3d (pt %7.2f) not linked to any track\n", imu, mu.floatPt()); + dbgPrintf("PFAlgo3 \t muon %3d (pt %7.2f) not linked to any track\n", imu, mu.floatPt()); mu2tk[imu] = imatch; if (imatch > -1) { tk2mu[imatch] = imu; @@ -314,12 +315,12 @@ void PFAlgo3::link_tk2em(Region &r, std::vector &tk2em) const { } } if (debug_ && tk2em[itk] != -1) - printf("PFAlgo3 \t track %3d (pt %7.2f) matches to EM %3d (pt %7.2f) with dr %.3f\n", - itk, - tk.floatPt(), - tk2em[itk], - tk2em[itk] == -1 ? 0.0 : r.emcalo[tk2em[itk]].floatPt(), - drbest); + dbgPrintf("PFAlgo3 \t track %3d (pt %7.2f) matches to EM %3d (pt %7.2f) with dr %.3f\n", + itk, + tk.floatPt(), + tk2em[itk], + tk2em[itk] == -1 ? 0.0 : r.emcalo[tk2em[itk]].floatPt(), + drbest); } } @@ -339,13 +340,13 @@ void PFAlgo3::link_em2calo(Region &r, std::vector &em2calo) const { } } if (debug_ && em2calo[iem] != -1) - printf("PFAlgo3 \t EM %3d (pt %7.2f) matches to calo %3d (pt %7.2f, empt %7.2f) with dr %.3f\n", - iem, - em.floatPt(), - em2calo[iem], - em2calo[iem] == -1 ? 0.0 : r.calo[em2calo[iem]].floatPt(), - em2calo[iem] == -1 ? 0.0 : r.calo[em2calo[iem]].floatEmPt(), - drbest); + dbgPrintf("PFAlgo3 \t EM %3d (pt %7.2f) matches to calo %3d (pt %7.2f, empt %7.2f) with dr %.3f\n", + iem, + em.floatPt(), + em2calo[iem], + em2calo[iem] == -1 ? 0.0 : r.calo[em2calo[iem]].floatPt(), + em2calo[iem] == -1 ? 0.0 : r.calo[em2calo[iem]].floatEmPt(), + drbest); } } @@ -385,20 +386,20 @@ void PFAlgo3::emcalo_algo(Region &r, if (r.globalAbsEta(em.floatEta()) > 2.5) continue; if (debug_) - printf("PFAlgo3 \t EM %3d (pt %7.2f) has %2d tracks (sumpt %7.2f, sumpterr %7.2f), ptdif %7.2f +- %7.2f\n", - iem, - em.floatPt(), - em2ntk[iem], - em2sumtkpt[iem], - em2sumtkpterr[iem], - em.floatPt() - em2sumtkpt[iem], - std::max(em2sumtkpterr[iem], em.floatPtErr())); + dbgPrintf("PFAlgo3 \t EM %3d (pt %7.2f) has %2d tracks (sumpt %7.2f, sumpterr %7.2f), ptdif %7.2f +- %7.2f\n", + iem, + em.floatPt(), + em2ntk[iem], + em2sumtkpt[iem], + em2sumtkpterr[iem], + em.floatPt() - em2sumtkpt[iem], + std::max(em2sumtkpterr[iem], em.floatPtErr())); if (em2ntk[iem] == 0) { // Photon em.isEM = true; addCaloToPF(r, em); em.used = true; if (debug_) - printf("PFAlgo3 \t EM %3d (pt %7.2f) ---> promoted to photon\n", iem, em.floatPt()); + dbgPrintf("PFAlgo3 \t EM %3d (pt %7.2f) ---> promoted to photon\n", iem, em.floatPt()); continue; } float ptdiff = em.floatPt() - em2sumtkpt[iem]; @@ -407,11 +408,11 @@ void PFAlgo3::emcalo_algo(Region &r, if (pterr > 2 * em.floatPt()) { pterr = 2 * em.floatPt(); if (debug_) - printf("PFAlgo3 \t EM %3d (pt %7.2f) ---> clamp pterr ---> new ptdiff %7.2f +- %7.2f\n", - iem, - em.floatPt(), - ptdiff, - pterr); + dbgPrintf("PFAlgo3 \t EM %3d (pt %7.2f) ---> clamp pterr ---> new ptdiff %7.2f +- %7.2f\n", + iem, + em.floatPt(), + ptdiff, + pterr); } if (ptdiff > -ptMatchLow_ * pterr) { @@ -422,14 +423,14 @@ void PFAlgo3::emcalo_algo(Region &r, auto &p = addCaloToPF(r, em); p.setFloatPt(ptdiff); if (debug_) - printf("PFAlgo3 \t EM %3d (pt %7.2f) ---> promoted to electron(s) + photon (pt %7.2f)\n", - iem, - em.floatPt(), - ptdiff); + dbgPrintf("PFAlgo3 \t EM %3d (pt %7.2f) ---> promoted to electron(s) + photon (pt %7.2f)\n", + iem, + em.floatPt(), + ptdiff); } else { em.hwFlags = 1; // may use calo momentum if (debug_) - printf("PFAlgo3 \t EM %3d (pt %7.2f) ---> promoted to electron(s)\n", iem, em.floatPt()); + dbgPrintf("PFAlgo3 \t EM %3d (pt %7.2f) ---> promoted to electron(s)\n", iem, em.floatPt()); } } else { em.isEM = false; @@ -460,12 +461,12 @@ void PFAlgo3::emtk_algo(Region &r, } } if (debug_) - printf("PFAlgo3 \t track %3d (pt %7.2f) matched to EM %3d (pt %7.2f) promoted to electron with pt %7.2f\n", - itk, - tk.floatPt(), - tk2em[itk], - em.floatPt(), - p.floatPt()); + dbgPrintf("PFAlgo3 \t track %3d (pt %7.2f) matched to EM %3d (pt %7.2f) promoted to electron with pt %7.2f\n", + itk, + tk.floatPt(), + tk2em[itk], + em.floatPt(), + p.floatPt()); p.hwId = l1t::PFCandidate::Electron; tk.used = true; } @@ -485,7 +486,7 @@ void PFAlgo3::sub_em2calo(Region &r, const std::vector &em2calo) const { const auto &em = r.emcalo[iem]; if (em.isEM) { if (debug_) - printf( + dbgPrintf( "PFAlgo3 \t EM %3d (pt %7.2f) is subtracted from calo %3d (pt %7.2f) scaled by %.3f (deltaPt = " "%7.2f)\n", iem, @@ -499,7 +500,7 @@ void PFAlgo3::sub_em2calo(Region &r, const std::vector &em2calo) const { } else { keepme = true; if (debug_) - printf( + dbgPrintf( "PFAlgo3 \t EM %3d (pt %7.2f) not subtracted from calo %3d (pt %7.2f), and calo marked to be kept " "after EM subtraction\n", iem, @@ -511,21 +512,22 @@ void PFAlgo3::sub_em2calo(Region &r, const std::vector &em2calo) const { } if (pt < pt0) { if (debug_) - printf("PFAlgo3 \t calo %3d (pt %7.2f +- %7.2f) has a subtracted pt of %7.2f, empt %7.2f -> %7.2f, isem %d\n", - ic, - calo.floatPt(), - calo.floatPtErr(), - pt, - ept0, - ept, - calo.isEM); + dbgPrintf( + "PFAlgo3 \t calo %3d (pt %7.2f +- %7.2f) has a subtracted pt of %7.2f, empt %7.2f -> %7.2f, isem %d\n", + ic, + calo.floatPt(), + calo.floatPtErr(), + pt, + ept0, + ept, + calo.isEM); calo.setFloatPt(pt); calo.setFloatEmPt(ept); if (!keepme && ((emCaloUseAlsoCaloSigma_ ? pt < calo.floatPtErr() : false) || pt <= 0.125 * pt0 || (calo.isEM && ept <= 0.125 * ept0))) { // the <= is important since in firmware the pt0/8 can be zero if (debug_) - printf("PFAlgo3 \t calo %3d (pt %7.2f) ----> discarded\n", ic, calo.floatPt()); + dbgPrintf("PFAlgo3 \t calo %3d (pt %7.2f) ----> discarded\n", ic, calo.floatPt()); calo.used = true; calo.setFloatPt(pt0); //discardCalo(r, calo, 1); // log this as discarded, for debugging } @@ -555,7 +557,7 @@ void PFAlgo3::link_tk2calo(Region &r, std::vector &tk2calo) const { } float minCaloPt = tk.floatPt() - ptMatchLow_ * tk.floatCaloPtErr(); if (debug_) - printf("PFAlgo3 \t track %3d (pt %7.2f) to be matched to calo, min pT %7.2f\n", itk, tk.floatPt(), minCaloPt); + dbgPrintf("PFAlgo3 \t track %3d (pt %7.2f) to be matched to calo, min pT %7.2f\n", itk, tk.floatPt(), minCaloPt); for (int ic = 0, nc = r.calo.size(); ic < nc; ++ic) { auto &calo = r.calo[ic]; if (calo.used || calo.floatPt() <= minCaloPt) @@ -570,7 +572,7 @@ void PFAlgo3::link_tk2calo(Region &r, std::vector &tk2calo) const { break; case TkCaloLinkMetric::BestByDRPt: dq = dr + std::max(tk.floatPt() - calo.floatPt(), 0.) * dptscale; - //if (debug_ && dr < 0.2) printf("PFAlgo3 \t\t\t track %3d (pt %7.2f) vs calo %3d (pt %7.2f): dr %.3f, dq %.3f\n", itk, tk.floatPt(), ic, calo.floatPt(), dr, dq); + //if (debug_ && dr < 0.2) dbgPrintf("PFAlgo3 \t\t\t track %3d (pt %7.2f) vs calo %3d (pt %7.2f): dr %.3f, dq %.3f\n", itk, tk.floatPt(), ic, calo.floatPt(), dr, dq); if (dr < drMatch_ && dq < drbest) { tk2calo[itk] = ic; drbest = dq; @@ -578,7 +580,7 @@ void PFAlgo3::link_tk2calo(Region &r, std::vector &tk2calo) const { break; case TkCaloLinkMetric::BestByDR2Pt2: dq = hypot(dr, std::max(tk.floatPt() - calo.floatPt(), 0.) * dptscale); - //if (debug_ && dr < 0.2) printf("PFAlgo3 \t\t\t track %3d (pt %7.2f) vs calo %3d (pt %7.2f): dr %.3f, dq %.3f\n", itk, tk.floatPt(), ic, calo.floatPt(), dr, dq); + //if (debug_ && dr < 0.2) dbgPrintf("PFAlgo3 \t\t\t track %3d (pt %7.2f) vs calo %3d (pt %7.2f): dr %.3f, dq %.3f\n", itk, tk.floatPt(), ic, calo.floatPt(), dr, dq); if (dr < drMatch_ && dq < drbest) { tk2calo[itk] = ic; drbest = dq; @@ -587,12 +589,12 @@ void PFAlgo3::link_tk2calo(Region &r, std::vector &tk2calo) const { } } if (debug_ && tk2calo[itk] != -1) - printf("PFAlgo3 \t track %3d (pt %7.2f) matches to calo %3d (pt %7.2f) with dist %.3f\n", - itk, - tk.floatPt(), - tk2calo[itk], - tk2calo[itk] == -1 ? 0.0 : r.calo[tk2calo[itk]].floatPt(), - drbest); + dbgPrintf("PFAlgo3 \t track %3d (pt %7.2f) matches to calo %3d (pt %7.2f) with dist %.3f\n", + itk, + tk.floatPt(), + tk2calo[itk], + tk2calo[itk] == -1 ? 0.0 : r.calo[tk2calo[itk]].floatPt(), + drbest); // now we re-do this for debugging sake, it may be done for real later if (debug_ && tk2calo[itk] == -1) { int ibest = -1; @@ -608,7 +610,7 @@ void PFAlgo3::link_tk2calo(Region &r, std::vector &tk2calo) const { } } if (ibest != -1) - printf( + dbgPrintf( "PFAlgo3 \t track %3d (pt %7.2f) would match to calo %3d (pt %7.2f) with dr %.3f if the pt min and dr " "requirement had been relaxed\n", itk, @@ -655,13 +657,13 @@ void PFAlgo3::unlinkedtk_algo(Region &r, const std::vector &tk2calo) const : maxInvisiblePt_; if (tk.floatPt() < maxPt) { if (debug_) - printf("PFAlgo3 \t track %3d (pt %7.2f) not matched to calo, kept as charged hadron\n", itk, tk.floatPt()); + dbgPrintf("PFAlgo3 \t track %3d (pt %7.2f) not matched to calo, kept as charged hadron\n", itk, tk.floatPt()); auto &p = addTrackToPF(r, tk); p.hwStatus = GoodTK_NoCalo; tk.used = true; } else { if (debug_) - printf("PFAlgo3 \t track %3d (pt %7.2f) not matched to calo, dropped\n", itk, tk.floatPt()); + dbgPrintf("PFAlgo3 \t track %3d (pt %7.2f) not matched to calo, dropped\n", itk, tk.floatPt()); //discardTrack(r, tk, BadTK_NoCalo); // log this as discarded, for debugging } } @@ -688,7 +690,7 @@ void PFAlgo3::calo_relink(Region &r, continue; float dr = floatDR(calo, calo2); //// uncomment below for more verbose debugging - //if (debug_ && dr < 0.5) printf("PFAlgo3 \t calo %3d (pt %7.2f) with no tracks is at dr %.3f from calo %3d with pt %7.2f (sum tk pt %7.2f), track excess %7.2f +- %7.2f\n", ic, calo.floatPt(), dr, ic2, calo2.floatPt(), calo2sumtkpt[ic2], calo2sumtkpt[ic2] - calo2.floatPt(), useTrackCaloSigma_ ? calo2sumtkpterr[ic2] : calo2.floatPtErr()); + //if (debug_ && dr < 0.5) dbgPrintf("PFAlgo3 \t calo %3d (pt %7.2f) with no tracks is at dr %.3f from calo %3d with pt %7.2f (sum tk pt %7.2f), track excess %7.2f +- %7.2f\n", ic, calo.floatPt(), dr, ic2, calo2.floatPt(), calo2sumtkpt[ic2], calo2sumtkpt[ic2] - calo2.floatPt(), useTrackCaloSigma_ ? calo2sumtkpterr[ic2] : calo2.floatPtErr()); if (dr < drbest) { float ptdiff = calo2sumtkpt[ic2] - calo2.floatPt() + (useTrackCaloSigma_ ? calo2sumtkpterr[ic2] : calo2.floatPtErr()); @@ -701,7 +703,7 @@ void PFAlgo3::calo_relink(Region &r, if (i2best != -1) { const auto &calo2 = r.calo[i2best]; if (debug_) - printf( + dbgPrintf( "PFAlgo3 \t calo %3d (pt %7.2f) with no tracks matched within dr %.3f with calo %3d with pt %7.2f (sum tk " "pt %7.2f), track excess %7.2f +- %7.2f\n", ic, @@ -721,11 +723,11 @@ void PFAlgo3::calo_relink(Region &r, if (addtopt[ic]) { auto &calo = r.calo[ic]; if (debug_) - printf("PFAlgo3 \t calo %3d (pt %7.2f, sum tk pt %7.2f) is increased to pt %7.2f after merging\n", - ic, - calo.floatPt(), - calo2sumtkpt[ic], - calo.floatPt() + addtopt[ic]); + dbgPrintf("PFAlgo3 \t calo %3d (pt %7.2f, sum tk pt %7.2f) is increased to pt %7.2f after merging\n", + ic, + calo.floatPt(), + calo2sumtkpt[ic], + calo.floatPt() + addtopt[ic]); calo.setFloatPt(calo.floatPt() + addtopt[ic]); } } @@ -745,7 +747,7 @@ void PFAlgo3::linkedcalo_algo(Region &r, float ptdiff = calo.floatPt() - calo2sumtkpt[ic]; float pterr = useTrackCaloSigma_ ? calo2sumtkpterr[ic] : calo.floatPtErr(); if (debug_) - printf( + dbgPrintf( "PFAlgo3 \t calo %3d (pt %7.2f +- %7.2f, empt %7.2f) has %2d tracks (sumpt %7.2f, sumpterr %7.2f), ptdif " "%7.2f +- %7.2f\n", ic, @@ -762,7 +764,7 @@ void PFAlgo3::linkedcalo_algo(Region &r, if (calo.floatEmPt() > 1) { float emptdiff = std::min(ptdiff, calo.floatEmPt()); if (debug_) - printf( + dbgPrintf( "PFAlgo3 \t calo %3d (pt %7.2f, empt %7.2f) ---> make photon with pt %7.2f, reduce ptdiff to %7.2f " "+- %7.2f\n", ic, @@ -778,21 +780,21 @@ void PFAlgo3::linkedcalo_algo(Region &r, } if (ptdiff > 2) { if (debug_) - printf("PFAlgo3 \t calo %3d (pt %7.2f, empt %7.2f) ---> make also neutral hadron with pt %7.2f\n", - ic, - calo.floatPt(), - calo.floatEmPt(), - ptdiff); + dbgPrintf("PFAlgo3 \t calo %3d (pt %7.2f, empt %7.2f) ---> make also neutral hadron with pt %7.2f\n", + ic, + calo.floatPt(), + calo.floatEmPt(), + ptdiff); auto &p = addCaloToPF(r, calo); p.setFloatPt(ptdiff); p.hwId = l1t::PFCandidate::NeutralHadron; } } else { if (debug_) - printf("PFAlgo3 \t calo %3d (pt %7.2f) ---> promoted to neutral with pt %7.2f\n", - ic, - calo.floatPt(), - ptdiff); + dbgPrintf("PFAlgo3 \t calo %3d (pt %7.2f) ---> promoted to neutral with pt %7.2f\n", + ic, + calo.floatPt(), + ptdiff); auto &p = addCaloToPF(r, calo); p.setFloatPt(ptdiff); calo.hwFlags = 0; @@ -801,22 +803,23 @@ void PFAlgo3::linkedcalo_algo(Region &r, // nothing to do (weighted average happens when we process the tracks) calo.hwFlags = 1; if (debug_) - printf("PFAlgo3 \t calo %3d (pt %7.2f) ---> to be deleted, will use tracks instead\n", ic, calo.floatPt()); + dbgPrintf( + "PFAlgo3 \t calo %3d (pt %7.2f) ---> to be deleted, will use tracks instead\n", ic, calo.floatPt()); //discardCalo(r, calo, 0); // log this as discarded, for debugging } else { // tracks overshoot, rescale to tracks to calo calo2alpha[ic] = rescaleTracks_ ? calo.floatPt() / calo2sumtkpt[ic] : 1.0; calo.hwFlags = 2; if (debug_ && rescaleTracks_) - printf("PFAlgo3 \t calo %3d (pt %7.2f) ---> tracks overshoot and will be scaled down by %.4f\n", - ic, - calo.floatPt(), - calo2alpha[ic]); + dbgPrintf("PFAlgo3 \t calo %3d (pt %7.2f) ---> tracks overshoot and will be scaled down by %.4f\n", + ic, + calo.floatPt(), + calo2alpha[ic]); if (debug_ && !rescaleTracks_) - printf("PFAlgo3 \t calo %3d (pt %7.2f) ---> tracks overshoot by %.4f\n", - ic, - calo.floatPt(), - calo2sumtkpt[ic] / calo.floatPt()); + dbgPrintf("PFAlgo3 \t calo %3d (pt %7.2f) ---> tracks overshoot by %.4f\n", + ic, + calo.floatPt(), + calo2sumtkpt[ic] / calo.floatPt()); } calo.used = true; } @@ -848,7 +851,7 @@ void PFAlgo3::linkedtk_algo(Region &r, } p.setFloatPt(ptavg); if (debug_) - printf( + dbgPrintf( "PFAlgo3 \t track %3d (pt %7.2f +- %7.2f) combined with calo %3d (pt %7.2f +- %7.2f (from tk) yielding " "candidate of pt %7.2f\n", itk, @@ -861,17 +864,17 @@ void PFAlgo3::linkedtk_algo(Region &r, } else { p.hwStatus = GoodTK_Calo_TkPt; if (debug_) - printf("PFAlgo3 \t track %3d (pt %7.2f) linked to calo %3d promoted to charged hadron\n", - itk, - tk.floatPt(), - tk2calo[itk]); + dbgPrintf("PFAlgo3 \t track %3d (pt %7.2f) linked to calo %3d promoted to charged hadron\n", + itk, + tk.floatPt(), + tk2calo[itk]); } } else if (calo.hwFlags == 2) { // must rescale p.setFloatPt(tk.floatPt() * calo2alpha[tk2calo[itk]]); p.hwStatus = GoodTk_Calo_CaloPt; if (debug_) - printf( + dbgPrintf( "PFAlgo3 \t track %3d (pt %7.2f, stubs %2d chi2 %7.1f) linked to calo %3d promoted to charged hadron with " "pt %7.2f after maybe rescaling\n", itk, @@ -890,7 +893,7 @@ void PFAlgo3::unlinkedcalo_algo(Region &r) const { if (!r.calo[ic].used) { addCaloToPF(r, r.calo[ic]); if (debug_) - printf("PFAlgo3 \t calo %3d (pt %7.2f) not linked, promoted to neutral\n", ic, r.calo[ic].floatPt()); + dbgPrintf("PFAlgo3 \t calo %3d (pt %7.2f) not linked, promoted to neutral\n", ic, r.calo[ic].floatPt()); } } } @@ -902,7 +905,7 @@ void PFAlgo3::save_muons(Region &r, const std::vector &tk2mu) const { auto &p = addTrackToPF(r, r.track[itk]); p.muonsrc = r.muon[tk2mu[itk]].src; if (debug_) - printf("PFAlgo3 \t track %3d (pt %7.2f) promoted to muon.\n", itk, r.track[itk].floatPt()); + dbgPrintf("PFAlgo3 \t track %3d (pt %7.2f) promoted to muon.\n", itk, r.track[itk].floatPt()); } } } diff --git a/L1Trigger/Phase2L1ParticleFlow/src/PuppiAlgo.cc b/L1Trigger/Phase2L1ParticleFlow/src/PuppiAlgo.cc index 9c69028cac187..8f93b627902ef 100644 --- a/L1Trigger/Phase2L1ParticleFlow/src/PuppiAlgo.cc +++ b/L1Trigger/Phase2L1ParticleFlow/src/PuppiAlgo.cc @@ -2,6 +2,7 @@ #include "DataFormats/L1TParticleFlow/interface/PFCandidate.h" #include "FWCore/Utilities/interface/Exception.h" #include "DataFormats/Math/interface/deltaR.h" +#include "L1Trigger/Phase2L1ParticleFlow/src/dbgPrintf.h" #include "Math/ProbFunc.h" @@ -102,7 +103,7 @@ void PuppiAlgo::computePuppiWeights(Region &r, p.hwId == l1t::PFCandidate::Muon) { p.setPuppiW(p.chargedPV || p.hwId == l1t::PFCandidate::Muon ? 1.0 : 0); if (debug_) - printf( + dbgPrintf( "PUPPI \t charged id %1d pt %7.2f eta %+5.2f phi %+5.2f alpha %+7.2f x2 %+7.2f --> puppi weight %.3f " "puppi pt %7.2f \n", p.hwId, @@ -139,7 +140,7 @@ void PuppiAlgo::computePuppiWeights(Region &r, } } if (debug_) - printf( + dbgPrintf( "PUPPI \t neutral id %1d pt %7.2f eta %+5.2f phi %+5.2f alpha %+7.2f x2 %+7.2f --> puppi weight %.3f " "puppi pt %7.2f \n", p.hwId, @@ -223,13 +224,13 @@ void PuppiAlgo::computePuppiMedRMS( alphaFRms = 6.; } if (debug_) - printf("PUPPI \t alphaC = %+6.2f +- %6.2f (%4lu), alphaF = %+6.2f +- %6.2f (%4lu)\n", - alphaCMed, - alphaCRms, - alphaCs.size(), - alphaFMed, - alphaFRms, - alphaFs.size()); + dbgPrintf("PUPPI \t alphaC = %+6.2f +- %6.2f (%4lu), alphaF = %+6.2f +- %6.2f (%4lu)\n", + alphaCMed, + alphaCRms, + alphaCs.size(), + alphaFMed, + alphaFRms, + alphaFs.size()); } void PuppiAlgo::fillPuppi(Region &r) const { diff --git a/L1Trigger/Phase2L1ParticleFlow/src/corrector.cc b/L1Trigger/Phase2L1ParticleFlow/src/corrector.cc index c4066f7d1c17e..d8c04b82690bd 100644 --- a/L1Trigger/Phase2L1ParticleFlow/src/corrector.cc +++ b/L1Trigger/Phase2L1ParticleFlow/src/corrector.cc @@ -14,6 +14,7 @@ #include "FWCore/Utilities/interface/CPUTimer.h" #include "FWCore/Utilities/interface/Exception.h" #include "FWCore/ParameterSet/interface/FileInPath.h" +#include "FWCore/MessageLogger/interface/MessageLogger.h" #include "DataFormats/L1TParticleFlow/interface/PFCluster.h" @@ -82,8 +83,8 @@ void l1tpf::corrector::init_(TDirectory *lFile, bool debug) { } TGraph *graph = graphs[buff]; if (debug) - std::cout << " eta bin " << ieta << " emf bin " << iemf << " graph " << buff - << (graph ? " " : " ") << std::endl; + edm::LogPrint("corrector") << " eta bin " << ieta << " emf bin " << iemf << " graph " << buff + << (graph ? " " : " ") << "\n"; if (graph) { ngraphs++; corrections_[ieta * nemf_ + iemf] = (TGraph *)graph->Clone(); diff --git a/L1Trigger/Phase2L1ParticleFlow/src/dbgPrintf.h b/L1Trigger/Phase2L1ParticleFlow/src/dbgPrintf.h new file mode 100644 index 0000000000000..35dc25afa32d3 --- /dev/null +++ b/L1Trigger/Phase2L1ParticleFlow/src/dbgPrintf.h @@ -0,0 +1,11 @@ +#ifndef L1Trigger_Phase2L1ParticleFlow_dbgPrintf_h +#define L1Trigger_Phase2L1ParticleFlow_dbgPrintf_h + +template +inline void dbgPrintf(const char *formatString, Args &&... args) { +#ifdef L1PF_DEBUG + printf(formatString, std::forward(args)...); +#endif +} + +#endif