From 65fd3710d46e59e14147324df0fe28dda9a4dda5 Mon Sep 17 00:00:00 2001
From: Daniil Zubchenko <daniilzubcenko73@gmail.com>
Date: Sat, 15 Feb 2025 00:00:26 +0300
Subject: [PATCH 1/3] Feature: H5Writer

Added function, which deletes "event" in file
---
 ntsim/IO/H5Writer.py | 5 +++++
 1 file changed, 5 insertions(+)

diff --git a/ntsim/IO/H5Writer.py b/ntsim/IO/H5Writer.py
index 294ec16..ed74dd3 100644
--- a/ntsim/IO/H5Writer.py
+++ b/ntsim/IO/H5Writer.py
@@ -59,6 +59,11 @@ class H5Writer(WriterBase):
         else:
             self.event_folder = self.h5_file[event_folder]
     
+    def delete_event(self, event_id):
+        event_folder = f'event_{event_id}'
+        if event_folder in self.h5_file.keys():
+            del self.h5_file[event_folder]
+
     @report_timing
     def write_data(self, data_list, folder_name):
         if len(data_list) == 0:
-- 
GitLab


From c668dc062988826ae68d5d542cdfb5c2b8c5fcb1 Mon Sep 17 00:00:00 2001
From: Daniil Zubchenko <daniilzubcenko73@gmail.com>
Date: Sat, 15 Feb 2025 00:02:00 +0300
Subject: [PATCH 2/3] Feature: main

If there are no hits in event after trigger, whole event is not writen
---
 ntsim/__main__.py | 4 +++-
 1 file changed, 3 insertions(+), 1 deletion(-)

diff --git a/ntsim/__main__.py b/ntsim/__main__.py
index 9bd5403..82ee7da 100644
--- a/ntsim/__main__.py
+++ b/ntsim/__main__.py
@@ -134,7 +134,9 @@ class NTSim:
             if not opts.trigger_name is None:
                 self.Trigger.apply_trigger_conditions(self.event.hits[0]) # [0] is for gHits object in list 
                 self.event.hits[0] = self.Trigger.trigger_hits            # gHits object of "orig" hits is always the only one 
-            
+                if not self.event.hits[0].has_hits(): 
+                    self.Writer.delete_event(event_id)                    # after trigger will be reworked, apply it on cloner_hits and update this 'if'
+                    continue
             if not opts.analysis_name is None:
                 self.Analysis.analysis(self.event)
 ###################
-- 
GitLab


From e25ee53d830fa014b9748e6a38235859f952f875 Mon Sep 17 00:00:00 2001
From: Daniil Zubchenko <daniilzubcenko73@gmail.com>
Date: Tue, 4 Mar 2025 15:45:33 +0300
Subject: [PATCH 3/3] Feature: deleting events without hits by option

If you don't want to save events without hits, use `--H5Writer.no_h5_save_event without_hits`
---
 ntsim/IO/H5Writer.py | 11 ++++++-----
 ntsim/__main__.py    |  6 +++---
 2 files changed, 9 insertions(+), 8 deletions(-)

diff --git a/ntsim/IO/H5Writer.py b/ntsim/IO/H5Writer.py
index ed74dd3..27d4efc 100644
--- a/ntsim/IO/H5Writer.py
+++ b/ntsim/IO/H5Writer.py
@@ -12,7 +12,7 @@ class H5Writer(WriterBase):
         'h5_output_dir': {'type': str, 'default': 'h5_output', 'help': 'output directory name'},
         'h5_save_event': {'type': str, 'nargs': '+', 'choices': ['geometry','tracks','particles','photons','hits','clones'], 'default': ['geometry','tracks','particles','photons','hits','clones'],
                           'help': 'By default, all information about the event and geometry is recorded. When pointing specific values from choices, they and only they will be recorded'},
-        'no_h5_save_event': {'type': str, 'nargs': '+', 'choices': ['geometry','tracks','particles','photons','hits','clones'], 'default': [],
+        'no_h5_save_event': {'type': str, 'nargs': '+', 'choices': ['geometry','tracks','particles','photons','hits','clones', 'without_hits'], 'default': [],
                              'help': 'When pointing specific values from choices, they will not be written to the event or geometry'},
         'h5_save_header': {'type': str, 'nargs': '+', 'choices': ['prod_header','primary_header','event_header'], 'default': ['prod_header','primary_header','event_header'],
                            'help': 'By default, all information about the header is recorded. When pointing specific values from choices, they and only they will be recorded'},
@@ -59,10 +59,11 @@ class H5Writer(WriterBase):
         else:
             self.event_folder = self.h5_file[event_folder]
     
-    def delete_event(self, event_id):
-        event_folder = f'event_{event_id}'
-        if event_folder in self.h5_file.keys():
-            del self.h5_file[event_folder]
+    def delete_event(self, event_id, condition):
+        if condition in self.no_h5_save_event:
+            event_folder = f'event_{event_id}'
+            if event_folder in self.h5_file.keys():
+                del self.h5_file[event_folder]
 
     @report_timing
     def write_data(self, data_list, folder_name):
diff --git a/ntsim/__main__.py b/ntsim/__main__.py
index 82ee7da..39a1bea 100644
--- a/ntsim/__main__.py
+++ b/ntsim/__main__.py
@@ -134,9 +134,9 @@ class NTSim:
             if not opts.trigger_name is None:
                 self.Trigger.apply_trigger_conditions(self.event.hits[0]) # [0] is for gHits object in list 
                 self.event.hits[0] = self.Trigger.trigger_hits            # gHits object of "orig" hits is always the only one 
-                if not self.event.hits[0].has_hits(): 
-                    self.Writer.delete_event(event_id)                    # after trigger will be reworked, apply it on cloner_hits and update this 'if'
-                    continue
+            if not len(self.event.hits) or not self.event.hits[0].has_hits(): 
+                self.Writer.delete_event(event_id, 'without_hits')                    # after trigger will be reworked, apply it on cloner_hits and update this 'if'
+                continue
             if not opts.analysis_name is None:
                 self.Analysis.analysis(self.event)
 ###################
-- 
GitLab