rivet is hosted by Hepforge, IPPP Durham
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 }