def ref(self, tickers, flds, ovrds=None):
ovrds = [] if not ovrds else ovrds<EOL>logger = _get_logger(self.debug)<EOL>if type(tickers) is not list:<EOL><INDENT>tickers = [tickers]<EOL><DEDENT>if type(flds) is not list:<EOL><INDENT>flds = [flds]<EOL><DEDENT>request = self._create_req('<STR_LIT>', tickers, flds,<EOL>ovrds, [])<EOL>logger.info('<STR_LIT>'.format(request))<EOL>self._session.sendRequest(request, identity=self._identity)<EOL>data = self._parse_ref(flds)<EOL>data = pd.DataFrame(data)<EOL>data.columns = ['<STR_LIT>', '<STR_LIT>', '<STR_LIT:value>']<EOL>return data<EOL>
Make a reference data request, get tickers and fields, return long
pandas DataFrame with columns [ticker, field, value]

Parameters
----------
tickers: {list, string}
    String or list of strings corresponding to tickers
flds: {list, string}
    String or list of strings corresponding to FLDS
ovrds: list of tuples
    List of tuples where each tuple corresponds to the override
    field and value

Example
-------
>>> import pdblp
>>> con = pdblp.BCon()
>>> con.start()
>>> con.ref("CL1 Comdty", ["FUT_GEN_MONTH"])

Notes
-----
This returns reference data which has singleton values. In raw format
the messages passed back contain data of the form

fieldData = {
        FUT_GEN_MONTH = "FGHJKMNQUVXZ"
}