SND@LHC Software
Loading...
Searching...
No Matches
rpvsusy.RPVSUSYbranchings Class Reference
Inheritance diagram for rpvsusy.RPVSUSYbranchings:

Public Member Functions

 __init__ (self, mass, couplings, sfmass, benchmark, debug=False)
 
 Get_Prod_Modes (self)
 
 Get_Dec_Modes (self)
 
 AddChannelsToPythia (self, P8Gen, verbose=True)
 
 Width_H_L (self, H, L)
 
 Width_N_L (self, H, L)
 
 NdecayWidth (self)
 
 NprodWidth (self)
 
 findDecayBranchingRatio (self, decayString)
 
 findProdBranchingRatio (self, decayString)
 

Public Attributes

 MN
 
 U
 
 U2
 
 sfmass
 
 bench
 
 decays
 
 prods
 

Detailed Description

Lifetime and total and partial decay widths of an RPV neutralino

Definition at line 147 of file rpvsusy.py.

Constructor & Destructor Documentation

◆ __init__()

rpvsusy.RPVSUSYbranchings.__init__ (   self,
  mass,
  couplings,
  sfmass,
  benchmark,
  debug = False 
)
Initialize with mass and couplings of the RPV neutralino

Inputs:
mass (GeV)
which benchmark scenario (1,2,3,4,5)
couplings (list of [\lambda production, \lambda decay])
sfermion mass to normalise the couplings by (GeV)

Reimplemented in rpvsusy.RPVSUSY.

Definition at line 151 of file rpvsusy.py.

151 def __init__(self, mass, couplings, sfmass, benchmark,debug=False):
152 """
153 Initialize with mass and couplings of the RPV neutralino
154
155 Inputs:
156 mass (GeV)
157 which benchmark scenario (1,2,3,4,5)
158 couplings (list of [\lambda production, \lambda decay])
159 sfermion mass to normalise the couplings by (GeV)
160 """
161 self.MN = mass*u.GeV
162 self.U = couplings
163 self.U2 = [ui*ui for ui in self.U]
164 self.sfmass = sfmass
165 self.bench = benchmark
166 self.decays = {1:['N -> K+ mu-','N -> K*+ mu-','N -> K*0 nu_mu','N -> K_L0 nu_mu','N -> K_S0 nu_mu'],
167 2:['N -> K+ mu-','N -> K*+ mu-','N -> K*0 nu_mu','N -> K_L0 nu_mu','N -> K_S0 nu_mu',
168 'N -> eta nu_mu','N -> eta\' nu_mu','N -> phi nu_mu'],
169 3:['N -> K+ mu-','N -> K*+ mu-','N -> K*0 nu_mu','N -> K_L0 nu_mu','N -> K_S0 nu_mu'],
170 4:['N -> D+ mu-','N -> D*+ mu-','N -> K*0 nu_mu','N -> K_L0 nu_mu','N -> K_S0 nu_mu'],
171 5:['N -> K+ tau-','N -> K*+ tau-','N -> K*0 nu_tau','N -> K_L0 nu_tau','N -> K_S0 nu_tau']}
172
173 self.prods = {1:['D+ -> N mu+'],
174 2:['D_s+ -> N mu+'],
175 3:['B0 -> N nu_mu'],
176 4:['B0 -> N nu_mu'],
177 5:['B0 -> N nu_tau','B+ -> N tau+']}
178
179
180 if debug:
181 print("RPVSUSYbranchings instance initialized with couplings:")
182 print("\t benchmark scenario = %d"%self.bench)
183 print("\t decay coupling = %s"%self.U[0])
184 print("\t production coupling = %s"%self.U[1])
185 print("\t sfermion mass = %s"%self.sfmass)
186 print("\t total prod coupling = %s"%(self.U[0]/self.sfmass**2))
187 print("\t total decay coupling = %s"%(self.U[1]/self.sfmass**2))
188 print("and mass:")
189 print("\tm = %s GeV"%(self.MN))
190

Member Function Documentation

◆ AddChannelsToPythia()

rpvsusy.RPVSUSYbranchings.AddChannelsToPythia (   self,
  P8Gen,
  verbose = True 
)

Definition at line 197 of file rpvsusy.py.

