diff --git a/km3io/tools.py b/km3io/tools.py index 619a877fdbdbfa874a819079b135a56a6894a059..9a50408947301436ee428788bad1c52ee1a92265 100644 --- a/km3io/tools.py +++ b/km3io/tools.py @@ -446,38 +446,36 @@ def is_cc(fobj): w2list = fobj.events.w2list len_w2lists = ak.num(w2list, axis=1) - if all(len_w2lists <= 7): # old nu file have w2list of len 7. - usr_names = fobj.events.mc_tracks.usr_names - usr_data = fobj.events.mc_tracks.usr - mask_cc_flag = usr_names[:, 0] == b"cc" - inter_ID = usr_data[:, 0][mask_cc_flag] - out = ak.flatten(inter_ID == 2) # 2 is the interaction ID for CC. + # According to: https://wiki.km3net.de/index.php/Simulations/The_gSeaGen_code#Physics_event_entries + # the interaction types are defined as follow: - else: - if "gseagen" in program.lower(): + # INTER Interaction type + # 1 EM + # 2 Weak[CC] + # 3 Weak[NC] + # 4 Weak[CC+NC+interference] + # 5 NucleonDecay - # According to: https://wiki.km3net.de/index.php/Simulations/The_gSeaGen_code#Physics_event_entries - # the interaction types are defined as follow: - # INTER Interaction type - # 1 EM - # 2 Weak[CC] - # 3 Weak[NC] - # 4 Weak[CC+NC+interference] - # 5 NucleonDecay + if all(len_w2lists <= 7): # old nu file have w2list of len 7. + # Checking the `cc` value in usr of the first mc_tracks, + # which are the primary neutrinos and carry the event property. + # This has been changed in 2020 to be a property in the w2list. + # See https://git.km3net.de/common/km3net-dataformat/-/issues/23 + return usr(fobj.events.mc_tracks[:, 0], "cc") == 2 - cc_flag = w2list[:, kw2gsg.W2LIST_GSEAGEN_CC] - out = cc_flag > 0 # to be tested with a newly generated nu file. + else: + # TODO: to be tested with a newly generated files with th eupdated + # w2list definitionn. + if "gseagen" in program.lower(): + return w2list[:, kw2gen.W2LIST_GSEAGEN_CC] == 2 if "genhen" in program.lower(): - cc_flag = w2list[:, kw2gen.W2LIST_GENHEN_CC] - out = cc_flag > 0 + return w2list[:, kw2gen.W2LIST_GENHEN_CC] == 2 else: raise NotImplementedError( f"don't know how to determine the CC-ness of {program} files." ) - return out - def usr(objects, field): """Return the usr-data for a given field.