def TMatrixCalc(self, TMatrix_Planned_Input, thread=3):
        try:
            logging.info("T-Matrix calculation started.")
            division = thread
            TMatrix_Planned_Input_Chopped = GF.DivideArray(
                numberOfDivisions=division, List=TMatrix_Planned_Input)
            func = partial(self.TMatrixInterpolator,
                           self.__TMatrix_DB_Main_Data_Full,
                           self.__TMatrix_DB_Main_Unique_Values,
                           self.__TMatrix_DB_Main_ABS_Coeff_Full,
                           self.__TMatrix_DB_Main_SCT_Coeff_Full)
            arrInTMatrix = []
            arrOutTMatrix = []
            with ThreadPoolExecutor() as executor:
                for inputs, outputs in zip(
                        TMatrix_Planned_Input_Chopped,
                        executor.map(func, TMatrix_Planned_Input_Chopped)):
                    arrInTMatrix.append(inputs)
                    arrOutTMatrix.append(outputs)
            ####################################
            self.__TMatrix_Interpolation_Input = []
            self.__TMatrix_Interpolation_Output = []
            for i in range(division):
                for j in range(len(arrInTMatrix[i])):
                    self.__TMatrix_Interpolation_Input.append(
                        arrInTMatrix[i][j])
                for j in range(len(arrOutTMatrix[i][0])):
                    arrT = []
                    arrT.append(arrOutTMatrix[i][0][j])
                    arrT.append(arrOutTMatrix[i][1][j])
                    self.__TMatrix_Interpolation_Output.append(arrT)
            logging.info("T-Matrix calculation finished.")
            return self.__TMatrix_Interpolation_Input, self.__TMatrix_Interpolation_Output

        except Exception as e:
            logging.exception(e)
            raise
        'Df', 'R_RI', 'I_RI', 'MP', 'Np', 'Ext_CS_M', 'Sca_CS_M', 'Abs_CS_M'
    ]
    tableName = 'Raw_V1'
    DB.createTable(INFO=DB_Info,
                   TableName=tableName,
                   arrHeaderNamesInput=Header)

    ##############################################################################
    List2D1p8 = GF.DAT_To2DList(address=Address1p8)
    List2D1p8 = GF.ChangeColumnOf2D(list=List2D1p8,
                                    columnNumber=0,
                                    changeTo="1.8")
    List2D1p8 = GF.SelectColumnsList(columnIndex=[0, 1, 2, 3, 4, 6, 7, 8],
                                     list=List2D1p8)
    numberDivisions = 4
    List2D1p8_M = GF.DivideArray(numberDivisions, List2D1p8)
    for i in range(numberDivisions):
        DB.insertArrayIntoTable(INFO=DB_Info,
                                TableName=tableName,
                                NameArray=Header,
                                Array=List2D1p8_M[i])
    ##############################################################################
    List2D2p3 = GF.DAT_To2DList(address=Address2p3)
    List2D2p3 = GF.ChangeColumnOf2D(list=List2D2p3,
                                    columnNumber=0,
                                    changeTo="2.3")
    List2D2p3 = GF.SelectColumnsList(columnIndex=[0, 1, 2, 3, 4, 6, 7, 8],
                                     list=List2D2p3)
    numberDivisions = 4
    List2D2p3_M = GF.DivideArray(numberDivisions, List2D2p3)
    for i in range(numberDivisions):