Back to home page

sPhenix code displayed by LXR

 
 

    


File indexing completed on 2025-08-05 08:11:12

0001 #include "DijetHistoMaker.h"
0002 //for emc clusters
0003 #include <TH1.h>
0004 #include <TH2.h>
0005 #include <TH2D.h>
0006 #include <TFile.h>
0007 #include <TF1.h>
0008 #include <TH1D.h>
0009 #include <g4main/PHG4TruthInfoContainer.h>
0010 #include <g4main/PHG4Particle.h>
0011 #include <TMath.h>
0012 #include <calotrigger/TriggerRunInfov1.h>
0013 
0014 #include <calobase/RawTowerGeom.h>
0015 #include <jetbackground/TowerBackground.h>
0016 #include <jetbase/Jet.h>
0017 #include <jetbase/JetContainer.h>
0018 #include <jetbase/JetContainerv1.h>
0019 #include <jetbase/Jetv2.h>
0020 #include <calobase/TowerInfoContainer.h>
0021 #include <calobase/TowerInfoContainerv1.h>
0022 #include <calobase/TowerInfoContainerv2.h>
0023 #include <calobase/TowerInfoContainerv3.h>
0024 #include <calobase/TowerInfo.h>
0025 #include <calobase/TowerInfov1.h>
0026 #include <calobase/TowerInfov2.h>
0027 #include <calobase/TowerInfov3.h>
0028 
0029 #include <calobase/RawCluster.h>
0030 #include <calobase/RawClusterContainer.h>
0031 #include <calobase/RawClusterUtility.h>
0032 #include <calobase/RawTowerGeomContainer.h>
0033 #include <calobase/RawTower.h>
0034 #include <calobase/RawTowerContainer.h>
0035 #include <fun4all/Fun4AllHistoManager.h>
0036 #include <HepMC/SimpleVector.h> 
0037 //for vetex information
0038 #include <globalvertex/GlobalVertex.h>
0039 #include <globalvertex/GlobalVertexMap.h>
0040 #include "TrashInfov1.h"
0041 #include "DijetEventDisplay.h"
0042 #include <vector>
0043 
0044 #include <fun4all/Fun4AllReturnCodes.h>
0045 #include <phool/PHCompositeNode.h>
0046 #include <phool/PHIODataNode.h>
0047 #include <phool/PHNode.h>
0048 #include <phool/PHNodeIterator.h>
0049 #include <phool/PHObject.h>
0050 #include <phool/getClass.h>
0051 // G4Cells includes
0052 
0053 #include <iostream>
0054 
0055 #include <map>
0056 
0057 //____________________________________________________________________________..
0058 DijetHistoMaker::DijetHistoMaker(const std::string &name, const std::string &outfilename):
0059   SubsysReco(name)
0060   
0061 {
0062   isSim = false;
0063   _foutname = outfilename;  
0064   m_calo_nodename = "TOWERINFO_CALIB";
0065   m_jet_triggernames = {"Jet 6 GeV + MBD NS >= 1",
0066             "Jet 8 GeV + MBD NS >= 1",
0067             "Jet 10 GeV + MBD NS >= 1",
0068             "Jet 12 GeV + MBD NS >= 1",
0069             "Jet 6 GeV",
0070             "Jet 8 GeV",
0071             "Jet 10 GeV",
0072             "Jet 12 GeV"};
0073 }
0074 
0075 //____________________________________________________________________________..
0076 DijetHistoMaker::~DijetHistoMaker()
0077 {
0078   // if (h_jes)
0079   //   {
0080   //     delete h_jes;
0081   //   }
0082   // if (h_jer)
0083   //   {
0084   //     delete h_jer;
0085   //   }
0086 }
0087 
0088 //____________________________________________________________________________..
0089 int DijetHistoMaker::Init(PHCompositeNode *topNode)
0090 {
0091 
0092   // TFile *fnew = new TFile("/sphenix/user/dlis/Projects/CaloTriggerEmulator/analysis/calotriggeremulator/src/jesjer.root","r");
0093   // h_jes = (TH1D*) fnew->Get("h_jes");
0094   // h_jer = (TH1D*) fnew->Get("h_jer");
0095 
0096   // fsmear = new TF1("smearfunction","gaus", 0, 2);
0097 
0098   std::string outfile_display = _foutname;
0099   auto it =  outfile_display.find("DIJET");
0100   outfile_display.replace(it, 5, "DIJETEVT");
0101   if (!isSim)
0102     {
0103       if (drawDijets) dijeteventdisplay = new DijetEventDisplay(outfile_display.c_str());
0104       triggeranalyzer = new TriggerAnalyzer();
0105     }
0106   hm = new Fun4AllHistoManager("DIJET_HISTOGRAMS");
0107 
0108   TH1D *h;
0109   TH2D *h2;
0110 
0111   h2 = new TH2D("h_pt1_pt2",";p_{T1};p_{T2}", 50, 0, 50, 50, 0, 50);
0112   hm->registerHisto(h2);
0113   h2 = new TH2D("h_et1_et2",";e_{T1};e_{T2}", 50, 0, 50, 50, 0, 50);
0114   hm->registerHisto(h2);
0115 
0116   if (!isSim)
0117     {
0118       h2 = new TH2D("h_pt1_pt2_mbd",";p_{T1};p_{T2}", 50, 0, 50, 50, 0, 50);
0119       hm->registerHisto(h2);
0120       h2 = new TH2D("h_et1_et2_mbd",";e_{T1};e_{T2}", 50, 0, 50, 50, 0, 50);
0121       hm->registerHisto(h2);
0122 
0123       for (int j = 0; j < 8; j++)
0124     {
0125       h2 = new TH2D(Form("h_pt1_pt2_gl1_%d", j),";p_{T1};p_{T2}", 50, 0, 50, 50, 0, 50);
0126       hm->registerHisto(h2);
0127       h2 = new TH2D(Form("h_et1_et2_gl1_%d", j),";e_{T1};e_{T2}", 50, 0, 50, 50, 0, 50);
0128       hm->registerHisto(h2);
0129     }
0130     }
0131   else
0132     {
0133       h2 = new TH2D("h_truth_pt1_pt2",";p_{T1};p_{T2}", 50, 0, 50, 50, 0, 50);
0134       hm->registerHisto(h2);
0135       h2 = new TH2D("h_truth_smear_pt1_pt2",";p_{T1};p_{T2}", 50, 0, 50, 50, 0, 50);
0136       hm->registerHisto(h2);
0137 
0138     }
0139   for (int i = 0; i < 3; i++)
0140     {
0141 
0142       h = new TH1D(Form("h_dphi_et_%d", i), ";#Delta #phi;N", 64, 0, TMath::Pi());
0143       hm->registerHisto(h);
0144       h = new TH1D(Form("h_dphi_%d", i), ";#Delta #phi;N", 64, 0, TMath::Pi());
0145       hm->registerHisto(h);
0146       if (!isSim)
0147     {
0148       h = new TH1D(Form("h_dphi_mb_%d", i), ";#Delta #phi;N", 64, 0, TMath::Pi());
0149       hm->registerHisto(h);
0150       h = new TH1D(Form("h_dphi_et_mb_%d", i), ";#Delta #phi;N", 64, 0, TMath::Pi());
0151       hm->registerHisto(h);
0152 
0153     }
0154       else
0155     {
0156       h = new TH1D(Form("h_truth_dphi_%d", i), ";#Delta #phi;N", 64, 0, TMath::Pi());
0157       hm->registerHisto(h);
0158       h = new TH1D(Form("h_truth_smear_dphi_%d", i), ";#Delta #phi;N", 64, 0, TMath::Pi());
0159       hm->registerHisto(h);
0160 
0161     }
0162       for (int ip = 0; ip < 3; ip++)
0163     {
0164 
0165       h = new TH1D(Form("h_Aj_et_%d_dp%d", i, ip), ";A_j;N", 20, 0, 1);
0166       hm->registerHisto(h);
0167       h = new TH1D(Form("h_xj_et_%d_dp%d", i, ip), ";x_j;N", 20, 0, 1);
0168       hm->registerHisto(h);
0169       
0170       h = new TH1D(Form("h_Aj_%d_dp%d", i, ip), ";A_j;N", 20, 0, 1);
0171       hm->registerHisto(h);
0172       h = new TH1D(Form("h_xj_%d_dp%d", i, ip), ";x_j;N", 20, 0, 1);
0173       hm->registerHisto(h);
0174       for (int j = 0; j < 2; j++)
0175         {
0176           h = new TH1D(Form("h_Aj_et_iso%d_%d_dp%d", j, i, ip), ";A_j;N", 20, 0, 1);
0177           hm->registerHisto(h);
0178           h = new TH1D(Form("h_xj_et_iso%d_%d_dp%d", j, i, ip), ";x_j;N", 20, 0, 1);
0179           hm->registerHisto(h);
0180           
0181           h = new TH1D(Form("h_Aj_iso%d_%d_dp%d", j, i, ip), ";A_j;N", 20, 0, 1);
0182           hm->registerHisto(h);
0183           h = new TH1D(Form("h_xj_iso%d_%d_dp%d", j, i, ip), ";x_j;N", 20, 0, 1);
0184           hm->registerHisto(h);
0185         }
0186 
0187       if (!isSim)
0188         {
0189           h = new TH1D(Form("h_Aj_et_mb_%d_dp%d", i, ip), ";A_j;N", 20, 0, 1);
0190           hm->registerHisto(h);
0191           h = new TH1D(Form("h_xj_et_mb_%d_dp%d", i, ip), ";x_j;N", 20, 0, 1);
0192           hm->registerHisto(h);
0193           h = new TH1D(Form("h_Aj_mb_%d_dp%d", i, ip), ";A_j;N", 20, 0, 1);
0194           hm->registerHisto(h);
0195           h = new TH1D(Form("h_xj_mb_%d_dp%d", i, ip), ";x_j;N", 20, 0, 1);
0196           hm->registerHisto(h);
0197 
0198 
0199           for (int j = 0; j < 8; j++)
0200         {
0201           h = new TH1D(Form("h_Aj_et_gl1_%d_%d_dp%d", j, i, ip), ";A_j;N", 20, 0, 1);
0202           hm->registerHisto(h);
0203           h = new TH1D(Form("h_xj_et_gl1_%d_%d_dp%d", j, i, ip), ";x_j;N", 20, 0, 1);
0204           hm->registerHisto(h);
0205           h = new TH1D(Form("h_Aj_gl1_%d_%d_dp%d", j, i, ip), ";A_j;N", 20, 0, 1);
0206           hm->registerHisto(h);
0207           h = new TH1D(Form("h_xj_gl1_%d_%d_dp%d", j, i, ip), ";x_j;N", 20, 0, 1);
0208           hm->registerHisto(h);
0209           if (ip == 0)
0210             {
0211               h = new TH1D(Form("h_dphi_gl1_%d_%d", j, i), ";#Delta #phi;N", 64, 0, TMath::Pi());
0212               hm->registerHisto(h);
0213               h = new TH1D(Form("h_dphi_et_gl1_%d_%d", j, i), ";#Delta #phi;N", 64, 0, TMath::Pi());
0214               hm->registerHisto(h);
0215             }
0216         }
0217         }
0218       else
0219         {
0220           
0221           h = new TH1D(Form("h_truth_Aj_%d_dp%d", i, ip), ";A_j;N", 20, 0, 1);
0222           hm->registerHisto(h);
0223           h = new TH1D(Form("h_truth_xj_%d_dp%d", i, ip), ";x_j;N", 20, 0, 1);
0224           hm->registerHisto(h);
0225           h = new TH1D(Form("h_truth_smear_Aj_%d_dp%d", i, ip), ";A_j;N", 20, 0, 1);
0226           hm->registerHisto(h);
0227           h = new TH1D(Form("h_truth_smear_xj_%d_dp%d", i, ip), ";x_j;N", 20, 0, 1);
0228           hm->registerHisto(h);
0229 
0230         }
0231     }
0232     }
0233   // trash events here
0234   if (!isSim)
0235     {
0236       h2 = new TH2D("h_trash_pt1_pt2",";p_{T1};p_{T2}", 50, 0, 50, 50, 0, 50);
0237       hm->registerHisto(h2);
0238       h2 = new TH2D("h_trash_et1_et2",";e_{T1};e_{T2}", 50, 0, 50, 50, 0, 50);
0239       hm->registerHisto(h2);
0240 
0241       h2 = new TH2D("h_trash_pt1_pt2_mb",";p_{T1};p_{T2}", 50, 0, 50, 50, 0, 50);
0242       hm->registerHisto(h2);
0243       h2 = new TH2D("h_trash_et1_et2_mb",";e_{T1};e_{T2}", 50, 0, 50, 50, 0, 50);
0244       hm->registerHisto(h2);
0245 
0246       for (int j = 0; j < 8; j++)
0247     {
0248       h2 = new TH2D(Form("h_trash_pt1_pt2_gl1_%d", j),";p_{T1};p_{T2}", 50, 0, 50, 50, 0, 50);
0249       hm->registerHisto(h2);
0250       h2 = new TH2D(Form("h_trash_et1_et2_gl1_%d",j),";e_{T1};e_{T2}", 50, 0, 50, 50, 0, 50);
0251       hm->registerHisto(h2);
0252 
0253     }
0254       for (int i = 0; i < 3; i++)
0255     {
0256 
0257       h = new TH1D(Form("h_trash_dphi_et_%d", i), ";#Delta #phi;N", 64, 0, TMath::Pi());
0258       hm->registerHisto(h);
0259       h = new TH1D(Form("h_trash_dphi_%d", i), ";#Delta #phi;N", 64, 0, TMath::Pi());
0260       hm->registerHisto(h);
0261 
0262       h = new TH1D(Form("h_trash_dphi_mb_%d", i), ";#Delta #phi;N", 64, 0, TMath::Pi());
0263       hm->registerHisto(h);
0264       h = new TH1D(Form("h_trash_dphi_et_mb_%d", i), ";#Delta #phi;N", 64, 0, TMath::Pi());
0265       hm->registerHisto(h);
0266       
0267       for (int ip = 0; ip < 3; ip++)
0268         {
0269 
0270           h = new TH1D(Form("h_trash_Aj_et_%d_dp%d", i, ip), ";A_j;N", 20, 0, 1);
0271           hm->registerHisto(h);
0272           h = new TH1D(Form("h_trash_xj_et_%d_dp%d", i, ip), ";x_j;N", 20, 0, 1);
0273           hm->registerHisto(h);
0274           h = new TH1D(Form("h_trash_Aj_%d_dp%d", i, ip), ";A_j;N", 20, 0, 1);
0275           hm->registerHisto(h);
0276           h = new TH1D(Form("h_trash_xj_%d_dp%d", i, ip), ";x_j;N", 20, 0, 1);
0277           hm->registerHisto(h);
0278       
0279           h = new TH1D(Form("h_trash_Aj_et_mb_%d_dp%d", i, ip), ";A_j;N", 20, 0, 1);
0280           hm->registerHisto(h);
0281           h = new TH1D(Form("h_trash_xj_et_mb_%d_dp%d", i, ip), ";x_j;N", 20, 0, 1);
0282           hm->registerHisto(h);
0283           h = new TH1D(Form("h_trash_Aj_mb_%d_dp%d", i, ip), ";A_j;N", 20, 0, 1);
0284           hm->registerHisto(h);
0285           h = new TH1D(Form("h_trash_xj_mb_%d_dp%d", i, ip), ";x_j;N", 20, 0, 1);
0286           hm->registerHisto(h);
0287       
0288           for (int j = 0; j < 8; j++)
0289         {
0290 
0291           h = new TH1D(Form("h_trash_Aj_et_gl1_%d_%d_dp%d", j, i, ip), ";A_j;N", 20, 0, 1);
0292           hm->registerHisto(h);
0293           h = new TH1D(Form("h_trash_xj_et_gl1_%d_%d_dp%d", j, i, ip), ";x_j;N", 20, 0, 1);
0294           hm->registerHisto(h);
0295           h = new TH1D(Form("h_trash_Aj_gl1_%d_%d_dp%d", j, i, ip), ";A_j;N", 20, 0, 1);
0296           hm->registerHisto(h);
0297           h = new TH1D(Form("h_trash_xj_gl1_%d_%d_dp%d", j, i, ip), ";x_j;N", 20, 0, 1);
0298           hm->registerHisto(h);
0299           if (ip == 0)
0300             {
0301               h = new TH1D(Form("h_trash_dphi_gl1_%d_%d", j, i), ";#Delta #phi;N", 64, 0, TMath::Pi());
0302               hm->registerHisto(h);
0303               h = new TH1D(Form("h_trash_dphi_et_gl1_%d_%d", j, i), ";#Delta #phi;N", 64, 0, TMath::Pi());
0304               hm->registerHisto(h);
0305             }
0306         }
0307         }
0308     }
0309     }  
0310 
0311   return Fun4AllReturnCodes::EVENT_OK;
0312 }
0313 
0314 //____________________________________________________________________________..
0315 int DijetHistoMaker::InitRun(PHCompositeNode *topNode)
0316 {
0317   return Fun4AllReturnCodes::EVENT_OK;
0318 }
0319 
0320 //____________________________________________________________________________..
0321 void DijetHistoMaker::process_truth_jets(JetContainer *jets)
0322 {
0323 
0324   fsmear = new TF1("fg","gaus", 0, 2);
0325   float jes = 1;
0326   float jer = 0.18;
0327   fsmear->SetParameters(1, jes, jer);
0328   std::vector<jetty> truth_jets{};
0329   std::vector<jetty> truth_smear_jets{};
0330   if (Verbosity()) jets->identify(std::cout);
0331   for (auto jet : *jets)
0332     {
0333       if (Verbosity()) std::cout << __LINE__ << std::endl;
0334       struct jetty myjet;
0335       myjet.pt = jet->get_pt();
0336       myjet.eta = jet->get_eta();
0337       myjet.phi = jet->get_phi();
0338       truth_jets.push_back(myjet);
0339 
0340       float pt = jet->get_pt() * fsmear->GetRandom();
0341 
0342       struct jetty myjetsmear;
0343       myjetsmear.pt = pt;
0344       myjetsmear.eta = jet->get_eta();
0345       myjetsmear.phi = jet->get_phi();
0346       truth_smear_jets.push_back(myjetsmear);
0347 
0348     }    
0349   if ((int) truth_jets.size() >= 2)
0350     {
0351       std::sort(truth_jets.begin(), truth_jets.end(), [] (auto a, auto b){ return a.pt > b.pt; });
0352       float eta1 = truth_jets.at(0).eta;
0353       float phi1 = truth_jets.at(0).phi;
0354       float eta2 = truth_jets.at(1).eta;
0355       float phi2 = truth_jets.at(1).phi;
0356       if (fabs(eta1) < 0.7 && fabs(eta2) < 0.7)
0357     {
0358 
0359       float dphi = phi1 - phi2;
0360 
0361       if (dphi > TMath::Pi())
0362         {
0363           dphi = dphi - 2.*TMath::Pi();
0364         }
0365       if (dphi <= -1*TMath::Pi())
0366         {
0367           dphi = dphi + 2. * TMath::Pi();
0368         }
0369 
0370       dphi = fabs(dphi);
0371 
0372       if (dphi > TMath::Pi()) 
0373         return;
0374 
0375       if (Verbosity())
0376         {
0377           std::cout << "Truth Dijet" << std::endl;
0378           std::cout << "Leading Jet" << std::endl;
0379           int jl = 0;
0380           std::cout << "    pt   = " << truth_jets.at(jl).pt << std::endl;
0381           std::cout << "    eta  = " << truth_jets.at(jl).eta << std::endl;
0382           std::cout << "    phi  = " << truth_jets.at(jl).phi << std::endl;
0383           std::cout << "Subleading Jet" << std::endl;
0384           jl++;
0385           std::cout << "    pt   = " << truth_jets.at(jl).pt << std::endl;
0386           std::cout << "    eta  = " << truth_jets.at(jl).eta << std::endl;
0387           std::cout << "    phi  = " << truth_jets.at(jl).phi << std::endl;
0388           std::cout << " " << std::endl;
0389         }  
0390 
0391 
0392       if (truth_jets.at(0).pt > pt_cut1[0] && truth_jets.at(1).pt > pt_cut2[0])
0393         {
0394           auto h_pt1_pt2 = dynamic_cast<TH2*>(hm->getHisto("h_truth_pt1_pt2"));
0395           h_pt1_pt2->Fill(truth_jets.at(0).pt, truth_jets.at(1).pt);
0396           h_pt1_pt2->Fill(truth_jets.at(1).pt, truth_jets.at(0).pt);
0397         }
0398 
0399       float Aj_pt = (truth_jets.at(0).pt - truth_jets.at(1).pt)/(truth_jets.at(0).pt + truth_jets.at(1).pt);
0400       float xj_pt = (truth_jets.at(1).pt / truth_jets.at(0).pt);
0401 
0402       if (Verbosity())
0403         {
0404           std::cout << "---- DIJET ---- " << std::endl;
0405           std::cout << "Calculated: " << std::endl;
0406           std::cout << "    A_j   = " << Aj_pt << std::endl; 
0407           std::cout << "    x_j   = " << xj_pt << std::endl; 
0408           std::cout << "    dPhi  = " << dphi << std::endl;
0409           std::cout << " ------------------------ " << std::endl;
0410         }
0411 
0412       for (int i = 0; i < 3; i++)
0413         {
0414           if (truth_jets.at(0).pt > pt_cut1[i] && truth_jets.at(1).pt > pt_cut2[i])
0415         {
0416           auto h_dphi = dynamic_cast<TH1*>(hm->getHisto(Form("h_truth_dphi_%d", i)));
0417           h_dphi->Fill(dphi);
0418 
0419           for (int ip = 0; ip < 3; ip++)
0420             {
0421 
0422               if (dphi <= dphi_cut[ip])
0423             break;
0424 
0425               auto h_Aj = dynamic_cast<TH1*>(hm->getHisto(Form("h_truth_Aj_%d_dp%d", i, ip)));
0426               h_Aj->Fill(Aj_pt);
0427               auto h_xj = dynamic_cast<TH1*>(hm->getHisto(Form("h_truth_xj_%d_dp%d", i, ip)));
0428               h_xj->Fill(xj_pt);
0429           
0430             }
0431         }
0432         }
0433     }
0434     }
0435   if ((int) truth_smear_jets.size() >= 2)
0436     {
0437       std::sort(truth_smear_jets.begin(), truth_smear_jets.end(), [] (auto a, auto b){ return a.pt > b.pt; });
0438       float eta1 = truth_smear_jets.at(0).eta;
0439       float phi1 = truth_smear_jets.at(0).phi;
0440       float eta2 = truth_smear_jets.at(1).eta;
0441       float phi2 = truth_smear_jets.at(1).phi;
0442       if (fabs(eta1) < 0.7 && fabs(eta2) < 0.7)
0443     {
0444 
0445       float dphi = phi1 - phi2;
0446 
0447       if (dphi > TMath::Pi())
0448         {
0449           dphi = dphi - 2.*TMath::Pi();
0450         }
0451       if (dphi <= -1*TMath::Pi())
0452         {
0453           dphi = dphi + 2. * TMath::Pi();
0454         }
0455 
0456       dphi = fabs(dphi);
0457 
0458       if (dphi > TMath::Pi()) 
0459         return;
0460 
0461       if (Verbosity())
0462         {
0463           std::cout << "Truth Dijet" << std::endl;
0464           std::cout << "Leading Jet" << std::endl;
0465           int jl = 0;
0466           std::cout << "    pt   = " << truth_smear_jets.at(jl).pt << std::endl;
0467           std::cout << "    eta  = " << truth_smear_jets.at(jl).eta << std::endl;
0468           std::cout << "    phi  = " << truth_smear_jets.at(jl).phi << std::endl;
0469           std::cout << "Subleading Jet" << std::endl;
0470           jl++;
0471           std::cout << "    pt   = " << truth_smear_jets.at(jl).pt << std::endl;
0472           std::cout << "    eta  = " << truth_smear_jets.at(jl).eta << std::endl;
0473           std::cout << "    phi  = " << truth_smear_jets.at(jl).phi << std::endl;
0474           std::cout << " " << std::endl;
0475         }  
0476 
0477 
0478       if (truth_smear_jets.at(0).pt > pt_cut1[0] && truth_smear_jets.at(1).pt > pt_cut2[0])
0479         {
0480           auto h_pt1_pt2 = dynamic_cast<TH2*>(hm->getHisto("h_truth_smear_pt1_pt2"));
0481           h_pt1_pt2->Fill(truth_smear_jets.at(0).pt, truth_smear_jets.at(1).pt);
0482           h_pt1_pt2->Fill(truth_smear_jets.at(1).pt, truth_smear_jets.at(0).pt);
0483         }
0484 
0485       float Aj_pt = (truth_smear_jets.at(0).pt - truth_smear_jets.at(1).pt)/(truth_smear_jets.at(0).pt + truth_smear_jets.at(1).pt);
0486       float xj_pt = (truth_smear_jets.at(1).pt / truth_smear_jets.at(0).pt);
0487 
0488       if (Verbosity())
0489         {
0490           std::cout << "---- DIJET ---- " << std::endl;
0491           std::cout << "Calculated: " << std::endl;
0492           std::cout << "    A_j   = " << Aj_pt << std::endl; 
0493           std::cout << "    x_j   = " << xj_pt << std::endl; 
0494           std::cout << "    dPhi  = " << dphi << std::endl;
0495           std::cout << " ------------------------ " << std::endl;
0496         }
0497 
0498       for (int i = 0; i < 3; i++)
0499         {
0500           if (truth_smear_jets.at(0).pt > pt_cut1[i] && truth_smear_jets.at(1).pt > pt_cut2[i])
0501         {
0502           auto h_dphi = dynamic_cast<TH1*>(hm->getHisto(Form("h_truth_smear_dphi_%d", i)));
0503           h_dphi->Fill(dphi);
0504 
0505           for (int ip = 0; ip < 3; ip++)
0506             {
0507 
0508               if (dphi <= dphi_cut[ip])
0509             break;
0510               auto h_Aj = dynamic_cast<TH1*>(hm->getHisto(Form("h_truth_smear_Aj_%d_dp%d", i, ip)));
0511               h_Aj->Fill(Aj_pt);
0512               auto h_xj = dynamic_cast<TH1*>(hm->getHisto(Form("h_truth_smear_xj_%d_dp%d", i, ip)));
0513               h_xj->Fill(xj_pt);
0514           
0515             }
0516         }
0517         }
0518     }
0519     }
0520   return;
0521 }
0522 int DijetHistoMaker::process_event(PHCompositeNode *topNode)
0523 {
0524 
0525 
0526   _i_event++;
0527 
0528   if (!isSim)
0529     {
0530       triggeranalyzer->decodeTriggers(topNode);
0531       std::cout << triggeranalyzer->getTriggerName(17) << " : " << triggeranalyzer->getTriggerScalers(m_jet_triggernames[1]) << std::endl;
0532     }
0533   RawTowerGeomContainer *tower_geomIH = findNode::getClass<RawTowerGeomContainer>(topNode, "TOWERGEOM_HCALIN");
0534   RawTowerGeomContainer *tower_geomOH = findNode::getClass<RawTowerGeomContainer>(topNode, "TOWERGEOM_HCALOUT");
0535 
0536 
0537   std::string recoJetName = "AntiKt_Tower_r04_Sub1";
0538 
0539   JetContainer *jets_4 = findNode::getClass<JetContainer>(topNode, recoJetName);
0540   recoJetName = "AntiKt_Truth_r04";
0541   JetContainer *jets_truth_4 = findNode::getClass<JetContainer>(topNode, recoJetName);
0542 
0543   if (jets_truth_4)
0544     {
0545       if (Verbosity()) std::cout << __LINE__ << std::endl;
0546       process_truth_jets(jets_truth_4);
0547       if (Verbosity()) std::cout << __LINE__ << std::endl;
0548       
0549     }
0550 
0551   TrashInfo *trashinfo = findNode::getClass<TrashInfo>(topNode, "TrashInfo");
0552   if (!jets_4)
0553     {
0554       std::cout << " Nothing in the jets"<<std::endl;
0555       return Fun4AllReturnCodes::ABORTRUN;
0556     }
0557   int trash = 0;
0558   if (trashinfo)
0559     {
0560       trash = (trashinfo->isTrash()? 1: 0);
0561     }
0562 
0563   TowerInfoContainer *hcalin_towers = findNode::getClass<TowerInfoContainer>(topNode, m_calo_nodename + "_HCALIN");
0564   TowerInfoContainer *hcalout_towers = findNode::getClass<TowerInfoContainer>(topNode, m_calo_nodename + "_HCALOUT");
0565   TowerInfoContainer *emcalre_towers = findNode::getClass<TowerInfoContainer>(topNode, m_calo_nodename + "_CEMC_RETOWER");
0566 
0567   float background_v2 = 0;
0568   float background_Psi2 = 0;
0569   bool has_tower_background = false;
0570   TowerBackground *towBack = findNode::getClass<TowerBackground>(topNode, "TowerInfoBackground_Sub2");
0571   if (!towBack)
0572     {
0573 
0574     }
0575   else
0576     {
0577       has_tower_background = true;
0578       background_v2 = towBack->get_v2();
0579       background_Psi2 = towBack->get_Psi2();
0580     }
0581 
0582   if (!jets_4)
0583     {
0584       return Fun4AllReturnCodes::ABORTRUN;
0585     }
0586 
0587   std::vector<jetty> jets{};
0588   for (auto jet : *jets_4)
0589     {
0590       float jet_total_eT = 0;
0591       float eFrac_ihcal = 0;
0592       float eFrac_ohcal = 0;
0593       float eFrac_emcal = 0;
0594       
0595       for (auto comp : jet->get_comp_vec())
0596     {
0597       
0598       unsigned int channel = comp.second;
0599       TowerInfo *tower;
0600       float tower_eT = 0;
0601       if (comp.first == 26 || comp.first == 30)
0602         {  // IHcal
0603           tower = hcalin_towers->get_tower_at_channel(channel);
0604           if (!tower || !tower_geomIH)
0605         {
0606           continue;
0607         }
0608           if(!tower->get_isGood()) continue;
0609 
0610           unsigned int calokey = hcalin_towers->encode_key(channel);
0611 
0612           int ieta = hcalin_towers->getTowerEtaBin(calokey);
0613           int iphi = hcalin_towers->getTowerPhiBin(calokey);
0614           const RawTowerDefs::keytype key = RawTowerDefs::encode_towerid(RawTowerDefs::CalorimeterId::HCALIN, ieta, iphi);
0615           float tower_phi = tower_geomIH->get_tower_geometry(key)->get_phi();
0616           float tower_eta = tower_geomIH->get_tower_geometry(key)->get_eta();
0617           tower_eT = tower->get_energy() / std::cosh(tower_eta);
0618 
0619           if (comp.first == 30)
0620         {  // is sub1
0621           if (has_tower_background)
0622             {
0623               float UE = towBack->get_UE(1).at(ieta);
0624               float tower_UE = UE * (1 + 2 * background_v2 * std::cos(2 * (tower_phi - background_Psi2)));
0625               tower_eT = (tower->get_energy() - tower_UE) / std::cosh(tower_eta);
0626             }
0627         }
0628 
0629           eFrac_ihcal += tower_eT;
0630           jet_total_eT += tower_eT;
0631         }
0632       else if (comp.first == 27 || comp.first == 31)
0633         {  // IHcal
0634           tower = hcalout_towers->get_tower_at_channel(channel);
0635 
0636           if (!tower || !tower_geomOH)
0637         {
0638           continue;
0639         }
0640 
0641           unsigned int calokey = hcalout_towers->encode_key(channel);
0642           int ieta = hcalout_towers->getTowerEtaBin(calokey);
0643           int iphi = hcalout_towers->getTowerPhiBin(calokey);
0644           const RawTowerDefs::keytype key = RawTowerDefs::encode_towerid(RawTowerDefs::CalorimeterId::HCALOUT, ieta, iphi);
0645           float tower_phi = tower_geomOH->get_tower_geometry(key)->get_phi();
0646           float tower_eta = tower_geomOH->get_tower_geometry(key)->get_eta();
0647           tower_eT = tower->get_energy() / std::cosh(tower_eta);
0648 
0649           if (comp.first == 31)
0650         {  // is sub1
0651           if (has_tower_background)
0652             {
0653               float UE = towBack->get_UE(2).at(ieta);
0654               float tower_UE = UE * (1 + 2 * background_v2 * std::cos(2 * (tower_phi - background_Psi2)));
0655               tower_eT = (tower->get_energy() - tower_UE) / std::cosh(tower_eta);
0656             }
0657         }
0658 
0659           eFrac_ohcal += tower_eT;
0660           jet_total_eT += tower_eT;
0661         }
0662       else if (comp.first == 28 || comp.first == 29)
0663         {  // IHcal
0664           tower = emcalre_towers->get_tower_at_channel(channel);
0665 
0666           if (!tower || !tower_geomIH)
0667         {
0668           continue;
0669         }
0670 
0671           unsigned int calokey = emcalre_towers->encode_key(channel);
0672           int ieta = emcalre_towers->getTowerEtaBin(calokey);
0673           int iphi = emcalre_towers->getTowerPhiBin(calokey);
0674           const RawTowerDefs::keytype key = RawTowerDefs::encode_towerid(RawTowerDefs::CalorimeterId::HCALIN, ieta, iphi);
0675           float tower_phi = tower_geomIH->get_tower_geometry(key)->get_phi();
0676           float tower_eta = tower_geomIH->get_tower_geometry(key)->get_eta();
0677           tower_eT = tower->get_energy() / std::cosh(tower_eta);
0678 
0679           if (comp.first == 29)
0680         {  // is sub1
0681           if (has_tower_background)
0682             {
0683               float UE = towBack->get_UE(0).at(ieta);
0684               float tower_UE = UE * (1 + 2 * background_v2 * std::cos(2 * (tower_phi - background_Psi2)));
0685               tower_eT = (tower->get_energy() - tower_UE) / std::cosh(tower_eta);
0686             }
0687         }
0688 
0689 
0690           eFrac_emcal += tower_eT;
0691           jet_total_eT += tower_eT;
0692         }          
0693     }
0694       struct jetty myjet;
0695       myjet.pt = jet->get_pt();
0696       myjet.eta = jet->get_eta();
0697       myjet.phi = jet->get_phi();
0698       myjet.et = jet_total_eT;
0699       myjet.emcal = eFrac_emcal;
0700       myjet.ihcal = eFrac_ihcal;
0701       myjet.ohcal = eFrac_ohcal;
0702       jets.push_back(myjet);
0703     }
0704 
0705   if (jets.size() < 2) 
0706     return Fun4AllReturnCodes::EVENT_OK;
0707 
0708 
0709   auto pt_ordered = jets;
0710   std::sort(jets.begin(), jets.end(), [](auto a, auto b) { return a.et > b.et; });
0711   std::sort(pt_ordered.begin(), pt_ordered.end(), [](auto a, auto b) { return a.pt > b.pt; });
0712   if (pt_ordered.at(0).pt < 10 && jets.at(0).et < 10)      return Fun4AllReturnCodes::EVENT_OK;
0713 
0714   const RawTowerDefs::keytype bottomkey = RawTowerDefs::encode_towerid(RawTowerDefs::CalorimeterId::HCALIN, 0, 0);
0715   const RawTowerDefs::keytype topkey    = RawTowerDefs::encode_towerid(RawTowerDefs::CalorimeterId::HCALIN, 23, 0);
0716   float tower_eta_low = tower_geomIH->get_tower_geometry(bottomkey)->get_eta() + 0.4;
0717   float tower_eta_high = tower_geomIH->get_tower_geometry(topkey)->get_eta() - 0.4;
0718 
0719   // are top two within fiducail range.
0720   for (int ij = 0; ij < 2; ij++)
0721     {
0722       if (jets.at(ij).eta > tower_eta_high || jets.at(ij).eta < tower_eta_low) 
0723     return Fun4AllReturnCodes::EVENT_OK;
0724     }
0725 
0726   float dphi = jets.at(0).phi - jets.at(1).phi;
0727   if (dphi > TMath::Pi())
0728     {
0729       dphi = dphi - 2.*TMath::Pi();
0730     }
0731   if (dphi <= -1*TMath::Pi())
0732     {
0733       dphi = dphi + 2. * TMath::Pi();
0734     }
0735   
0736   dphi = fabs(dphi);
0737 
0738   
0739   // Get the iso
0740   bool isopt  = true;
0741   bool isoet  = true;
0742   if (jets.size() > 2)
0743     {
0744       for (int ijet = 0; ijet < (int) jets.size() - 2; ijet++)
0745     {
0746       if (jets.at(ijet+2).pt < 2 ) continue;
0747       
0748       for (int ij = 0; ij < 2; ij++)
0749         {
0750           double dR = get_Dr(jets.at(ij), jets.at(ijet+2));
0751           isoet &= (dR > isocut);
0752         }
0753     }
0754     }
0755 
0756   if (pt_ordered.size() > 2)
0757     {
0758       for (int ijet = 0; ijet < (int) pt_ordered.size() - 2; ijet++)
0759     {
0760       if (pt_ordered.at(ijet+2).pt < 2 ) continue;
0761       
0762       for (int ij = 0; ij < 2; ij++)
0763         {
0764           double dR = get_Dr(pt_ordered.at(ij), pt_ordered.at(ijet+2));
0765           isopt &= (dR > isocut);
0766         }
0767     }
0768     }
0769   if (dphi > TMath::Pi()) 
0770     return Fun4AllReturnCodes::EVENT_OK;
0771 
0772   if (Verbosity())
0773     {
0774 
0775       std::cout << "Leading Jet" << std::endl;
0776       int jl = 0;
0777       std::cout << "    pt   = " << jets.at(jl).pt << std::endl;
0778       std::cout << "    et   = " << jets.at(jl).et << std::endl;
0779       std::cout << "    eta  = " << jets.at(jl).eta << std::endl;
0780       std::cout << "    phi  = " << jets.at(jl).phi << std::endl;
0781       std::cout << "Subleading Jet" << std::endl;
0782       jl++;
0783       std::cout << "    pt   = " << jets.at(jl).pt << std::endl;
0784       std::cout << "    et   = " << jets.at(jl).et << std::endl;
0785       std::cout << "    eta  = " << jets.at(jl).eta << std::endl;
0786       std::cout << "    phi  = " << jets.at(jl).phi << std::endl;
0787       std::cout << " " << std::endl;
0788       // std::cout << "Calculated: " << std::endl;
0789       // std::cout << "    A_j   = " << Aj_pt << " ( " << Aj_et << " ) "<< std::endl; 
0790       // std::cout << "    x_j   = " << xj_pt << " ( " << xj_et << " ) "<< std::endl; 
0791       // std::cout << "    dPhi  = " << dphi << std::endl;
0792       // std::cout << " ------------------------ " << std::endl;
0793     }
0794 
0795   if (trash)
0796     {
0797       if (pt_ordered.at(0).pt > pt_cut1[0] && pt_ordered.at(1).pt > pt_cut2[0])
0798     {     
0799       auto h_trash_pt1_pt2 = dynamic_cast<TH2*>(hm->getHisto("h_trash_pt1_pt2"));
0800       h_trash_pt1_pt2->Fill(pt_ordered.at(0).pt, pt_ordered.at(1).pt);
0801       h_trash_pt1_pt2->Fill(pt_ordered.at(1).pt, pt_ordered.at(0).pt);
0802     }
0803       if (jets.at(0).et > pt_cut1[0] && jets.at(1).et > pt_cut2[0])
0804     {     
0805       auto h_trash_et1_et2 = dynamic_cast<TH2*>(hm->getHisto("h_trash_et1_et2"));
0806       h_trash_et1_et2->Fill(jets.at(0).et, jets.at(1).et);
0807       h_trash_et1_et2->Fill(jets.at(1).et, jets.at(0).et);
0808     }
0809       if (triggeranalyzer->didTriggerFire("MBD N&S >= 1"))
0810     {
0811       if (pt_ordered.at(0).pt > pt_cut1[0] && pt_ordered.at(1).pt > pt_cut2[0])
0812         {     
0813           auto h_trash_pt1_pt2_mbd = dynamic_cast<TH2*>(hm->getHisto("h_trash_pt1_pt2_mbd"));
0814           h_trash_pt1_pt2_mbd->Fill(pt_ordered.at(0).pt, pt_ordered.at(1).pt);
0815           h_trash_pt1_pt2_mbd->Fill(pt_ordered.at(1).pt, pt_ordered.at(0).pt);
0816         }
0817       if (jets.at(0).et > pt_cut1[0] && jets.at(1).et > pt_cut2[0])
0818         {     
0819           auto h_trash_et1_et2_mbd = dynamic_cast<TH2*>(hm->getHisto("h_trash_et1_et2_mbd"));
0820           h_trash_et1_et2_mbd->Fill(jets.at(0).et, jets.at(1).et);
0821           h_trash_et1_et2_mbd->Fill(jets.at(1).et, jets.at(0).et);
0822         }
0823     }
0824       for (int i = 0; i < 8; i++)
0825     {
0826       if (triggeranalyzer->didTriggerFire(m_jet_triggernames[i]))
0827         {
0828           if (pt_ordered.at(0).pt > pt_cut1[0] && pt_ordered.at(1).pt > pt_cut2[0])
0829         {                 
0830           auto h_trash_pt1_pt2_gl1 = dynamic_cast<TH2*>(hm->getHisto(Form("h_trash_pt1_pt2_gl1_%d", i)));
0831           h_trash_pt1_pt2_gl1->Fill(pt_ordered.at(0).pt, pt_ordered.at(1).pt);
0832           h_trash_pt1_pt2_gl1->Fill(pt_ordered.at(1).pt, pt_ordered.at(0).pt);
0833         }
0834           if (jets.at(0).et > pt_cut1[0] && jets.at(1).et > pt_cut2[0])
0835         {     
0836           auto h_trash_et1_et2_gl1 = dynamic_cast<TH2*>(hm->getHisto(Form("h_trash_et1_et2_gl1_%d", i)));
0837           h_trash_et1_et2_gl1->Fill(jets.at(0).et, jets.at(1).et);
0838           h_trash_et1_et2_gl1->Fill(jets.at(1).et, jets.at(0).et);
0839         }
0840         }
0841     }
0842     
0843       float Aj_pt = (pt_ordered.at(0).pt - pt_ordered.at(1).pt)/(pt_ordered.at(0).pt + pt_ordered.at(1).pt);
0844       float Aj_et = (jets.at(0).et - jets.at(1).et)/(jets.at(0).et + jets.at(1).et);
0845       float xj_pt = (pt_ordered.at(1).pt / pt_ordered.at(0).pt);
0846       float xj_et = (jets.at(1).et / jets.at(0).et);
0847 
0848       if (Verbosity())
0849     {
0850       std::cout << "---- TRASH ---- " << std::endl;
0851       std::cout << "Calculated: " << std::endl;
0852       std::cout << "    A_j   = " << Aj_pt << " ( " << Aj_et << " ) "<< std::endl; 
0853       std::cout << "    x_j   = " << xj_pt << " ( " << xj_et << " ) "<< std::endl; 
0854       std::cout << "    dPhi  = " << dphi << std::endl;
0855       std::cout << " ------------------------ " << std::endl;
0856     }
0857       bool trashalreadyfilled = false;
0858       for (int i = 0; i < 3; i++)
0859     {
0860       if (pt_ordered.at(0).pt > pt_cut1[i] && pt_ordered.at(1).pt > pt_cut2[i])
0861         {
0862           auto h_trash_dphi = dynamic_cast<TH1*>(hm->getHisto(Form("h_trash_dphi_%d", i)));
0863           h_trash_dphi->Fill(dphi);
0864           if (!isSim)
0865         {
0866           if (triggeranalyzer->didTriggerFire("MBD N&S >= 1"))
0867             {
0868               auto h_trash_dphi_mb = dynamic_cast<TH1*>(hm->getHisto(Form("h_trash_dphi_mb_%d", i)));
0869               h_trash_dphi_mb->Fill(dphi);
0870             }
0871         
0872           for (int j = 0; j < 8; j++)
0873             {
0874               if (triggeranalyzer->didTriggerFire(m_jet_triggernames[j]))
0875             {
0876               auto h_trash_dphi_gl1 = dynamic_cast<TH1*>(hm->getHisto(Form("h_trash_dphi_gl1_%d_%d", j, i)));
0877               h_trash_dphi_gl1->Fill(dphi);
0878             }
0879             }
0880         }
0881           
0882           if (i == 0 && drawDijets)
0883         {
0884           trashalreadyfilled = true;
0885           std::cout << " FOUND " << std::endl;
0886           dijeteventdisplay->FillEvent(topNode, Aj_et, dphi);
0887         }
0888           for (int ip = 0; ip < 3; ip++)
0889         {
0890           if (dphi <= dphi_cut[ip])
0891             break;
0892           auto h_trash_Aj = dynamic_cast<TH1*>(hm->getHisto(Form("h_trash_Aj_%d_dp%d", i, ip)));
0893           h_trash_Aj->Fill(Aj_pt);
0894           auto h_trash_xj = dynamic_cast<TH1*>(hm->getHisto(Form("h_trash_xj_%d_dp%d", i, ip)));
0895           h_trash_xj->Fill(xj_pt);
0896           
0897           if (!isSim)
0898             {
0899               if (triggeranalyzer->didTriggerFire("MBD N&S >= 1"))
0900             {
0901               auto h_trash_Aj_mb = dynamic_cast<TH1*>(hm->getHisto(Form("h_trash_Aj_mb_%d_dp%d", i, ip)));
0902               h_trash_Aj_mb->Fill(Aj_pt);
0903               auto h_trash_xj_mb = dynamic_cast<TH1*>(hm->getHisto(Form("h_trash_xj_mb_%d_dp%d", i, ip)));
0904               h_trash_xj_mb->Fill(xj_pt);
0905             }
0906             }
0907           for (int j = 0; j < 8; j++)
0908             {
0909               if (triggeranalyzer->didTriggerFire(m_jet_triggernames[j]))
0910             {
0911               auto h_trash_Aj_gl1 = dynamic_cast<TH1*>(hm->getHisto(Form("h_trash_Aj_gl1_%d_%d_dp%d", j, i, ip)));
0912               h_trash_Aj_gl1->Fill(Aj_pt);
0913               auto h_trash_xj_gl1 = dynamic_cast<TH1*>(hm->getHisto(Form("h_trash_xj_gl1_%d_%d_dp%d", j, i, ip)));
0914               h_trash_xj_gl1->Fill(xj_pt);
0915             }
0916             }
0917       
0918         }
0919         }
0920       if (jets.at(0).et > pt_cut1[i] && jets.at(1).et > pt_cut2[i])
0921         {
0922           auto h_trash_dphi = dynamic_cast<TH1*>(hm->getHisto(Form("h_trash_dphi_et_%d", i)));
0923           h_trash_dphi->Fill(dphi);
0924 
0925           if (!isSim)
0926             {
0927               if (triggeranalyzer->didTriggerFire("MBD N&S >= 1"))
0928             {
0929         
0930               auto h_trash_dphi_et_mb = dynamic_cast<TH1*>(hm->getHisto(Form("h_trash_dphi_et_mb_%d", i)));
0931               h_trash_dphi_et_mb->Fill(dphi);
0932             }
0933               for (int j = 0; j < 8; j++)
0934             {
0935               if (triggeranalyzer->didTriggerFire(m_jet_triggernames[j]))
0936                 {
0937                   auto h_trash_dphi_et_gl1 = dynamic_cast<TH1*>(hm->getHisto(Form("h_trash_dphi_et_gl1_%d_%d", j, i)));
0938                   h_trash_dphi_et_gl1->Fill(dphi);
0939                 }
0940             }
0941             }
0942 
0943           if (i == 0 && !trashalreadyfilled && drawDijets)
0944         {
0945           std::cout << " FOUND " << std::endl;
0946           dijeteventdisplay->FillEvent(topNode, Aj_et, dphi);
0947         }
0948           for (int ip = 0 ; ip < 3; ip++)
0949         {
0950           if (dphi <= dphi_cut[ip]) break;
0951           auto h_trash_Aj = dynamic_cast<TH1*>(hm->getHisto(Form("h_trash_Aj_et_%d_dp%d", i, ip)));
0952           h_trash_Aj->Fill(Aj_et);
0953           auto h_trash_xj = dynamic_cast<TH1*>(hm->getHisto(Form("h_trash_xj_et_%d_dp%d", i, ip)));
0954           h_trash_xj->Fill(xj_et);
0955 
0956           if (!isSim)
0957             {
0958               if (triggeranalyzer->didTriggerFire("MBD N&S >= 1"))
0959             {
0960               auto h_trash_Aj_et_mb = dynamic_cast<TH1*>(hm->getHisto(Form("h_trash_Aj_et_mb_%d_dp%d", i, ip)));
0961               h_trash_Aj_et_mb->Fill(Aj_et);
0962               auto h_trash_xj_et_mb = dynamic_cast<TH1*>(hm->getHisto(Form("h_trash_xj_et_mb_%d_dp%d", i, ip)));
0963               h_trash_xj_et_mb->Fill(xj_et);
0964             }
0965               for (int j = 0; j < 8; j++)
0966             {
0967               if (triggeranalyzer->didTriggerFire(m_jet_triggernames[j]))
0968                 {
0969                   auto h_trash_Aj_et_gl1 = dynamic_cast<TH1*>(hm->getHisto(Form("h_trash_Aj_et_gl1_%d_%d_dp%d", j, i, ip)));
0970                   h_trash_Aj_et_gl1->Fill(Aj_et);
0971                   auto h_trash_xj_et_gl1 = dynamic_cast<TH1*>(hm->getHisto(Form("h_trash_xj_et_gl1_%d_%d_dp%d", j, i, ip)));
0972                   h_trash_xj_et_gl1->Fill(xj_et);
0973                 }
0974             }
0975             }
0976         }
0977         }
0978     }
0979       return Fun4AllReturnCodes::EVENT_OK;
0980     }
0981   
0982   if (pt_ordered.at(0).pt > pt_cut1[0] && pt_ordered.at(1).pt > pt_cut2[0])
0983     {
0984       auto h_pt1_pt2 = dynamic_cast<TH2*>(hm->getHisto("h_pt1_pt2"));
0985       h_pt1_pt2->Fill(pt_ordered.at(0).pt, pt_ordered.at(1).pt);
0986       h_pt1_pt2->Fill(pt_ordered.at(1).pt, pt_ordered.at(0).pt);
0987     }
0988   if (jets.at(0).et > pt_cut1[0] && jets.at(1).et > pt_cut2[0])
0989     {
0990       auto h_et1_et2 = dynamic_cast<TH2*>(hm->getHisto("h_et1_et2"));
0991       h_et1_et2->Fill(jets.at(0).et, jets.at(1).et);
0992       h_et1_et2->Fill(jets.at(1).et, jets.at(0).et);
0993     }
0994   if (!isSim)
0995     {
0996       if (triggeranalyzer->didTriggerFire("MBD N&S >= 1"))
0997     {
0998       if (pt_ordered.at(0).pt > pt_cut1[0] && pt_ordered.at(1).pt > pt_cut2[0])
0999         {         
1000           auto h_pt1_pt2_mbd = dynamic_cast<TH2*>(hm->getHisto("h_pt1_pt2_mbd"));
1001           h_pt1_pt2_mbd->Fill(pt_ordered.at(0).pt, pt_ordered.at(1).pt);
1002           h_pt1_pt2_mbd->Fill(pt_ordered.at(1).pt, pt_ordered.at(0).pt);
1003         }
1004       if (jets.at(0).et > pt_cut1[0] && jets.at(1).et > pt_cut2[0])
1005         {
1006           auto h_et1_et2_mbd = dynamic_cast<TH2*>(hm->getHisto("h_et1_et2_mbd"));
1007           h_et1_et2_mbd->Fill(jets.at(0).et, jets.at(1).et);
1008           h_et1_et2_mbd->Fill(jets.at(1).et, jets.at(0).et);
1009         }
1010     }
1011       for (int i = 0; i < 8; i++)
1012     {
1013       if (triggeranalyzer->didTriggerFire(m_jet_triggernames[i]))
1014         {
1015           if (pt_ordered.at(0).pt > pt_cut1[0] && pt_ordered.at(1).pt > pt_cut2[0])
1016         {
1017           auto h_pt1_pt2_gl1 = dynamic_cast<TH2*>(hm->getHisto(Form("h_pt1_pt2_gl1_%d", i)));
1018           h_pt1_pt2_gl1->Fill(pt_ordered.at(0).pt, pt_ordered.at(1).pt);
1019           h_pt1_pt2_gl1->Fill(pt_ordered.at(1).pt, pt_ordered.at(0).pt);
1020         }
1021           if (jets.at(0).et > pt_cut1[0] && jets.at(1).et > pt_cut2[0])
1022         {
1023           auto h_et1_et2_gl1 = dynamic_cast<TH2*>(hm->getHisto(Form("h_et1_et2_gl1_%d", i)));
1024           h_et1_et2_gl1->Fill(jets.at(0).et, jets.at(1).et);
1025           h_et1_et2_gl1->Fill(jets.at(1).et, jets.at(0).et);
1026         }
1027         }
1028     }
1029     }
1030 
1031   float Aj_pt = (pt_ordered.at(0).pt - pt_ordered.at(1).pt)/(pt_ordered.at(0).pt + pt_ordered.at(1).pt);
1032   float Aj_et = (jets.at(0).et - jets.at(1).et)/(jets.at(0).et + jets.at(1).et);
1033   float xj_pt = (pt_ordered.at(1).pt / pt_ordered.at(0).pt);
1034   float xj_et = (jets.at(1).et / jets.at(0).et);
1035 
1036   if (Verbosity())
1037     {
1038       std::cout << "---- DIJET ---- " << std::endl;
1039       std::cout << "Calculated: " << std::endl;
1040       std::cout << "    A_j   = " << Aj_pt << " ( " << Aj_et << " ) "<< std::endl; 
1041       std::cout << "    x_j   = " << xj_pt << " ( " << xj_et << " ) "<< std::endl; 
1042       std::cout << "    dPhi  = " << dphi << std::endl;
1043       std::cout << " ------------------------ " << std::endl;
1044     }
1045   bool alreadyfilled = false;
1046   for (int i = 0; i < 3; i++)
1047     {
1048       if (pt_ordered.at(0).pt > pt_cut1[i] && pt_ordered.at(1).pt > pt_cut2[i])
1049     {
1050       auto h_dphi = dynamic_cast<TH1*>(hm->getHisto(Form("h_dphi_%d", i)));
1051       h_dphi->Fill(dphi);
1052 
1053       if (!isSim)
1054         {
1055           if (i == 0 && drawDijets)
1056         {
1057           alreadyfilled = true;
1058           std::cout << " FOUND " << std::endl;
1059           dijeteventdisplay->FillEvent(topNode, Aj_et, dphi);
1060         }
1061           if (triggeranalyzer->didTriggerFire("MBD N&S >= 1"))
1062         {
1063           auto h_dphi_mb = dynamic_cast<TH1*>(hm->getHisto(Form("h_dphi_mb_%d", i)));
1064           h_dphi_mb->Fill(dphi);
1065         }
1066         
1067           for (int j = 0; j < 8; j++)
1068         {
1069           if (triggeranalyzer->didTriggerFire(m_jet_triggernames[j]))
1070             {
1071               auto h_dphi_gl1 = dynamic_cast<TH1*>(hm->getHisto(Form("h_dphi_gl1_%d_%d", j, i)));
1072               h_dphi_gl1->Fill(dphi);
1073             }
1074         }
1075         }
1076       for (int ip = 0; ip < 3; ip++)
1077         {
1078           if (dphi <= dphi_cut[ip]) break;
1079           
1080           auto h_Aj = dynamic_cast<TH1*>(hm->getHisto(Form("h_Aj_%d_dp%d", i, ip)));
1081           h_Aj->Fill(Aj_pt);
1082           auto h_xj = dynamic_cast<TH1*>(hm->getHisto(Form("h_xj_%d_dp%d", i, ip)));
1083           h_xj->Fill(xj_pt);
1084 
1085           auto h_Ajiso = dynamic_cast<TH1*>(hm->getHisto(Form("h_Aj_iso%d_%d_dp%d", (isopt?1:0), i, ip)));
1086           h_Ajiso->Fill(Aj_pt);
1087           auto h_xjiso = dynamic_cast<TH1*>(hm->getHisto(Form("h_xj_iso%d_%d_dp%d", (isopt?1:0), i, ip)));
1088           h_xjiso->Fill(xj_pt);
1089 
1090           if (!isSim)
1091         {
1092           if (i == 0 && drawDijets)
1093             {
1094               alreadyfilled = true;
1095               std::cout << " FOUND " << std::endl;
1096               dijeteventdisplay->FillEvent(topNode, Aj_et, dphi);
1097             }
1098           if (triggeranalyzer->didTriggerFire("MBD N&S >= 1"))
1099             {
1100               auto h_Aj_mb = dynamic_cast<TH1*>(hm->getHisto(Form("h_Aj_mb_%d_dp%d", i, ip)));
1101               h_Aj_mb->Fill(Aj_pt);
1102               auto h_xj_mb = dynamic_cast<TH1*>(hm->getHisto(Form("h_xj_mb_%d_dp%d", i, ip)));
1103               h_xj_mb->Fill(xj_pt);
1104             }
1105         
1106           for (int j = 0; j < 8; j++)
1107             {
1108               if (triggeranalyzer->didTriggerFire(m_jet_triggernames[j]))
1109             {
1110               auto h_Aj_gl1 = dynamic_cast<TH1*>(hm->getHisto(Form("h_Aj_gl1_%d_%d_dp%d", j, i, ip)));
1111               h_Aj_gl1->Fill(Aj_pt);
1112               auto h_xj_gl1 = dynamic_cast<TH1*>(hm->getHisto(Form("h_xj_gl1_%d_%d_dp%d", j, i, ip)));
1113               h_xj_gl1->Fill(xj_pt);
1114             }
1115             }
1116         }
1117         }
1118     }
1119       if (jets.at(0).et > pt_cut1[i] && jets.at(1).et > pt_cut2[i])
1120     {
1121       auto h_dphi = dynamic_cast<TH1*>(hm->getHisto(Form("h_dphi_et_%d", i)));
1122       h_dphi->Fill(dphi);
1123       if (!isSim)
1124         {
1125           auto h_dphi_et_mb = dynamic_cast<TH1*>(hm->getHisto(Form("h_dphi_et_mb_%d", i)));
1126           h_dphi_et_mb->Fill(dphi);
1127           for (int j = 0; j < 8; j++)
1128         {
1129           if (triggeranalyzer->didTriggerFire(m_jet_triggernames[j]))
1130             {
1131               auto h_dphi_et_gl1 = dynamic_cast<TH1*>(hm->getHisto(Form("h_dphi_et_gl1_%d_%d", j, i)));
1132               h_dphi_et_gl1->Fill(dphi);
1133             }
1134         }
1135 
1136         }
1137       for (int ip = 0 ; ip < 3; ip++)
1138         {
1139           if (dphi <= dphi_cut[ip]) break;
1140 
1141           auto h_Aj = dynamic_cast<TH1*>(hm->getHisto(Form("h_Aj_et_%d_dp%d", i, ip)));
1142           h_Aj->Fill(Aj_et);
1143           auto h_xj = dynamic_cast<TH1*>(hm->getHisto(Form("h_xj_et_%d_dp%d", i, ip)));
1144           h_xj->Fill(xj_et);
1145           auto h_Ajiso = dynamic_cast<TH1*>(hm->getHisto(Form("h_Aj_iso%d_%d_dp%d", (isoet?1:0), i, ip)));
1146           h_Ajiso->Fill(Aj_et);
1147           auto h_xjiso = dynamic_cast<TH1*>(hm->getHisto(Form("h_xj_iso%d_%d_dp%d", (isoet?1:0), i, ip)));
1148           h_xjiso->Fill(xj_et);
1149 
1150           if (!isSim)
1151         {
1152           if (i == 0 && !alreadyfilled && drawDijets)
1153             {
1154               std::cout << " FOUND " << std::endl;
1155               dijeteventdisplay->FillEvent(topNode, Aj_et, dphi);
1156             }
1157           if (triggeranalyzer->didTriggerFire("MBD N&S >= 1"))
1158             {
1159               auto h_Aj_et_mb = dynamic_cast<TH1*>(hm->getHisto(Form("h_Aj_et_mb_%d_dp%d", i, ip)));
1160               h_Aj_et_mb->Fill(Aj_et);
1161               auto h_xj_et_mb = dynamic_cast<TH1*>(hm->getHisto(Form("h_xj_et_mb_%d_dp%d", i, ip)));
1162               h_xj_et_mb->Fill(xj_et);
1163             }
1164           
1165           for (int j = 0; j < 8; j++)
1166             {
1167               if (triggeranalyzer->didTriggerFire(m_jet_triggernames[j]))
1168             {
1169               auto h_Aj_et_gl1 = dynamic_cast<TH1*>(hm->getHisto(Form("h_Aj_et_gl1_%d_%d_dp%d", j, i, ip)));
1170               h_Aj_et_gl1->Fill(Aj_et);
1171               auto h_xj_et_gl1 = dynamic_cast<TH1*>(hm->getHisto(Form("h_xj_et_gl1_%d_%d_dp%d", j, i, ip)));
1172               h_xj_et_gl1->Fill(xj_et);
1173             }
1174             }
1175         }
1176         }
1177     }
1178     }  
1179   return Fun4AllReturnCodes::EVENT_OK;
1180 }
1181 
1182 
1183 
1184 void DijetHistoMaker::GetNodes(PHCompositeNode* topNode)
1185 {
1186 
1187 
1188 }
1189 
1190 int DijetHistoMaker::ResetEvent(PHCompositeNode *topNode)
1191 {
1192 
1193   return Fun4AllReturnCodes::EVENT_OK;
1194 }
1195 
1196 double DijetHistoMaker::get_Dr(struct jetty jet1, struct jetty jet2)
1197 {
1198   float dphi = jet1.phi - jet2.phi;
1199 
1200   if (dphi > TMath::Pi())
1201     {
1202       dphi = dphi - 2.*TMath::Pi();
1203     }
1204   if (dphi <= -1*TMath::Pi())
1205     {
1206       dphi = dphi + 2. * TMath::Pi();
1207     }
1208 
1209   return sqrt(TMath::Power(dphi, 2) + TMath::Power(jet1.eta - jet2.eta, 2));
1210 }
1211 
1212 //____________________________________________________________________________..
1213 int DijetHistoMaker::EndRun(const int runnumber)
1214 {
1215   return Fun4AllReturnCodes::EVENT_OK;
1216 }
1217 
1218 //____________________________________________________________________________..
1219 int DijetHistoMaker::End(PHCompositeNode *topNode)
1220 {
1221   if (Verbosity() > 0)
1222     {
1223       std::cout << "DijetHistoMaker::End(PHCompositeNode *topNode) This is the End..." << std::endl;
1224     }
1225   std::cout<<"Total events: "<<_i_event<<std::endl;
1226   hm->dumpHistos(_foutname.c_str());
1227   if (!isSim && drawDijets) dijeteventdisplay->Dump();
1228   return Fun4AllReturnCodes::EVENT_OK;
1229 }
1230 
1231 //____________________________________________________________________________..
1232 int DijetHistoMaker::Reset(PHCompositeNode *topNode)
1233 {
1234   if (Verbosity() > 0)
1235     {
1236       std::cout << "DijetHistoMaker::Reset(PHCompositeNode *topNode) being Reset" << std::endl;
1237     }
1238   return Fun4AllReturnCodes::EVENT_OK;
1239 }