Changes between Version 20 and Version 21 of pSPSS


Ignore:
Timestamp:
Oct 12, 2023, 12:28:33 PM (14 months ago)
Author:
Jan Hajer
Comment:

Update the text to reflect the status of the FCC-ee implementation

Legend:

Unmodified
Added
Removed
Modified
  • pSPSS

    v20 v21  
    33The motivation and implementation of the `pSPSS` is discussed in:[[BR]]
    44  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:
     5We kindly ask to cite  cite this publication when using the `pSPSS` model file.
     6
     7Additionally, an example analysis at the LHC including the necessary statistical framework to claim discovery of oscillations is presented in:
    78  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]]
     9An initial study at the FCC-ee is presented in:
     10Stefan 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]]
    811
    912== Model description ==
     
    3639* damping parameter [[latex($\lambda$)]] `damping`
    3740
     41=== Antiparticles of neutral particles
     42
     43The (anti-)particle character of the pseudo-Dirac heavy neutrinos is characterized by their interaction with (anti-)leptons.
     44A 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.
     45In order to extend this definition to interactions with light neutrinos it is necessary to define their (anti-)particle character as well.
     46On a conceptional level the definition for the light (anti-)neutrinos parallels the definition for the heavy (anti-)neutrinos.
     47In 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
    3849== !MadGraph patch ==
    3950
    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
     51In 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.
     52For the LHC analysis we have replaced the original code
    4153
     54{{{
     55for 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
     69with the modified code
    4270
    4371{{{
     
    75103}}}
    76104
    77 which must replace the original code
     105The complete code applicable to the Z-pole run of the FCC-ee reads
    78106
    79107{{{
    80 for event in lhe:
     108def 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
    81153        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:
    89183        output.write(str(event))
    90     output.write('</LesHouchesEvents>\n')
    91     output.close()
     184
     185
     186output.write('</LesHouchesEvents >\n')
     187output.close()
     188files.mv('%s_2vertex.lhe' % event_path, event_path)
     189
     190ifneed_zip: misc.gzip(event_path)
     191
    92192}}}
     193
     194== Workaround ==
    93195
    94196The small mass splitting can cause problems in the automatic calculation of the decay width.
    95197One 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.
    96198
    97 Back to [[ModelDatabaseMainPage|FeynRules model database]]/[[SimpleExtensions|Simple Extensions]]
     199Back to: [[WikiStart|FeynRules]] / [[ModelDatabaseMainPage|Model database]] / [[SimpleExtensions|Simple extensions of the SM]]