00001 #ifndef HZZ2L2NU_INCLUDE_JETBUILDER_H_
00002 #define HZZ2L2NU_INCLUDE_JETBUILDER_H_
00003
00004 #include <initializer_list>
00005 #include <optional>
00006 #include <vector>
00007
00008 #include <TTreeReaderArray.h>
00009 #include <TTreeReaderValue.h>
00010
00011 #include <CollectionBuilder.h>
00012 #include <Dataset.h>
00013 #include <GenJetBuilder.h>
00014 #include <JetCorrector.h>
00015 #include <Options.h>
00016 #include <PhysicsObjects.h>
00017 #include <PileUpIdFilter.h>
00018
00019
00053 class JetBuilder : public CollectionBuilder<Jet> {
00054 public:
00055 JetBuilder(
00056 Dataset &dataset, Options const &options, TabulatedRngEngine &rngEngine,
00057 PileUpIdFilter const *pileUpIdFilter = nullptr);
00058
00060 std::vector<Jet> const &Get() const override;
00061
00068 std::vector<Jet> const &GetRejected() const;
00069
00077 void SetGenJetBuilder(GenJetBuilder const *genJetBuilder);
00078
00079 private:
00107 void AddType1Correction(
00108 TLorentzVector const &rawP4, double area,
00109 double jecOrig, double jecNew, double jerFactor,
00110 double emFraction, double muonFraction) const;
00111
00117 void Build() const override;
00118
00124 GenJet const *FindGenMatch(TLorentzVector const &p4,
00125 double ptResolution) const;
00126
00134 double GetJerFactor(TLorentzVector const &corrP4, int rngChannel) const;
00135
00137 void ProcessJets() const;
00138
00144 void ProcessSoftJets() const;
00145
00157 bool SetPileUpInfo(Jet &jet, int index) const;
00158
00164 GenJetBuilder const *genJetBuilder_;
00165
00172 PileUpIdFilter const *pileUpIdFilter_;
00173
00175 double minPt_;
00176
00178 double maxAbsEta_;
00179
00184 double minPtType1Corr_;
00185
00187 bool ptMissEeNoise_;
00188
00190 bool ptMissJer_;
00191
00198 bool ptMissPogJets_;
00199
00201 double pileUpIdMinPt_, pileUpIdMaxPt_;
00202
00204 mutable std::vector<Jet> jets_;
00205
00207 mutable std::vector<Jet> rejectedJets_;
00208
00210 bool isSim_;
00211
00213 int jetIdBit_;
00214
00216 JetCorrector jetCorrector_;
00217
00218 mutable TTreeReaderArray<float> srcPt_, srcEta_, srcPhi_, srcMass_;
00219 mutable TTreeReaderArray<float> srcArea_, srcRawFactor_;
00220 mutable TTreeReaderArray<float> srcChEmEF_, srcNeEmEF_, srcMuonFraction_;
00221 mutable TTreeReaderArray<float> srcBTag_;
00222 mutable TTreeReaderArray<int> srcId_, srcPileUpId_;
00223 mutable TTreeReaderValue<float> puRho_;
00224 mutable std::optional<TTreeReaderArray<int>> srcHadronFlavour_,
00225 srcPartonFlavour_, srcGenJetIdx_;
00226
00227
00228 mutable TTreeReaderArray<float> softRawPt_, softEta_, softPhi_, softArea_;
00229 mutable TTreeReaderArray<float> softMuonFraction_;
00230 };
00231
00232 #endif // HZZ2L2NU_INCLUDE_JETBUILDER_H_
00233