From a02a0d8c598afb9416035a3092269569f39967a1 Mon Sep 17 00:00:00 2001
From: Moritz-Alexander-Kern
 <92092328+Moritz-Alexander-Kern@users.noreply.github.com>
Date: Fri, 9 Aug 2024 10:48:19 +0200
Subject: [PATCH] add new flag ignore_shared_time to BinnedSpiketrain

---
 elephant/conversion.py | 23 ++++++++++++++---------
 1 file changed, 14 insertions(+), 9 deletions(-)

diff --git a/elephant/conversion.py b/elephant/conversion.py
index f3686d643..2b9f0c7d1 100644
--- a/elephant/conversion.py
+++ b/elephant/conversion.py
@@ -293,6 +293,8 @@ class BinnedSpikeTrain(object):
         The sparse matrix format. By default, CSR format is used to perform
         slicing and computations efficiently.
         Default: 'csr'
+    ignore_shared_time : bool, optional
+        If True, check for binning outside of common interval is possible.
 
     Raises
     ------
@@ -335,7 +337,8 @@ class BinnedSpikeTrain(object):
     """
 
     def __init__(self, spiketrains, bin_size=None, n_bins=None, t_start=None,
-                 t_stop=None, tolerance=1e-8, sparse_format="csr"):
+                 t_stop=None, tolerance=1e-8, sparse_format="csr",
+                 ignore_shared_time=False):
         if sparse_format not in ("csr", "csc"):
             raise ValueError(f"Invalid 'sparse_format': {sparse_format}. "
                              "Available: 'csr' and 'csc'")
@@ -352,6 +355,7 @@ def __init__(self, spiketrains, bin_size=None, n_bins=None, t_start=None,
         self.n_bins = n_bins
         self._bin_size = bin_size
         self.units = None  # will be set later
+        self.ignore_shared_time = ignore_shared_time
         # Check all parameter, set also missing values
         self._resolve_input_parameters(spiketrains)
         # Now create the sparse matrix
@@ -531,14 +535,15 @@ def check_consistency():
         tolerance = self.tolerance
         if tolerance is None:
             tolerance = 0
-        if self._t_start < start_shared - tolerance \
-                or self._t_stop > stop_shared + tolerance:
-            raise ValueError("'t_start' ({t_start}) or 't_stop' ({t_stop}) is "
-                             "outside of the shared [{start_shared}, "
-                             "{stop_shared}] interval".format(
-                                 t_start=self.t_start, t_stop=self.t_stop,
-                                 start_shared=start_shared,
-                                 stop_shared=stop_shared))
+        if not self.ignore_shared_time:
+            if self._t_start < start_shared - tolerance \
+                    or self._t_stop > stop_shared + tolerance:
+                raise ValueError("'t_start' ({t_start}) or 't_stop' ({t_stop}) is "
+                                 "outside of the shared [{start_shared}, "
+                                 "{stop_shared}] interval".format(
+                                     t_start=self.t_start, t_stop=self.t_stop,
+                                     start_shared=start_shared,
+                                     stop_shared=stop_shared))
 
         if self.n_bins is None:
             # bin_size is provided