Static Public Member Functions | List of all members
genie::SppChannel Class Reference

Enumeration of single pion production channels. More...

#include <SppChannel.h>

Static Public Member Functions

static string AsString (SppChannel_t channel)
 
static int InitStateNucleon (SppChannel_t channel)
 
static int FinStateNucleon (SppChannel_t channel)
 
static int FinStatePion (SppChannel_t channel)
 
static int ResonanceCharge (SppChannel_t channel)
 
static double IsospinWeight (SppChannel_t channel, Resonance_t res)
 
static double BranchingRatio (SppChannel_t, Resonance_t res)
 
static SppChannel_t FromInteraction (const Interaction *interaction)
 

Detailed Description

Enumeration of single pion production channels.

Author
Costas Andreopoulos <constantinos.andreopoulos cern.ch> University of Liverpool & STFC Rutherford Appleton Laboratory

December 16, 2004

Copyright (c) 2003-2020, The GENIE Collaboration For the full text of the license visit http://copyright.genie-mc.org

Definition at line 60 of file SppChannel.h.

Member Function Documentation

static string genie::SppChannel::AsString ( SppChannel_t  channel)
inlinestatic

Definition at line 65 of file SppChannel.h.

66  {
67  switch (channel) {
68 
69  case (kSpp_vp_cc_10100) : return "v p -> l- p pi+"; break;
70  case (kSpp_vn_cc_10010) : return "v n -> l- p pi0"; break;
71  case (kSpp_vn_cc_01100) : return "v n -> l- n pi+"; break;
72 
73  case (kSpp_vp_nc_10010) : return "v p -> v p pi0"; break;
74  case (kSpp_vp_nc_01100) : return "v p -> v n pi+"; break;
75  case (kSpp_vn_nc_01010) : return "v n -> v n pi0"; break;
76  case (kSpp_vn_nc_10001) : return "v n -> v p pi-"; break;
77 
78  case (kSpp_vbn_cc_01001): return "vb n -> l+ n pi-"; break;
79  case (kSpp_vbp_cc_01010): return "vb p -> l+ n pi0"; break;
80  case (kSpp_vbp_cc_10001): return "vb p -> l+ p pi-"; break;
81 
82  case (kSpp_vbp_nc_10010): return "vb p -> vb p pi0"; break;
83  case (kSpp_vbp_nc_01100): return "vb p -> vb n pi+"; break;
84  case (kSpp_vbn_nc_01010): return "vb n -> vb n pi0"; break;
85  case (kSpp_vbn_nc_10001): return "vb n -> vb p pi-"; break;
86 
87  default : return "Unknown"; break;
88  }
89  return "Unknown";
90  }
uint8_t channel
Definition: CRTFragment.hh:201
static double genie::SppChannel::BranchingRatio ( SppChannel_t  ,
Resonance_t  res 
)
inlinestatic

Definition at line 244 of file SppChannel.h.

245  {
246  // return the BR for the decay of the input resonance to the final state
247  // hadronic system of the input exclusive channel.
248 
249  // get list of TDecayChannels, match one with the input channel and get
250  // the branching ratio.
251 
252  switch(res) {
253  case kP33_1232 : return 0.994; break;
254  case kS11_1535 : return 0.450; break;
255  case kD13_1520 : return 0.600; break; // REMOVE HARDCODED DATA FROM
256  case kS11_1650 : return 0.700; break; // HERE AND GET BR's from PDG
257  case kD13_1700 : return 0.120; break; // TABLES via TDatabasePDG
258  case kD15_1675 : return 0.400; break;
259  case kS31_1620 : return 0.250; break;
260  case kD33_1700 : return 0.150; break;
261  case kP11_1440 : return 0.650; break;
262  case kP33_1600 : return 0.175; break;
263  case kP13_1720 : return 0.110; break;
264  case kF15_1680 : return 0.675; break;
265  case kP31_1910 : return 0.225; break;
266  case kP33_1920 : return 0.125; break;
267  case kF35_1905 : return 0.120; break;
268  case kF37_1950 : return 0.400; break;
269  case kP11_1710 : return 0.125; break;
270  case kF17_1970 : return 0.150; break;
271  default: break;
272  }
273  return 0;
274  }
static int genie::SppChannel::FinStateNucleon ( SppChannel_t  channel)
inlinestatic

