# Buggy code
def parse_tag_group(self, skip4=1):
    """Parse the root TagGroup of the given DM3 file f.
    Returns the tuple (is_sorted, is_open, n_tags).
    endian can be either 'big' or 'little'.
    """
    is_sorted = iou.read_byte(self.f, "big")
    is_open = iou.read_byte(self.f, "big")
    self.skipif4(n=skip4)
    n_tags = iou.read_long(self.f, "big")
    return bool(is_sorted), bool(is_open), n_tags


# Traceback (DM3TagIDError)
ss = hs.load('D:\\Vadim\\2018-08-02_STEM-d_C_fiber_Fengshan\\bin2\\02_0V.dm4')

---------------------------------------------------------------------------
DM3TagIDError                             Traceback (most recent call last)
<ipython-input-20-bfa902970b32> in <module>()
----> 1 ss = hs.load('D:\\Vadim\\2018-08-02_STEM-d_C_fiber_Fengshan\\bin2\\02_0V.dm4')

C:\Users\migunov\AppData\Local\conda\conda\envs\hs\lib\site-packages\hyperspy\io.py in load(filenames, signal_type, stack, stack_axis, new_axis_name, lazy, **kwds)
241             objects = [load_single_file(filename, lazy=lazy,
242                                         **kwds)
--> 243                        for filename in filenames]
244
245         if len(objects) == 1:

C:\Users\migunov\AppData\Local\conda\conda\envs\hs\lib\site-packages\hyperspy\io.py in <listcomp>(.0)
241             objects = [load_single_file(filename, lazy=lazy,
242                                         **kwds)
--> 243                        for filename in filenames]
244
245         if len(objects) == 1:

C:\Users\migunov\AppData\Local\conda\conda\envs\hs\lib\site-packages\hyperspy\io.py in load_single_file(filename, signal_type, **kwds)
284                                 reader=reader,
285                                 signal_type=signal_type,
--> 286                                 **kwds)
287
288

C:\Users\migunov\AppData\Local\conda\conda\envs\hs\lib\site-packages\hyperspy\io.py in load_with_reader(filename, reader, signal_type, **kwds)
293     lazy = kwds.get('lazy', False)
294     file_data_list = reader.file_reader(filename,
--> 295                                         **kwds)
296     objects = []
297

C:\Users\migunov\AppData\Local\conda\conda\envs\hs\lib\site-packages\hyperspy\io_plugins\digital_micrograph.py in file_reader(filename, record_by, order, lazy)
986     with open(filename, "rb") as f:
987         dm = DigitalMicrographReader(f)
--> 988         dm.parse_file()
989         images = [ImageObject(imdict, f, order=order, record_by=record_by)
990                   for imdict in dm.get_image_dictionaries()]

C:\Users\migunov\AppData\Local\conda\conda\envs\hs\lib\site-packages\hyperspy\io_plugins\digital_micrograph.py in parse_file(self)
85             number_of_root_tags,
86             group_name="root",
---> 87             group_dict=self.tags_dict)
88
89     def parse_header(self):

C:\Users\migunov\AppData\Local\conda\conda\envs\hs\lib\site-packages\hyperspy\io_plugins\digital_micrograph.py in parse_tags(self, ntags, group_name, group_dict)
219                     ntags=ntags,
220                     group_name=tag_name,
--> 221                     group_dict=group_dict[tag_name])
222             else:
223                 _logger.debug('File address:', self.f.tell())

C:\Users\migunov\AppData\Local\conda\conda\envs\hs\lib\site-packages\hyperspy\io_plugins\digital_micrograph.py in parse_tags(self, ntags, group_name, group_dict)
219                     ntags=ntags,
220                     group_name=tag_name,
--> 221                     group_dict=group_dict[tag_name])
222             else:
223                 _logger.debug('File address:', self.f.tell())

C:\Users\migunov\AppData\Local\conda\conda\envs\hs\lib\site-packages\hyperspy\io_plugins\digital_micrograph.py in parse_tags(self, ntags, group_name, group_dict)
219                     ntags=ntags,
220                     group_name=tag_name,
--> 221                     group_dict=group_dict[tag_name])
222             else:
223                 _logger.debug('File address:', self.f.tell())

C:\Users\migunov\AppData\Local\conda\conda\envs\hs\lib\site-packages\hyperspy\io_plugins\digital_micrograph.py in parse_tags(self, ntags, group_name, group_dict)
222             else:
223                 _logger.debug('File address:', self.f.tell())
--> 224                 raise DM3TagIDError(tag_header['tag_id'])
225
226     def get_data_reader(self, enc_dtype):

DM3TagIDError: 66

# Fixed code
def parse_tag_group(self, size=False):
    """Parse the root TagGroup of the given DM3 file f.
    Returns the tuple (is_sorted, is_open, n_tags).
    endian can be either 'big' or 'little'.
    """
    is_sorted = iou.read_byte(self.f, "big")
    is_open = iou.read_byte(self.f, "big")
    if self.dm_version == 4 and size:
        # Just guessing that this is the size
        size = self.read_l_or_q(self.f, "big")
    n_tags = self.read_l_or_q(self.f, "big")
    return bool(is_sorted), bool(is_open), n_tags