Pluto v6.3.0
Loading...
Searching...
No Matches
PExoticsPlugin.cc
Go to the documentation of this file.
1
2//Plugin to add some exotic particles
3//see doc/particle_list.txt
4//
5//
6//This plugin is automatically enabled. If you don't like it, call
7//makeDistributionManager()->Disable("exotics");
8//in the very beginning of your macro
9//
11
12#include "PExoticsPlugin.h"
13
15#include "PResonanceDalitz.h"
16#include "PHadronDecayM2Mesh.h"
17
18PExoticsPlugin::PExoticsPlugin(const Char_t *id, const Char_t *de) :
19 PDistributionCollection(id, de), is_initialized(0) {
20 // RequiresPlugin("elementary");
21}
22
24 return kTRUE;
25}
26
29
30
31Bool_t PExoticsPlugin::ExecCommand(const char *command, Double_t) {
32
33 if (strcmp (command,"x17") == 0) {
34 //Experimental X17
35 if (makeStaticData()->AddParticle(117, "X17", 0.017) > 0) {
36 makeStaticData()->AddAlias("X17","x17");
37 makeStaticData()->SetParticleTotalWidth("X17", 6.582122e-25/4e-14);
39
40 makeStaticData()->AddDecay("X17 --> e+ + e-", "X17", "e+,e-", 1);
41 makeStaticData()->AddDecay("eta --> pi+ + pi- + X17", "eta", "pi+,pi-,X17", 0.001);
42
43 } else {
44 Error("ExecCommand", "PIDs blocked, plugin disabled");
45 }
46 return kTRUE;
47 }
48
49 if (strcmp (command,"init") == 0) {
50 if (!is_initialized) {
51 is_initialized = 1;
52
53 Double_t *system_alloc_verbosity = makeStaticData()->GetBatchValue("_system_alloc_verbosity");
54 Double_t old = (*system_alloc_verbosity);
55 (*system_alloc_verbosity) = 0;
56
58 pdmutil->AddSubGroup("exotics", "Models for exotics", "decay_models");
59 pdmutil->SetGroup("exotics");
60
61 //f0(980)
62 if (makeStaticData()->AddParticle(200, "f0_980", 0.99) > 0) {
63 makeStaticData()->AddAlias("f0_980", "f0(980)");
64 makeStaticData()->SetParticleCharge("f0_980", 0);
65 makeStaticData()->SetParticleTotalWidth("f0_980", 0.05);
66 makeStaticData()->SetParticleMeson("f0_980", kTRUE);
67 makeStaticData()->AddDecay("f_0(980) --> pi+ + pi-", "f0_980", "pi+,pi-", 2.0/3.0);
68 makeStaticData()->AddDecay("f_0(980) --> pi0 + pi0", "f0_980", "pi0,pi0", 1.0/3.0);
69 } else {
70 Error("ExecCommand", "PID blocked for f0_980, plugin disabled");
71 (*system_alloc_verbosity) = old;
72 return kFALSE;
73 }
74
75 // --------------------------------------------------------------------
76 // PIDs 201-203: a0(980) Isospin-1 Multiplet (Flatté candidates)
77 // Note: KK-bar channels are omitted here intentionally. They will be
78 // handled later via Flatté parameterization to avoid static
79 // phase-space threshold violations.
80 // --------------------------------------------------------------------
81 // BEGIN AI generated (Gemini)
82
83 // PID 201: Neutral a0(980)
84 if (makeStaticData()->AddParticle(201, "a0_980_0", 0.980) > 0) {
85 makeStaticData()->AddAlias("a0_980_0", "a_0(980)0");
86 makeStaticData()->SetParticleTotalWidth("a0_980_0", 0.075); // PDG effective width
87 makeStaticData()->SetParticleBaryon("a0_980_0", 0);
88 makeStaticData()->SetParticleMeson("a0_980_0", 1);
89 makeStaticData()->SetParticleSpin("a0_980_0", 0);
90 makeStaticData()->SetParticleParity("a0_980_0", 1);
91
92 // Dominant hadronic decay
93 makeStaticData()->AddDecay("a_0(980)0 --> pi0 + eta", "a0_980_0", "pi0,eta", 1.0);
94 } else {
95 Error("ExecCommand", "PID 201 blocked! PExoticsPlugin disabled.");
96 (*system_alloc_verbosity) = old;
97 return kFALSE;
98 }
99
100 // PID 202: Positive a0(980)
101 if (makeStaticData()->AddParticle(202, "a0_980+", 0.980) > 0) {
102 makeStaticData()->AddAlias("a0_980+", "a_0(980)+");
103 makeStaticData()->SetParticleTotalWidth("a0_980+", 0.075);
104 makeStaticData()->SetParticleBaryon("a0_980+", 0);
105 makeStaticData()->SetParticleMeson("a0_980+", 1);
106 makeStaticData()->SetParticleSpin("a0_980+", 0);
107 makeStaticData()->SetParticleParity("a0_980+", 1);
108
109 // Dominant hadronic decay
110 makeStaticData()->AddDecay("a_0(980)+ --> pi+ + eta", "a0_980+", "pi+,eta", 1.0);
111 } else {
112 Error("ExecCommand", "PID 202 blocked! PExoticsPlugin disabled.");
113 (*system_alloc_verbosity) = old;
114 return kFALSE;
115 }
116
117 // PID 203: Negative a0(980)
118 if (makeStaticData()->AddParticle(203, "a0_980-", 0.980) > 0) {
119 makeStaticData()->AddAlias("a0_980-", "a_0(980)-");
120 makeStaticData()->SetParticleTotalWidth("a0_980-", 0.075);
121 makeStaticData()->SetParticleBaryon("a0_980-", 0);
122 makeStaticData()->SetParticleMeson("a0_980-", 1);
123 makeStaticData()->SetParticleSpin("a0_980-", 0);
124 makeStaticData()->SetParticleParity("a0_980-", 1);
125
126 // Dominant hadronic decay
127 makeStaticData()->AddDecay("a_0(980)- --> pi- + eta", "a0_980-", "pi-,eta", 1.0);
128 } else {
129 Error("ExecCommand", "PID 203 blocked! PExoticsPlugin disabled.");
130 (*system_alloc_verbosity) = old;
131 return kFALSE;
132 }
133 //END AI generated
134
135 // PID 204: phi(2170) (PDG average mass and width, July 2026)
136 if (makeStaticData()->AddParticle(204, "phi2170", 2.164) > 0) {
137 makeStaticData()->AddAlias("phi2170", "phi(2170)");
138 makeStaticData()->SetParticleCharge("phi2170", 0);
139 makeStaticData()->SetParticleTotalWidth("phi2170", 0.088);
140 makeStaticData()->SetParticleMeson("phi2170", kTRUE);
141 // Default decay channels: the branching fractions below are placeholders and may be modified by users depending on their intended study.
142 makeStaticData()->AddDecay("phi(2170) --> phi + pi+ + pi-", "phi2170", "phi,pi+,pi-", 1.0/3.0);
143 makeStaticData()->AddDecay("phi(2170) --> K+ + K- + pi+ + pi-", "phi2170", "K+,K-,pi+,pi-", 1.0/3.0);
144 Int_t decay_key = makeStaticData()->GetDecayKey(makeStaticData()->AddDecay("phi(2170) --> phi + f0(980)", "phi2170", "phi,f0_980", 1.0/3.0));
145 PHadronDecayM2Mesh *model = new PHadronDecayM2Mesh("phi2170_m2mesh_phi_f0_980", "Mesh decay for phi2170", decay_key);
146 pdmutil->Add(model);
147 } else {
148 Error("ExecCommand", "PID blocked for phi2170, plugin disabled");
149 (*system_alloc_verbosity) = old;
150 return kFALSE;
151 }
152
153 (*system_alloc_verbosity) = old;
154 }
155 return kTRUE;
156 }
157
158 return kFALSE;
159}
160
161
163
ClassImp(PBeamLineSimulation) PBeamLineSimulation
PDistributionManagerUtil * makeDistributionManagerUtil()
PStaticData * makeStaticData()
int Add(PDistribution *dist)
Int_t AddSubGroup(const Char_t *id, const Char_t *de, const Char_t *sub)
void SetGroup(const Char_t *id)
Bool_t ExecCommand(const char *command, Double_t value)
PExoticsPlugin(const Char_t *id, const Char_t *de)
Bool_t Activate(void)
int AddDecay(int didx, const char *name, const char *parent, const char *daughters, double br)
void SetParticleSpin(const char *id, Int_t spin)
void SetParticleMeson(const char *id, Int_t num=1)
void SetParticleTotalWidth(Int_t id, Float_t wid)
void SetParticleCharge(const char *id, Int_t charge)
Double_t * GetBatchValue(const char *name, Int_t make_val=1)
void SetParticleBaryon(const char *id, Int_t num=1)
void SetParticleParity(const char *id, Int_t parity)
int GetDecayKey(int *pid, int n)
int AddAlias(const char *old_name, const char *new_name)
embedded AddParticle(e_plus)