Rivet analyses referenceARGUS_1987_I247005Helicty angle in $D^0\to K^0_S\phi$Experiment: ARGUS (DORIS) Inspire ID: 247005 Status: VALIDATED NOHEPDATA Authors:
Beam energies: ANY Run details:
Measurement of the helicity angle in $D^0\to K^0_S\phi$ Source code: ARGUS_1987_I247005.cc 1// -*- C++ -*-
2#include "Rivet/Analysis.hh"
3#include "Rivet/Projections/UnstableParticles.hh"
4#include "Rivet/Projections/DecayedParticles.hh"
5
6namespace Rivet {
7
8
9 /// @brief D0 -> KS0 phi
10 class ARGUS_1987_I247005 : public Analysis {
11 public:
12
13 /// Constructor
14 RIVET_DEFAULT_ANALYSIS_CTOR(ARGUS_1987_I247005);
15
16
17 /// @name Analysis methods
18 /// @{
19
20 /// Book histograms and initialise projections before the run
21 void init() {
22 // Initialise and register projections
23 UnstableParticles ufs = UnstableParticles(Cuts::abspid==421);
24 declare(ufs, "UFS");
25 DecayedParticles D0(ufs);
26 D0.addStable(PID::PI0);
27 D0.addStable(PID::K0S);
28 D0.addStable(PID::PHI);
29 declare(D0, "D0");
30 // histos
31 book(_h,1,1,1);
32 }
33
34
35 /// Perform the per-event analysis
36 void analyze(const Event& event) {
37 DecayedParticles D0 = apply<DecayedParticles>(event, "D0");
38 // loop over particles
39 for (unsigned int ix=0; ix<D0.decaying().size(); ++ix) {
40 if (!D0.modeMatches(ix,2,mode)) continue;
41 //const Particle & K0 = D0.decayProducts()[ix].at(310)[0];
42 const Particle& phi = D0.decayProducts()[ix].at(333)[0];
43 if (phi.children().size()!=2) continue;
44 if (phi.children()[0].abspid()!=PID::KPLUS ||
45 phi.children()[1].abspid()!=PID::KPLUS ) continue;
46 // first boost all relevant momenta to D0 rest frame
47 LorentzTransform boost = LorentzTransform::mkFrameTransformFromBeta(D0.decaying()[ix].mom());
48 FourMomentum pphi = boost.transform(phi.mom());
49 FourMomentum pK = boost.transform(phi.children()[0].mom());
50 LorentzTransform boost2 = LorentzTransform::mkFrameTransformFromBeta(pphi.betaVec());
51 Vector3 axis1 = pphi.p3().unit();
52 Vector3 axis2 = boost2.transform(pK ).p3().unit();
53 _h->fill(axis1.dot(axis2));
54 }
55 }
56
57
58 /// Normalise histograms etc., after the run
59 void finalize() {
60 normalize(_h, 1.0, false);
61 }
62
63 /// @}
64
65
66 /// @name Histograms
67 /// @{
68 Histo1DPtr _h;
69 const map<PdgId,unsigned int> mode = { { 310,1}, { 333,1}};
70 /// @}
71
72
73 };
74
75
76 RIVET_DECLARE_PLUGIN(ARGUS_1987_I247005);
77
78}
|