diff --git a/analyses/pluginHERA/H1_2007_I746380.cc b/analyses/pluginHERA/H1_2007_I746380.cc --- a/analyses/pluginHERA/H1_2007_I746380.cc +++ b/analyses/pluginHERA/H1_2007_I746380.cc @@ -1,540 +1,545 @@ // -*- C++ -*- #include "Rivet/Analysis.hh" #include "Rivet/Projections/Beam.hh" #include "Rivet/Projections/FinalState.hh" #include "Rivet/Projections/DISKinematics.hh" #include "Rivet/Projections/DISFinalState.hh" #include "Rivet/Projections/FastJets.hh" namespace Rivet { namespace H1_2007_I746380_PROJECTIONS { - // Projection to find the largest gaps and the masses of the two - // systems separated by the gap. Based on the HZTools gap-finding - // method (hzhadgap.F). Note that gaps are found in the HCM frame. - // Author Christine O. Rasmussen. + + /// Projection to find the largest gaps and the masses of the two + /// systems separated by the gap. Based on the HZTools gap-finding + /// method (hzhadgap.F). Note that gaps are found in the HCM frame. + /// + /// @author Christine O. Rasmussen. class RapidityGap : public Projection { public: /// Type of DIS boost to apply enum Frame { HCM, LAB, XCM }; RapidityGap() { setName("RapidityGap"); addProjection(DISKinematics(), "DISKIN"); addProjection(DISFinalState(DISFinalState::HCM), "DISFS"); } DEFAULT_RIVET_PROJ_CLONE(RapidityGap); const double M2X() const {return _M2X;} const double M2Y() const {return _M2Y;} const double t() const {return _t;} const double gap() const {return _gap;} const double gapUpp() const {return _gapUpp;} const double gapLow() const {return _gapLow;} const double EpPzX(Frame f) const { if (f == LAB) return _ePpzX_LAB; else if (f == XCM) return _ePpzX_XCM; else return _ePpzX_HCM; } const double EmPzX(Frame f) const { if (f == LAB) return _eMpzX_LAB; else if (f == XCM) return _eMpzX_XCM; else return _eMpzX_HCM; } const FourMomentum pX(Frame f) const { if (f == LAB) return _momX_LAB; else if (f == XCM) return _momX_XCM; else return _momX_HCM; } const FourMomentum pY(Frame f) const { if (f == LAB) return _momY_LAB; else if (f == XCM) return _momY_XCM; else return _momY_HCM; } const Particles& systemX(Frame f) const { if (f == LAB) return _pX_LAB; else if (f == XCM) return _pX_XCM; else return _pX_HCM; } const Particles& systemY(Frame f) const { if (f == LAB) return _pY_LAB; else if (f == XCM) return _pY_XCM; else return _pY_HCM; } protected: virtual int compare(const Projection& p) const { const RapidityGap& other = pcast(p); return mkNamedPCmp(other, "DISKIN") || mkNamedPCmp(other, "DISFS"); } virtual void project(const Event& e){ const DISKinematics& dk = apply(e, "DISKIN"); const Particles& p = apply(e, "DISFS").particles(cmpMomByEta); findgap(p, dk); } void clearAll(){ _M2X = _M2Y = _t = _gap = 0.; _gapUpp = _gapLow = -8.; _ePpzX_HCM = _eMpzX_HCM =_ePpzX_LAB = _eMpzX_LAB = _ePpzX_XCM = _eMpzX_XCM = 0.; _momX_HCM.setPE(0., 0., 0., 0.); _momY_HCM.setPE(0., 0., 0., 0.); _momX_XCM.setPE(0., 0., 0., 0.); _momY_XCM.setPE(0., 0., 0., 0.); _momX_LAB.setPE(0., 0., 0., 0.); _momY_LAB.setPE(0., 0., 0., 0.); _pX_HCM.clear(); _pY_HCM.clear(); _pX_XCM.clear(); _pY_XCM.clear(); _pX_LAB.clear(); _pY_LAB.clear(); } void findgap(const Particles& particles, const DISKinematics& diskin){ clearAll(); // Begin by finding largest gap and gapedges between all final // state particles in HCM frame. int nP = particles.size(); int dir = diskin.orientation(); for (int i = 0; i < nP-1; ++i){ double tmpGap = abs(particles[i+1].eta() - particles[i].eta()); if (tmpGap > _gap) { _gap = tmpGap; _gapLow = (dir > 0) ? particles[i].eta() : dir * particles[i+1].eta(); _gapUpp = (dir > 0) ? particles[i+1].eta() : dir * particles[i].eta(); } } // Define the two systems X and Y. Particles tmp_pX, tmp_pY; foreach (const Particle& ip, particles) { if (dir * ip.eta() > _gapLow) tmp_pX.push_back(ip); else tmp_pY.push_back(ip); } Particles pX, pY; pX = (dir < 0) ? tmp_pY : tmp_pX; pY = (dir < 0) ? tmp_pX : tmp_pY; // Find variables related to HCM frame. // Note that HCM has photon along +z, as opposed to // H1 where proton is along +z. This results in a sign change // as compared to H1 papers! - + // X - side FourMomentum momX; foreach (const Particle& jp, pX) { momX += jp.momentum(); _ePpzX_HCM += jp.E() - jp.pz(); // Sign + => - _eMpzX_HCM += jp.E() + jp.pz(); // Sign - => + } _momX_HCM = momX; _pX_HCM = pX; _M2X = _momX_HCM.mass2(); - + // Y - side FourMomentum momY; foreach (const Particle& kp, pY) momY += kp.momentum(); _momY_HCM = momY; _pY_HCM = pY; _M2Y = _momY_HCM.mass2(); // Find variables related to LAB frame const LorentzTransform hcmboost = diskin.boostHCM(); const LorentzTransform hcminverse = hcmboost.inverse(); _momX_LAB = hcminverse.transform(_momX_HCM); _momY_LAB = hcminverse.transform(_momY_HCM); // Find momenta in XCM frame. Note that it is HCM frame that is // boosted, resulting in a sign change later! const bool doXCM = (momX.betaVec().mod2() < 1.); if (doXCM) { const LorentzTransform xcmboost = LorentzTransform::mkFrameTransformFromBeta(momX.betaVec()); _momX_XCM = xcmboost.transform(momX); _momY_XCM = xcmboost.transform(momY); } - + foreach (const Particle& jp, pX) { - // Boost from HCM to LAB. + // Boost from HCM to LAB. FourMomentum lab = hcminverse.transform(jp.momentum()); _ePpzX_LAB += lab.E() + dir * lab.pz(); _eMpzX_LAB += lab.E() - dir * lab.pz(); Particle plab = jp; plab.setMomentum(lab); _pX_LAB.push_back(plab); // Set XCM. Note that since HCM frame is boosted to XCM frame, // we have a sign change if (doXCM) { const LorentzTransform xcmboost = LorentzTransform::mkFrameTransformFromBeta(_momX_HCM.betaVec()); FourMomentum xcm = xcmboost.transform(jp.momentum()); _ePpzX_XCM += xcm.E() - xcm.pz(); // Sign + => - _eMpzX_XCM += xcm.E() + xcm.pz(); // Sign - => + Particle pxcm = jp; pxcm.setMomentum(xcm); _pX_XCM.push_back(pxcm); } } foreach (const Particle& jp, pY) { // Boost from HCM to LAB FourMomentum lab = hcminverse.transform(jp.momentum()); Particle plab = jp; plab.setMomentum(lab); _pY_LAB.push_back(plab); // Boost from HCM to XCM if (doXCM) { const LorentzTransform xcmboost = LorentzTransform::mkFrameTransformFromBeta(_momX_HCM.betaVec()); FourMomentum xcm = xcmboost.transform(jp.momentum()); Particle pxcm = jp; pxcm.setMomentum(xcm); _pY_XCM.push_back(pxcm); } } // Find t: Currently can only handle gap on proton side. // @TODO: Expand to also handle gap on photon side // Boost p from LAB to HCM frame to find t. const FourMomentum proton = hcmboost.transform(diskin.beamHadron().momentum()); FourMomentum pPom = proton - _momY_HCM; _t = pPom * pPom; } private: double _M2X, _M2Y, _t; double _gap, _gapUpp, _gapLow; double _ePpzX_LAB, _eMpzX_LAB, _ePpzX_HCM, _eMpzX_HCM, _ePpzX_XCM, _eMpzX_XCM; FourMomentum _momX_HCM, _momY_HCM,_momX_LAB, _momY_LAB, _momX_XCM, _momY_XCM; Particles _pX_HCM, _pY_HCM, _pX_LAB, _pY_LAB, _pX_XCM, _pY_XCM; }; - // Projection to boost system X (photon+Pomeron) particles into its rest frame. - // Author Ilkka Helenius + /// Projection to boost system X (photon+Pomeron) particles into its rest frame. + /// + /// @author Ilkka Helenius class BoostedXSystem : public FinalState { public: BoostedXSystem(const FinalState& fs) { setName("BoostedXSystem"); declare(fs,"FS"); addProjection(RapidityGap(), "RAPGAP"); } // Return the boost to XCM frame. const LorentzTransform& boost() const { return _boost; } DEFAULT_RIVET_PROJ_CLONE(BoostedXSystem); protected: // Apply the projection on the supplied event. void project(const Event& e){ const RapidityGap& rg = apply(e, "RAPGAP"); // Total momentum of the system X. const FourMomentum pX = rg.pX(RapidityGap::HCM); // Reset the boost. Is there a separate method for this? _boost = combine(_boost, _boost.inverse()); // Define boost only when numerically safe, otherwise negligible. if (pX.betaVec().mod2() < 1.) _boost = LorentzTransform::mkFrameTransformFromBeta(pX.betaVec()); // Boost the particles from system X. _theParticles.clear(); _theParticles.reserve(rg.systemX(RapidityGap::HCM).size()); for (const Particle& p : rg.systemX(RapidityGap::HCM)) { Particle temp = p; temp.setMomentum(_boost.transform(temp.momentum())); _theParticles.push_back(temp); } } // Compare projections. int compare(const Projection& p) const { const BoostedXSystem& other = pcast(p); return mkNamedPCmp(other, "RAPGAP") || mkNamedPCmp(other, "FS"); } private: LorentzTransform _boost; }; } + + /// @brief H1 diffractive dijets /// /// Diffractive dijets H1 with 920 GeV p and 27.5 GeV e /// Note tagged protons! /// /// @author Christine O. Rasmussen class H1_2007_I746380 : public Analysis { public: typedef H1_2007_I746380_PROJECTIONS::RapidityGap RapidityGap; typedef H1_2007_I746380_PROJECTIONS::BoostedXSystem BoostedXSystem; /// Constructor DEFAULT_RIVET_ANALYSIS_CTOR(H1_2007_I746380); /// @name Analysis methods //@{ // Book projections and histograms void init() { declare(DISKinematics(), "Kinematics"); const DISFinalState& disfs = declare(DISFinalState(DISFinalState::HCM), "DISFS"); const BoostedXSystem& disfsXcm = declare( BoostedXSystem(disfs), "BoostedXFS"); declare(FastJets(disfsXcm, fastjet::JetAlgorithm::kt_algorithm, fastjet::RecombinationScheme::pt_scheme, 1.0, JetAlg::ALL_MUONS, JetAlg::NO_INVISIBLES, nullptr), "DISFSJets"); declare(RapidityGap(), "RapidityGap"); // Book histograms from REF data _h_DIS_dsigdzPom = bookHisto1D(1, 1, 1); _h_DIS_dsigdlogXpom = bookHisto1D(2, 1, 1); _h_DIS_dsigdW = bookHisto1D(3, 1, 1); _h_DIS_dsigdQ2 = bookHisto1D(4, 1, 1); _h_DIS_dsigdEtJet1 = bookHisto1D(5, 1, 1); _h_DIS_dsigdAvgEta = bookHisto1D(6, 1, 1); _h_DIS_dsigdDeltaEta = bookHisto1D(7, 1, 1); _h_PHO_dsigdzPom = bookHisto1D(8, 1, 1); _h_PHO_dsigdxGam = bookHisto1D(9, 1, 1); _h_PHO_dsigdlogXpom = bookHisto1D(10, 1, 1); _h_PHO_dsigdW = bookHisto1D(11, 1, 1); _h_PHO_dsigdEtJet1 = bookHisto1D(12, 1, 1); _h_PHO_dsigdAvgEta = bookHisto1D(13, 1, 1); _h_PHO_dsigdDeltaEta = bookHisto1D(14, 1, 1); _h_PHO_dsigdMjets = bookHisto1D(15, 1, 1); isDIS = false; nVeto0 = 0; nVeto1 = 0; nVeto2 = 0; nVeto3 = 0; nVeto4 = 0; nVeto5 = 0; nPHO = 0; nDIS = 0; } // Do the analysis void analyze(const Event& event) { // Event weight const double weight = event.weight(); isDIS = false; // Projections - special handling of events where no proton found: const RapidityGap& rg = apply(event, "RapidityGap"); const DISKinematics& kin = apply(event, "Kinematics"); const BoostedXSystem& disfsXcm = apply( event, "BoostedXFS"); // Determine kinematics: H1 has +z = proton direction int dir = kin.orientation(); double W2 = kin.W2(); double W = sqrt(W2); double y = kin.y(); double Q2 = kin.Q2(); // Separate into DIS and PHO regimes else veto if (!inRange(W, 165.*GeV, 242.*GeV)) vetoEvent; if (Q2 < 0.01*GeV2) { isDIS = false; ++nPHO; } else if (inRange(Q2, 4.0*GeV2, 80.*GeV2)) { isDIS = true; ++nDIS; } else { vetoEvent; } ++nVeto0; // Find diffractive variables as defined in paper. const double M2Y = rg.M2Y(); const double M2X = rg.M2X(); const double abst = abs(rg.t()); const double xPom = (isDIS) ? (Q2 + M2X) / (Q2 + W2) : rg.EpPzX(RapidityGap::LAB) / (2. * kin.beamHadron().E()); // Veto if outside allowed region if (sqrt(M2Y) > 1.6*GeV) vetoEvent; ++nVeto1; if (abst > 1.0*GeV2) vetoEvent; ++nVeto2; if (xPom > 0.03) vetoEvent; ++nVeto3; // Jet selection. Note jets are found in photon-proton (XCM) // frame, but eta cut is applied in lab frame! Cut jetcuts = Cuts::Et > 4.* GeV; Jets jets = apply(event, "DISFSJets").jets(jetcuts, cmpMomByEt); // Veto if not dijets and if Et_j1 < 5.0 if (jets.size() < 2) vetoEvent; if (jets[0].Et() < 5.*GeV) vetoEvent; ++nVeto4; // Find Et_jet1 and deltaEta* in XCM frame double EtJet1 = jets[0].Et() * GeV; double etaXCMJet1 = jets[0].eta(); double etaXCMJet2 = jets[1].eta(); double deltaEtaJets = abs(etaXCMJet1 - etaXCMJet2); // Transform from XCM to HCM const LorentzTransform xcmboost = disfsXcm.boost(); for (int i = 0; i < 2; ++i) jets[i].transformBy(xcmboost.inverse()); // Find mass of jets and EpPz, EmPz of jets FourMomentum momJets = jets[0].momentum() + jets[1].momentum(); double M2jets = momJets.mass2(); double EpPzJets = 0.; double EmPzJets = 0.; // DIS variables are found in XCM frame, so boost back again if (isDIS){ for (int i = 0; i < 2; ++i) jets[i].transformBy(xcmboost); } // Note sign change wrt. H1 because photon is in +z direction // Jets in HCM so no need to consider orientation. for (int i = 0; i < 2; ++i){ EpPzJets += jets[i].E() - jets[i].pz(); // Sign: + => - EmPzJets += jets[i].E() + jets[i].pz(); // Sign: - => + } // Transform the jets from HCM to LAB frame where eta cut is // applied for photoproduction. const LorentzTransform hcmboost = kin.boostHCM(); for (int i = 0; i < 2; ++i) jets[i].transformBy(hcmboost.inverse()); double etaLabJet1 = dir * jets[0].eta(); double etaLabJet2 = dir * jets[1].eta(); double etaMin = (isDIS) ? -3. : -1.; double etaMax = (isDIS) ? 0. : 2.; double eta1 = (isDIS) ? etaXCMJet1 : etaLabJet1; double eta2 = (isDIS) ? etaXCMJet2 : etaLabJet2; if (!inRange(eta1, etaMin, etaMax)) vetoEvent; if (!inRange(eta2, etaMin, etaMax)) vetoEvent; ++nVeto5; // Pseudorapidity distributions are examined in lab frame: double avgEtaJets = 0.5 * (etaLabJet1 + etaLabJet2); // Derive xPom and xGam values from the jet kinematics. double zPomJets, xGamJets; if (isDIS) { zPomJets = (Q2 + M2jets) / (Q2 + M2X); xGamJets = EmPzJets / rg.EmPzX(RapidityGap::XCM); } else { // Boost E_p, E_e to HCM frame FourMomentum lep = hcmboost.transform(kin.beamLepton().momentum()); FourMomentum had = hcmboost.transform(kin.beamHadron().momentum()); zPomJets = EpPzJets / (2. * xPom * had.E()); xGamJets = EmPzJets / (2. * y * lep.E()); } // Now fill histograms if (isDIS){ _h_DIS_dsigdzPom ->fill(zPomJets, weight); _h_DIS_dsigdlogXpom ->fill(log10(xPom), weight); _h_DIS_dsigdW ->fill(W, weight); _h_DIS_dsigdQ2 ->fill(Q2, weight); _h_DIS_dsigdEtJet1 ->fill(EtJet1, weight); _h_DIS_dsigdAvgEta ->fill(avgEtaJets, weight); _h_DIS_dsigdDeltaEta ->fill(deltaEtaJets, weight); } else { _h_PHO_dsigdzPom ->fill(zPomJets, weight); _h_PHO_dsigdxGam ->fill(xGamJets, weight); _h_PHO_dsigdlogXpom ->fill(log10(xPom), weight); _h_PHO_dsigdW ->fill(W, weight); _h_PHO_dsigdEtJet1 ->fill(EtJet1, weight); _h_PHO_dsigdAvgEta ->fill(avgEtaJets, weight); _h_PHO_dsigdDeltaEta ->fill(deltaEtaJets, weight); _h_PHO_dsigdMjets ->fill(sqrt(M2jets), weight); } } // Finalize void finalize() { // Normalise to cross section const double norm = crossSection()/picobarn/sumOfWeights(); scale( _h_DIS_dsigdzPom , norm); scale( _h_DIS_dsigdlogXpom , norm); scale( _h_DIS_dsigdW , norm); scale( _h_DIS_dsigdQ2 , norm); scale( _h_DIS_dsigdEtJet1 , norm); scale( _h_DIS_dsigdAvgEta , norm); scale( _h_DIS_dsigdDeltaEta, norm); scale( _h_PHO_dsigdzPom , norm); scale( _h_PHO_dsigdxGam , norm); scale( _h_PHO_dsigdlogXpom , norm); scale( _h_PHO_dsigdW , norm); scale( _h_PHO_dsigdEtJet1 , norm); scale( _h_PHO_dsigdAvgEta , norm); scale( _h_PHO_dsigdDeltaEta, norm); scale( _h_PHO_dsigdMjets , norm); const double dPHO = nPHO; MSG_INFO("H1_2007_I746380"); MSG_INFO("Cross section = " << crossSection()/picobarn << " pb"); MSG_INFO("Number of events = " << numEvents() << ", sumW = " << sumOfWeights()); MSG_INFO("Number of PHO = " << nPHO << ", number of DIS = " << nDIS); MSG_INFO("Events passing electron veto = " << nVeto0 << " (" << nVeto0/dPHO * 100. << "%)" ); MSG_INFO("Events passing MY = " << nVeto1 << " (" << nVeto1/dPHO * 100. << "%)" ); MSG_INFO("Events passing t veto = " << nVeto2 << " (" << nVeto2/dPHO * 100. << "%)" ); MSG_INFO("Events passing xPom = " << nVeto3 << " (" << nVeto3/dPHO * 100. << "%)" ); MSG_INFO("Events passing jet Et veto = " << nVeto4 << " (" << nVeto4/dPHO * 100. << "%)" ); MSG_INFO("Events passing jet eta veto = " << nVeto5 << " (" << nVeto5/dPHO * 100. << "%)" ); } //@} private: /// @name Histograms //@{ // Book histograms from REF data Histo1DPtr _h_DIS_dsigdzPom ; Histo1DPtr _h_DIS_dsigdlogXpom ; Histo1DPtr _h_DIS_dsigdW ; Histo1DPtr _h_DIS_dsigdQ2 ; Histo1DPtr _h_DIS_dsigdEtJet1 ; Histo1DPtr _h_DIS_dsigdAvgEta ; Histo1DPtr _h_DIS_dsigdDeltaEta; Histo1DPtr _h_PHO_dsigdzPom ; Histo1DPtr _h_PHO_dsigdxGam ; Histo1DPtr _h_PHO_dsigdlogXpom ; Histo1DPtr _h_PHO_dsigdW ; Histo1DPtr _h_PHO_dsigdEtJet1 ; Histo1DPtr _h_PHO_dsigdAvgEta ; Histo1DPtr _h_PHO_dsigdDeltaEta; Histo1DPtr _h_PHO_dsigdMjets ; //@} bool isDIS; int nVeto0, nVeto1, nVeto2, nVeto3, nVeto4, nVeto5; int nPHO, nDIS; }; DECLARE_RIVET_PLUGIN(H1_2007_I746380); } diff --git a/analyses/pluginHERA/H1_2015_I1343110.cc b/analyses/pluginHERA/H1_2015_I1343110.cc --- a/analyses/pluginHERA/H1_2015_I1343110.cc +++ b/analyses/pluginHERA/H1_2015_I1343110.cc @@ -1,592 +1,595 @@ // -*- C++ -*- #include "Rivet/Analysis.hh" #include "Rivet/Projections/Beam.hh" #include "Rivet/Projections/FinalState.hh" #include "Rivet/Projections/DISKinematics.hh" #include "Rivet/Projections/DISFinalState.hh" #include "Rivet/Projections/DISDiffHadron.hh" #include "Rivet/Projections/FastJets.hh" namespace Rivet { namespace H1_2015_I1343110_PROJECTIONS { - // Projection to find the largest gaps and the masses of the two - // systems separated by the gap. Based on the HZTools gap-finding - // method (hzhadgap.F). Note that gaps are found in the HCM frame. - // Author Christine O. Rasmussen. + + /// Projection to find the largest gaps and the masses of the two + /// systems separated by the gap. Based on the HZTools gap-finding + /// method (hzhadgap.F). Note that gaps are found in the HCM frame. + /// + /// @author Christine O. Rasmussen. class RapidityGap : public Projection { public: /// Type of DIS boost to apply enum Frame { HCM, LAB, XCM }; RapidityGap() { setName("RapidityGap"); addProjection(DISKinematics(), "DISKIN"); addProjection(DISFinalState(DISFinalState::HCM), "DISFS"); } DEFAULT_RIVET_PROJ_CLONE(RapidityGap); const double M2X() const {return _M2X;} const double M2Y() const {return _M2Y;} const double t() const {return _t;} const double gap() const {return _gap;} const double gapUpp() const {return _gapUpp;} const double gapLow() const {return _gapLow;} const double EpPzX(Frame f) const { if (f == LAB) return _ePpzX_LAB; else if (f == XCM) return _ePpzX_XCM; else return _ePpzX_HCM; } const double EmPzX(Frame f) const { if (f == LAB) return _eMpzX_LAB; else if (f == XCM) return _eMpzX_XCM; else return _eMpzX_HCM; } const FourMomentum pX(Frame f) const { if (f == LAB) return _momX_LAB; else if (f == XCM) return _momX_XCM; else return _momX_HCM; } const FourMomentum pY(Frame f) const { if (f == LAB) return _momY_LAB; else if (f == XCM) return _momY_XCM; else return _momY_HCM; } const Particles& systemX(Frame f) const { if (f == LAB) return _pX_LAB; else if (f == XCM) return _pX_XCM; else return _pX_HCM; } const Particles& systemY(Frame f) const { if (f == LAB) return _pY_LAB; else if (f == XCM) return _pY_XCM; else return _pY_HCM; } protected: virtual int compare(const Projection& p) const { const RapidityGap& other = pcast(p); return mkNamedPCmp(other, "DISKIN") || mkNamedPCmp(other, "DISFS"); } virtual void project(const Event& e){ const DISKinematics& dk = apply(e, "DISKIN"); const Particles& p = apply(e, "DISFS").particles(cmpMomByEta); findgap(p, dk); } void clearAll(){ _M2X = _M2Y = _t = _gap = 0.; _gapUpp = _gapLow = -8.; _ePpzX_HCM = _eMpzX_HCM =_ePpzX_LAB = _eMpzX_LAB = _ePpzX_XCM = _eMpzX_XCM = 0.; _momX_HCM.setPE(0., 0., 0., 0.); _momY_HCM.setPE(0., 0., 0., 0.); _momX_XCM.setPE(0., 0., 0., 0.); _momY_XCM.setPE(0., 0., 0., 0.); _momX_LAB.setPE(0., 0., 0., 0.); _momY_LAB.setPE(0., 0., 0., 0.); _pX_HCM.clear(); _pY_HCM.clear(); _pX_XCM.clear(); _pY_XCM.clear(); _pX_LAB.clear(); _pY_LAB.clear(); } void findgap(const Particles& particles, const DISKinematics& diskin){ clearAll(); // Begin by finding largest gap and gapedges between all final // state particles in HCM frame. int nP = particles.size(); int dir = diskin.orientation(); for (int i = 0; i < nP-1; ++i){ double tmpGap = abs(particles[i+1].eta() - particles[i].eta()); if (tmpGap > _gap) { _gap = tmpGap; _gapLow = (dir > 0) ? particles[i].eta() : dir * particles[i+1].eta(); _gapUpp = (dir > 0) ? particles[i+1].eta() : dir * particles[i].eta(); } } // Define the two systems X and Y. Particles tmp_pX, tmp_pY; foreach (const Particle& ip, particles) { if (dir * ip.eta() > _gapLow) tmp_pX.push_back(ip); else tmp_pY.push_back(ip); } Particles pX, pY; pX = (dir < 0) ? tmp_pY : tmp_pX; pY = (dir < 0) ? tmp_pX : tmp_pY; // Find variables related to HCM frame. // Note that HCM has photon along +z, as opposed to // H1 where proton is along +z. This results in a sign change // as compared to H1 papers! // X - side FourMomentum momX; foreach (const Particle& jp, pX) { momX += jp.momentum(); _ePpzX_HCM += jp.E() - jp.pz(); // Sign + => - _eMpzX_HCM += jp.E() + jp.pz(); // Sign - => + } _momX_HCM = momX; _pX_HCM = pX; _M2X = _momX_HCM.mass2(); // Y - side FourMomentum momY; foreach (const Particle& kp, pY) momY += kp.momentum(); _momY_HCM = momY; _pY_HCM = pY; _M2Y = _momY_HCM.mass2(); // Find variables related to LAB frame const LorentzTransform hcmboost = diskin.boostHCM(); const LorentzTransform hcminverse = hcmboost.inverse(); _momX_LAB = hcminverse.transform(_momX_HCM); _momY_LAB = hcminverse.transform(_momY_HCM); // Find momenta in XCM frame. Note that it is HCM frame that is // boosted, resulting in a sign change later! const bool doXCM = (momX.betaVec().mod2() < 1.); if (doXCM) { const LorentzTransform xcmboost = LorentzTransform::mkFrameTransformFromBeta(momX.betaVec()); _momX_XCM = xcmboost.transform(momX); _momY_XCM = xcmboost.transform(momY); } foreach (const Particle& jp, pX) { // Boost from HCM to LAB. FourMomentum lab = hcminverse.transform(jp.momentum()); _ePpzX_LAB += lab.E() + dir * lab.pz(); _eMpzX_LAB += lab.E() - dir * lab.pz(); Particle plab = jp; plab.setMomentum(lab); _pX_LAB.push_back(plab); // Set XCM. Note that since HCM frame is boosted to XCM frame, // we have a sign change if (doXCM) { const LorentzTransform xcmboost = LorentzTransform::mkFrameTransformFromBeta(_momX_HCM.betaVec()); FourMomentum xcm = xcmboost.transform(jp.momentum()); _ePpzX_XCM += xcm.E() - xcm.pz(); // Sign + => - _eMpzX_XCM += xcm.E() + xcm.pz(); // Sign - => + Particle pxcm = jp; pxcm.setMomentum(xcm); _pX_XCM.push_back(pxcm); } } foreach (const Particle& jp, pY) { // Boost from HCM to LAB FourMomentum lab = hcminverse.transform(jp.momentum()); Particle plab = jp; plab.setMomentum(lab); _pY_LAB.push_back(plab); // Boost from HCM to XCM if (doXCM) { const LorentzTransform xcmboost = LorentzTransform::mkFrameTransformFromBeta(_momX_HCM.betaVec()); FourMomentum xcm = xcmboost.transform(jp.momentum()); Particle pxcm = jp; pxcm.setMomentum(xcm); _pY_XCM.push_back(pxcm); } } // Find t: Currently can only handle gap on proton side. // @TODO: Expand to also handle gap on photon side // Boost p from LAB to HCM frame to find t. const FourMomentum proton = hcmboost.transform(diskin.beamHadron().momentum()); FourMomentum pPom = proton - _momY_HCM; _t = pPom * pPom; } private: double _M2X, _M2Y, _t; double _gap, _gapUpp, _gapLow; double _ePpzX_LAB, _eMpzX_LAB, _ePpzX_HCM, _eMpzX_HCM, _ePpzX_XCM, _eMpzX_XCM; FourMomentum _momX_HCM, _momY_HCM,_momX_LAB, _momY_LAB, _momX_XCM, _momY_XCM; Particles _pX_HCM, _pY_HCM, _pX_LAB, _pY_LAB, _pX_XCM, _pY_XCM; }; - // Projection to boost system X (photon+Pomeron) particles into its rest frame. - // Author Ilkka Helenius + /// Projection to boost system X (photon+Pomeron) particles into its rest frame. + /// + /// @author Ilkka Helenius class BoostedXSystem : public FinalState { public: BoostedXSystem(const FinalState& fs) { setName("BoostedXSystem"); declare(fs,"FS"); addProjection(RapidityGap(), "RAPGAP"); } // Return the boost to XCM frame. const LorentzTransform& boost() const { return _boost; } DEFAULT_RIVET_PROJ_CLONE(BoostedXSystem); protected: // Apply the projection on the supplied event. void project(const Event& e){ const RapidityGap& rg = apply(e, "RAPGAP"); // Total momentum of the system X. const FourMomentum pX = rg.pX(RapidityGap::HCM); // Reset the boost. Is there a separate method for this? _boost = combine(_boost, _boost.inverse()); // Define boost only when numerically safe, otherwise negligible. if (pX.betaVec().mod2() < 1.) _boost = LorentzTransform::mkFrameTransformFromBeta(pX.betaVec()); // Boost the particles from system X. _theParticles.clear(); _theParticles.reserve(rg.systemX(RapidityGap::HCM).size()); for (const Particle& p : rg.systemX(RapidityGap::HCM)) { Particle temp = p; temp.setMomentum(_boost.transform(temp.momentum())); _theParticles.push_back(temp); } } // Compare projections. int compare(const Projection& p) const { const BoostedXSystem& other = pcast(p); return mkNamedPCmp(other, "RAPGAP") || mkNamedPCmp(other, "FS"); } private: LorentzTransform _boost; }; } /// @brief H1 diffractive dijets /// /// Diffractive dijets H1 with 920 GeV p and 27.5 GeV e /// Tagged protons & jets found in gamma*p rest frame. /// /// @author Christine O. Rasmussen class H1_2015_I1343110 : public Analysis { public: /// Constructor DEFAULT_RIVET_ANALYSIS_CTOR(H1_2015_I1343110); typedef H1_2015_I1343110_PROJECTIONS::RapidityGap RapidityGap; typedef H1_2015_I1343110_PROJECTIONS::BoostedXSystem BoostedXSystem; /// @name Analysis methods //@{ // Book projections and histograms void init() { declare(DISKinematics(), "Kinematics"); const DISFinalState& disfs = declare(DISFinalState(DISFinalState::HCM), "DISFS"); const BoostedXSystem& disfsXcm = declare( BoostedXSystem(disfs), "BoostedXFS"); declare(FastJets(disfsXcm, fastjet::JetAlgorithm::kt_algorithm, fastjet::RecombinationScheme::pt_scheme, 1.0, JetAlg::ALL_MUONS, JetAlg::NO_INVISIBLES, nullptr), "DISFSJets"); declare(DISDiffHadron(), "Hadron"); declare(RapidityGap(), "RapidityGap"); // Book histograms from REF data _h_PHO_sig_sqrts = bookHisto1D(1, 1, 1); _h_DIS_sig_sqrts = bookHisto1D(2, 1, 1); _h_PHODIS_sqrts = bookScatter2D(3, 1, 1); _h_DIS_dsigdz = bookHisto1D(4, 1, 1); _h_DIS_dsigdxPom = bookHisto1D(5, 1, 1); _h_DIS_dsigdy = bookHisto1D(6, 1, 1); _h_DIS_dsigdQ2 = bookHisto1D(7, 1, 1); _h_DIS_dsigdEtj1 = bookHisto1D(8, 1, 1); _h_DIS_dsigdMX = bookHisto1D(9, 1, 1); _h_DIS_dsigdDeltaEta = bookHisto1D(10, 1, 1); _h_DIS_dsigdAvgEta = bookHisto1D(11, 1, 1); _h_PHO_dsigdz = bookHisto1D(12, 1, 1); _h_PHO_dsigdxPom = bookHisto1D(13, 1, 1); _h_PHO_dsigdy = bookHisto1D(14, 1, 1); _h_PHO_dsigdxGam = bookHisto1D(15, 1, 1); _h_PHO_dsigdEtj1 = bookHisto1D(16, 1, 1); _h_PHO_dsigdMX = bookHisto1D(17, 1, 1); _h_PHO_dsigdDeltaEta = bookHisto1D(18, 1, 1); _h_PHO_dsigdAvgEta = bookHisto1D(19, 1, 1); _h_PHODIS_deltaEta = bookScatter2D(20, 1, 1); _h_PHODIS_y = bookScatter2D(21, 1, 1); _h_PHODIS_z = bookScatter2D(22, 1, 1); _h_PHODIS_Etj1 = bookScatter2D(23, 1, 1); isPHO = false; nVeto1 = 0; nVeto2 = 0; nVeto3 = 0; nVeto4 = 0; nVeto5 = 0; nVeto6 = 0; nPHO = 0; nDIS = 0; } // Do the analysis void analyze(const Event& event) { // Event weight const double weight = event.weight(); isPHO = false; // Projections - special handling of events where no proton found: const RapidityGap& rg = apply(event, "RapidityGap"); const DISKinematics& kin = apply(event, "Kinematics"); const BoostedXSystem& disfsXcm = apply( event, "BoostedXFS"); Particle hadronOut; Particle hadronIn; try { const DISDiffHadron& diffhadr = apply(event, "Hadron"); hadronOut = diffhadr.out(); hadronIn = diffhadr.in(); } catch (const Error& e){ vetoEvent; } // Determine kinematics: H1 has +z = proton direction int dir = kin.orientation(); double y = kin.y(); double Q2 = kin.Q2(); // Separate into DIS and PHO regimes else veto if (Q2 < 2.*GeV2 && inRange(y, 0.2, 0.70)) { isPHO = true; ++nPHO; } else if (inRange(Q2, 4.0*GeV2, 80.*GeV2) && inRange(y, 0.2, 0.7)) { isPHO = false; ++nDIS; } else vetoEvent; ++nVeto1; // Find diffractive variables as defined in paper. // Note tagged protons in VFPS => smaller allowed xPom range // xPom = 1 - E'/E, M2X from hadrons, t = (P-P')^2 const double M2X = rg.M2X(); const double abst = abs(rg.t()); const double xPom = 1. - hadronOut.energy() / hadronIn.energy(); //cout << "\nhadout=" << hadronOut.energy() << ", hadin=" << hadronIn.energy() << endl; //cout << "xPomH1=" << (Q2+M2X) / (y * sqr(sqrtS())) << endl; //cout << "|t|=" << abst << ", xPom=" << xPom << endl; // Veto if outside allowed region if (abst > 0.6 * GeV2) vetoEvent; ++nVeto2; if (!inRange(xPom, 0.010, 0.024)) vetoEvent; ++nVeto3; // Jet selection. Note jets are found in XCM frame, but // eta cut is applied in lab frame! Cut jetcuts = Cuts::Et > 4.* GeV; Jets jets = apply(event, "DISFSJets").jets(jetcuts, cmpMomByEt); // Veto if not dijets and if Et_j1 < 5.5 if (jets.size() < 2) vetoEvent; if (jets[0].Et() < 5.5 * GeV) vetoEvent; ++nVeto4; // Find Et_jet1 in XCM frame double EtJet1 = jets[0].Et() * GeV; //cout << "gamma*p frame:" << endl; //cout << "Et1=" << jets[0].Et() << ", E1=" << jets[0].E() << ", pz1=" << jets[0].pz() << ", m1=" << jets[0].mass() << endl; //cout << "Et2=" << jets[1].Et() << ", E2=" << jets[1].E() << ", pz2=" << jets[1].pz() << ", m2=" << jets[1].mass() << endl; // Transform from XCM to HCM const LorentzTransform xcmboost = disfsXcm.boost(); for (int i = 0; i < 2; ++i) jets[i].transformBy(xcmboost.inverse()); // Find mass of jets and EpPz, EmPz of jets in HCM frame. FourMomentum momJets = jets[0].momentum() + jets[1].momentum(); double M2jets = momJets.mass2(); double EpPzJets = 0.; double EmPzJets = 0.; // Note sign change wrt. H1 because photon is in +z direction for (int i = 0; i < 2; ++i){ EpPzJets += jets[i].E() - jets[i].pz(); // Sign: + => - EmPzJets += jets[i].E() + jets[i].pz(); // Sign: - => + } // Transform the jets from HCM to LAB frame where eta cut is // applied for photoproduction. const LorentzTransform hcmboost = kin.boostHCM(); for (int i = 0; i < 2; ++i) jets[i].transformBy(hcmboost.inverse()); double etaLabJet1 = dir * jets[0].eta(); double etaLabJet2 = dir * jets[1].eta(); if (!inRange(etaLabJet1, -1., 2.5)) vetoEvent; if (!inRange(etaLabJet2, -1., 2.5)) vetoEvent; ++nVeto5; // Pseudorapidity distributions are examined in lab frame: double deltaEtaJets = abs(dir * jets[0].eta() - dir * jets[1].eta()); double avgEtaJets = 0.5 * (dir * jets[0].eta() + dir * jets[1].eta()); // Evaluate observables double zPomJets, xGamJets = 0.; if (isPHO){ zPomJets = EpPzJets / rg.EpPzX(RapidityGap::HCM); xGamJets = EmPzJets / rg.EmPzX(RapidityGap::HCM); //cout << "xGamJets=" << xGamJets << endl; } else { zPomJets = (Q2 + M2jets) / (Q2 + M2X); } //cout << "lab frame:" << endl; //cout << "Et1=" << jets[0].Et() << ", E1=" << jets[0].E() << ", pz1=" << jets[0].pz() << ", m1=" << jets[0].mass() << endl; //cout << "Et2=" << jets[1].Et() << ", E2=" << jets[1].E() << ", pz2=" << jets[1].pz() << ", m2=" << jets[1].mass() << endl; //cout << "EpPzJets=" << EpPzJets << ", EmPzJets=" << EmPzJets << endl; //cout << "Et*exp(eta)=" << jets[0].Et()*exp(etaLabJet1) + jets[1].Et()*exp(etaLabJet2) << endl; //cout << "Et*exp(-eta)=" << jets[0].Et()*exp(-etaLabJet1) + jets[1].Et()*exp(-etaLabJet2) << endl; //cout << "EpPz=" << rg.EpPzX(RapidityGap::HCM) << ", EmPz=" << rg.EmPzX(RapidityGap::HCM) << endl; //cout << "2 xPom Ep=" << 2. * xPom * kin.beamHadron().E() << ", 2 y Ee=" << 2. * y * kin.beamLepton().E() << endl; //cout << "xGam=" << xGamJets << ", zPom=" << zPomJets << endl; //cout << "M12=" << M2jets << ", deltaEta=" << deltaEtaJets << ", avgEta=" << avgEtaJets << endl; // Veto events with zPom > 0.8 if (zPomJets > 0.8) vetoEvent; ++nVeto6; // Now fill histograms if (isPHO){ _h_PHO_sig_sqrts ->fill(sqrtS()/GeV, weight); _h_PHO_dsigdz ->fill(zPomJets, weight); _h_PHO_dsigdxPom ->fill(xPom, weight); _h_PHO_dsigdy ->fill(y, weight); _h_PHO_dsigdxGam ->fill(xGamJets, weight); _h_PHO_dsigdEtj1 ->fill(EtJet1, weight); _h_PHO_dsigdMX ->fill(sqrt(M2X)*GeV, weight); _h_PHO_dsigdDeltaEta ->fill(deltaEtaJets, weight); _h_PHO_dsigdAvgEta ->fill(avgEtaJets, weight); } else { _h_DIS_sig_sqrts ->fill(sqrtS()/GeV, weight); _h_DIS_dsigdz ->fill(zPomJets, weight); _h_DIS_dsigdxPom ->fill(xPom, weight); _h_DIS_dsigdy ->fill(y, weight); _h_DIS_dsigdQ2 ->fill(Q2, weight); _h_DIS_dsigdEtj1 ->fill(EtJet1, weight); _h_DIS_dsigdMX ->fill(sqrt(M2X)*GeV, weight); _h_DIS_dsigdDeltaEta ->fill(deltaEtaJets, weight); _h_DIS_dsigdAvgEta ->fill(avgEtaJets, weight); } } // Finalize void finalize() { // Normalise to cross section // Remember to manually scale the cross section afterwards with // the number of rejected events. const double norm = crossSection()/picobarn/sumOfWeights(); scale(_h_PHO_sig_sqrts, norm); scale(_h_PHO_dsigdz, norm); scale(_h_PHO_dsigdxPom, norm); scale(_h_PHO_dsigdy, norm); scale(_h_PHO_dsigdxGam, norm); scale(_h_PHO_dsigdEtj1, norm); scale(_h_PHO_dsigdMX, norm); scale(_h_PHO_dsigdDeltaEta, norm); scale(_h_PHO_dsigdAvgEta, norm); scale(_h_DIS_sig_sqrts, norm); scale(_h_DIS_dsigdz, norm); scale(_h_DIS_dsigdxPom, norm); scale(_h_DIS_dsigdy, norm); scale(_h_DIS_dsigdQ2, norm); scale(_h_DIS_dsigdEtj1, norm); scale(_h_DIS_dsigdMX, norm); scale(_h_DIS_dsigdDeltaEta, norm); scale(_h_DIS_dsigdAvgEta, norm); if (_h_DIS_sig_sqrts->numEntries() != 0) divide(_h_PHO_sig_sqrts, _h_DIS_sig_sqrts, _h_PHODIS_sqrts); if (_h_DIS_dsigdDeltaEta->numEntries() != 0) divide(_h_PHO_dsigdDeltaEta, _h_DIS_dsigdDeltaEta, _h_PHODIS_deltaEta); if (_h_DIS_dsigdy->numEntries() != 0) divide(_h_PHO_dsigdy, _h_DIS_dsigdy, _h_PHODIS_y); if (_h_DIS_dsigdz->numEntries() != 0) divide(_h_PHO_dsigdz, _h_DIS_dsigdz, _h_PHODIS_z); if (_h_DIS_dsigdEtj1->numEntries() != 0) divide(_h_PHO_dsigdEtj1, _h_DIS_dsigdEtj1, _h_PHODIS_Etj1); const double dPHO = nPHO; MSG_INFO("H1_2015_I1343110"); MSG_INFO("Cross section = " << crossSection()/picobarn << " pb"); MSG_INFO("Number of events = " << numEvents() << ", sumW = " << sumOfWeights()); MSG_INFO("Number of PHO = " << nPHO << ", number of DIS = " << nDIS); MSG_INFO("Events passing electron veto = " << nVeto1 << " (" << nVeto1/dPHO * 100. << "%)" ); MSG_INFO("Events passing t veto = " << nVeto2 << " (" << nVeto2/dPHO * 100. << "%)" ); MSG_INFO("Events passing xPom = " << nVeto3 << " (" << nVeto3/dPHO * 100. << "%)" ); MSG_INFO("Events passing jet Et veto = " << nVeto4 << " (" << nVeto4/dPHO * 100. << "%)" ); MSG_INFO("Events passing jet eta veto = " << nVeto5 << " (" << nVeto5/dPHO * 100. << "%)" ); MSG_INFO("Events passing zPom veto = " << nVeto6 << " (" << nVeto6/dPHO * 100. << "%)" ); } //@} private: /// @name Histograms //@{ // Book histograms from REF data Histo1DPtr _h_PHO_sig_sqrts; Histo1DPtr _h_DIS_sig_sqrts; Scatter2DPtr _h_PHODIS_sqrts; Histo1DPtr _h_DIS_dsigdz; Histo1DPtr _h_DIS_dsigdxPom; Histo1DPtr _h_DIS_dsigdy; Histo1DPtr _h_DIS_dsigdQ2; Histo1DPtr _h_DIS_dsigdEtj1; Histo1DPtr _h_DIS_dsigdMX; Histo1DPtr _h_DIS_dsigdDeltaEta; Histo1DPtr _h_DIS_dsigdAvgEta; Histo1DPtr _h_PHO_dsigdz; Histo1DPtr _h_PHO_dsigdxPom; Histo1DPtr _h_PHO_dsigdy; Histo1DPtr _h_PHO_dsigdxGam; Histo1DPtr _h_PHO_dsigdEtj1; Histo1DPtr _h_PHO_dsigdMX; Histo1DPtr _h_PHO_dsigdDeltaEta; Histo1DPtr _h_PHO_dsigdAvgEta; Scatter2DPtr _h_PHODIS_deltaEta; Scatter2DPtr _h_PHODIS_y; Scatter2DPtr _h_PHODIS_z; Scatter2DPtr _h_PHODIS_Etj1; //@} bool isPHO; int nVeto1, nVeto2, nVeto3, nVeto4, nVeto5, nVeto6; int nPHO, nDIS; }; DECLARE_RIVET_PLUGIN(H1_2015_I1343110); } diff --git a/analyses/pluginHERA/HERA_2015_I1353667.cc b/analyses/pluginHERA/HERA_2015_I1353667.cc new file mode 100644 --- /dev/null +++ b/analyses/pluginHERA/HERA_2015_I1353667.cc @@ -0,0 +1,99 @@ +// -*- C++ -*- +#include "Rivet/Analysis.hh" +#include "Rivet/Projections/FinalState.hh" +#include "Rivet/Projections/DISKinematics.hh" +#include "Rivet/Projections/UnstableParticles.hh" + +namespace Rivet { + + + /// @brief Combined H1/ZEUS D* production cross-sections in DIS + class HERA_2015_I1353667 : public Analysis { + public: + + /// Constructor + DEFAULT_RIVET_ANALYSIS_CTOR(HERA_2015_I1353667); + + + /// @name Analysis methods + //@{ + + /// Book histograms and initialise projections before the run + void init() { + + // Initialise and register projections + // declare(FinalState(Cuts::abseta < 5 && Cuts::pT > 100*MeV), "FS"); + // FinalState fs; + declare(DISKinematics(), "Kinematics"); + declare(UnstableParticles(), "Dstars"); + //Cuts::abspid == PID::DSTARPLUS + + // Book histograms + _h_pTD = bookHisto1D(1, 1, 1); + _h_etaD = bookHisto1D(2, 1, 1); + _h_zD = bookHisto1D(3, 1, 1); + _h_Q2 = bookHisto1D(4, 1, 1); + _h_y = bookHisto1D(5, 1, 1); + // _h_Q2y = bookHisto2D(6, 1, 1); + } + + + /// Perform the per-event analysis + void analyze(const Event& event) { + + // Determine kinematics, including event orientation + const DISKinematics& kin = apply(event, "Kinematics"); + //const int orientation = kin.orientation(); + + // Q2 and inelasticity cuts + if (!inRange(kin.Q2(), 1.5*GeV2, 1000*GeV2)) vetoEvent; + if (!inRange(kin.y(), 0.02, 0.7)) vetoEvent; + + + // D* reconstruction + const Particles unstables = apply(event, "Dstars") + .particles(Cuts::pT > 1.5*GeV && Cuts::abseta < 1.5); + const Particles dstars = filter_select(unstables, [](const Particle& p){ return p.abspid() == PID::DSTARPLUS; }); + if (dstars.empty()) vetoEvent; + MSG_DEBUG("#D* = " << dstars.size()); + const Particle& dstar = dstars.front(); + const double zD = (dstar.E() - dstar.pz()) / (2*kin.beamLepton().E()*kin.y()); + + // Single-differential histograms with higher low-Q2 cut + if (kin.Q2() > 5*GeV2) { + _h_pTD->fill(dstar.pT()/GeV, event.weight()); + _h_etaD->fill(dstar.eta(), event.weight()); + _h_zD->fill(zD/GeV, event.weight()); + _h_Q2->fill(kin.Q2()/GeV2, event.weight()); + _h_y->fill(kin.y(), event.weight()); + } + + // // Double-differential (y,Q2) histograms + // _h_Q2y->fill(kin.Q2()/GeV2, kin.y(), event.weight()); + + } + + + /// Normalise histograms etc., after the run + void finalize() { + scale({_h_pTD, _h_etaD, _h_zD, _h_Q2, _h_y}, crossSection()/nanobarn/sumOfWeights()); + } + + //@} + + + /// @name Histograms + //@{ + Histo1DPtr _h_pTD, _h_etaD, _h_zD, _h_Q2, _h_y; + Histo2DPtr _h_Q2y; + //@} + + + }; + + + // The hook for the plugin system + DECLARE_RIVET_PLUGIN(HERA_2015_I1353667); + + +} diff --git a/analyses/pluginHERA/HERA_2015_I1353667.info b/analyses/pluginHERA/HERA_2015_I1353667.info new file mode 100644 --- /dev/null +++ b/analyses/pluginHERA/HERA_2015_I1353667.info @@ -0,0 +1,47 @@ +Name: HERA_2015_I1353667 +Year: 2015 +Summary: Combined H1/ZEUS $D^*$ production cross-sections in DIS +Experiment: H1/ZEUS +Collider: HERA +InspireID: 1353667 +Status: UNVALIDATED +Authors: + - Andy Buckley +References: +- 'JHEP 1509 (2015) 149' +- 'DOI:10.1007/JHEP09(2015)149' +- 'DESY-15-037' +- 'arxiv:1503.06042' +- 'http://www-h1.desy.de/publications/htmlsplit/DESY-15-037.long.poster.html' +RunInfo: 'Inclusive DIS events. $Q^2$ cut must be lower than 1.5 $\GeV^2$.' +NeedCrossSection: yes +Beams: [[p+, e-], [p+, e+]] +Energies: [318] +Description: + 'H1 and ZEUS combined differential cross-sections for inclusive $D^{*\pm}$ + production in deep-inelastic $ep$ scattering at HERA. The cross-sections + are combined in the common visible phase-space region of photon virtuality + $Q^2 > 5 \GeV^2$, electron inelasticity $0.02 < y < 0.7$, and the $D^{*\pm}$ + meson's transverse momentum $p_T(D^*) > 1.5 \GeV$ and pseudorapidity + $|\eta(D^*)| < 1.5$. The combination procedure takes into account all + correlations. Double-differential cross sections $d2\sigma/dQ^2 dy$ + are combined with earlier $D^{∗\pm}$ data, extending the kinematic range + down to $Q^2 > 1.5 \GeV^2$. +Keywords: [ep dis dstar] +BibKey: H1:2015dma +BibTeX: '@article{H1:2015dma, + author = "Abramowicz, H. and others", + title = "{Combination of differential D$^{∗\pm}$ cross-section + measurements in deep-inelastic ep scattering at HERA}", + collaboration = "H1, ZEUS", + journal = "JHEP", + volume = "09", + year = "2015", + pages = "149", + doi = "10.1007/JHEP09(2015)149", + eprint = "1503.06042", + archivePrefix = "arXiv", + primaryClass = "hep-ex", + reportNumber = "DESY-15-037", + SLACcitation = "%%CITATION = ARXIV:1503.06042;%%" +}' diff --git a/analyses/pluginHERA/HERA_2015_I1353667.plot b/analyses/pluginHERA/HERA_2015_I1353667.plot new file mode 100644 --- /dev/null +++ b/analyses/pluginHERA/HERA_2015_I1353667.plot @@ -0,0 +1,31 @@ +BEGIN PLOT /HERA_2015_I1353667/d01-x01-y01 +Title= +XLabel=$p_\perp(D^*)$ [GeV] +YLabel=$\mathrm{d}\sigma/\mathrm{d}p_\perp(D^*)$ [GeV$^{-1}$] +LogX=1 +END PLOT + +BEGIN PLOT /HERA_2015_I1353667/d02-x01-y01 +Title= +XLabel=$\eta(D^*)$ +YLabel=$\mathrm{d}\sigma/\mathrm{d}\eta(D^*)$ +END PLOT + +BEGIN PLOT /HERA_2015_I1353667/d03-x01-y01 +Title= +XLabel=$z(D^*)$ +YLabel=$\mathrm{d}\sigma/\mathrm{d}z(D^*)$ +END PLOT + +BEGIN PLOT /HERA_2015_I1353667/d04-x01-y01 +Title= +XLabel=$Q^2$ [GeV$^2$] +YLabel=$\mathrm{d}\sigma/\mathrm{d}Q^2$ [GeV$^{-2}$] +LogX=1 +END PLOT + +BEGIN PLOT /HERA_2015_I1353667/d05-x01-y01 +Title= +XLabel=$y$ +YLabel=$\mathrm{d}\sigma/\mathrm{d}y$ +END PLOT diff --git a/analyses/pluginHERA/HERA_2015_I1353667.yoda b/analyses/pluginHERA/HERA_2015_I1353667.yoda new file mode 100644 --- /dev/null +++ b/analyses/pluginHERA/HERA_2015_I1353667.yoda @@ -0,0 +1,154 @@ +BEGIN YODA_SCATTER2D_V2 /REF/HERA_2015_I1353667/d01-x01-y01 +Variations: [""] +ErrorBreakdown: {0: {stat: {dn: -0.1504, up: 0.1504}, 'sys,cor': {dn: -0.11045, up: 0.11045}}, 1: {stat: {dn: -0.10878000000000002, up: 0.10878000000000002}, 'sys,cor': {dn: -0.09324, up: 0.09324}}, 2: {stat: {dn: -0.07325999999999999, up: 0.07325999999999999}, 'sys,cor': {dn: -0.07919999999999999, up: 0.07919999999999999}}, 3: {stat: {dn: -0.05425, up: 0.05425}, 'sys,cor': {dn: -0.057350000000000005, up: 0.057350000000000005}}, 4: {stat: {dn: -0.0444, up: 0.0444}, 'sys,cor': {dn: -0.042, up: 0.042}}, 5: {stat: {dn: -0.029728, up: 0.029728}, 'sys,cor': {dn: -0.031585999999999996, up: 0.031585999999999996}}, 6: {stat: {dn: -0.01842, up: 0.01842}, 'sys,cor': {dn: -0.02149, up: 0.02149}}, 7: {stat: {dn: -0.009889, up: 0.009889}, 'sys,cor': {dn: -0.010527, up: 0.010527}}, 8: {stat: {dn: -0.00437, up: 0.00437}, 'sys,cor': {dn: -0.004255, up: 0.004255}}, 9: {stat: {dn: -0.0017928, up: 0.0017928}, 'sys,cor': {dn: -0.0012284, up: 0.0012284}}, 10: {stat: {dn: -0.0003952, up: 0.0003952}, 'sys,cor': {dn: -0.00024320000000000003, up: 0.00024320000000000003}}} + +IsRef: 1 +Path: /REF/HERA_2015_I1353667/d01-x01-y01 +Title: doi:10.17182/hepdata.73328.v1/t1 +Type: Scatter2D +--- +# xval xerr- xerr+ yval yerr- yerr+ +1.690000e+00 1.900000e-01 1.900000e-01 2.350000e+00 1.865995e-01 1.865995e-01 +2.080000e+00 2.000000e-01 2.000000e-01 2.220000e+00 1.432717e-01 1.432717e-01 +2.480000e+00 2.000000e-01 2.000000e-01 1.980000e+00 1.078873e-01 1.078873e-01 +2.880000e+00 2.000000e-01 2.000000e-01 1.550000e+00 7.894356e-02 7.894356e-02 +3.290000e+00 2.100000e-01 2.100000e-01 1.200000e+00 6.111759e-02 6.111759e-02 +3.750000e+00 2.500000e-01 2.500000e-01 9.290000e-01 4.337545e-02 4.337545e-02 +4.375000e+00 3.750000e-01 3.750000e-01 6.140000e-01 2.830400e-02 2.830400e-02 +5.375000e+00 6.250000e-01 6.250000e-01 3.190000e-01 1.444334e-02 1.444334e-02 +7.000000e+00 1.000000e+00 1.000000e+00 1.150000e-01 6.099338e-03 6.099338e-03 +9.500000e+00 1.500000e+00 1.500000e+00 3.320000e-02 2.173269e-03 2.173269e-03 +1.550000e+01 4.500000e+00 4.500000e+00 3.800000e-03 4.640359e-04 4.640359e-04 +END YODA_SCATTER2D_V2 +BEGIN YODA_SCATTER2D_V2 /REF/HERA_2015_I1353667/d02-x01-y01 +Variations: [""] +ErrorBreakdown: {0: {stat: {dn: -0.07888, up: 0.07888}, 'sys,cor': {dn: -0.058480000000000004, up: 0.058480000000000004}}, 1: {stat: {dn: -0.06992, up: 0.06992}, 'sys,cor': {dn: -0.0608, up: 0.0608}}, 2: {stat: {dn: -0.07314, up: 0.07314}, 'sys,cor': {dn: -0.0636, up: 0.0636}}, 3: {stat: {dn: -0.06802, up: 0.06802}, 'sys,cor': {dn: -0.06265, up: 0.06265}}, 4: {stat: {dn: -0.06954, up: 0.06954}, 'sys,cor': {dn: -0.06039, up: 0.06039}}, 5: {stat: {dn: -0.07182, up: 0.07182}, 'sys,cor': {dn: -0.06993, up: 0.06993}}, 6: {stat: {dn: -0.07440000000000001, up: 0.07440000000000001}, 'sys,cor': {dn: -0.06324, up: 0.06324}}, 7: {stat: {dn: -0.07519999999999999, up: 0.07519999999999999}, 'sys,cor': {dn: -0.06767999999999999, up: 0.06767999999999999}}, 8: {stat: {dn: -0.07830999999999999, up: 0.07830999999999999}, 'sys,cor': {dn: -0.06684999999999999, up: 0.06684999999999999}}, 9: {stat: {dn: -0.08256, up: 0.08256}, 'sys,cor': {dn: -0.0768, up: 0.0768}}, 10: {stat: {dn: -0.09776, up: 0.09776}, 'sys,cor': {dn: -0.0832, up: 0.0832}}, 11: {stat: {dn: -0.11403, up: 0.11403}, 'sys,cor': {dn: -0.08688, up: 0.08688}}} + +IsRef: 1 +Path: /REF/HERA_2015_I1353667/d02-x01-y01 +Title: doi:10.17182/hepdata.73328.v1/t2 +Type: Scatter2D +--- +# xval xerr- xerr+ yval yerr- yerr+ +-1.375000e+00 1.250000e-01 1.250000e-01 1.360000e+00 9.819351e-02 9.819351e-02 +-1.125000e+00 1.250000e-01 1.250000e-01 1.520000e+00 9.265768e-02 9.265768e-02 +-8.750000e-01 1.250000e-01 1.250000e-01 1.590000e+00 9.692481e-02 9.692481e-02 +-6.250000e-01 1.250000e-01 1.250000e-01 1.790000e+00 9.247563e-02 9.247563e-02 +-3.750000e-01 1.250000e-01 1.250000e-01 1.830000e+00 9.210192e-02 9.210192e-02 +-1.250000e-01 1.250000e-01 1.250000e-01 1.890000e+00 1.002413e-01 1.002413e-01 +1.250000e-01 1.250000e-01 1.250000e-01 1.860000e+00 9.764557e-02 9.764557e-02 +3.750000e-01 1.250000e-01 1.250000e-01 1.880000e+00 1.011713e-01 1.011713e-01 +6.250000e-01 1.250000e-01 1.250000e-01 1.910000e+00 1.029630e-01 1.029630e-01 +8.750000e-01 1.250000e-01 1.250000e-01 1.920000e+00 1.127581e-01 1.127581e-01 +1.125000e+00 1.250000e-01 1.250000e-01 2.080000e+00 1.283716e-01 1.283716e-01 +1.375000e+00 1.250000e-01 1.250000e-01 1.810000e+00 1.433561e-01 1.433561e-01 +END YODA_SCATTER2D_V2 +BEGIN YODA_SCATTER2D_V2 /REF/HERA_2015_I1353667/d03-x01-y01 +Variations: [""] +ErrorBreakdown: {0: {stat: {dn: -0.3116, up: 0.3116}, 'sys,cor': {dn: -0.19352, up: 0.19352}}, 1: {stat: {dn: -0.35279999999999995, up: 0.35279999999999995}, 'sys,cor': {dn: -0.46304999999999996, up: 0.46304999999999996}}, 2: {stat: {dn: -0.30135, up: 0.30135}, 'sys,cor': {dn: -0.39605999999999997, up: 0.39605999999999997}}, 3: {stat: {dn: -0.24084000000000003, up: 0.24084000000000003}, 'sys,cor': {dn: -0.34788, up: 0.34788}}, 4: {stat: {dn: -0.15894, up: 0.15894}, 'sys,cor': {dn: -0.3532, up: 0.3532}}, 5: {stat: {dn: -0.11472, up: 0.11472}, 'sys,cor': {dn: -0.24378, up: 0.24378}}, 6: {stat: {dn: -0.05103, up: 0.05103}, 'sys,cor': {dn: -0.06426, up: 0.06426}}} + +IsRef: 1 +Path: /REF/HERA_2015_I1353667/d03-x01-y01 +Title: doi:10.17182/hepdata.73328.v1/t3 +Type: Scatter2D +--- +# xval xerr- xerr+ yval yerr- yerr+ +5.000000e-02 5.000000e-02 5.000000e-02 3.280000e+00 3.668031e-01 3.668031e-01 +1.500000e-01 5.000000e-02 5.000000e-02 7.350000e+00 5.821367e-01 5.821367e-01 +2.600000e-01 6.000000e-02 6.000000e-02 8.610000e+00 4.976699e-01 4.976699e-01 +3.850000e-01 6.500000e-02 6.500000e-02 8.920000e+00 4.231128e-01 4.231128e-01 +5.100000e-01 6.000000e-02 6.000000e-02 8.830000e+00 3.873140e-01 3.873140e-01 +6.850000e-01 1.150000e-01 1.150000e-01 4.780000e+00 2.694241e-01 2.694241e-01 +9.000000e-01 1.000000e-01 1.000000e-01 6.300000e-01 8.205735e-02 8.205735e-02 +END YODA_SCATTER2D_V2 +BEGIN YODA_SCATTER2D_V2 /REF/HERA_2015_I1353667/d04-x01-y01 +Variations: [""] +ErrorBreakdown: {0: {stat: {dn: -0.018959999999999998, up: 0.018959999999999998}, 'sys,cor': {dn: -0.0237, up: 0.0237}}, 1: {stat: {dn: -0.012728, up: 0.012728}, 'sys,cor': {dn: -0.011248, up: 0.011248}}, 2: {stat: {dn: -0.008055999999999999, up: 0.008055999999999999}, 'sys,cor': {dn: -0.00848, up: 0.00848}}, 3: {stat: {dn: -0.003968, up: 0.003968}, 'sys,cor': {dn: -0.004712, up: 0.004712}}, 4: {stat: {dn: -0.002541, up: 0.002541}, 'sys,cor': {dn: -0.0026135999999999998, up: 0.0026135999999999998}}, 5: {stat: {dn: -0.0014689, up: 0.0014689}, 'sys,cor': {dn: -0.001588, up: 0.001588}}, 6: {stat: {dn: -0.0007216000000000001, up: 0.0007216000000000001}, 'sys,cor': {dn: -0.0007708000000000001, up: 0.0007708000000000001}}, 7: {stat: {dn: -0.0003874, up: 0.0003874}, 'sys,cor': {dn: -0.00029055, up: 0.00029055}}, 8: {stat: {dn: -0.00014975999999999998, up: 0.00014975999999999998}, 'sys,cor': {dn: -0.00011023999999999999, up: 0.00011023999999999999}}, 9: {stat: {dn: -6.7032e-05, up: 6.7032e-05}, 'sys,cor': {dn: -4.41e-05, up: 4.41e-05}}, 10: {stat: {dn: -8.999999999999999e-06, up: 8.999999999999999e-06}, 'sys,cor': {dn: -5.024999999999999e-06, up: 5.024999999999999e-06}}} + +IsRef: 1 +Path: /REF/HERA_2015_I1353667/d04-x01-y01 +Title: doi:10.17182/hepdata.73328.v1/t4 +Type: Scatter2D +--- +# xval xerr- xerr+ yval yerr- yerr+ +6.500000e+00 1.500000e+00 1.500000e+00 4.740000e-01 3.035081e-02 3.035081e-02 +9.000000e+00 1.000000e+00 1.000000e+00 2.960000e-01 1.698586e-02 1.698586e-02 +1.150000e+01 1.500000e+00 1.500000e+00 2.120000e-01 1.169656e-02 1.169656e-02 +1.600000e+01 3.000000e+00 3.000000e+00 1.240000e-01 6.160192e-03 6.160192e-03 +2.350000e+01 4.500000e+00 4.500000e+00 7.260000e-02 3.645214e-03 3.645214e-03 +3.400000e+01 6.000000e+00 6.000000e+00 3.970000e-02 2.163195e-03 2.163195e-03 +5.000000e+01 1.000000e+01 1.000000e+01 1.640000e-02 1.055859e-03 1.055859e-03 +8.000000e+01 2.000000e+01 2.000000e+01 7.450000e-03 4.842500e-04 4.842500e-04 +1.290000e+02 2.900000e+01 2.900000e+01 2.080000e-03 1.859594e-04 1.859594e-04 +2.045000e+02 4.650000e+01 4.650000e+01 8.820000e-04 8.023777e-05 8.023777e-05 +6.255000e+02 3.745000e+02 3.745000e+02 7.500000e-05 1.030779e-05 1.030779e-05 +END YODA_SCATTER2D_V2 +BEGIN YODA_SCATTER2D_V2 /REF/HERA_2015_I1353667/d05-x01-y01 +Variations: [""] +ErrorBreakdown: {0: {stat: {dn: -0.7018, up: 0.7018}, 'sys,cor': {dn: -1.1011, up: 1.1011}}, 1: {stat: {dn: -0.7332, up: 0.7332}, 'sys,cor': {dn: -0.8647999999999999, up: 0.8647999999999999}}, 2: {stat: {dn: -0.5780000000000001, up: 0.5780000000000001}, 'sys,cor': {dn: -0.731, up: 0.731}}, 3: {stat: {dn: -0.4958000000000001, up: 0.4958000000000001}, 'sys,cor': {dn: -0.5628000000000001, up: 0.5628000000000001}}, 4: {stat: {dn: -0.38079999999999997, up: 0.38079999999999997}, 'sys,cor': {dn: -0.4144, up: 0.4144}}, 5: {stat: {dn: -0.28305, up: 0.28305}, 'sys,cor': {dn: -0.32130000000000003, up: 0.32130000000000003}}, 6: {stat: {dn: -0.1912, up: 0.1912}, 'sys,cor': {dn: -0.25334, up: 0.25334}}, 7: {stat: {dn: -0.14839999999999998, up: 0.14839999999999998}, 'sys,cor': {dn: -0.1696, up: 0.1696}}} + +IsRef: 1 +Path: /REF/HERA_2015_I1353667/d05-x01-y01 +Title: doi:10.17182/hepdata.73328.v1/t5 +Type: Scatter2D +--- +# xval xerr- xerr+ yval yerr- yerr+ +3.500000e-02 1.500000e-02 1.500000e-02 1.210000e+01 1.305735e+00 1.305735e+00 +7.000000e-02 2.000000e-02 2.000000e-02 1.880000e+01 1.133782e+00 1.133782e+00 +1.100000e-01 2.000000e-02 2.000000e-02 1.700000e+01 9.319040e-01 9.319040e-01 +1.550000e-01 2.500000e-02 2.500000e-02 1.340000e+01 7.500410e-01 7.500410e-01 +2.200000e-01 4.000000e-02 4.000000e-02 1.120000e+01 5.627930e-01 5.627930e-01 +3.100000e-01 5.000000e-02 5.000000e-02 7.650000e+00 4.281950e-01 4.281950e-01 +4.300000e-01 7.000000e-02 7.000000e-02 4.780000e+00 3.173934e-01 3.173934e-01 +6.000000e-01 1.000000e-01 1.000000e-01 2.650000e+00 2.253591e-01 2.253591e-01 +END YODA_SCATTER2D_V2 +BEGIN YODA_SCATTER3D_V2 /REF/HERA_2015_I1353667/d06-x01-y01 +Variations: [""] +ErrorBreakdown: {0: {stat: {dn: -0.6140399999999999, up: 0.6140399999999999}, 'sys,cor': {dn: -0.119, up: 0.119}}, 1: {stat: {dn: -0.6215, up: 0.6215}, 'sys,cor': {dn: -0.14300000000000002, up: 0.14300000000000002}}, 2: {stat: {dn: -0.36, up: 0.36}, 'sys,cor': {dn: -0.078, up: 0.078}}, 3: {stat: {dn: -0.18880500000000003, up: 0.18880500000000003}, 'sys,cor': {dn: -0.023025000000000004, up: 0.023025000000000004}}, 4: {stat: {dn: -0.25086, up: 0.25086}, 'sys,cor': {dn: -0.06216, up: 0.06216}}, 5: {stat: {dn: -0.15642, up: 0.15642}, 'sys,cor': {dn: -0.05346, up: 0.05346}}, 6: {stat: {dn: -0.22018, up: 0.22018}, 'sys,cor': {dn: -0.02943, up: 0.02943}}, 7: {stat: {dn: -0.05066199999999999, up: 0.05066199999999999}, 'sys,cor': {dn: -0.009021999999999999, up: 0.009021999999999999}}, 8: {stat: {dn: -0.13038, up: 0.13038}, 'sys,cor': {dn: -0.04664, up: 0.04664}}, 9: {stat: {dn: -0.11388, up: 0.11388}, 'sys,cor': {dn: -0.05986, up: 0.05986}}, 10: {stat: {dn: -0.07128000000000001, up: 0.07128000000000001}, 'sys,cor': {dn: -0.05676, up: 0.05676}}, 11: {stat: {dn: -0.037877, up: 0.037877}, 'sys,cor': {dn: -0.030147, up: 0.030147}}, 12: {stat: {dn: -0.014055999999999999, up: 0.014055999999999999}, 'sys,cor': {dn: -0.010542000000000001, up: 0.010542000000000001}}, 13: {stat: {dn: -0.0676, up: 0.0676}, 'sys,cor': {dn: -0.034319999999999996, up: 0.034319999999999996}}, 14: {stat: {dn: -0.050688, up: 0.050688}, 'sys,cor': {dn: -0.029952, up: 0.029952}}, 15: {stat: {dn: -0.026173999999999996, up: 0.026173999999999996}, 'sys,cor': {dn: -0.015931999999999998, up: 0.015931999999999998}}, 16: {stat: {dn: -0.018951999999999997, up: 0.018951999999999997}, 'sys,cor': {dn: -0.012771999999999999, up: 0.012771999999999999}}, 17: {stat: {dn: -0.008456, up: 0.008456}, 'sys,cor': {dn: -0.00604, up: 0.00604}}, 18: {stat: {dn: -0.026106, up: 0.026106}, 'sys,cor': {dn: -0.014426999999999999, up: 0.014426999999999999}}, 19: {stat: {dn: -0.024569999999999998, up: 0.024569999999999998}, 'sys,cor': {dn: -0.015497999999999998, up: 0.015497999999999998}}, 20: {stat: {dn: -0.013919999999999998, up: 0.013919999999999998}, 'sys,cor': {dn: -0.009569999999999999, up: 0.009569999999999999}}, 21: {stat: {dn: -0.0093, up: 0.0093}, 'sys,cor': {dn: -0.006324, up: 0.006324}}, 22: {stat: {dn: -0.004290400000000001, up: 0.004290400000000001}, 'sys,cor': {dn: -0.0030448000000000003, up: 0.0030448000000000003}}, 23: {stat: {dn: -0.010226800000000001, up: 0.010226800000000001}, 'sys,cor': {dn: -0.0056662, up: 0.0056662}}, 24: {stat: {dn: -0.007257, up: 0.007257}, 'sys,cor': {dn: -0.004428, up: 0.004428}}, 25: {stat: {dn: -0.0050160000000000005, up: 0.0050160000000000005}, 'sys,cor': {dn: -0.00342, up: 0.00342}}, 26: {stat: {dn: -0.0031906, up: 0.0031906}, 'sys,cor': {dn: -0.002226, up: 0.002226}}, 27: {stat: {dn: -0.0016691999999999998, up: 0.0016691999999999998}, 'sys,cor': {dn: -0.0011876999999999999, up: 0.0011876999999999999}}, 28: {stat: {dn: -0.0020635999999999996, up: 0.0020635999999999996}, 'sys,cor': {dn: -0.0006837599999999999, up: 0.0006837599999999999}}, 29: {stat: {dn: -0.00297, up: 0.00297}, 'sys,cor': {dn: -0.001188, up: 0.001188}}, 30: {stat: {dn: -0.00164, up: 0.00164}, 'sys,cor': {dn: -0.0007585000000000001, up: 0.0007585000000000001}}, 31: {stat: {dn: -0.0010746000000000002, up: 0.0010746000000000002}, 'sys,cor': {dn: -0.0006368000000000001, up: 0.0006368000000000001}}, 32: {stat: {dn: -0.0005409599999999999, up: 0.0005409599999999999}, 'sys,cor': {dn: -0.0003136, up: 0.0003136}}, 33: {stat: {dn: -0.00033784, up: 0.00033784}, 'sys,cor': {dn: -0.00016892, up: 0.00016892}}, 34: {stat: {dn: -0.00024198, up: 0.00024198}, 'sys,cor': {dn: -8.938e-05, up: 8.938e-05}}, 35: {stat: {dn: -0.00018257999999999998, up: 0.00018257999999999998}, 'sys,cor': {dn: -7.876e-05, up: 7.876e-05}}, 36: {stat: {dn: -0.00010764799999999998, up: 0.00010764799999999998}, 'sys,cor': {dn: -4.2687999999999995e-05, up: 4.2687999999999995e-05}}, 37: {stat: {dn: -1.8995000000000004e-05, up: 1.8995000000000004e-05}, 'sys,cor': {dn: -6.157000000000001e-06, up: 6.157000000000001e-06}}, 38: {stat: {dn: -1.4985999999999998e-05, up: 1.4985999999999998e-05}, 'sys,cor': {dn: -5.899999999999999e-06, up: 5.899999999999999e-06}}} + +IsRef: 1 +Path: /REF/HERA_2015_I1353667/d06-x01-y01 +Title: doi:10.17182/hepdata.73328.v1/t6 +Type: Scatter3D +--- +# xval xerr- xerr+ yval yerr- yerr+ zval zerr- zerr+ +2.500000e+00 1.000000e+00 1.000000e+00 5.500000e-02 3.500000e-02 3.500000e-02 4.760000e+00 6.254647e-01 6.254647e-01 +2.500000e+00 1.000000e+00 1.000000e+00 1.250000e-01 3.500000e-02 3.500000e-02 5.500000e+00 6.377392e-01 6.377392e-01 +2.500000e+00 1.000000e+00 1.000000e+00 2.400000e-01 8.000000e-02 8.000000e-02 3.000000e+00 3.683531e-01 3.683531e-01 +2.500000e+00 1.000000e+00 1.000000e+00 5.100000e-01 1.900000e-01 1.900000e-01 9.210000e-01 1.902038e-01 1.902038e-01 +4.500000e+00 1.000000e+00 1.000000e+00 5.500000e-02 3.500000e-02 3.500000e-02 2.220000e+00 2.584465e-01 2.584465e-01 +4.500000e+00 1.000000e+00 1.000000e+00 1.250000e-01 3.500000e-02 3.500000e-02 1.980000e+00 1.653033e-01 1.653033e-01 +4.500000e+00 1.000000e+00 1.000000e+00 2.400000e-01 8.000000e-02 8.000000e-02 1.090000e+00 2.221381e-01 2.221381e-01 +4.500000e+00 1.000000e+00 1.000000e+00 5.100000e-01 1.900000e-01 1.900000e-01 3.470000e-01 5.145906e-02 5.145906e-02 +7.250000e+00 1.750000e+00 1.750000e+00 3.500000e-02 1.500000e-02 1.500000e-02 1.060000e+00 1.384711e-01 1.384711e-01 +7.250000e+00 1.750000e+00 1.750000e+00 7.000000e-02 2.000000e-02 2.000000e-02 1.460000e+00 1.286541e-01 1.286541e-01 +7.250000e+00 1.750000e+00 1.750000e+00 1.250000e-01 3.500000e-02 3.500000e-02 1.320000e+00 9.111825e-02 9.111825e-02 +7.250000e+00 1.750000e+00 1.750000e+00 2.400000e-01 8.000000e-02 8.000000e-02 7.730000e-01 4.840980e-02 4.840980e-02 +7.250000e+00 1.750000e+00 1.750000e+00 5.100000e-01 1.900000e-01 1.900000e-01 2.510000e-01 1.757000e-02 1.757000e-02 +1.150000e+01 2.500000e+00 2.500000e+00 3.500000e-02 1.500000e-02 1.500000e-02 5.200000e-01 7.581308e-02 7.581308e-02 +1.150000e+01 2.500000e+00 2.500000e+00 7.000000e-02 2.000000e-02 2.000000e-02 7.680000e-01 5.887610e-02 5.887610e-02 +1.150000e+01 2.500000e+00 2.500000e+00 1.250000e-01 3.500000e-02 3.500000e-02 5.690000e-01 3.064159e-02 3.064159e-02 +1.150000e+01 2.500000e+00 2.500000e+00 2.400000e-01 8.000000e-02 8.000000e-02 4.120000e-01 2.285393e-02 2.285393e-02 +1.150000e+01 2.500000e+00 2.500000e+00 5.100000e-01 1.900000e-01 1.900000e-01 1.510000e-01 1.039161e-02 1.039161e-02 +1.850000e+01 4.500000e+00 4.500000e+00 3.500000e-02 1.500000e-02 1.500000e-02 2.290000e-01 2.982720e-02 2.982720e-02 +1.850000e+01 4.500000e+00 4.500000e+00 7.000000e-02 2.000000e-02 2.000000e-02 3.780000e-01 2.904949e-02 2.904949e-02 +1.850000e+01 4.500000e+00 4.500000e+00 1.250000e-01 3.500000e-02 3.500000e-02 2.900000e-01 1.689234e-02 1.689234e-02 +1.850000e+01 4.500000e+00 4.500000e+00 2.400000e-01 8.000000e-02 8.000000e-02 1.860000e-01 1.124647e-02 1.124647e-02 +1.850000e+01 4.500000e+00 4.500000e+00 5.100000e-01 1.900000e-01 1.900000e-01 6.920000e-02 5.261021e-03 5.261021e-03 +3.400000e+01 1.100000e+01 1.100000e+01 3.500000e-02 1.500000e-02 1.500000e-02 6.910000e-02 1.169159e-02 1.169159e-02 +3.400000e+01 1.100000e+01 1.100000e+01 7.000000e-02 2.000000e-02 2.000000e-02 1.230000e-01 8.501249e-03 8.501249e-03 +3.400000e+01 1.100000e+01 1.100000e+01 1.250000e-01 3.500000e-02 3.500000e-02 1.140000e-01 6.070968e-03 6.070968e-03 +3.400000e+01 1.100000e+01 1.100000e+01 2.400000e-01 8.000000e-02 8.000000e-02 7.420000e-02 3.890373e-03 3.890373e-03 +3.400000e+01 1.100000e+01 1.100000e+01 5.100000e-01 1.900000e-01 1.900000e-01 3.210000e-02 2.048624e-03 2.048624e-03 +7.250000e+01 2.750000e+01 2.750000e+01 3.500000e-02 1.500000e-02 1.500000e-02 6.160000e-03 2.173930e-03 2.173930e-03 +7.250000e+01 2.750000e+01 2.750000e+01 7.000000e-02 2.000000e-02 2.000000e-02 2.700000e-02 3.198788e-03 3.198788e-03 +7.250000e+01 2.750000e+01 2.750000e+01 1.250000e-01 3.500000e-02 3.500000e-02 2.050000e-02 1.806910e-03 1.806910e-03 +7.250000e+01 2.750000e+01 2.750000e+01 2.400000e-01 8.000000e-02 8.000000e-02 1.990000e-02 1.249111e-03 1.249111e-03 +7.250000e+01 2.750000e+01 2.750000e+01 5.100000e-01 1.900000e-01 1.900000e-01 7.840000e-03 6.252861e-04 6.252861e-04 +1.290000e+02 2.900000e+01 2.900000e+01 1.700000e-01 1.500000e-01 1.500000e-01 4.120000e-03 3.777166e-04 3.777166e-04 +1.290000e+02 2.900000e+01 2.900000e+01 5.100000e-01 1.900000e-01 1.900000e-01 2.180000e-03 2.579595e-04 2.579595e-04 +2.045000e+02 4.650000e+01 4.650000e+01 1.600000e-01 1.400000e-01 1.400000e-01 1.790000e-03 1.988431e-04 1.988431e-04 +2.045000e+02 4.650000e+01 4.650000e+01 5.000000e-01 2.000000e-01 2.000000e-01 9.280000e-04 1.158031e-04 1.158031e-04 +6.255000e+02 3.745000e+02 3.745000e+02 1.400000e-01 1.200000e-01 1.200000e-01 1.310000e-04 1.996794e-05 1.996794e-05 +6.255000e+02 3.745000e+02 3.745000e+02 4.800000e-01 2.200000e-01 2.200000e-01 1.180000e-04 1.610560e-05 1.610560e-05 +END YODA_SCATTER3D_V2