rivet is hosted by Hepforge, IPPP Durham

Rivet analyses reference

BESIII_2019_I1691850

Analysis of $J/\psi$ decays to $\Lambda^0\bar\Lambda^0$
Experiment: BESIII (BEPC)
Inspire ID: 1691850
Status: VALIDATED
Authors:
  • Peter Richardson
References:
  • Nature Phys. 15 (2019) 631-634
Beams: e- e+
Beam energies: (1.6, 1.6) GeV
Run details:
  • e+e- > J/psi

Analysis of the angular distribution of the baryons, and decay products, produced in $e^+e^-\to J/\psi \to \Lambda^0\bar\Lambda^0$. Gives information about the decay and is useful for testing correlations in hadron decays. N.B. the moment data is not corrected and should only be used qualatively.

Source code: BESIII_2019_I1691850.cc
  1// -*- C++ -*-
  2#include "Rivet/Analysis.hh"
  3#include "Rivet/Projections/Beam.hh"
  4#include "Rivet/Projections/FinalState.hh"
  5#include "Rivet/Projections/UnstableParticles.hh"
  6
  7namespace Rivet {
  8
  9
 10  /// @brief JPsi > Lambda, Lambdabar
 11  class BESIII_2019_I1691850 : public Analysis {
 12  public:
 13
 14    /// Constructor
 15    RIVET_DEFAULT_ANALYSIS_CTOR(BESIII_2019_I1691850);
 16
 17    /// @name Analysis methods
 18    /// @{
 19
 20    /// Book histograms and initialise projections before the run
 21    void init() {
 22
 23      // Initialise and register projections
 24      declare(Beam(), "Beams");
 25      declare(UnstableParticles(), "UFS");
 26      declare(FinalState(), "FS");
 27
 28      // Book histograms
 29      book(_h_T1_p, "T1_p",20,-1.,1.);
 30      book(_h_T2_p, "T2_p",20,-1.,1.);
 31      book(_h_T3_p, "T3_p",20,-1.,1.);
 32      book(_h_T4_p, "T4_p",20,-1.,1.);
 33      book(_h_T5_p, "T5_p",20,-1.,1.);
 34
 35      book(_h_T1_n, "T1_n",20,-1.,1.);
 36      book(_h_T2_n, "T2_n",20,-1.,1.);
 37      book(_h_T3_n, "T3_n",20,-1.,1.);
 38      book(_h_T4_n, "T4_n",20,-1.,1.);
 39      book(_h_T5_n, "T5_n",20,-1.,1.);
 40
 41      book(_h_cThetaL,"cThetaL",20,-1.,1.);
 42
 43      book(_h_mu_p, 2,1,1);
 44      book(_h_mu_n, 2,1,2);
 45      book(_wsum_p,"TMP/wsum_p");
 46      book(_wsum_n,"TMP/wsum_n");
 47    }
 48
 49
 50    void findChildren(const Particle & p,map<long,int> & nRes, int &ncount) {
 51      for( const Particle &child : p.children()) {
 52        if (child.children().empty()) {
 53          nRes[child.pid()]-=1;
 54          --ncount;
 55        } else {
 56          findChildren(child,nRes,ncount);
 57        }
 58      }
 59    }
 60
 61
 62    /// Perform the per-event analysis
 63    void analyze(const Event& event) {
 64      // get the axis, direction of incoming electron
 65      const ParticlePair& beams = apply<Beam>(event, "Beams").beams();
 66      Vector3 axis;
 67      if(beams.first.pid()>0)
 68        axis = beams.first .momentum().p3().unit();
 69      else
 70        axis = beams.second.momentum().p3().unit();
 71      // types of final state particles
 72      const FinalState& fs = apply<FinalState>(event, "FS");
 73      map<long,int> nCount;
 74      int ntotal(0);
 75      for (const Particle& p :  fs.particles()) {
 76        nCount[p.pid()] += 1;
 77        ++ntotal;
 78      }
 79      // loop over lambda0 baryons
 80      const UnstableParticles & ufs = apply<UnstableParticles>(event, "UFS");
 81      Particle Lambda,LamBar;
 82      bool matched(false);
 83      for (const Particle& p :  ufs.particles(Cuts::abspid==3122)) {
 84       	if(p.children().empty()) continue;
 85       	map<long,int> nRes=nCount;
 86       	int ncount = ntotal;
 87       	findChildren(p,nRes,ncount);
 88       	matched=false;
 89       	// check for antiparticle
 90      	for (const Particle& p2 :  ufs.particles(Cuts::pid==-p.pid())) {
 91      	  if(p2.children().empty()) continue;
 92      	  map<long,int> nRes2=nRes;
 93      	  int ncount2 = ncount;
 94      	  findChildren(p2,nRes2,ncount2);
 95      	  if(ncount2==0) {
 96      	    matched = true;
 97      	    for(auto const & val : nRes2) {
 98      	      if(val.second!=0) {
 99      		matched = false;
100      		break;
101      	      }
102      	    }
103            // found baryon and antibaryon
104      	    if(matched) {
105              if(p.pid()>0) {
106                Lambda = p;
107                LamBar = p2;
108              }
109              else {
110                Lambda = p2;
111                LamBar = p;
112              }
113       	      break;
114       	    }
115       	  }
116       	}
117      	if(matched) break;
118      }
119      if(!matched) vetoEvent;
120      Particle proton;
121      matched = false;
122      for (const Particle & p : Lambda.children()) {
123        if(p.pid()==2212) {
124          matched=true;
125          proton=p;
126        }
127        else if(p.pid()==PID::PHOTON)
128          vetoEvent;
129      }
130      if(!matched) vetoEvent;
131      Particle baryon;
132      int mode(-1);
133      for (const Particle & p : LamBar.children()) {
134        if(p.pid()==-2212) {
135          baryon=p;
136          mode=0;
137        }
138        else if(p.pid()==-2112) {
139          baryon=p;
140          mode=1;
141        }
142        else if(p.pid()==PID::PHOTON)
143          vetoEvent;
144      }
145      if(mode<0) vetoEvent;
146      // boost to the Lambda rest frame
147      LorentzTransform boost1 = LorentzTransform::mkFrameTransformFromBeta(Lambda.momentum().betaVec());
148      Vector3 e1z = Lambda.momentum().p3().unit();
149      Vector3 e1y = e1z.cross(axis).unit();
150      Vector3 e1x = e1y.cross(e1z).unit();
151      Vector3 axis1 = boost1.transform(proton.momentum()).p3().unit();
152      double n1x(e1x.dot(axis1)),n1y(e1y.dot(axis1)),n1z(e1z.dot(axis1));
153      // boost to the Lambda bar
154      LorentzTransform boost2 = LorentzTransform::mkFrameTransformFromBeta(LamBar.momentum().betaVec());
155      Vector3 axis2 = boost2.transform(baryon.momentum()).p3().unit();
156      double n2x(e1x.dot(axis2)),n2y(e1y.dot(axis2)),n2z(e1z.dot(axis2));
157      double cosL = axis.dot(Lambda.momentum().p3().unit());
158      double sinL = sqrt(1.-sqr(cosL));
159      double T1 = sqr(sinL)*n1x*n2x+sqr(cosL)*n1z*n2z;
160      double T2 = -sinL*cosL*(n1x*n2z+n1z*n2x);
161      double T3 = -sinL*cosL*n1y;
162      double T4 = -sinL*cosL*n2y;
163      double T5 = n1z*n2z-sqr(sinL)*n1y*n2y;
164      double mu = n1y-n2y;
165      if(mode==0) {
166        _h_T1_p->fill(cosL,T1);
167        _h_T2_p->fill(cosL,T2);
168        _h_T3_p->fill(cosL,T3);
169        _h_T4_p->fill(cosL,T4);
170        _h_T5_p->fill(cosL,T5);
171        _h_mu_p->fill(cosL,mu);
172        _wsum_p->fill();
173      }
174      else {
175        _h_T1_n->fill(cosL,T1);
176        _h_T2_n->fill(cosL,T2);
177        _h_T3_n->fill(cosL,T3);
178        _h_T4_n->fill(cosL,T4);
179        _h_T5_n->fill(cosL,T5);
180        _h_mu_n->fill(cosL,mu);
181        _wsum_n->fill();
182      }
183      _h_cThetaL->fill(cosL);
184    }
185
186
187    pair<double,pair<double,double> > calcAlpha0(Histo1DPtr hist) {
188      if(hist->numEntries()==0.) return make_pair(0.,make_pair(0.,0.));
189      double d = 3./(pow(hist->xMax(),3)-pow(hist->xMin(),3));
190      double c = 3.*(hist->xMax()-hist->xMin())/(pow(hist->xMax(),3)-pow(hist->xMin(),3));
191      double sum1(0.),sum2(0.),sum3(0.),sum4(0.),sum5(0.);
192      for (auto& bin : hist->bins() ) {
193        double Oi = bin.sumW();
194        if(Oi==0.) continue;
195        double a =  d*(bin.xMax() - bin.xMin());
196        double b = d/3.*(pow(bin.xMax(),3) - pow(bin.xMin(),3));
197        double Ei = bin.errW();
198        sum1 +=   a*Oi/sqr(Ei);
199        sum2 +=   b*Oi/sqr(Ei);
200        sum3 += sqr(a)/sqr(Ei);
201        sum4 += sqr(b)/sqr(Ei);
202        sum5 +=    a*b/sqr(Ei);
203      }
204      // calculate alpha
205      double alpha = (-c*sum1 + sqr(c)*sum2 + sum3 - c*sum5)/(sum1 - c*sum2 + c*sum4 - sum5);
206      // and error
207      double cc = -pow((sum3 + sqr(c)*sum4 - 2*c*sum5),3);
208      double bb = -2*sqr(sum3 + sqr(c)*sum4 - 2*c*sum5)*(sum1 - c*sum2 + c*sum4 - sum5);
209      double aa =  sqr(sum1 - c*sum2 + c*sum4 - sum5)*(-sum3 - sqr(c)*sum4 + sqr(sum1 - c*sum2 + c*sum4 - sum5) + 2*c*sum5);
210      double dis = sqr(bb)-4.*aa*cc;
211      if(dis>0.) {
212        dis = sqrt(dis);
213        return make_pair(alpha,make_pair(0.5*(-bb+dis)/aa,-0.5*(-bb-dis)/aa));
214      }
215      else {
216        return make_pair(alpha,make_pair(0.,0.));
217      }
218    }
219
220
221    pair<double,double> calcCoeff(unsigned int imode,Histo1DPtr hist) {
222      if(hist->numEntries()==0.) return make_pair(0.,0.);
223      double sum1(0.),sum2(0.);
224      for (const auto& bin : hist->bins() ) {
225        double Oi = bin.sumW();
226        if(Oi==0.) continue;
227        double ai(0.),bi(0.);
228        if(imode==0) {
229          bi = (pow(1.-sqr(bin.xMin()),1.5) - pow(1.-sqr(bin.xMax()),1.5))/3.;
230        }
231        else if(imode>=2 && imode<=4) {
232          bi = ( pow(bin.xMin(),3)*( -5. + 3.*sqr(bin.xMin()))  +
233                 pow(bin.xMax(),3)*(  5. - 3.*sqr(bin.xMax())))/15.;
234        }
235        else
236          assert(false);
237        double Ei = bin.errW();
238        sum1 += sqr(bi/Ei);
239        sum2 += bi/sqr(Ei)*(Oi-ai);
240      }
241      return make_pair(sum2/sum1,sqrt(1./sum1));
242    }
243
244
245    /// Normalise histograms etc., after the run
246    void finalize() {
247      normalize(_h_cThetaL);
248      scale(_h_T1_p,1./ *_wsum_p);
249      scale(_h_T2_p,1./ *_wsum_p);
250      scale(_h_T3_p,1./ *_wsum_p);
251      scale(_h_T4_p,1./ *_wsum_p);
252      scale(_h_T5_p,1./ *_wsum_p);
253      scale(_h_mu_p,0.04/ *_wsum_p);
254
255      scale(_h_T1_n,1./ *_wsum_n);
256      scale(_h_T2_n,1./ *_wsum_n);
257      scale(_h_T3_n,1./ *_wsum_n);
258      scale(_h_T4_n,1./ *_wsum_n);
259      scale(_h_T5_n,1./ *_wsum_n);
260      scale(_h_mu_n,0.04/ *_wsum_n);
261
262      // calculate alpha0
263      pair<double,pair<double,double> > alpha0 = calcAlpha0(_h_cThetaL);
264      Estimate1DPtr _h_alpha0;
265      book(_h_alpha0,1,1,1);
266      _h_alpha0->bin(1).set(alpha0.first, alpha0.second);
267      double s2 = -1. + sqr(alpha0.first);
268      double s3 = 3 + alpha0.first;
269      double s1 = sqr(s3);
270      // alpha- and alpha+ from proton data
271      pair<double,double> c_T2_p = calcCoeff(2,_h_T2_p);
272      pair<double,double> c_T3_p = calcCoeff(3,_h_T3_p);
273      pair<double,double> c_T4_p = calcCoeff(4,_h_T4_p);
274      double s4 = sqr(c_T2_p.first);
275      double s5 = sqr(c_T3_p.first);
276      double s6 = sqr(c_T4_p.first);
277      double disc = s1*s5*s6*(-9.*s2*s4 + 4.*s1*s5*s6);
278      if(disc>=0.) {
279        disc = sqrt(disc);
280        double aM = sqrt(-1./s2/s6*(2.*s1*s5*s6+disc));
281        double aP = c_T4_p.first/c_T3_p.first*aM;
282        double aM_M = (2*(alpha0.first*c_T4_p.first*alpha0.second.first + c_T4_p.second*s2)*(disc + 2*s1*s5*s6)
283                       - c_T4_p.first*s2*(4*s3*c_T3_p.first*c_T4_p.first*(c_T3_p.first*c_T4_p.first*alpha0.second.first +s3*c_T4_p.first*c_T3_p.second +s3*c_T3_p.first*c_T4_p.second) +
284                                          (disc*(- 9*s2*s3*c_T2_p.first*c_T3_p.first*c_T4_p.first* c_T2_p.second
285                                                 + 9*((1 -  alpha0.first*(3 + 2*alpha0.first))* c_T3_p.first*c_T4_p.first*alpha0.second.first -  s2*s3*c_T4_p.first*c_T3_p.second
286                                                      - s2*s3*c_T3_p.first*c_T4_p.second)* s4
287                                                 + 8*(c_T3_p.first*c_T4_p.first*alpha0.second.first +  s3*c_T4_p.first*c_T3_p.second +  s3*c_T3_p.first*c_T4_p.second)* s1*s5*s6))
288                                          /(4*pow(3 + alpha0.first,3)*pow(c_T3_p.first,3)*pow(c_T4_p.first,3) -9*s2*s3*c_T3_p.first*c_T4_p.first*s4)))/
289          (2.*pow(c_T4_p.first,3)*pow(s2,2)*sqrt(-((disc + 2*s1*s5*s6)/(s2*s6))));
290        double aM_P = (2*(alpha0.first*c_T4_p.first*alpha0.second.second + c_T4_p.second*s2)*(disc + 2*s1*s5*s6)
291                       - c_T4_p.first*s2*(4*s3*c_T3_p.first*c_T4_p.first*(c_T3_p.first*c_T4_p.first*alpha0.second.second +s3*c_T4_p.first*c_T3_p.second +s3*c_T3_p.first*c_T4_p.second) +
292                                          (disc*(- 9*s2*s3*c_T2_p.first*c_T3_p.first*c_T4_p.first* c_T2_p.second
293                                                 + 9*((1 -  alpha0.first*(3 + 2*alpha0.first))* c_T3_p.first*c_T4_p.first*alpha0.second.second -  s2*s3*c_T4_p.first*c_T3_p.second
294                                                      - s2*s3*c_T3_p.first*c_T4_p.second)* s4
295                                                 + 8*(c_T3_p.first*c_T4_p.first*alpha0.second.second +  s3*c_T4_p.first*c_T3_p.second +  s3*c_T3_p.first*c_T4_p.second)* s1*s5*s6))
296                                          /(4*pow(3 + alpha0.first,3)*pow(c_T3_p.first,3)*pow(c_T4_p.first,3) -9*s2*s3*c_T3_p.first*c_T4_p.first*s4)))/
297          (2.*pow(c_T4_p.first,3)*pow(s2,2)*sqrt(-((disc + 2*s1*s5*s6)/(s2*s6))));
298        double aP_M = (c_T4_p.first*sqrt(-((disc + 2*s1*s5*s6)/   (s2*s6)))*
299                       (-2*c_T3_p.second -  (2*alpha0.first*c_T3_p.first*alpha0.second.first)/s2 +  (c_T3_p.first*(4*s3*c_T3_p.first*c_T4_p.first*(c_T3_p.first*c_T4_p.first*alpha0.second.first +  s3*c_T4_p.first*c_T3_p.second +  s3*c_T3_p.first*c_T4_p.second)
300                                                                                                                   + (disc*(-9*s2*s3*c_T2_p.first*c_T3_p.first*c_T4_p.first* c_T2_p.second
301                                                                                                                            +  9*((1 -  alpha0.first*(3 + 2*alpha0.first))* c_T3_p.first*c_T4_p.first*alpha0.second.first -  s2*s3*c_T4_p.first*c_T3_p.second
302                                                                                                                                  -  s2*s3*c_T3_p.first*c_T4_p.second)* s4 +
303                                                                                                                            8*(c_T3_p.first*c_T4_p.first*alpha0.second.first +  s3*c_T4_p.first*c_T3_p.second +  s3*c_T3_p.first*c_T4_p.second)* s1*s5*s6))/
304                                                                                                                   (4* pow(3 + alpha0.first,3)* pow(c_T3_p.first,3)* pow(c_T4_p.first,3) -  9*s2*s3*c_T3_p.first*c_T4_p.first*s4)))/
305                        (disc + 2*s1*s5*s6)))/(2.*pow(c_T3_p.first,2));
306        double aP_P = (c_T4_p.first*sqrt(-((disc + 2*s1*s5*s6)/   (s2*s6)))*
307                       (-2*c_T3_p.second -  (2*alpha0.first*c_T3_p.first*alpha0.second.second)/s2 +  (c_T3_p.first*(4*s3*c_T3_p.first*c_T4_p.first*(c_T3_p.first*c_T4_p.first*alpha0.second.second +  s3*c_T4_p.first*c_T3_p.second +  s3*c_T3_p.first*c_T4_p.second)
308                                                                                                                    + (disc*(-9*s2*s3*c_T2_p.first*c_T3_p.first*c_T4_p.first* c_T2_p.second
309                                                                                                                             +  9*((1 -  alpha0.first*(3 + 2*alpha0.first))* c_T3_p.first*c_T4_p.first*alpha0.second.second -  s2*s3*c_T4_p.first*c_T3_p.second
310                                                                                                                                   -  s2*s3*c_T3_p.first*c_T4_p.second)* s4 +
311                                                                                                                             8*(c_T3_p.first*c_T4_p.first*alpha0.second.second +  s3*c_T4_p.first*c_T3_p.second +  s3*c_T3_p.first*c_T4_p.second)* s1*s5*s6))/
312                                                                                                                    (4* pow(3 + alpha0.first,3)* pow(c_T3_p.first,3)* pow(c_T4_p.first,3) -  9*s2*s3*c_T3_p.first*c_T4_p.first*s4)))/
313                        (disc + 2*s1*s5*s6)))/(2.*pow(c_T3_p.first,2));
314        Estimate1DPtr _h_alphaM;
315        book(_h_alphaM,1,3,1);
316        _h_alphaM->bin(1).set(aM, make_pair(-aM_M , -aM_P ));
317
318        Estimate1DPtr _h_alphaP;
319        book(_h_alphaP,1,4,1);
320        _h_alphaP->bin(1).set(aP, make_pair(-aP_M , -aP_P  ));
321        // now for Delta
322        double sDelta = (-2.*(3. + alpha0.first)*c_T3_p.first)/(aM*sqrt(1 - sqr(alpha0.first)));
323        double cDelta = (-3*(3 + alpha0.first)*c_T2_p.first)/(aM*aP*sqrt(1 - sqr(alpha0.first)));
324
325        double Delta = asin(sDelta);
326        if(cDelta<0.) Delta = M_PI-Delta;
327        double ds_P = (-9*c_T2_p.first*((-1 + alpha0.first)*(1 + alpha0.first)*  (3 + alpha0.first)*c_T3_p.first*c_T4_p.first*c_T2_p.second +  c_T2_p.first*c_T4_p.first*(c_T3_p.first*(alpha0.second.first + 3*alpha0.first*alpha0.second.first) -(-1 + alpha0.first)*(1 + alpha0.first)*(3 + alpha0.first)*c_T3_p.second)
328                                        -  (-1 + alpha0.first)*(1 + alpha0.first)*  (3 + alpha0.first)*c_T2_p.first*c_T3_p.first*c_T4_p.second)*disc)/
329          (pow(1 - pow(alpha0.first,2),1.5)*pow(c_T4_p.first,3)*pow(-((disc + 2*s1*s5*s6)/   (s2*s6)),1.5)*(-9*s2*s4 + 4*s1*s5*s6));
330        double ds_M = (-9*c_T2_p.first*((-1 + alpha0.first)*(1 + alpha0.first)*  (3 + alpha0.first)*c_T3_p.first*c_T4_p.first*c_T2_p.second +  c_T2_p.first*c_T4_p.first*(c_T3_p.first*(alpha0.second.second + 3*alpha0.first*alpha0.second.second) -(-1 + alpha0.first)*(1 + alpha0.first)*(3 + alpha0.first)*c_T3_p.second)
331                                        -  (-1 + alpha0.first)*(1 + alpha0.first)*  (3 + alpha0.first)*c_T2_p.first*c_T3_p.first*c_T4_p.second)*disc)/
332          (pow(1 - pow(alpha0.first,2),1.5)*pow(c_T4_p.first,3)*pow(-((disc + 2*s1*s5*s6)/   (s2*s6)),1.5)*(-9*s2*s4 + 4*s1*s5*s6));
333        ds_P /= sqrt(1.-sqr(sDelta));
334        ds_M /= sqrt(1.-sqr(sDelta));
335        Estimate1DPtr _h_sin;
336        book(_h_sin,1,2,1);
337        _h_sin->bin(1).set(Delta/M_PI*180., make_pair( -ds_P/M_PI*180., -ds_M/M_PI*180. ));
338      }
339      // alpha 0
340      pair<double,double> c_T2_n = calcCoeff(2,_h_T2_n);
341      pair<double,double> c_T3_n = calcCoeff(3,_h_T3_n);
342      pair<double,double> c_T4_n = calcCoeff(4,_h_T4_n);
343      s4 = sqr(c_T2_n.first);
344      s5 = sqr(c_T3_n.first);
345      s6 = sqr(c_T4_n.first);
346      disc = s1*s5*s6*(-9.*s2*s4 + 4.*s1*s5*s6);
347      if(disc>=0.) {
348        disc = sqrt(disc);
349        double aM = sqrt(-1./s2/s6*(2.*s1*s5*s6+disc));
350        double a0 = c_T4_n.first/c_T3_n.first*aM;
351        double a0_M = (c_T4_n.first*sqrt(-((disc + 2*s1*s5*s6)/   (s2*s6)))*
352                       (-2*c_T3_n.second -  (2*alpha0.first*c_T3_n.first*alpha0.second.first)/s2 +  (c_T3_n.first*(4*s3*c_T3_n.first*c_T4_n.first*(c_T3_n.first*c_T4_n.first*alpha0.second.first +  s3*c_T4_n.first*c_T3_n.second +  s3*c_T3_n.first*c_T4_n.second)
353                                                                                                                   + (disc*(-9*s2*s3*c_T2_n.first*c_T3_n.first*c_T4_n.first* c_T2_n.second
354                                                                                                                            +  9*((1 -  alpha0.first*(3 + 2*alpha0.first))* c_T3_n.first*c_T4_n.first*alpha0.second.first -  s2*s3*c_T4_n.first*c_T3_n.second
355                                                                                                                                  -  s2*s3*c_T3_n.first*c_T4_n.second)* s4 +
356                                                                                                                            8*(c_T3_n.first*c_T4_n.first*alpha0.second.first +  s3*c_T4_n.first*c_T3_n.second +  s3*c_T3_n.first*c_T4_n.second)* s1*s5*s6))/
357                                                                                                                   (4* pow(3 + alpha0.first,3)* pow(c_T3_n.first,3)* pow(c_T4_n.first,3) -  9*s2*s3*c_T3_n.first*c_T4_n.first*s4)))/
358                        (disc + 2*s1*s5*s6)))/(2.*pow(c_T3_n.first,2));
359        double a0_P = (c_T4_n.first*sqrt(-((disc + 2*s1*s5*s6)/   (s2*s6)))*
360                       (-2*c_T3_n.second -  (2*alpha0.first*c_T3_n.first*alpha0.second.second)/s2 +  (c_T3_n.first*(4*s3*c_T3_n.first*c_T4_n.first*(c_T3_n.first*c_T4_n.first*alpha0.second.second +  s3*c_T4_n.first*c_T3_n.second +  s3*c_T3_n.first*c_T4_n.second)
361                                                                                                                    + (disc*(-9*s2*s3*c_T2_n.first*c_T3_n.first*c_T4_n.first* c_T2_n.second
362                                                                                                                             +  9*((1 -  alpha0.first*(3 + 2*alpha0.first))* c_T3_n.first*c_T4_n.first*alpha0.second.second -  s2*s3*c_T4_n.first*c_T3_n.second
363                                                                                                                                   -  s2*s3*c_T3_n.first*c_T4_n.second)* s4 +
364                                                                                                                             8*(c_T3_n.first*c_T4_n.first*alpha0.second.second +  s3*c_T4_n.first*c_T3_n.second +  s3*c_T3_n.first*c_T4_n.second)* s1*s5*s6))/
365                                                                                                                    (4* pow(3 + alpha0.first,3)* pow(c_T3_n.first,3)* pow(c_T4_n.first,3) -  9*s2*s3*c_T3_n.first*c_T4_n.first*s4)))/
366                        (disc + 2*s1*s5*s6)))/(2.*pow(c_T3_n.first,2));
367        Estimate1DPtr _h_alpha0;
368        book(_h_alpha0,1,5,1);
369        _h_alpha0->bin(1).set(a0, make_pair(-a0_M , -a0_P)); // @todo Should there really be a minus sign for both of them?
370      }
371    }
372
373    /// @}
374
375    /// @name Histograms
376    /// @{
377    Histo1DPtr _h_T1_p,_h_T2_p,_h_T3_p,_h_T4_p,_h_T5_p;
378    Histo1DPtr _h_T1_n,_h_T2_n,_h_T3_n,_h_T4_n,_h_T5_n;
379    Histo1DPtr _h_cThetaL;
380    Histo1DPtr _h_mu_p,_h_mu_n;
381    CounterPtr _wsum_p,_wsum_n;
382    /// @}
383
384  };
385
386
387  RIVET_DECLARE_PLUGIN(BESIII_2019_I1691850);
388
389}