197 def AddChannelsToPythia(self,P8Gen,verbose=True):
198 decays_tmp = self.decays[self.bench]
199 for decay in decays_tmp:
200 decay_cpy = decay
201 decay_cpy = decay_cpy.replace("N -> ","")
202 particles = decay_cpy.split()
203 codes = [PDGcode(p) for p in particles]
204 print(decay)
205 bf = self.findDecayBranchingRatio(decay)
206 if any("K+" in s for s in particles) or\
207 any("K-" in s for s in particles) or\
208 any("K*+" in s for s in particles) or\
209 any("K*-" in s for s in particles) or\
210 any("K*0" in s for s in particles) or\
211 any("K*0_bar" in s for s in particles):
212 bf = bf/2.
213 P8Gen.SetParameters("9900015:addChannel = 1 {:.12} 0 {}"\
214 .format(bf, ' '.join(str(code) for code in codes)))
215 P8Gen.SetParameters("9900015:addChannel = 1 {:.12} 0 {}"\
216 .format(bf, ' '.join(str(-code) for code in codes)))
217 else:
218 P8Gen.SetParameters("9900015:addChannel = 1 {:.12} 0 {}"\
219 .format(bf, ' '.join(str(code) for code in codes)))
220 if verbose:
221 print("debug readdecay table",particles,codes,bf)
222
223
224

◆ findDecayBranchingRatio()

rpvsusy.RPVSUSYbranchings.findDecayBranchingRatio (   self,
  decayString 
)
Returns the branching ratio of the selected SUSY RPV neutralino decay channel

Inputs:
- decayString is a string describing the decay, in the form 'N -> stuff1 ... stuffN'

Definition at line 333 of file rpvsusy.py.

333 def findDecayBranchingRatio(self, decayString):
334 """
335 Returns the branching ratio of the selected SUSY RPV neutralino decay channel
336
337 Inputs:
338 - decayString is a string describing the decay, in the form 'N -> stuff1 ... stuffN'
339 """
340 had = re.search('->\ (.+?)\ ',decayString).group(1)
341 decaysplit = decayString.split(' ')
342 for split in decaysplit:
343 if split.find('mu')>-1 or split.find('e')>-1 or split.find('tau')>-1:
344 lep = split
345 if had == 'pi+' or had == 'pi-' or had == 'pi0':
346 print("findBranchingRatio() ERROR: Pions in final "\
347 "state have not been implemented, please choose "\
348 "a different decay mode of out...\n")
349 print(self.decays)
350 return -999
351
352 corrdecstring = 'N -> %s %s'%(had,lep)
353 listdecs = self.decays[self.bench]
354 gooddec = False
355 print("findBranchingRation() INFO: "\
356 "You have chosen the decay: '",\
357 corrdecstring)
358 for dec in listdecs:
359 if corrdecstring in dec:
360 gooddec = True
361 if gooddec is False:
362 print("findBranchingRation() ERROR: Badly "\
363 "formulated decay string, please choose "\
364 "one of the following\n")
365 print(self.decays)
366 return -999
367
368 br = 0.
369 totalwidth = self.NdecayWidth()
370 if totalwidth > 0.0:
371 br = self.Width_H_L(had,lep)/totalwidth
372 return br
373
374

◆ findProdBranchingRatio()

rpvsusy.RPVSUSYbranchings.findProdBranchingRatio (   self,
  decayString 
)
Returns the branching ratio of the selected SUSY RPV neutralino product channel

Inputs:
- decayString is a string describing the decay, in the form 'H -> N ... stuffN'

Definition at line 375 of file rpvsusy.py.

375 def findProdBranchingRatio(self, decayString):
376 """
377 Returns the branching ratio of the selected SUSY RPV neutralino product channel
378
379 Inputs:
380 - decayString is a string describing the decay, in the form 'H -> N ... stuffN'
381 """
382 had = re.search('(.+?)\ ->',decayString).group(1)
383 decaysplit = decayString.split(' ')
384 for split in decaysplit:
385 if split.find('mu')>-1 or split.find('e')>-1 or split.find('tau')>-1:
386 lep = split
387 if had == 'pi+' or had == 'pi-' or had == 'pi0':
388 print("findProdBranchingRatio() ERROR: Pions in final "\
389 "state have not been implemented, please choose "\
390 "a different decay mode of out...\n")
391 print(self.decays)
392 return -999
393
394 corrdecstring = '%s -> N %s'%(had,lep)
395 listdecs = self.prods[self.bench]
396 gooddec = False
397 print("findProdBranchingRation() INFO: "\
398 "You have chosen the decay: '",\
399 corrdecstring)
400 for dec in listdecs:
401 if corrdecstring in dec:
402 gooddec = True
403 if gooddec is False:
404 print("findProdBranchingRation() ERROR: Badly "\
405 "formulated decay string, please choose "\
406 "one of the following\n")
407 print(self.decays)
408 return -999
409
410 br = self.Width_N_L(had,lep)/(self.Width_N_L(had,lep)+c.hGeV/lifetime(had))
411 return br
412

