3 #include "Rivet/Analysis.hh"
4 #include "Rivet/RivetAIDA.hh"
5 #include "Rivet/Tools/Logging.hh"
6 #include "Rivet/Projections/FinalState.hh"
7 #include "Rivet/Projections/ChargedFinalState.hh"
8 #include "Rivet/Projections/FastJets.hh"
9 #include "Rivet/Projections/Beam.hh"
10 #include "Rivet/Projections/VetoedFinalState.hh"
22 : Analysis(
"CMS_2011_I930319")
25 setBeams(PROTON,PROTON);
34 const FinalState fs(-6.0,6.0,0.0*
GeV);
35 addProjection(fs,
"FS");
36 addProjection(FastJets(fs, FastJets::ANTIKT, 0.5),
"Jets");
38 VetoedFinalState fsv(fs);
40 fsv.addVetoPairDetail(
MUON, 0.0*
GeV, 99999.9*
GeV);
41 addProjection(fsv,
"fsv");
44 const ChargedFinalState fschrgd(-6.0,6.0,0.0*
GeV);
45 addProjection(fschrgd,
"fschrgd");
46 VetoedFinalState fschrgdv(fschrgd);
47 fschrgdv.vetoNeutrinos();
48 addProjection(fschrgdv,
"fschrgdv");
53 if(fuzzyEquals(sqrtS()/
GeV, 900, 1E-3)){
58 if(fuzzyEquals(sqrtS()/
GeV, 7000, 1E-3)){
66 const double weight =
event.weight();
69 const FinalState& fsv = applyProjection<FinalState>(
event,
"fsv");
70 if (fsv.empty()) vetoEvent;
75 double count_chrg_forward = 0;
76 double count_chrg_backward = 0;
77 const FinalState& fschrgdv = applyProjection<FinalState>(
event,
"fschrgdv");
79 foreach (
const Particle&
p, fschrgdv.particles()) {
80 if( 3.9 < p.momentum().pseudorapidity() &&
81 p.momentum().pseudorapidity() < 4.4){count_chrg_forward++;}
82 if(-4.4 < p.momentum().pseudorapidity() &&
83 p.momentum().pseudorapidity() < -3.9){count_chrg_backward++;}
87 if(count_chrg_forward*count_chrg_backward==0) {
91 const FastJets& jetpro = applyProjection<FastJets>(
event,
"Jets");
99 foreach (
const Particle& p, fsv.particles()) {
102 fill(fabs(p.momentum().pseudorapidity()), weight * p.momentum().
E()/
GeV );}
105 fill(fabs(p.momentum().pseudorapidity()), weight * p.momentum().
E()/
GeV );}
114 signed int index_1 = -1;
115 signed int index_2 = -1;
117 double tempmax_1 = -100;
118 double tempmax_2 = -100;
121 for(
signed int ijets = 0; ijets < (int)jets.size(); ijets++){
122 if(tempmax_1 == -100 || tempmax_1 < jets[ijets].momentum().pT()/
GeV)
124 tempmax_1 = jets[ijets].momentum().pT()/
GeV;
131 for(
signed int ijets = 0; ijets < (int)jets.size(); ijets++){
132 if(tempmax_2 == -100 || tempmax_2 < jets[ijets].momentum().pT()/
GeV){
133 if(jets[ijets].momentum().pT()/
GeV < tempmax_1){
134 tempmax_2 = jets[ijets].momentum().pT()/
GeV;
141 if(index_1 != -1 && index_2 != -1){
143 double diffphi = jets[index_2].momentum().phi() - jets[index_1].momentum().phi();
144 if(diffphi < -
PI){ diffphi += 2.0*
PI; }
145 if(diffphi >
PI){ diffphi -= 2.0*
PI; }
146 diffphi = fabs(diffphi);
153 if(fuzzyEquals(sqrtS()/
GeV, 900, 1E-3)){
156 if(jets[index_1].momentum().pT()/
GeV > 8.0 && jets[index_2].momentum().pT()/
GeV >8.0){
159 if(fabs(jets[index_1].momentum().pseudorapidity()) < 2.5 &&
160 fabs(jets[index_2].momentum().pseudorapidity()) < 2.5){
163 if(fabs(diffphi-
PI) < 1.0){
167 foreach (
const Particle& p, fsv.particles()){
169 fill(fabs(p.momentum().pseudorapidity()), weight*p.momentum().
E()/
GeV);
183 if(fuzzyEquals(sqrtS()/
GeV, 7000, 1E-3)){
186 if(jets[index_1].momentum().pT()/
GeV > 20.0 && jets[index_2].momentum().pT()/
GeV > 20.0){
189 if(fabs(jets[index_1].momentum().pseudorapidity()) < 2.5 &&
190 fabs(jets[index_2].momentum().pseudorapidity()) < 2.5){
193 if(fabs(diffphi-
PI) < 1.0){
197 foreach (
const Particle& p, fsv.particles()){
199 fill(fabs(p.momentum().pseudorapidity()), weight*p.momentum().
E()/
GeV);
217 if(fuzzyEquals(sqrtS()/
GeV, 900, 1E-3)){
222 if(fuzzyEquals(sqrtS()/
GeV, 7000, 1E-3)){
228 getLog() <<
Log::INFO <<
"Number of MB events: " << norm_mb << endl;
229 getLog() <<
Log::INFO <<
"Number of di-jet events : " << norm_dijet <<endl;
AIDA::IHistogram1D * _hist_dijet_7
AIDA::IHistogram1D * _hist_mb_09
AIDA::IHistogram1D * _hist_dijet_09
How EventSelector::AcceptEvent() decides whether to accept an event for output otherwise it is excluding the probing of A single or multiple positive and the trigger will pass if any such matching triggers are PASS or EXCEPTION[A criterion thatmatches no triggers at all is detected and causes a throw.] A single negative with an expectation of appropriate bit checking in the decision and the trigger will pass if any such matching triggers are FAIL or EXCEPTION A wildcarded negative criterion that matches more than one trigger in the trigger but the state exists so we define the behavior If all triggers are the negative crieriion will lead to accepting the event(this again matches the behavior of"!*"before the partial wildcard feature was incorporated).The per-event"cost"of each negative criterion with multiple relevant triggers is about the same as!*was in the past
CMS_2011_I930319()
Constructor.
void analyze(const Event &event) override
AIDA::IHistogram1D * _hist_mb_7
AnalysisBuilder< CMS_2011_I930319 > plugin_CMS_2011_I930319