Back to home page

sPhenix code displayed by LXR

 
 

    


File indexing completed on 2025-08-05 08:13:09

0001 // Tell emacs that this is a C++ source
0002 //  -*- C++ -*-.
0003 #ifndef JETVALIDATION_H
0004 #define JETVALIDATION_H
0005 
0006 #include <fun4all/SubsysReco.h>
0007 
0008 #include <string>
0009 #include <vector>
0010 
0011 #include <TH2.h>
0012 
0013 class PHCompositeNode;
0014 class TTree;
0015 class TFile;
0016 
0017 class JetValidation : public SubsysReco
0018 {
0019  public:
0020   JetValidation();
0021 
0022   ~JetValidation() override;
0023 
0024   /** Called during initialization.
0025       Typically this is where you can book histograms, and e.g.
0026       register them to Fun4AllServer (so they can be output to file
0027       using Fun4AllServer::dumpHistos() method).
0028    */
0029   Int_t Init(PHCompositeNode *topNode) override;
0030 
0031   /** Called for each event.
0032       This is where you do the real work.
0033    */
0034   Int_t process_event(PHCompositeNode *topNode) override;
0035 
0036   /// Clean up internals after each event.
0037   Int_t ResetEvent(PHCompositeNode *topNode) override;
0038 
0039   /// Called at the end of all processing.
0040   Int_t End(PHCompositeNode *topNode) override;
0041 
0042   void set_outputTreeFileName(const std::string &m_outputTreeFileName) {
0043     this->m_outputTreeFileName = m_outputTreeFileName;
0044   }
0045 
0046   void set_outputQAFileName(const std::string &m_outputQAFileName) {
0047     this->m_outputQAFileName = m_outputQAFileName;
0048   }
0049 
0050   void set_saveTree(Bool_t m_saveTree) {
0051     this->m_saveTree = m_saveTree;
0052   }
0053 
0054   void set_bkg_tower_energy(Float_t m_bkg_tower_energy) {
0055     this->m_bkg_tower_energy = m_bkg_tower_energy;
0056   }
0057 
0058   void set_bkg_tower_neighbor_energy(Float_t m_bkg_tower_neighbor_energy) {
0059     this->m_bkg_tower_neighbor_energy = m_bkg_tower_neighbor_energy;
0060   }
0061 
0062   void set_bkg_towers(UInt_t m_bkg_towers) {
0063     this->m_bkg_towers = m_bkg_towers;
0064   }
0065 
0066   Bool_t isBackgroundEvent(std::vector<Float_t> &towerEnergy);
0067 
0068  private:
0069   std::string m_recoJetName_r02;
0070   std::string m_recoJetName_r04;
0071   std::string m_recoJetName_r06;
0072   TFile* m_outputTreeFile;
0073   TFile* m_outputQAFile;
0074   std::string m_outputTreeFileName;
0075   std::string m_outputQAFileName;
0076   std::string m_emcTowerNodeBase;
0077   std::string m_emcTowerNode;
0078   std::string m_ihcalTowerNode;
0079   std::string m_ohcalTowerNode;
0080   std::string m_emcTowerNodeSub;
0081   std::string m_ihcalTowerNodeSub;
0082   std::string m_ohcalTowerNodeSub;
0083 
0084   enum class Trigger {
0085       MBD_NS_1 = 10,
0086       JET_6    = 20,
0087       JET_8    = 21,
0088       JET_10   = 22,
0089       JET_12   = 23
0090   };
0091 
0092   enum class EventStatus {
0093       ALL                 = 0,
0094       ZVTX                = 1,
0095       ZVTX60              = 2,
0096       ZVTX50              = 3,
0097       ZVTX30              = 4,
0098       ZVTX20              = 5,
0099       ZVTX10              = 6,
0100       ALL_MBDNS1          = 7,
0101       ALL_MBDNS1_JET8     = 8,
0102       ALL_MBDNS1_JET10    = 9,
0103       ALL_MBDNS1_JET12    = 10,
0104       ZVTX60_MBDNS1       = 11,
0105       ZVTX60_MBDNS1_JET8  = 12,
0106       ZVTX60_MBDNS1_JET10 = 13,
0107       ZVTX60_MBDNS1_JET12 = 14,
0108       ZVTX60_JET8         = 15,
0109       ZVTX60_JET10        = 16,
0110       ZVTX60_JET12        = 17
0111   };
0112 
0113   enum class JetEvent_Status {
0114       ALL_MBDNS1          = 0,
0115       ALL_MBDNS1_JET8     = 1,
0116       ALL_MBDNS1_JET10    = 2,
0117       ALL_MBDNS1_JET12    = 3,
0118       ZVTX60_MBDNS1       = 4,
0119       ZVTX60_MBDNS1_JET8  = 5,
0120       ZVTX60_MBDNS1_JET10 = 6,
0121       ZVTX60_MBDNS1_JET12 = 7,
0122       ZVTX60              = 8,
0123       ZVTX60_JET8         = 9,
0124       ZVTX60_JET10        = 10,
0125       ZVTX60_JET12        = 11
0126   };
0127 
0128   std::vector<std::string> JetEvent_Status_vec = {
0129       "ALL_MBDNS1",
0130       "ALL_MBDNS1_JET8",
0131       "ALL_MBDNS1_JET10",
0132       "ALL_MBDNS1_JET12",
0133       "ZVTX60_MBDNS1",
0134       "ZVTX60_MBDNS1_JET8",
0135       "ZVTX60_MBDNS1_JET10",
0136       "ZVTX60_MBDNS1_JET12",
0137       "ZVTX60",
0138       "ZVTX60_JET8",
0139       "ZVTX60_JET10",
0140       "ZVTX60_JET12"
0141   };
0142 
0143   Bool_t  m_saveTree;
0144   Float_t m_zvtx_max[5] = {60,50,30,20,10}; /*cm*/
0145   Float_t m_lowPtThreshold;
0146   Float_t m_highPtThreshold;
0147   Float_t m_subLeadPtThreshold;
0148   UInt_t  m_highPtJetCtr;
0149   UInt_t m_bins_phi;
0150   UInt_t m_bins_eta;
0151   Float_t m_eta_low;
0152   Float_t m_eta_high;
0153 
0154   TH1F* hEvents;
0155   TH1F* hEventsBkg;
0156   TH1F* hZVtx;
0157 
0158   // Jet Histograms
0159   // pt
0160   std::vector<TH1F*> hJetPt_r02;
0161   std::vector<TH1F*> hJetPt_r04;
0162   std::vector<TH1F*> hJetPt_r06;
0163 
0164   std::vector<TH1F*> hJetPt_r02_bkg;
0165   std::vector<TH1F*> hJetPt_r04_bkg;
0166   std::vector<TH1F*> hJetPt_r06_bkg;
0167 
0168   std::vector<TH1F*> hJetPt_r02_nobkg;
0169   std::vector<TH1F*> hJetPt_r04_nobkg;
0170   std::vector<TH1F*> hJetPt_r06_nobkg;
0171 
0172   // deltaPhi
0173   std::vector<TH1F*> hJetDeltaPhi_r02;
0174   std::vector<TH1F*> hJetDeltaPhi_r04;
0175   std::vector<TH1F*> hJetDeltaPhi_r06;
0176 
0177   std::vector<TH1F*> hJetDeltaPhi_r02_bkg;
0178   std::vector<TH1F*> hJetDeltaPhi_r04_bkg;
0179   std::vector<TH1F*> hJetDeltaPhi_r06_bkg;
0180 
0181   std::vector<TH1F*> hJetDeltaPhi_r02_nobkg;
0182   std::vector<TH1F*> hJetDeltaPhi_r04_nobkg;
0183   std::vector<TH1F*> hJetDeltaPhi_r06_nobkg;
0184 
0185   // eta_phi
0186   std::vector<TH2F*> h2JetEtaPhi_r02;
0187   std::vector<TH2F*> h2JetEtaPhi_r04;
0188   std::vector<TH2F*> h2JetEtaPhi_r06;
0189 
0190   std::vector<TH2F*> h2JetEtaPhi_r02_bkg;
0191   std::vector<TH2F*> h2JetEtaPhi_r04_bkg;
0192   std::vector<TH2F*> h2JetEtaPhi_r06_bkg;
0193 
0194   std::vector<TH2F*> h2JetEtaPhi_r02_nobkg;
0195   std::vector<TH2F*> h2JetEtaPhi_r04_nobkg;
0196   std::vector<TH2F*> h2JetEtaPhi_r06_nobkg;
0197 
0198   std::vector<TH2F*> h2TowerEnergy;
0199   std::vector<TH2F*> h2TowerEnergySub;
0200 
0201   UInt_t  m_bins_pt;
0202   Float_t m_pt_low;
0203   Float_t m_pt_high;
0204 
0205   UInt_t m_bins_events;
0206 
0207   UInt_t m_bins_zvtx;
0208   Float_t m_zvtx_low;
0209   Float_t m_zvtx_high;
0210 
0211   Float_t m_bkg_tower_energy;
0212   Float_t m_bkg_tower_neighbor_energy;
0213   UInt_t  m_bkg_towers;
0214 
0215   //! Output Tree variables
0216   TTree* m_T;
0217 
0218   //! eventwise quantities
0219   Int_t m_run;
0220   Int_t m_globalEvent;
0221   Int_t m_event;
0222   Int_t m_nJets_r02;
0223   Int_t m_nJets_r04;
0224   Int_t m_nJets_r06;
0225   Float_t m_zvtx;
0226 
0227   //! tower info
0228   std::vector<Bool_t>  m_towersCEMCBase_isGood;
0229   std::vector<Float_t> m_towersCEMCBase_energy;
0230   std::vector<Float_t> m_towersCEMCBase_time;
0231   std::vector<Bool_t>  m_towersCEMC_isGood;
0232   std::vector<Bool_t>  m_towersIHCal_isGood;
0233   std::vector<Bool_t>  m_towersOHCal_isGood;
0234   std::vector<Float_t> m_towersCEMC_energy;
0235   std::vector<Float_t> m_towersIHCal_energy;
0236   std::vector<Float_t> m_towersOHCal_energy;
0237   std::vector<Float_t> m_towersCEMCSub_energy;
0238   std::vector<Float_t> m_towersIHCalSub_energy;
0239   std::vector<Float_t> m_towersOHCalSub_energy;
0240 
0241   //! trigger info
0242   std::vector<bool> m_scaledVector;
0243 
0244   //! reconstructed jets R = 0.2
0245   Int_t m_nJet_r02;
0246   std::vector<Int_t> m_id_r02;
0247   std::vector<Int_t> m_nComponent_r02;
0248   std::vector<Float_t> m_eta_r02;
0249   std::vector<Float_t> m_phi_r02;
0250   std::vector<Float_t> m_e_r02;
0251   std::vector<Float_t> m_pt_r02;
0252 
0253   //! reconstructed jets R = 0.4
0254   Int_t m_nJet_r04;
0255   std::vector<Int_t> m_id_r04;
0256   std::vector<Int_t> m_nComponent_r04;
0257   std::vector<Float_t> m_eta_r04;
0258   std::vector<Float_t> m_phi_r04;
0259   std::vector<Float_t> m_e_r04;
0260   std::vector<Float_t> m_pt_r04;
0261 
0262   //! reconstructed jets R = 0.6
0263   Int_t m_nJet_r06;
0264   std::vector<Int_t> m_id_r06;
0265   std::vector<Int_t> m_nComponent_r06;
0266   std::vector<Float_t> m_eta_r06;
0267   std::vector<Float_t> m_phi_r06;
0268   std::vector<Float_t> m_e_r06;
0269   std::vector<Float_t> m_pt_r06;
0270 };
0271 
0272 #endif  // JETVALIDATION_H