◆ Get_Dec_Modes()

rpvsusy.RPVSUSYbranchings.Get_Dec_Modes (   self)

Definition at line 194 of file rpvsusy.py.

194 def Get_Dec_Modes(self):
195 return self.decays[self.bench]
196

◆ Get_Prod_Modes()

rpvsusy.RPVSUSYbranchings.Get_Prod_Modes (   self)

Definition at line 191 of file rpvsusy.py.

191 def Get_Prod_Modes(self):
192 return self.prods[self.bench]
193

◆ NdecayWidth()

rpvsusy.RPVSUSYbranchings.NdecayWidth (   self)
Returns the total SUSYRPV neutralino decay width

Definition at line 311 of file rpvsusy.py.

311 def NdecayWidth(self):
312 """
313 Returns the total SUSYRPV neutralino decay width
314 """
315 declist = self.decays[self.bench]
316 hadlist = [re.search('->\ (.+?)\ ',dec).group(1) for dec in declist]
317 leplist = [dlist[1].strip() for dlist in [re.findall(r"\ \w+",dec) for dec in declist]]
318 print(leplist,hadlist)
319 totalwidth = sum([self.Width_H_L(hadlist[i],leplist[i]) for i in range(0,len(hadlist))])
320 return totalwidth
321

◆ NprodWidth()

rpvsusy.RPVSUSYbranchings.NprodWidth (   self)
Returns the total SUSYRPV neutralino production width

Definition at line 322 of file rpvsusy.py.

322 def NprodWidth(self):
323 """
324 Returns the total SUSYRPV neutralino production width
325 """
326 declist = self.prods[self.bench]
327 hadlist = [re.search('(.+?)\ ->',dec).group(1) for dec in declist]
328 leplist = [dlist[1].strip() for dlist in [re.findall(r"\ \w+",dec) for dec in declist]]
329 totalwidth = sum([self.Width_N_L(hadlist[i],leplist[i]) for i in range(0,len(hadlist))])
330 return totalwidth
331
332

◆ Width_H_L()

rpvsusy.RPVSUSYbranchings.Width_H_L (   self,
  H,
  L 
)
Returns the RPV neutralino decay width into neutral meson and lepton

Inputs:
- H is a string (name of the meson)
- L is a string (name of the lepton)

Definition at line 225 of file rpvsusy.py.

225 def Width_H_L(self, H, L):
226 """
227 Returns the RPV neutralino decay width into neutral meson and lepton
228
229 Inputs:
230 - H is a string (name of the meson)
231 - L is a string (name of the lepton)
232 """
233 if self.MN < (mass(H)+mass(L)):
234 return 0.
235
236 phsp=math.sqrt(self.MN**4+mass(H)**4+mass(L)**4-\
237 2*self.MN**2*mass(H)**2-2*self.MN**2*mass(L)**2-\
238 2*mass(H)**2*mass(L)**2)
239 tmp_width=0
240 if 'nu_mu' in L or 'nu_e' in L or 'nu_tau' in L:
241 tmp_width = phsp/(self.sfmass**4*128*u.pi*self.MN**3)*\
242 c.GST2['sneutrino']*c.decayConstant[H]**2*\
243 (self.MN**2+mass(L)**2-mass(H)**2)
244 else:
245 tmp_width = phsp/(self.sfmass**4*128*u.pi*self.MN**3)*\
246 c.GST2['slepton']*c.decayConstant[H]**2*\
247 (self.MN**2+mass(L)**2-mass(H)**2)
248
249 if 'K*' in H or 'D*' in H or "phi" in H:
250 if 'nu_mu' in L or 'nu_e' in L or 'nu_tau' in L:
251 tmp_width = phsp/(self.sfmass**4*2*u.pi*self.MN**3)*\
252 c.GST2['tneutrino']*c.decayConstant[H]**2*\
253 (2*(self.MN**2-mass(L)**2)**2-mass(H)**2*(mass(H)**2+self.MN**2+mass(L)**2))
254 else:
255 tmp_width = phsp/(self.sfmass**4*2*u.pi*self.MN**3)*\
256 c.GST2['tlepton']*c.decayConstant[H]**2*\
257 (2*(self.MN**2-mass(L)**2)**2-mass(H)**2*(mass(H)**2+self.MN**2+mass(L)**2))
258 width=self.U2[1]*tmp_width
259 # contributions both from decay and production couplings
260 if self.bench==1 and ('K_' in H or 'K*' in H):
261 width=(self.U2[0]+self.U2[1])*tmp_width
262 # contributions only from production coupling
263 if self.bench==2 and ('eta' in H or 'phi' in H):
264 width=self.U2[0]*tmp_width
265
266 # Majorana case (charge conjugate channels)
267 width = 2.*width
268 return width
269
270

