Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
- Loading branch information
Showing
5 changed files
with
90 additions
and
1 deletion.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,2 @@ | ||
from . import ref_mon_nv | ||
from .ref_mon_nv import * |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,77 @@ | ||
import strax | ||
import numpy as np | ||
from itertools import chain | ||
|
||
export, __all__ = strax.exporter() | ||
|
||
|
||
@export | ||
class nVeto_reflectivity(strax.Plugin): | ||
"""Plugin which computes parameters used for the Reflectivity Monitor for the Neutron Veto. | ||
From the raw records, the start time of each trigger window is extracted (by taking the smallest | ||
"time" of all the channels) | ||
Using the hitlets, the delta times wrt the beginning of the trigger are computed | ||
Cuts can be made in area (of all the hitlets), time (since the beginning of the trigger window) | ||
and number of contributing PMTs (in each window) | ||
The returned values are the delta times (used for the reflectivity), PMT channels and areas | ||
""" | ||
|
||
__version__ = "0.1.0" | ||
|
||
parallel = "process" | ||
rechunk_on_save = True | ||
compressor = "zstd" | ||
|
||
depends_on = ("raw_records_nv", "hitlets_nv") | ||
|
||
provides = "ref_mon_nv" | ||
data_kind = "ref_mon_nv" | ||
|
||
dtype = strax.time_fields + [ | ||
(("Time with respect to the precedent trigger [ns]", "time_since_trigger"), np.int32), | ||
(("Channel of the hit", "channel"), np.int16), | ||
(("Area of the hit [PE]", "area"), np.float32), | ||
(("Number of event", "number"), np.int32), | ||
] | ||
|
||
def compute(self, raw_records_nv, hitlets_nv): | ||
split_time = 5000 | ||
|
||
# find the trigger times | ||
time_unique = np.unique(raw_records_nv["time"]) | ||
time_diff = np.diff(time_unique, prepend=time_unique[0]) | ||
time_unique_split = np.split(time_unique, np.where(time_diff >= split_time)[0]) | ||
trigger_times = np.array([i[0] for i in time_unique_split]) | ||
|
||
# split the hits in trigger windows | ||
difference = np.diff(hitlets_nv["time"], prepend=hitlets_nv["time"][0]) | ||
hits_split = np.split(hitlets_nv, np.where(difference > split_time)[0]) | ||
numbers = [np.repeat(i, len(hits_split[i])) for i in range(len(hits_split))] | ||
|
||
# compute the time differences | ||
times_wrt_trigger = [ | ||
hits_split[i]["time"] | ||
- trigger_times[np.argmin(np.abs(trigger_times - hits_split[i][0]["time"]))] | ||
for i in range(len(hits_split)) | ||
] | ||
|
||
# reshape the arrays | ||
hits_split = np.array(list(chain.from_iterable(hits_split))) | ||
times_wrt_trigger = np.array(list(chain.from_iterable(times_wrt_trigger))) | ||
numbers = np.array(list(chain.from_iterable(numbers))) | ||
|
||
# fill the delta_times | ||
delta_times = np.zeros(len(hits_split), dtype=self.dtype) | ||
delta_times["time"] = hits_split["time"] | ||
delta_times["endtime"] = hits_split["time"] + hits_split["length"] * hits_split["dt"] | ||
delta_times["time_since_trigger"] = times_wrt_trigger | ||
delta_times["area"] = hits_split["area"] | ||
delta_times["channel"] = hits_split["channel"] | ||
delta_times["number"] = numbers | ||
|
||
return delta_times |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters