File indexing completed on 2025-08-06 08:14:16
0001
0002
0003 #ifndef JETBKGDSUB_H
0004 #define JETBKGDSUB_H
0005
0006 #include <fun4all/SubsysReco.h>
0007 #include <jetbase/Jetv1.h>
0008
0009 #include <memory>
0010 #include <string>
0011 #include <utility> // std::pair, std::make_pair
0012 #include <vector>
0013
0014 class PHCompositeNode;
0015 class TTree;
0016 class JetInput;
0017 class JetAlgo;
0018 class JetEvalStack;
0019
0020 class JetBkgdSub : public SubsysReco
0021 {
0022 public:
0023
0024 JetBkgdSub(const double jet_R = 0.4,
0025 const std::string &outputfilename = "jettree.root");
0026
0027 ~JetBkgdSub() override;
0028
0029
0030 void doIterative(bool b = true) { _doIterative = b; }
0031 void doAreaSub(bool b = true) { _doAreaSub = b; }
0032 void doMultSub(bool b = true) { _doMultSub = b; }
0033 void doTruth(bool b = true) { _doTruth = b; }
0034 void doData(bool b = true) { _doData = b; }
0035 void doEmbed(bool b = true) { _doEmbed = b;}
0036 void doTowerECut(bool b = true) { _doTowerECut = b;}
0037
0038 void setEtaRange(double low, double high)
0039 {
0040 m_etaRange.first = low;
0041 m_etaRange.second = high;
0042 }
0043
0044 void setPtRange(double low, double high)
0045 {
0046 m_ptRange.first = low;
0047 m_ptRange.second = high;
0048 }
0049
0050 void setMinRecoPt(double pt) { _minrecopT = pt; }
0051
0052 void setVzCut(double cut) { m_vtxZ_cut = cut; }
0053
0054 void setTowerThreshold(double threshold) { m_towerThreshold = threshold;}
0055
0056 void add_input(JetInput *input) { _inputs.push_back(input); }
0057
0058
0059 float LeadingR04TruthJet(PHCompositeNode *topNode);
0060
0061
0062 int Init(PHCompositeNode *topNode) override;
0063 int process_event(PHCompositeNode *topNode) override;
0064 int ResetEvent(PHCompositeNode *topNode) override;
0065 int End(PHCompositeNode *topNode) override;
0066
0067 void EstimateRhoMult(PHCompositeNode *topNode);
0068 double GetMedian(std::vector<double> &v);
0069 void GetCentInfo(PHCompositeNode *topNode);
0070 float NSignalCorrection(float jet_pt, int cent);
0071
0072 private:
0073
0074
0075 double m_jet_R;
0076 std::string m_iter_input;
0077 std::string m_raw_input;
0078 std::string m_truth_input;
0079 std::string m_outputfilename;
0080 std::pair<double, double> m_etaRange;
0081 std::pair<double, double> m_ptRange;
0082 double _minrecopT;
0083 double m_vtxZ_cut;
0084 double m_towerThreshold;
0085 std::vector<JetInput *> _inputs;
0086 bool _doIterative;
0087 bool _doAreaSub;
0088 bool _doMultSub;
0089 bool _doTruth;
0090 bool _doData;
0091 bool _doEmbed;
0092 bool _doTowerECut;
0093
0094
0095
0096 int m_event;
0097 int m_rhoA_jets;
0098 int m_mult_jets;
0099 int m_iter_jets;
0100 int m_truth_jets;
0101 int m_centrality;
0102 double m_mbd_NS;
0103 double m_rho_area;
0104 double m_rho_area_sigma;
0105 double m_rho_area_CEMC;
0106 double m_rho_area_sigma_CEMC;
0107 double m_rho_area_IHCAL;
0108 double m_rho_area_sigma_IHCAL;
0109 double m_rho_area_OHCAL;
0110 double m_rho_area_sigma_OHCAL;
0111 double m_rho_mult;
0112
0113 float m_event_leading_truth_pt;
0114
0115
0116 TTree *m_tree;
0117
0118 std::vector<float> m_iter_eta;
0119 std::vector<float> m_iter_phi;
0120 std::vector<float> m_iter_pt;
0121 std::vector<float> m_iter_pt_unsub;
0122
0123
0124 std::vector<float> m_rhoA_eta;
0125 std::vector<float> m_rhoA_phi;
0126 std::vector<float> m_rhoA_pt;
0127 std::vector<float> m_rhoA_area;
0128 std::vector<float> m_rhoA_pt_unsub;
0129
0130
0131 std::vector<int> m_mult_ncomponent;
0132 std::vector<float> m_mult_nsignal;
0133 std::vector<float> m_mult_eta;
0134 std::vector<float> m_mult_phi;
0135 std::vector<float> m_mult_pt;
0136 std::vector<float> m_mult_pt_unsub;
0137
0138
0139 std::vector<int> m_truth_ncomponent;
0140 std::vector<float> m_truth_eta;
0141 std::vector<float> m_truth_phi;
0142 std::vector<float> m_truth_pt;
0143
0144 };
0145
0146 #endif