◆ Width_N_L()

rpvsusy.RPVSUSYbranchings.Width_N_L (   self,
  H,
  L 
)
Returns the Meson decay width to RPV neutralino and lepton
Inputs:
- H is a string (name of the meson)
- L is a string (name of the lepton)

Definition at line 271 of file rpvsusy.py.

271 def Width_N_L(self, H, L):
272 """
273 Returns the Meson decay width to RPV neutralino and lepton
274 Inputs:
275 - H is a string (name of the meson)
276 - L is a string (name of the lepton)
277 """
278
279 if mass(H) < (self.MN+mass(L)):
280 return 0.
281 phsp=math.sqrt(self.MN**4+mass(H)**4+mass(L)**4-\
282 2*self.MN**2*mass(H)**2-2*self.MN**2*mass(L)**2-\
283 2*mass(H)**2*mass(L)**2)
284
285 tmp_width=0
286 if 'nu_mu' in L or 'nu_e' in L or 'nu_tau' in L:
287 tmp_width = phsp/(self.sfmass**4*64*u.pi*mass(H)**3)*\
288 c.GST2['sneutrino']*c.decayConstant[H]**2*\
289 (mass(H)**2-self.MN**2-mass(L)**2)
290 else:
291 tmp_width = phsp/(self.sfmass**4*64*u.pi*mass(H)**3)*\
292 c.GST2['slepton']*c.decayConstant[H]**2*\
293 (mass(H)**2-self.MN**2-mass(L)**2)
294
295 if 'K*' in H or 'D*' in H or "phi" in H:
296 if 'nu_mu' in L or 'nu_e' in L or 'nu_tau' in L:
297 tmp_width = phsp/(self.sfmass**4*3*u.pi*mass(H)**3)*\
298 c.GST2['tneutrino']*c.decayConstant[H]**2*\
299 (mass(H)**2*(mass(H)**2+self.MN**2+mass(L)**2-2*(self.MN**2-mass(L)**2)**2))
300 else:
301 tmp_width = phsp/(self.sfmass**4*3*u.pi*mass(H)**3)*\
302 c.GST2['tlepton']*c.decayConstant[H]**2*\
303 (mass(H)**2*(mass(H)**2+self.MN**2+mass(L)**2-2*(self.MN**2-mass(L)**2)**2))
304
305 width=self.U2[0]*tmp_width
306
307 return width
308
309
310

Member Data Documentation

◆ bench

rpvsusy.RPVSUSYbranchings.bench

Definition at line 165 of file rpvsusy.py.

◆ decays

rpvsusy.RPVSUSYbranchings.decays

Definition at line 166 of file rpvsusy.py.

◆ MN

rpvsusy.RPVSUSYbranchings.MN

Definition at line 161 of file rpvsusy.py.

◆ prods

rpvsusy.RPVSUSYbranchings.prods

Definition at line 173 of file rpvsusy.py.

◆ sfmass

rpvsusy.RPVSUSYbranchings.sfmass

Definition at line 164 of file rpvsusy.py.

◆ U

rpvsusy.RPVSUSYbranchings.U

Definition at line 162 of file rpvsusy.py.

◆ U2

rpvsusy.RPVSUSYbranchings.U2

Definition at line 163 of file rpvsusy.py.


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