def build_sheet(self, *protocols):
<EOL>known = set(protocols or self.protocols)<EOL>selector_include = []<EOL>skipped = []<EOL>for s in self.samples:<EOL><INDENT>try:<EOL><INDENT>p = s.protocol<EOL><DEDENT>except AttributeError:<EOL><INDENT>selector_include.append(s)<EOL><DEDENT>else:<EOL><INDENT>if p in known:<EOL><INDENT>selector_include.append(s)<EOL><DEDENT>else:<EOL><INDENT>skipped.append(s)<EOL><DEDENT><DEDENT><DEDENT>if skipped:<EOL><INDENT>msg_data = "<STR_LIT:\n>".join(["<STR_LIT>".format(s, s.protocol)<EOL>for s in skipped])<EOL>_LOGGER.debug("<STR_LIT>",<EOL>len(skipped), "<STR_LIT:U+002CU+0020>".join(known), msg_data)<EOL><DEDENT>return pd.DataFrame(selector_include)<EOL>
Create table of subset of samples matching one of given protocols.

:return pandas.core.frame.DataFrame: DataFrame with from base version
    of each of this Project's samples, for indicated protocol(s) if
    given, else all of this Project's samples