Definition at line 119 of file SppChannel.h.

120  {
121  switch (channel) {
122 
123  case (kSpp_vp_cc_10100) : return kPdgProton; break;
124  case (kSpp_vn_cc_10010) : return kPdgProton; break;
125  case (kSpp_vn_cc_01100) : return kPdgNeutron; break;
126 
127  case (kSpp_vp_nc_10010) : return kPdgProton; break;
128  case (kSpp_vp_nc_01100) : return kPdgNeutron; break;
129  case (kSpp_vn_nc_01010) : return kPdgNeutron; break;
130  case (kSpp_vn_nc_10001) : return kPdgProton; break;
131 
132  case (kSpp_vbn_cc_01001): return kPdgNeutron; break;
133  case (kSpp_vbp_cc_01010): return kPdgNeutron; break;
134  case (kSpp_vbp_cc_10001): return kPdgProton; break;
135 
136  case (kSpp_vbp_nc_10010): return kPdgProton; break;
137  case (kSpp_vbp_nc_01100): return kPdgNeutron; break;
138  case (kSpp_vbn_nc_01010): return kPdgNeutron; break;
139  case (kSpp_vbn_nc_10001): return kPdgProton; break;
140 
141  default : return 0; break;
142  }
143  return 0;
144  }
uint8_t channel
Definition: CRTFragment.hh:201
const int kPdgProton
Definition: PDGCodes.h:81
const int kPdgNeutron
Definition: PDGCodes.h:83
static int genie::SppChannel::FinStatePion ( SppChannel_t  channel)
inlinestatic

Definition at line 146 of file SppChannel.h.

147  {
148  switch (channel) {
149 
150  case (kSpp_vp_cc_10100) : return kPdgPiP; break;
151  case (kSpp_vn_cc_10010) : return kPdgPi0; break;
152  case (kSpp_vn_cc_01100) : return kPdgPiP; break;
153 
154  case (kSpp_vp_nc_10010) : return kPdgPi0; break;
155  case (kSpp_vp_nc_01100) : return kPdgPiP; break;
156  case (kSpp_vn_nc_01010) : return kPdgPi0; break;
157  case (kSpp_vn_nc_10001) : return kPdgPiM; break;
158 
159  case (kSpp_vbn_cc_01001): return kPdgPiM; break;
160  case (kSpp_vbp_cc_01010): return kPdgPi0; break;
161  case (kSpp_vbp_cc_10001): return kPdgPiM; break;
162 
163  case (kSpp_vbp_nc_10010): return kPdgPi0; break;
164  case (kSpp_vbp_nc_01100): return kPdgPiP; break;
165  case (kSpp_vbn_nc_01010): return kPdgPi0; break;
166  case (kSpp_vbn_nc_10001): return kPdgPiM; break;
167 
168  default : return 0; break;
169  }
170  return 0;
171  }
uint8_t channel
Definition: CRTFragment.hh:201
const int kPdgPiP
Definition: PDGCodes.h:158
const int kPdgPi0
Definition: PDGCodes.h:160
const int kPdgPiM
Definition: PDGCodes.h:159
static SppChannel_t genie::SppChannel::FromInteraction ( const Interaction interaction)
inlinestatic

Definition at line 276 of file SppChannel.h.

