00001
00002 #include "Rivet/Analysis.hh"
00003 #include "Rivet/RivetAIDA.hh"
00004 #include "Rivet/Tools/ParticleIdUtils.hh"
00005 #include "Rivet/Projections/FastJets.hh"
00006 #include "Rivet/Projections/FinalState.hh"
00007 #include "Rivet/Projections/ChargedFinalState.hh"
00008
00009 namespace Rivet {
00010
00011
00012 namespace {
00013
00014
00015
00016
00017
00018
00019
00020 double calc_BZ(const vector<fastjet::PseudoJet>& jets) {
00021 assert(jets.size() == 4);
00022 Vector3 p12 = cross( momentum3(jets[0]), momentum3(jets[1]));
00023 Vector3 p34 = cross( momentum3(jets[2]), momentum3(jets[3]));
00024 return dot(p12,p34) / (p12.mod()*p34.mod());
00025 }
00026
00027
00028
00029
00030 double calc_KSW(const vector<fastjet::PseudoJet>& jets) {
00031 assert(jets.size() == 4);
00032 Vector3 p13 = cross( momentum3(jets[0]), momentum3(jets[2]));
00033 Vector3 p24 = cross( momentum3(jets[1]), momentum3(jets[3]));
00034 Vector3 p14 = cross( momentum3(jets[0]), momentum3(jets[3]));
00035 Vector3 p23 = cross( momentum3(jets[1]), momentum3(jets[2]));
00036 return cos (0.5*( acos (dot(p14,p23) / (p14.mod()*p23.mod())) +
00037 acos (dot(p13,p24) / (p13.mod()*p24.mod())) ));
00038 }
00039
00040
00041
00042
00043 double calc_NR(const vector<fastjet::PseudoJet>& jets) {
00044 assert(jets.size() == 4);
00045 Vector3 p12 = momentum3(jets[0]) - momentum3(jets[1]);
00046 Vector3 p34 = momentum3(jets[2]) - momentum3(jets[3]);
00047 return dot(p12,p34) / (p12.mod()*p34.mod());
00048 }
00049
00050
00051
00052 double calc_ALPHA34(const vector<fastjet::PseudoJet>& jets) {
00053 assert(jets.size() == 4);
00054 Vector3 p3 = momentum3(jets[2]);
00055 Vector3 p4 = momentum3(jets[3]);
00056 return dot(p3,p4) / (p3.mod()*p4.mod());
00057 }
00058
00059
00060
00061 }
00062
00063
00064
00065
00066
00067
00068
00069
00070
00071
00072
00073
00074
00075
00076
00077
00078 class DELPHI_2003_WUD_03_11 : public Analysis {
00079 public:
00080
00081
00082 DELPHI_2003_WUD_03_11()
00083 : Analysis("DELPHI_2003_WUD_03_11")
00084 {
00085 _numdurjets = 0;
00086 _numjadejets = 0;
00087 }
00088
00089
00090
00091
00092
00093 void init() {
00094 const ChargedFinalState cfs;
00095 addProjection(cfs, "FS");
00096 addProjection(FastJets(cfs, FastJets::JADE, 0.7), "JadeJets");
00097 addProjection(FastJets(cfs, FastJets::DURHAM, 0.7), "DurhamJets");
00098
00099 _histDurhamBZ = bookHistogram1D(1, 1, 1);
00100 _histDurhamKSW = bookHistogram1D(2, 1, 1);
00101 _histDurhamNR = bookHistogram1D(3, 1, 1);
00102 _histDurhamALPHA34 = bookHistogram1D(4, 1, 1);
00103 _histJadeBZ = bookHistogram1D(1, 2, 1);
00104 _histJadeKSW = bookHistogram1D(2, 2, 1);
00105 _histJadeNR = bookHistogram1D(3, 2, 1);
00106 _histJadeALPHA34 = bookHistogram1D(4, 2, 1);
00107 }
00108
00109
00110 void analyze(const Event& e) {
00111
00112 const FinalState& fs = applyProjection<FinalState>(e, "FS");
00113 const size_t numParticles = fs.particles().size();
00114
00115
00116 if (numParticles < 2) {
00117 getLog() << Log::DEBUG << "Failed multiplicity cut" << endl;
00118 vetoEvent;
00119 }
00120 getLog() << Log::DEBUG << "Passed multiplicity cut" << endl;
00121
00122
00123 const double weight = e.weight();
00124
00125
00126 const FastJets& durjet = applyProjection<FastJets>(e, "DurhamJets");
00127 vector<fastjet::PseudoJet> jets_durham;
00128 if (durjet.clusterSeq()) {
00129 jets_durham = fastjet::sorted_by_E(durjet.clusterSeq()->exclusive_jets_ycut(0.008));
00130 if (jets_durham.size() == 4) {
00131 _histDurhamBZ->fill(fabs(calc_BZ(jets_durham)), weight);
00132 _histDurhamKSW->fill(calc_KSW(jets_durham), weight);
00133 _histDurhamNR->fill(fabs(calc_NR(jets_durham)), weight);
00134 _histDurhamALPHA34->fill(calc_ALPHA34(jets_durham), weight);
00135 }
00136 if (durjet.clusterSeq()->exclusive_ymerge(3) > 0.008 &&
00137 durjet.clusterSeq()->exclusive_ymerge(4) < 0.008) {
00138 _numdurjets++;
00139 }
00140 }
00141
00142 const FastJets& jadejet = applyProjection<FastJets>(e, "JadeJets");
00143 vector<fastjet::PseudoJet> jets_jade;
00144 if (jadejet.clusterSeq()) {
00145 jets_jade = fastjet::sorted_by_E(jadejet.clusterSeq()->exclusive_jets_ycut(0.015));
00146 if (jets_jade.size() == 4) {
00147 _histJadeBZ->fill(fabs(calc_BZ(jets_jade)), weight);
00148 _histJadeKSW->fill(calc_KSW(jets_jade), weight);
00149 _histJadeNR->fill(fabs(calc_NR(jets_jade)), weight);
00150 _histJadeALPHA34->fill(calc_ALPHA34(jets_jade), weight);
00151 }
00152 if (jadejet.clusterSeq()->exclusive_ymerge(3) > 0.015 &&
00153 jadejet.clusterSeq()->exclusive_ymerge(4) < 0.015) {
00154 _numjadejets++;
00155 }
00156 }
00157
00158 }
00159
00160
00161
00162 void finalize() {
00163
00164
00165
00166 getLog() << Log::INFO << "Number of Durham jets = " << _numdurjets << endl;
00167 getLog() << Log::INFO << "Number of Jade jets = " << _numjadejets << endl;
00168
00169
00170 normalize(_histDurhamBZ , 0.0785);
00171 normalize(_histDurhamKSW , 0.0785);
00172 normalize(_histDurhamNR , 0.0785);
00173 normalize(_histDurhamALPHA34 , 0.0785);
00174 normalize(_histJadeBZ , 0.0277);
00175 normalize(_histJadeKSW , 0.0277);
00176 normalize(_histJadeNR , 0.0277);
00177 normalize(_histJadeALPHA34 , 0.0277);
00178 }
00179
00180
00181
00182
00183 private:
00184
00185 int _numdurjets;
00186 int _numjadejets;
00187
00188
00189
00190 AIDA::IHistogram1D *_histDurhamBZ;
00191 AIDA::IHistogram1D *_histDurhamKSW;
00192 AIDA::IHistogram1D *_histDurhamNR;
00193 AIDA::IHistogram1D *_histDurhamALPHA34;
00194 AIDA::IHistogram1D *_histJadeBZ;
00195 AIDA::IHistogram1D *_histJadeKSW;
00196 AIDA::IHistogram1D *_histJadeNR;
00197 AIDA::IHistogram1D *_histJadeALPHA34;
00198
00199
00200 };
00201
00202
00203
00204
00205 AnalysisBuilder<DELPHI_2003_WUD_03_11> plugin_DELPHI_2003_WUD_03_11;
00206
00207 }