CDF_2001_S4751469.cc
Go to the documentation of this file.
00001 // -*- C++ -*- 00002 00003 // Field & Stuart underlying event analysis at CDF. 00004 // Phys.Rev.D65:092002,2002 - no arXiv code. 00005 // FNAL-PUB 01/211-E 00006 00007 #include "Rivet/Analysis.hh" 00008 #include "Rivet/RivetYODA.hh" 00009 #include "Rivet/Tools/Logging.hh" 00010 #include "Rivet/Projections/ChargedFinalState.hh" 00011 #include "Rivet/Projections/ConstLossyFinalState.hh" 00012 #include "Rivet/Projections/FastJets.hh" 00013 #include "Rivet/Projections/TriggerCDFRun0Run1.hh" 00014 00015 namespace Rivet { 00016 00017 00018 /// @brief "Field-Stuart" CDF Run I track-jet underlying event analysis 00019 /// 00020 /// @author Andy Buckley 00021 /// 00022 /// The "original" underlying event analysis, using a non-standard track-jet algorithm. 00023 /// 00024 /// @par Run conditions 00025 /// 00026 /// @arg \f$ \sqrt{s} = \f$ 1800 GeV 00027 /// @arg Run with generic QCD events. 00028 /// @arg Several \f$ p_\perp^\text{min} \f$ cutoffs are probably required to fill the profile histograms: 00029 /// @arg \f$ p_\perp^\text{min} = \f$ 0 (min bias), 10, 20 GeV 00030 class CDF_2001_S4751469 : public Analysis { 00031 public: 00032 00033 /// Constructor: cuts on final state are \f$ -1 < \eta < 1 \f$ 00034 /// and \f$ p_T > 0.5 \f$ GeV. 00035 CDF_2001_S4751469() 00036 : Analysis("CDF_2001_S4751469"), 00037 _totalNumTrans2(0), _totalNumTrans5(0), _totalNumTrans30(0), 00038 _sumWeightsPtLead2(0),_sumWeightsPtLead5(0), _sumWeightsPtLead30(0) 00039 { 00040 } 00041 00042 00043 /// @name Analysis methods 00044 //@{ 00045 00046 // Book histograms 00047 void init() { 00048 addProjection(TriggerCDFRun0Run1(), "Trigger"); 00049 // Randomly discard 8% of charged particles as a kind of hacky detector correction. 00050 const ChargedFinalState cfs(-1.0, 1.0, 0.5*GeV); 00051 const ConstLossyFinalState lfs(cfs, 0.08); 00052 00053 // const LossyFinalState<StarRandomFilter> lfs(cfs, StarRandomFilter()); 00054 addProjection(lfs, "FS"); 00055 addProjection(FastJets(lfs, FastJets::TRACKJET, 0.7), "TrackJet"); 00056 00057 _numvsDeltaPhi2 = bookProfile1D(1, 1, 1); 00058 _numvsDeltaPhi5 = bookProfile1D(1, 1, 2); 00059 _numvsDeltaPhi30 = bookProfile1D(1, 1, 3); 00060 _pTvsDeltaPhi2 = bookProfile1D(2, 1, 1); 00061 _pTvsDeltaPhi5 = bookProfile1D(2, 1, 2); 00062 _pTvsDeltaPhi30 = bookProfile1D(2, 1, 3); 00063 00064 _numTowardMB = bookProfile1D(3, 1, 1); 00065 _numTransMB = bookProfile1D(3, 1, 2); 00066 _numAwayMB = bookProfile1D(3, 1, 3); 00067 _numTowardJ20 = bookProfile1D(4, 1, 1); 00068 _numTransJ20 = bookProfile1D(4, 1, 2); 00069 _numAwayJ20 = bookProfile1D(4, 1, 3); 00070 00071 _ptsumTowardMB = bookProfile1D(5, 1, 1); 00072 _ptsumTransMB = bookProfile1D(5, 1, 2); 00073 _ptsumAwayMB = bookProfile1D(5, 1, 3); 00074 _ptsumTowardJ20 = bookProfile1D(6, 1, 1); 00075 _ptsumTransJ20 = bookProfile1D(6, 1, 2); 00076 _ptsumAwayJ20 = bookProfile1D(6, 1, 3); 00077 00078 _ptTrans2 = bookHisto1D(7, 1, 1); 00079 _ptTrans5 = bookHisto1D(7, 1, 2); 00080 _ptTrans30 = bookHisto1D(7, 1, 3); 00081 } 00082 00083 00084 /// Do the analysis 00085 void analyze(const Event& event) { 00086 // Trigger 00087 const bool trigger = applyProjection<TriggerCDFRun0Run1>(event, "Trigger").minBiasDecision(); 00088 if (!trigger) vetoEvent; 00089 00090 // Analyse, with pT > 0.5 GeV AND |eta| < 1 00091 const JetAlg& tj = applyProjection<JetAlg>(event, "TrackJet"); 00092 00093 // Final state (lossy) charged particles 00094 const FinalState& fs = applyProjection<FinalState>(event, "FS"); 00095 00096 // Get jets, sorted by pT 00097 const Jets jets = tj.jetsByPt(); 00098 if (jets.empty()) { 00099 vetoEvent; 00100 } 00101 00102 Jet leadingJet = jets.front(); 00103 const double phiLead = leadingJet.phi(); 00104 const double ptLead = leadingJet.ptSum(); 00105 00106 // Cut on highest pT jet: combined 0.5 GeV < pT(lead) < 50 GeV 00107 if (ptLead/GeV < 0.5) vetoEvent; 00108 if (ptLead/GeV > 50.0) vetoEvent; 00109 00110 // Get the event weight 00111 const double weight = event.weight(); 00112 00113 // Count sum of all event weights in three pT_lead regions 00114 if (ptLead/GeV > 2.0) { 00115 _sumWeightsPtLead2 += weight; 00116 } 00117 if (ptLead/GeV > 5.0) { 00118 _sumWeightsPtLead5 += weight; 00119 } 00120 if (ptLead/GeV > 30.0) { 00121 _sumWeightsPtLead30 += weight; 00122 } 00123 00124 // Run over tracks 00125 double ptSumToward(0.0), ptSumAway(0.0), ptSumTrans(0.0); 00126 size_t numToward(0), numTrans(0), numAway(0); 00127 00128 // Temporary histos that bin N and pT in dphi 00129 /// @todo Copy the permanent histos to get the binnings more robustly 00130 Profile1D hist_num_dphi_2(50, 0, 180), hist_num_dphi_5(50, 0, 180), hist_num_dphi_30(50, 0, 180); 00131 Profile1D hist_pt_dphi_2(50, 0, 180), hist_pt_dphi_5(50, 0, 180), hist_pt_dphi_30(50, 0, 180); 00132 00133 foreach (const Particle& p, fs.particles()) { 00134 // Calculate DeltaPhi(p,leadingJet) 00135 const double dPhi = deltaPhi(p.momentum().phi(), phiLead); 00136 const double pT = p.momentum().pT(); 00137 00138 if (dPhi < PI/3.0) { 00139 ptSumToward += pT; 00140 ++numToward; 00141 } 00142 else if (dPhi < 2*PI/3.0) { 00143 ptSumTrans += pT; 00144 ++numTrans; 00145 // Fill transverse pT distributions 00146 if (ptLead/GeV > 2.0) { 00147 _ptTrans2->fill(pT/GeV, weight); 00148 _totalNumTrans2 += weight; 00149 } 00150 if (ptLead/GeV > 5.0) { 00151 _ptTrans5->fill(pT/GeV, weight); 00152 _totalNumTrans5 += weight; 00153 } 00154 if (ptLead/GeV > 30.0) { 00155 _ptTrans30->fill(pT/GeV, weight); 00156 _totalNumTrans30 += weight; 00157 } 00158 } 00159 else { 00160 ptSumAway += pT; 00161 ++numAway; 00162 } 00163 00164 // Fill tmp histos to bin event's track Nch & pT in dphi 00165 const double dPhideg = 180*dPhi/PI; 00166 if (ptLead/GeV > 2.0) { 00167 hist_num_dphi_2.fill(dPhideg, 1); 00168 hist_pt_dphi_2.fill (dPhideg, pT/GeV); 00169 } 00170 if (ptLead/GeV > 5.0) { 00171 hist_num_dphi_5.fill(dPhideg, 1); 00172 hist_pt_dphi_5.fill (dPhideg, pT/GeV); 00173 } 00174 if (ptLead/GeV > 30.0) { 00175 hist_num_dphi_30.fill(dPhideg, 1); 00176 hist_pt_dphi_30.fill (dPhideg, pT/GeV); 00177 } 00178 } 00179 00180 // Update the "proper" dphi profile histograms 00181 for (int i = 0; i < 50; i++) { 00182 if (ptLead/GeV > 2.0) { 00183 _numvsDeltaPhi2->fill(hist_num_dphi_2.bin(i).xMean(), hist_num_dphi_2.bin(i).mean(), weight); 00184 _pTvsDeltaPhi2->fill(hist_pt_dphi_2.bin(i).xMean(), hist_pt_dphi_2.bin(i).mean(), weight); 00185 } 00186 if (ptLead/GeV > 5.0) { 00187 _numvsDeltaPhi5->fill(hist_num_dphi_5.bin(i).xMean(), hist_num_dphi_5.bin(i).mean(), weight); 00188 _pTvsDeltaPhi5->fill(hist_pt_dphi_5.bin(i).xMean(), hist_pt_dphi_5.bin(i).mean(), weight); 00189 } 00190 if (ptLead/GeV > 30.0) { 00191 _numvsDeltaPhi30->fill(hist_num_dphi_30.bin(i).xMean(), hist_num_dphi_30.bin(i).mean(), weight); 00192 _pTvsDeltaPhi30->fill(hist_pt_dphi_30.bin(i).xMean(), hist_pt_dphi_30.bin(i).mean(), weight); 00193 } 00194 } 00195 00196 // Log some event details about pT 00197 MSG_DEBUG("pT [lead; twd, away, trans] = [" << ptLead << "; " 00198 << ptSumToward << ", " << ptSumAway << ", " << ptSumTrans << "]"); 00199 00200 // Update the pT profile histograms 00201 _ptsumTowardMB->fill(ptLead/GeV, ptSumToward/GeV, weight); 00202 _ptsumTowardJ20->fill(ptLead/GeV, ptSumToward/GeV, weight); 00203 00204 _ptsumTransMB->fill(ptLead/GeV, ptSumTrans/GeV, weight); 00205 _ptsumTransJ20->fill(ptLead/GeV, ptSumTrans/GeV, weight); 00206 00207 _ptsumAwayMB->fill(ptLead/GeV, ptSumAway/GeV, weight); 00208 _ptsumAwayJ20->fill(ptLead/GeV, ptSumAway/GeV, weight); 00209 00210 // Log some event details about Nch 00211 MSG_DEBUG("N [twd, away, trans] = [" << ptLead << "; " 00212 << numToward << ", " << numTrans << ", " << numAway << "]"); 00213 00214 // Update the N_track profile histograms 00215 _numTowardMB->fill(ptLead/GeV, numToward, weight); 00216 _numTowardJ20->fill(ptLead/GeV, numToward, weight); 00217 00218 _numTransMB->fill(ptLead/GeV, numTrans, weight); 00219 _numTransJ20->fill(ptLead/GeV, numTrans, weight); 00220 00221 _numAwayMB->fill(ptLead/GeV, numAway, weight); 00222 _numAwayJ20->fill(ptLead/GeV, numAway, weight); 00223 } 00224 00225 00226 /// Normalize histos 00227 void finalize() { 00228 normalize(_ptTrans2, _totalNumTrans2 / _sumWeightsPtLead2); 00229 normalize(_ptTrans5, _totalNumTrans5 / _sumWeightsPtLead5); 00230 normalize(_ptTrans30, _totalNumTrans30 / _sumWeightsPtLead30); 00231 } 00232 00233 //@} 00234 00235 00236 private: 00237 00238 /// Sum total number of charged particles in the trans region, in 3 \f$ p_\perp^\text{lead} \f$ bins. 00239 double _totalNumTrans2, _totalNumTrans5, _totalNumTrans30; 00240 00241 /// Sum the total number of events in 3 \f$ p_\perp^\text{lead} \f$ bins. 00242 double _sumWeightsPtLead2,_sumWeightsPtLead5, _sumWeightsPtLead30; 00243 00244 00245 /// @name Histogram collections 00246 //@{ 00247 // These histos (binned in dphi) are filled per event and then reset 00248 // TODO: use LWH 00249 Profile1DPtr _hist_num_dphi_2, _hist_num_dphi_5, _hist_num_dphi_30; 00250 Profile1DPtr _hist_pt_dphi_2, _hist_pt_dphi_5, _hist_pt_dphi_30; 00251 00252 // The sumpt vs. dphi and Nch vs. dphi histos 00253 Profile1DPtr _numvsDeltaPhi2, _numvsDeltaPhi5, _numvsDeltaPhi30; 00254 Profile1DPtr _pTvsDeltaPhi2, _pTvsDeltaPhi5, _pTvsDeltaPhi30; 00255 00256 00257 /// Profile histograms, binned in the \f$ p_T \f$ of the leading jet, for 00258 /// the \f$ p_T \f$ sum in the toward, transverse and away regions. 00259 Profile1DPtr _ptsumTowardMB, _ptsumTransMB, _ptsumAwayMB; 00260 Profile1DPtr _ptsumTowardJ20, _ptsumTransJ20, _ptsumAwayJ20; 00261 00262 /// Profile histograms, binned in the \f$ p_T \f$ of the leading jet, for 00263 /// the number of charged particles per jet in the toward, transverse and 00264 /// away regions. 00265 Profile1DPtr _numTowardMB, _numTransMB, _numAwayMB; 00266 Profile1DPtr _numTowardJ20, _numTransJ20, _numAwayJ20; 00267 00268 /// Histogram of \f$ p_T \f$ distribution for 3 different \f$ p_{T1} \f$ IR cutoffs. 00269 Histo1DPtr _ptTrans2, _ptTrans5, _ptTrans30; 00270 //@} 00271 00272 }; 00273 00274 00275 00276 // The hook for the plugin system 00277 DECLARE_RIVET_PLUGIN(CDF_2001_S4751469); 00278 00279 } Generated on Fri Dec 21 2012 15:03:39 for The Rivet MC analysis system by ![]() |