277  {
278  const InitialState & init_state = interaction->InitState();
279  const ProcessInfo & proc_info = interaction->ProcInfo();
280  const XclsTag & xcls_tag = interaction->ExclTag();
281 
282  if( xcls_tag.NPions() != 1 ) return kSppNull;
283  if( xcls_tag.NNucleons() != 1 ) return kSppNull;
284 
285  // get struck nucleon
286  int hit_nucl_pdgc = init_state.Tgt().HitNucPdg();
287  if( ! pdg::IsNeutronOrProton(hit_nucl_pdgc) ) return kSppNull;
288  bool hit_p = pdg::IsProton(hit_nucl_pdgc);
289  bool hit_n = !hit_p;
290 
291  // the final state hadronic sytem has 1 pi and 1 nucleon
292  bool fs_pi_plus = ( xcls_tag.NPiPlus() == 1 );
293  bool fs_pi_minus = ( xcls_tag.NPiMinus() == 1 );
294  bool fs_pi_0 = ( xcls_tag.NPi0() == 1 );
295  bool fs_p = ( xcls_tag.NProtons() == 1 );
296  bool fs_n = ( xcls_tag.NNeutrons() == 1 );
297 
298  // get probe
299  int probe = init_state.ProbePdg();
300 
301  // figure out spp channel
302  if( pdg::IsNeutrino(probe) ) {
303 
304  if ( proc_info.IsWeakCC() ) {
305  if (hit_p && fs_p && fs_pi_plus ) return kSpp_vp_cc_10100;
306  else if (hit_n && fs_p && fs_pi_0 ) return kSpp_vn_cc_10010;
307  else if (hit_n && fs_n && fs_pi_plus ) return kSpp_vn_cc_01100;
308  else return kSppNull;
309  } else if ( proc_info.IsWeakNC() ) {
310  if (hit_p && fs_p && fs_pi_0 ) return kSpp_vp_nc_10010;
311  else if (hit_p && fs_n && fs_pi_plus ) return kSpp_vp_nc_01100;
312  else if (hit_n && fs_n && fs_pi_0 ) return kSpp_vn_nc_01010;
313  else if (hit_n && fs_p && fs_pi_minus) return kSpp_vn_nc_10001;
314  else return kSppNull;
315  } else return kSppNull;
316 
317  } else if( pdg::IsAntiNeutrino(probe) ) {
318 
319  if ( proc_info.IsWeakCC() ) {
320  if (hit_n && fs_n && fs_pi_minus) return kSpp_vbn_cc_01001;
321  else if (hit_p && fs_n && fs_pi_0 ) return kSpp_vbp_cc_01010;
322  else if (hit_p && fs_p && fs_pi_minus) return kSpp_vbp_cc_10001;
323  else return kSppNull;
324  } else if ( proc_info.IsWeakNC() ) {
325  if (hit_p && fs_p && fs_pi_0 ) return kSpp_vbp_nc_10010;
326  else if (hit_p && fs_n && fs_pi_plus ) return kSpp_vbp_nc_01100;
327  else if (hit_n && fs_n && fs_pi_0 ) return kSpp_vbn_nc_01010;
328  else if (hit_n && fs_p && fs_pi_minus) return kSpp_vbn_nc_10001;
329  else return kSppNull;
330  } else return kSppNull;
331  }
332 
333  return kSppNull;
334  }
bool IsNeutrino(int pdgc)
Definition: PDGUtils.cxx:107
bool IsProton(int pdgc)
Definition: PDGUtils.cxx:333
bool IsAntiNeutrino(int pdgc)
Definition: PDGUtils.cxx:115
bool IsNeutronOrProton(int pdgc)
Definition: PDGUtils.cxx:348
static int genie::SppChannel::InitStateNucleon ( SppChannel_t  channel)
inlinestatic

Definition at line 92 of file SppChannel.h.

93  {
94  switch (channel) {
95 
96  case (kSpp_vp_cc_10100) : return kPdgProton; break;
97  case (kSpp_vn_cc_10010) : return kPdgNeutron; break;
98  case (kSpp_vn_cc_01100) : return kPdgNeutron; break;
99 
100  case (kSpp_vp_nc_10010) : return kPdgProton; break;
101  case (kSpp_vp_nc_01100) : return kPdgProton; break;
102  case (kSpp_vn_nc_01010) : return kPdgNeutron; break;
103  case (kSpp_vn_nc_10001) : return kPdgNeutron; break;
104 
105  case (kSpp_vbn_cc_01001): return kPdgNeutron; break;
106  case (kSpp_vbp_cc_01010): return kPdgProton; break;
107  case (kSpp_vbp_cc_10001): return kPdgProton; break;
108 
109  case (kSpp_vbp_nc_10010): return kPdgProton; break;
110  case (kSpp_vbp_nc_01100): return kPdgProton; break;
111  case (kSpp_vbn_nc_01010): return kPdgNeutron; break;
112  case (kSpp_vbn_nc_10001): return kPdgNeutron; break;
113 
114  default : return 0; break;
115  }
116  return 0;
117  }
uint8_t channel
Definition: CRTFragment.hh:201
const int kPdgProton
Definition: PDGCodes.h:81
const int kPdgNeutron
Definition: PDGCodes.h:83
static double genie::SppChannel::IsospinWeight ( SppChannel_t  channel,
Resonance_t  res 
)
inlinestatic

Definition at line 200 of file SppChannel.h.

201  {
202  // return the isospin Glebsch Gordon coefficient for the input resonance
203  // contribution to the input exclusive channel
204 
205  bool is_delta = utils::res::IsDelta(res);
206 
207  double iw_1_3 = 0.33333333;
208  double iw_2_3 = 0.66666666;
209 
210  switch (channel) {
211 
212  //-- v CC
213  case (kSpp_vp_cc_10100) : return (is_delta) ? (1.0) : (0.0); break;
214  case (kSpp_vn_cc_10010) : return (is_delta) ? (iw_2_3) : (iw_1_3); break;
215  case (kSpp_vn_cc_01100) : return (is_delta) ? (iw_1_3) : (iw_2_3); break;
216 
217  //-- v NC
218  case (kSpp_vp_nc_10010) : return (is_delta) ? (iw_2_3) : (iw_1_3); break;
219  case (kSpp_vp_nc_01100) : return (is_delta) ? (iw_1_3) : (iw_2_3); break;
220  case (kSpp_vn_nc_01010) : return (is_delta) ? (iw_2_3) : (iw_1_3); break;
221  case (kSpp_vn_nc_10001) : return (is_delta) ? (iw_1_3) : (iw_2_3); break;
222 
223  //-- same as for neutrinos (? - check)
224 
225  //-- vbar CC
226  case (kSpp_vbn_cc_01001): return (is_delta) ? (1.0) : (0.0); break;
227  case (kSpp_vbp_cc_01010): return (is_delta) ? (iw_2_3) : (iw_1_3); break;
228  case (kSpp_vbp_cc_10001): return (is_delta) ? (iw_1_3) : (iw_2_3); break;
229 
230  //-- vbar NC
231  case (kSpp_vbp_nc_10010): return (is_delta) ? (iw_2_3) : (iw_1_3); break;
232  case (kSpp_vbp_nc_01100): return (is_delta) ? (iw_1_3) : (iw_2_3); break;
233  case (kSpp_vbn_nc_01010): return (is_delta) ? (iw_2_3) : (iw_1_3); break;
234  case (kSpp_vbn_nc_10001): return (is_delta) ? (iw_1_3) : (iw_2_3); break;
235 
236  default : return 0; break;
237  }
238 
239  return 0;
240  }
bool IsDelta(Resonance_t res)
is it a Delta resonance?
uint8_t channel
Definition: CRTFragment.hh:201
static int genie::SppChannel::ResonanceCharge ( SppChannel_t  channel)
inlinestatic

Definition at line 173 of file SppChannel.h.

174  {
175  switch (channel) {
176 
177  case (kSpp_vp_cc_10100) : return 2; break;
178  case (kSpp_vn_cc_10010) : return 1; break;
179  case (kSpp_vn_cc_01100) : return 1; break;
180 
181  case (kSpp_vp_nc_10010) : return 1; break;
182  case (kSpp_vp_nc_01100) : return 1; break;
183  case (kSpp_vn_nc_01010) : return 0; break;
184  case (kSpp_vn_nc_10001) : return 0; break;
185 
186  case (kSpp_vbn_cc_01001): return -1; break;
187  case (kSpp_vbp_cc_01010): return 0; break;
188  case (kSpp_vbp_cc_10001): return 0; break;
189 
190  case (kSpp_vbp_nc_10010): return 1; break;
191  case (kSpp_vbp_nc_01100): return 1; break;
192  case (kSpp_vbn_nc_01010): return 0; break;
193  case (kSpp_vbn_nc_10001): return 0; break;
194 
195  default : return 0; break;
196  }
197  return 0;
198  }
uint8_t channel
Definition: CRTFragment.hh:201

The documentation for this class was generated from the following file: