Changes between Version 20 and Version 21 of pSPSS
- Timestamp:
- Oct 12, 2023, 12:28:33 PM (13 months ago)
Legend:
- Unmodified
- Added
- Removed
- Modified
-
pSPSS
v20 v21 3 3 The motivation and implementation of the `pSPSS` is discussed in:[[BR]] 4 4 Stefan Antusch, Jan Hajer, Johannes Rosskopp '**[[https://inspirehep.net/literature/2167345|Simulating lepton number violation induced by heavy neutrino-antineutrino oscillations at colliders]]**' e-Print: [[https://arxiv.org/abs/2210.10738|2210.10738 [hep-ph].]][[BR]] 5 We kindly ask to cite cite this publication when using the `pSPSS` model file.[[BR]] 6 Additionally, an example analysis including the necessary statistical framework to claim discovery of oscillations is presented in: 5 We kindly ask to cite cite this publication when using the `pSPSS` model file. 6 7 Additionally, an example analysis at the LHC including the necessary statistical framework to claim discovery of oscillations is presented in: 7 8 Stefan Antusch, Jan Hajer, Johannes Rosskopp '**[[https://inspirehep.net/literature/2606505|Beyond lepton number violation at the HL-LHC: Resolving heavy neutrino-antineutrino oscillations]]**' e-Print: [[https://arxiv.org/abs/2212.00562|2212.00562 [hep-ph].]][[BR]] 9 An initial study at the FCC-ee is presented in: 10 Stefan Antusch, Jan Hajer, Bruno Oliveira '**[[https://inspirehep.net/literature/2687846|Heavy neutrino-antineutrino oscillations at the FCC-ee]]**' e-Print: [[https://arxiv.org/abs/2308.07297|2308.07297 [hep-ph].]][[BR]] 8 11 9 12 == Model description == … … 36 39 * damping parameter [[latex($\lambda$)]] `damping` 37 40 41 === Antiparticles of neutral particles 42 43 The (anti-)particle character of the pseudo-Dirac heavy neutrinos is characterized by their interaction with (anti-)leptons. 44 A heavy neutrino is produced in association with an anti-lepton and decays into a lepton, while a heavy antineutrino is produced in association with a lepton and decays into an antilepton. 45 In order to extend this definition to interactions with light neutrinos it is necessary to define their (anti-)particle character as well. 46 On a conceptional level the definition for the light (anti-)neutrinos parallels the definition for the heavy (anti-)neutrinos. 47 In order to simulate interactions with definite light neutrino states we have implemented the light neutrinos as Dirac particles in the model file `pSPSS_Dirac_v1.0.fr`. 48 38 49 == !MadGraph patch == 39 50 40 In order to generate events with heavy neutrino-antineutrino oscillations it is necessary to patch the `[pSPSS]/bin/internal/common_run_interface.py` file in !MadGraph using 51 In order to generate events with heavy neutrino-antineutrino oscillations it is necessary to patch the `[pSPSS]/bin/internal/common_run_interface.py` file in !MadGraph. 52 For the LHC analysis we have replaced the original code 41 53 54 {{{ 55 for event in lhe: 56 for particle in event: 57 id = particle.pid 58 width = param_card['decay'].get((abs(id),)).value 59 if width: 60 vtim = c * random.expovariate(width/cst) 61 if vtim > threshold: 62 particle.vtim = vtim 63 #write this modify event 64 output.write(str(event)) 65 output.write('</LesHouchesEvents>\n') 66 output.close() 67 }}} 68 69 with the modified code 42 70 43 71 {{{ … … 75 103 }}} 76 104 77 which must replace the original code 105 The complete code applicable to the Z-pole run of the FCC-ee reads 78 106 79 107 {{{ 80 for event in lhe: 108 def do_add_time_of_flight(self, line): 109 print("Running patched do_add_time_of_flight ") 110 111 args = self.split_arg(line) 112 # check the validity of the arguments and reformat args 113 self. check_add_time_of_flight(args) 114 115 event_path, threshold = args 116 # gunzip the file 117 if event_path.endswith('.gz'): 118 need_zip = True 119 misc.gunzip(event_path) 120 event_path = event_path[:-3] 121 else: 122 need_zip = False 123 124 import random 125 try: 126 import madgraph.various.lhe_parser as lhe_parser 127 except: 128 import internal.lhe_parser as lhe_parser 129 130 logger.info('Add time of flight information on file %s' % event_path) 131 lhe = lhe_parser.EventFile(event_path) 132 output = open('%s_2vertex.lhe' % event_path, 'w') 133 # write the banner to the output file 134 output.write(lhe.banner) 135 136 # get the associate param_card 137 begin_param = lhe.banner.find('<slha >') 138 end_param = lhe.banner.find('</slha >') 139 param_card = lhe.banner[begin_param + 6: end_param]. split('\n') 140 param_card = param_card_mod.ParamCard(param_card) 141 142 cst = 6.58211915e-25 # hbar in GeV s 143 c = 299792458000 # speed of light in mm/s 144 sm_lepton_list = [11, 12, 13, 14, 15, 16] 145 146 pspss_n_list = [8000011, 8000012] 147 mass_splitting = param_card.get_value('PSPSS ', 2) 148 damping = param_card.get_value('PSPSS ', 6) 149 150 # Loop over all events 151 for event in lhe: 152 leptonnumber = 0 81 153 for particle in event: 82 id = particle.pid 83 width = param_card['decay'].get((abs(id),)).value 84 if width: 85 vtim = c * random.expovariate(width/cst) 86 if vtim > threshold: 87 particle.vtim = vtim 88 #write this modify event 154 if particle.status == 1: 155 if particle.pid in sm_lepton_list: 156 leptonnumber += 1 157 elif -particle.pid in sm_lepton_list: 158 leptonnumber -= 1 159 160 write_event = True 161 for particle in event: 162 id = particle.pid 163 width = param_card['decay '].get((abs(id),)).value 164 165 if width: 166 if id in pspss_n_list: 167 tau0 = random.expovariate(width / cst) 168 169 if 0.5 * (1 + math.exp(-damping) * math.cos(mass_splitting * tau0 / cst)) >= random.random(): 170 write_event = (leptonnumber == 0) 171 else: 172 write_event = (leptonnumber != 0) 173 174 else: 175 tau0 = random.expovariate(width / cst) 176 177 vtim = c * tau0 178 if vtim > threshold: 179 particle.vtim = vtim 180 181 # write this modify event 182 if write_event: 89 183 output.write(str(event)) 90 output.write('</LesHouchesEvents>\n') 91 output.close() 184 185 186 output.write('</LesHouchesEvents >\n') 187 output.close() 188 files.mv('%s_2vertex.lhe' % event_path, event_path) 189 190 ifneed_zip: misc.gzip(event_path) 191 92 192 }}} 193 194 == Workaround == 93 195 94 196 The small mass splitting can cause problems in the automatic calculation of the decay width. 95 197 One way to fix this problem is by replacing the argument of the square root of the return value of the function `calculate_apx_psarea` in the file `[MadGraph]/mg5decay/decay_objects.py` by its absolute value. 96 198 97 Back to [[ModelDatabaseMainPage|FeynRules model database]]/[[SimpleExtensions|Simple Extensions]]199 Back to: [[WikiStart|FeynRules]] / [[ModelDatabaseMainPage|Model database]] / [[SimpleExtensions|Simple extensions of the SM]]