def RetriveHeadAndExperimentalInfoFromCIFFile(Infile):
    """Retrieve header information from CIF file. """

    Classification, DepositionDate, IDCode, ExperimentalTechnique, Resolution = [
        "Not Available"
    ] * 5

    Lines = MiscUtil.GetTextLines(Infile)

    # IDCode...
    for Line in Lines:
        if re.match("^_struct_keywords.entry_id", Line, re.I):
            IDCode = re.sub("^_struct_keywords.entry_id", "", Line, re.I)
            IDCode = IDCode.strip() if len(IDCode.strip()) else "Not Available"
            break

    # Classification...
    for Line in Lines:
        if re.match("^_struct_keywords.pdbx_keywords", Line, re.I):
            Classification = re.sub("^_struct_keywords.pdbx_keywords", "",
                                    Line, re.I)
            Classification = Classification.strip() if len(
                Classification.strip()) else "Not Available"
            break

    # Deposition date...
    for Line in Lines:
        if re.match("^_pdbx_database_status.recvd_initial_deposition_date",
                    Line, re.I):
            DepositionDate = re.sub(
                "^_pdbx_database_status.recvd_initial_deposition_date", "",
                Line, re.I)
            DepositionDate = DepositionDate.strip() if len(
                DepositionDate.strip()) else "Not Available"
            break

    # Experimental technique...
    for Line in Lines:
        if re.match("^_exptl.method", Line, re.I):
            ExperimentalTechnique = re.sub("(_exptl.method|')",
                                           "",
                                           Line,
                                           flags=re.I)
            ExperimentalTechnique = ExperimentalTechnique.strip() if len(
                ExperimentalTechnique.strip()) else "Not Available"
            break

    # Resolution...
    for Line in Lines:
        if re.match("^_reflns.d_resolution_high", Line, re.I):
            Resolution = re.sub("^_reflns.d_resolution_high", "", Line, re.I)
            Resolution = Resolution.strip() if len(
                Resolution.strip()) else "Not Available"
            break

    return Classification, DepositionDate, IDCode, ExperimentalTechnique, Resolution
def RetriveHeadAndExperimentalInfoFromPDBFile(Infile):
    """Retrieve header and experimental information from PDB file. """

    Classification, DepositionDate, IDCode, ExperimentalTechnique, Resolution = [
        "Not Available"
    ] * 5

    Lines = MiscUtil.GetTextLines(Infile)

    # Retrieve header info...
    for Line in Lines:
        if re.match("^HEADER", Line, re.I):
            # Format: 10x40s9s3x4s
            FormatSize = 66
            Line = PrepareLineForFormatSize(Line, FormatSize)

            Classification = Line[10:50]
            DepositionDate = Line[50:59]
            IDCode = Line[62:66]

            Classification = Classification.strip() if len(
                Classification.strip()) else "Not Available"
            DepositionDate = DepositionDate.strip() if len(
                DepositionDate.strip()) else "Not Available"
            IDCode = IDCode.strip() if len(IDCode.strip()) else "Not Available"

            break

    # Retrieve experimental info...
    for Line in Lines:
        if re.match("^EXPDTA", Line, re.I):
            ExperimentalTechnique = re.sub("^EXPDTA", "", Line, re.I)
            ExperimentalTechnique = ExperimentalTechnique.strip()
        elif re.match("^REMARK   2 RESOLUTION.", Line, re.I):
            if re.search("NOT APPLICABLE", Line, re.I):
                Resolution = "NOT APPLICABLE"
            else:
                FormatSize = 70
                Line = PrepareLineForFormatSize(Line, FormatSize)
                Resolution = Line[22:70]
                Resolution = Resolution.strip() if len(
                    Resolution.strip()) else "Not Available"
        elif re.match("^(ATOM|HETATM)", Line, re.I):
            break

    return Classification, DepositionDate, IDCode, ExperimentalTechnique, Resolution