def interpret_word_table(self, analyzed_data_file=None, use_settings_from_file=True, fei4b=None):
logging.info('<STR_LIT>' + ('<STR_LIT:U+002CU+0020>').join(list(self.files_dict.keys())))<EOL>if self._create_meta_word_index:<EOL><INDENT>meta_word = np.empty((self._chunk_size,), dtype=dtype_from_descr(data_struct.MetaInfoWordTable))<EOL>self.interpreter.set_meta_data_word_index(meta_word)<EOL><DEDENT>self.interpreter.reset_event_variables()<EOL>self.interpreter.reset_counters()<EOL>self.meta_data = analysis_utils.combine_meta_data(self.files_dict, meta_data_v2=self.interpreter.meta_table_v2)<EOL>if self.meta_data is None or self.meta_data.shape[<NUM_LIT:0>] == <NUM_LIT:0>:<EOL><INDENT>raise analysis_utils.IncompleteInputError('<STR_LIT>')<EOL><DEDENT>self.interpreter.set_meta_data(self.meta_data)  <EOL>meta_data_size = self.meta_data.shape[<NUM_LIT:0>]<EOL>self.meta_event_index = np.zeros((meta_data_size,), dtype=[('<STR_LIT>', np.uint64)])  <EOL>self.interpreter.set_meta_event_data(self.meta_event_index)  <EOL>if self.scan_parameters is None:<EOL><INDENT>self.histogram.set_no_scan_parameter()<EOL><DEDENT>else:<EOL><INDENT>self.scan_parameter_index = analysis_utils.get_scan_parameters_index(self.scan_parameters)  <EOL>self.histogram.add_scan_parameter(self.scan_parameter_index)  <EOL><DEDENT>if self._create_cluster_size_hist:  <EOL><INDENT>self._cluster_size_hist = np.zeros(shape=(<NUM_LIT:6>, ), dtype=np.uint32)<EOL><DEDENT>if self._create_cluster_tot_hist:  <EOL><INDENT>self._cluster_tot_hist = np.zeros(shape=(<NUM_LIT:16>, <NUM_LIT:6>), dtype=np.uint32)<EOL><DEDENT>close_analyzed_data_file = False<EOL>if analyzed_data_file is not None:  <EOL><INDENT>if self.is_open(self.out_file_h5) and os.path.abspath(analyzed_data_file) == os.path.abspath(self.out_file_h5.filename):<EOL><INDENT>out_file_h5 = self.out_file_h5<EOL><DEDENT>else:<EOL><INDENT>analyzed_data_file = os.path.abspath(analyzed_data_file)<EOL>if os.path.splitext(analyzed_data_file)[<NUM_LIT:1>].lower() != "<STR_LIT>":<EOL><INDENT>analyzed_data_file = os.path.splitext(analyzed_data_file)[<NUM_LIT:0>] + "<STR_LIT>"<EOL><DEDENT>out_file_h5 = tb.open_file(analyzed_data_file, mode="<STR_LIT:w>", title="<STR_LIT>")<EOL>close_analyzed_data_file = True<EOL><DEDENT><DEDENT>elif self.is_open(self.out_file_h5):<EOL><INDENT>out_file_h5 = self.out_file_h5<EOL><DEDENT>else:<EOL><INDENT>out_file_h5 = None<EOL><DEDENT>tmp_out_file_h5 = self.out_file_h5<EOL>if not self.is_open(self.out_file_h5) and self.is_open(out_file_h5):<EOL><INDENT>close_analyzed_data_file = False<EOL>tmp_out_file_h5 = out_file_h5<EOL><DEDENT>self.out_file_h5 = out_file_h5<EOL>if self.is_open(self.out_file_h5):<EOL><INDENT>self._analyzed_data_file = self.out_file_h5.filename<EOL><DEDENT>else:<EOL><INDENT>self._analyzed_data_file is None<EOL><DEDENT>if self._analyzed_data_file is not None:<EOL><INDENT>if self._create_hit_table is True:<EOL><INDENT>description = data_struct.HitInfoTable().columns.copy()<EOL>hit_table = self.out_file_h5.create_table(self.out_file_h5.root, name='<STR_LIT>', description=description, title='<STR_LIT>', filters=self._filter_table, chunkshape=(self._chunk_size / <NUM_LIT:100>,))<EOL><DEDENT>if self._create_meta_word_index is True:<EOL><INDENT>meta_word_index_table = self.out_file_h5.create_table(self.out_file_h5.root, name='<STR_LIT>', description=data_struct.MetaInfoWordTable, title='<STR_LIT>', filters=self._filter_table, chunkshape=(self._chunk_size / <NUM_LIT:10>,))<EOL><DEDENT>if self._create_cluster_table:<EOL><INDENT>cluster_table = self.out_file_h5.create_table(self.out_file_h5.root, name='<STR_LIT>', description=data_struct.ClusterInfoTable, title='<STR_LIT>', filters=self._filter_table, expectedrows=self._chunk_size)<EOL><DEDENT>if self._create_cluster_hit_table:<EOL><INDENT>description = data_struct.ClusterHitInfoTable().columns.copy()<EOL>cluster_hit_table = self.out_file_h5.create_table(self.out_file_h5.root, name='<STR_LIT>', description=description, title='<STR_LIT>', filters=self._filter_table, expectedrows=self._chunk_size)<EOL><DEDENT><DEDENT>logging.info("<STR_LIT>")<EOL>progress_bar = progressbar.ProgressBar(widgets=['<STR_LIT>', progressbar.Percentage(), '<STR_LIT:U+0020>', progressbar.Bar(marker='<STR_LIT:*>', left='<STR_LIT:|>', right='<STR_LIT:|>'), '<STR_LIT:U+0020>', progressbar.AdaptiveETA()], maxval=analysis_utils.get_total_n_data_words(self.files_dict), term_width=<NUM_LIT>)<EOL>progress_bar.start()<EOL>total_words = <NUM_LIT:0><EOL>for file_index, raw_data_file in enumerate(self.files_dict.keys()):  <EOL><INDENT>self.interpreter.reset_meta_data_counter()<EOL>with tb.open_file(raw_data_file, mode="<STR_LIT:r>") as in_file_h5:<EOL><INDENT>if use_settings_from_file:<EOL><INDENT>self._deduce_settings_from_file(in_file_h5)<EOL><DEDENT>else:<EOL><INDENT>self.fei4b = fei4b<EOL><DEDENT>if self.interpreter.meta_table_v2:<EOL><INDENT>index_start = in_file_h5.root.meta_data.read(field='<STR_LIT>')<EOL>index_stop = in_file_h5.root.meta_data.read(field='<STR_LIT>')<EOL><DEDENT>else:<EOL><INDENT>index_start = in_file_h5.root.meta_data.read(field='<STR_LIT>')<EOL>index_stop = in_file_h5.root.meta_data.read(field='<STR_LIT>')<EOL><DEDENT>bad_word_index = set()<EOL>if self._correct_corrupted_data:<EOL><INDENT>tw = <NUM_LIT>  <EOL>dh = <NUM_LIT>  <EOL>is_fe_data_header = logical_and(is_fe_word, is_data_header)<EOL>found_first_trigger = False<EOL>readout_slices = np.column_stack((index_start, index_stop))<EOL>previous_prepend_data_headers = None<EOL>prepend_data_headers = None<EOL>last_good_readout_index = None<EOL>last_index_with_event_data = None<EOL>for read_out_index, (index_start, index_stop) in enumerate(readout_slices):<EOL><INDENT>try:<EOL><INDENT>raw_data = in_file_h5.root.raw_data.read(index_start, index_stop)<EOL><DEDENT>except OverflowError as e:<EOL><INDENT>pass<EOL><DEDENT>except tb.exceptions.HDF5ExtError:<EOL><INDENT>break<EOL><DEDENT>if (index_start - <NUM_LIT:1>) in bad_word_index:<EOL><INDENT>bad_data, current_prepend_data_headers, _ , _ = check_bad_data(raw_data, prepend_data_headers=<NUM_LIT:1>, trig_count=None)<EOL>if bad_data:<EOL><INDENT>bad_word_index = bad_word_index.union(list(range(index_start, index_stop)))<EOL><DEDENT>else:<EOL><INDENT>logging.info("<STR_LIT>" % (in_file_h5.filename, index_start, index_stop, read_out_index, (index_stop - index_start)))<EOL>
Interprets the raw data word table of all given raw data files with the c++ library.
        Creates the h5 output file and PDF plots.

        Parameters
        ----------
        analyzed_data_file : string
            The file name of the output analyzed data file. If None, the output analyzed data file
            specified during initialization is taken.
        use_settings_from_file : boolean
            True if the needed parameters should be extracted from the raw data file
        fei4b : boolean
            True if the raw data is from FE-I4B.