Rivet analyses referenceL3_2004_I645127$\mu^+\mu^-$ and $\tau^+\tau^-$ production in two photon collisions at LEPExperiment: L3 (LEP) Inspire ID: 645127 Status: VALIDATED Authors:
Beam energies: (80.5, 80.5); (86.0, 86.0); (91.5, 91.5); (94.5, 94.5); (98.0, 98.0); (103.0, 103.0); (1.8, 1.8); (2.2, 2.2); (2.8, 2.8); (3.2, 3.2); (3.8, 3.8); (4.5, 4.5); (6.2, 6.2); (8.8, 8.8); (15.0, 15.0) GeV Run details:
Measurement of $e^+e^-\to e^+e^-\gamma\gamma\to e^+e^-\to e^+e^-\mu^+\mu^-,\ \tau^+\tau^-$. This analysis can test approximations used to simulate this process, but also is a prototype for analyses of $\gamma\gamma$ collisions. There are two modes supported, the first PROCESS=EE, simulates for full process starting with $e^+e^-$ beams, while the second PROCESS=GG is the extracted cross section for $\gamma\gamma\to \mu^+\mu^-$. Source code: L3_2004_I645127.cc 1// -*- C++ -*-
2#include "Rivet/Analysis.hh"
3#include "Rivet/Projections/FinalState.hh"
4#include "Rivet/Projections/GammaGammaFinalState.hh"
5#include "Rivet/Projections/UnstableParticles.hh"
6
7namespace Rivet {
8
9
10 /// @brief mu+mu- and tau+tau- in gamma gamma
11 class L3_2004_I645127 : public Analysis {
12 public:
13
14 /// Constructor
15 RIVET_DEFAULT_ANALYSIS_CTOR(L3_2004_I645127);
16
17
18 /// @name Analysis methods
19 /// @{
20
21 /// Book histograms and initialise projections before the run
22 void init() {
23
24 // get the mode and options
25 _mode =0;
26 if( getOption("PROCESS") == "EE" ) _mode = 0;
27 else if( getOption("PROCESS") == "GG") _mode = 1;
28
29 // Initialise and register projections
30 if(_mode==0) {
31 declare(GammaGammaKinematics(), "Kinematics");
32 declare(GammaGammaFinalState(), "FS");
33 declare(UnstableParticles(),"UFS");
34 // Book histos
35 book(_c_sigma_mu1, 1,1,1);
36 book(_c_sigma_mu2, 1,1,2);
37 book(_c_sigma_tau, 2,1,1);
38 }
39 else if(_mode==1) {
40 declare(FinalState(), "FS");
41 book(_sigma,"TMP/sigma",refData(3,1,1));
42 }
43
44 }
45
46 void findChildren(const Particle & p,map<long,int> & nRes, int &ncount) {
47 for(const Particle &child : p.children()) {
48 if(child.children().empty()) {
49 --nRes[child.pid()];
50 --ncount;
51 }
52 else
53 findChildren(child,nRes,ncount);
54 }
55 }
56
57 /// Perform the per-event analysis
58 void analyze(const Event& event) {
59 // stuff for e+e- collisions
60 double W2 = sqr(sqrtS());
61 if(_mode==0) {
62 const GammaGammaKinematics& kin = apply<GammaGammaKinematics>(event, "Kinematics");
63 W2 = kin.W2();
64 if(W2<9.*sqr(GeV) ) vetoEvent;
65 }
66 const FinalState& fs = apply<FinalState>(event, "FS");
67 map<long,int> nCount;
68 int ntotal(0);
69 bool fiducal = true;
70 for(const Particle & p : fs.particles()) {
71 nCount[p.pid()] += 1;
72 ++ntotal;
73 if(abs(p.pid())==13) {
74 if(abs(cos(p.momentum().polarAngle()))>0.8) fiducal = false;
75 }
76 }
77 if( nCount[-13]==1 && nCount[13]==1 && ntotal==2+nCount[22]) {
78 if(W2<1600.*sqr(GeV) && _c_sigma_mu1) {
79 _c_sigma_mu2->fill(round(sqrtS()));
80 if(fiducal) _c_sigma_mu1->fill(round(sqrtS()));
81 }
82 if(_sigma) _sigma->fill(sqrtS());
83 }
84 if(_mode==1) return;
85 bool foundTauPlus = false, foundTauMinus = true;
86 const UnstableParticles & ufs = apply<UnstableParticles>(event, "UFS");
87 for (const Particle& p : ufs.particles()) {
88 if(p.children().empty()) continue;
89 // find the taus
90 if(abs(p.pid())==15) {
91 if(p.pid()== 15) foundTauMinus=true;
92 if(p.pid()==-15) foundTauPlus =true;
93 findChildren(p,nCount,ntotal);
94 }
95 }
96 if(!foundTauPlus || !foundTauMinus)
97 vetoEvent;
98 bool matched = true;
99 for(auto const & val : nCount) {
100 if(val.first==22) {
101 continue;
102 }
103 else if(val.second!=0) {
104 matched = false;
105 break;
106 }
107 }
108 if(matched)
109 _c_sigma_tau->fill(round(sqrtS()));
110 }
111
112
113 /// Normalise histograms etc., after the run
114 void finalize() {
115 // prefactor for the cross sections
116 double fact = crossSection()/picobarn/sumOfWeights();
117 if(_mode==0) {
118 scale(_c_sigma_mu1,fact);
119 scale(_c_sigma_mu2,fact);
120 scale(_c_sigma_tau,fact);
121 }
122 else {
123 fact /= 1000.;
124 scale(_sigma,fact);
125 for(unsigned int iy=1;iy<6;++iy) {
126 Estimate1DPtr tmp;
127 book(tmp,3,1,iy);
128 barchart(_sigma,tmp);
129 }
130 }
131 }
132
133 /// @}
134
135
136 /// @name Histograms
137 /// @{
138 BinnedHistoPtr<int> _c_sigma_mu1,_c_sigma_mu2,_c_sigma_tau;
139 Histo1DPtr _sigma;
140 unsigned int _mode;
141 /// @}
142
143
144 };
145
146
147 RIVET_DECLARE_PLUGIN(L3_2004_I645127);
148
149
150}
|