ATLAS_2015_I1393758.cc
Go to the documentation of this file.
00001 #include "Rivet/Analysis.hh" 00002 #include "Rivet/Projections/FinalState.hh" 00003 #include "Rivet/Projections/FastJets.hh" 00004 00005 namespace Rivet { 00006 00007 class ATLAS_2015_I1393758 : public Analysis { 00008 00009 public: 00010 00011 /// Constructor 00012 DEFAULT_RIVET_ANALYSIS_CTOR(ATLAS_2015_I1393758); 00013 00014 public: 00015 00016 void init() { 00017 00018 addProjection(FastJets(FinalState(), FastJets::ANTIKT, 0.4), "Jets"); 00019 00020 forward_kappa3 = bookProfile1D(1, 1, 1); 00021 forward_kappa5 = bookProfile1D(2, 1, 1); 00022 forward_kappa7 = bookProfile1D(3, 1, 1); 00023 00024 central_kappa3 = bookProfile1D(4, 1, 1); 00025 central_kappa5 = bookProfile1D(5, 1, 1); 00026 central_kappa7 = bookProfile1D(6, 1, 1); 00027 00028 forwardRMS_kappa3 = bookScatter2D("d07-x01-y01", true); 00029 forwardRMS_kappa5 = bookScatter2D("d08-x01-y01", true); 00030 forwardRMS_kappa7 = bookScatter2D("d09-x01-y01", true); 00031 00032 centralRMS_kappa3 = bookScatter2D("d10-x01-y01", true); 00033 centralRMS_kappa5 = bookScatter2D("d11-x01-y01", true); 00034 centralRMS_kappa7 = bookScatter2D("d12-x01-y01", true); 00035 00036 } 00037 00038 /// Perform the per-event analysis 00039 void analyze(const Event& event) { 00040 const double weight = event.weight(); 00041 00042 Jets m_goodJets = applyProjection<JetAlg>(event, "Jets").jetsByPt(Cuts::pT > 25*GeV && Cuts::abseta < 2.1); 00043 00044 if (m_goodJets.size() < 2) vetoEvent; 00045 if (m_goodJets[0].pT() < 50*GeV) vetoEvent; 00046 if (m_goodJets[1].pT() < 50*GeV) vetoEvent; 00047 if (fabs(1.0 - m_goodJets[0].pT()/m_goodJets[1].pT()) > 0.5) vetoEvent; 00048 00049 bool check = m_goodJets[0].abseta() < m_goodJets[1].abseta(); 00050 int pos_f = int(check); 00051 int pos_c = int(!check); 00052 00053 double kappa3_f = CalculateJetCharge(m_goodJets[pos_f], 0.3, 0.5, 1.8); 00054 double kappa5_f = CalculateJetCharge(m_goodJets[pos_f], 0.5, 0.5, 1.2); 00055 double kappa7_f = CalculateJetCharge(m_goodJets[pos_f], 0.7, 0.5, 0.9); 00056 double pT_f = m_goodJets[pos_f].pT(); 00057 00058 double kappa3_c = CalculateJetCharge(m_goodJets[pos_c], 0.3, 0.5, 1.8); 00059 double kappa5_c = CalculateJetCharge(m_goodJets[pos_c], 0.5, 0.5, 1.2); 00060 double kappa7_c = CalculateJetCharge(m_goodJets[pos_c], 0.7, 0.5, 0.9); 00061 double pT_c = m_goodJets[pos_c].pT(); 00062 00063 forward_kappa3->fill(pT_f, kappa3_f, weight); 00064 forward_kappa5->fill(pT_f, kappa5_f, weight); 00065 forward_kappa7->fill(pT_f, kappa7_f, weight); 00066 00067 central_kappa3->fill(pT_c, kappa3_c, weight); 00068 central_kappa5->fill(pT_c, kappa5_c, weight); 00069 central_kappa7->fill(pT_c, kappa7_c, weight); 00070 } 00071 00072 double CalculateJetCharge(Jet& jet, double kappa=0.5, double pTcut=0.5, double Qmax=1.2) { 00073 double PTkap = pow(jet.momentum().pT(),kappa); 00074 double jetcharge = 0.; 00075 foreach (const Particle& p, jet.particles()) { 00076 if (p.pT() < pTcut) continue; 00077 if (p.threeCharge()) jetcharge += (p.threeCharge()/3.)*pow(p.pT(),kappa)/PTkap; 00078 } 00079 //Overflow and underflow 00080 if (jetcharge > Qmax) jetcharge = Qmax*0.9999; 00081 if (jetcharge < -Qmax) jetcharge = -Qmax*0.9999; 00082 return jetcharge; 00083 } 00084 00085 /// Normalise histograms etc., after the run 00086 void finalize() { 00087 00088 if (numEvents() > 2) { 00089 for (unsigned int i = 0; i < forward_kappa3->numBins(); ++i) { 00090 double stdv_fkappa3 = forward_kappa3->bin(i).numEntries() > 1? forward_kappa3->bin(i).stdDev() : 0.0; 00091 //See Eq. 3 for the factor of two: https://web.eecs.umich.edu/~fessler/papers/files/tr/stderr.pdf 00092 double yerr_fkappa3 = safediv(sqrt(forward_kappa3->bin(i).sumW2()), 2.*forward_kappa3->bin(i).sumW()); 00093 forwardRMS_kappa3->point(i).setY(stdv_fkappa3, yerr_fkappa3); 00094 00095 double stdv_fkappa5 = forward_kappa5->bin(i).numEntries() > 1? forward_kappa5->bin(i).stdDev() : 0.0; 00096 double yerr_fkappa5 = safediv(sqrt(forward_kappa5->bin(i).sumW2()), 2.*forward_kappa5->bin(i).sumW()); 00097 forwardRMS_kappa5->point(i).setY(stdv_fkappa5, yerr_fkappa5); 00098 00099 double stdv_fkappa7 = forward_kappa7->bin(i).numEntries() > 1? forward_kappa7->bin(i).stdDev() : 0.0; 00100 double yerr_fkappa7 = safediv(sqrt(forward_kappa7->bin(i).sumW2()), 2.*forward_kappa7->bin(i).sumW()); 00101 forwardRMS_kappa7->point(i).setY(stdv_fkappa7, yerr_fkappa7); 00102 00103 double stdv_ckappa3 = central_kappa3->bin(i).numEntries() > 1? central_kappa3->bin(i).stdDev() : 0.0; 00104 double yerr_ckappa3 = safediv(sqrt(central_kappa3->bin(i).sumW2()), 2.*central_kappa3->bin(i).sumW()); 00105 centralRMS_kappa3->point(i).setY(stdv_ckappa3, yerr_ckappa3); 00106 00107 double stdv_ckappa5 = central_kappa5->bin(i).numEntries() > 1? central_kappa5->bin(i).stdDev() : 0.0; 00108 double yerr_ckappa5 = safediv(sqrt(central_kappa5->bin(i).sumW2()), 2.*central_kappa5->bin(i).sumW()); 00109 centralRMS_kappa5->point(i).setY(stdv_ckappa5, yerr_ckappa5); 00110 00111 double stdv_ckappa7 = central_kappa7->bin(i).numEntries() > 1? central_kappa7->bin(i).stdDev() : 0.0; 00112 double yerr_ckappa7 = safediv(sqrt(central_kappa7->bin(i).sumW2()), 2.*central_kappa7->bin(i).sumW()); 00113 centralRMS_kappa7->point(i).setY(stdv_ckappa7, yerr_ckappa7); 00114 00115 } 00116 } 00117 00118 } 00119 00120 00121 private: 00122 00123 Profile1DPtr forward_kappa3; 00124 Profile1DPtr forward_kappa5; 00125 Profile1DPtr forward_kappa7; 00126 00127 Profile1DPtr central_kappa3; 00128 Profile1DPtr central_kappa5; 00129 Profile1DPtr central_kappa7; 00130 00131 Scatter2DPtr forwardRMS_kappa3; 00132 Scatter2DPtr forwardRMS_kappa5; 00133 Scatter2DPtr forwardRMS_kappa7; 00134 00135 Scatter2DPtr centralRMS_kappa3; 00136 Scatter2DPtr centralRMS_kappa5; 00137 Scatter2DPtr centralRMS_kappa7; 00138 00139 }; 00140 00141 // The hook for the plugin system 00142 DECLARE_RIVET_PLUGIN(ATLAS_2015_I1393758); 00143 } Generated on Tue Dec 13 2016 16:32:35 for The Rivet MC analysis system by ![]() |