diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..7b55c91 --- /dev/null +++ b/.gitignore @@ -0,0 +1,109 @@ +# Created by https://www.gitignore.io/api/python + +### Python ### +# Byte-compiled / optimized / DLL files +__pycache__/ +*.py[cod] +*$py.class + +# C extensions +*.so + +# Distribution / packaging +.Python +build/ +develop-eggs/ +dist/ +downloads/ +eggs/ +.eggs/ +lib/ +lib64/ +parts/ +sdist/ +var/ +wheels/ +*.egg-info/ +.installed.cfg +*.egg + +# PyInstaller +# Usually these files are written by a python script from a template +# before PyInstaller builds the exe, so as to inject date/other infos into it. +*.manifest +*.spec + +# Installer logs +pip-log.txt +pip-delete-this-directory.txt + +# Unit test / coverage reports +htmlcov/ +.tox/ +.coverage +.coverage.* +.cache +nosetests.xml +coverage.xml +*.cover +.hypothesis/ + +# Translations +*.mo +*.pot + +# Django stuff: +*.log +local_settings.py + +# Flask stuff: +instance/ +.webassets-cache + +# Scrapy stuff: +.scrapy + +# Sphinx documentation +docs/_build/ + +# PyBuilder +target/ + +# Jupyter Notebook +.ipynb_checkpoints + +# pyenv +.python-version + +# celery beat schedule file +celerybeat-schedule + +# SageMath parsed files +*.sage.py + +# Environments +.env +.venv +env/ +venv/ +ENV/ +env.bak/ +venv.bak/ + +# Spyder project settings +.spyderproject +.spyproject + +# Rope project settings +.ropeproject + +# mkdocs documentation +/site + +# mypy +.mypy_cache/ + +# End of https://www.gitignore.io/api/python + +filters_config.cfg +current-db-subjects.csv \ No newline at end of file diff --git a/CHANGELOG b/CHANGELOG index c8f1e9d..7cde181 100644 --- a/CHANGELOG +++ b/CHANGELOG @@ -1,3 +1,29 @@ +## [0.3.0] - 2017-12-07 +### Added + * add a reqs file for using a venv (Matthew McConnell) + * Create new filters.py script to pull data from REDCap and run filters on it (AjanthaRamineni) + * Add a filter to change headers based on config (Matthew McConnell) + * Add fiter to remove unneccessary RedCap Events (AjanthaRamineni) +* Add a script to run all the filters with a config file (Matthew McConnell) +### Changed + * Add a config across all filters with a decorator for validation (Matthew McConnell) + * Change how filter_ptid works - it now checks ptid, visit type, and visit num (AjanthaRamineni) + * Update the aod range for kids and siblings. Changed field from num to char (Matthew McConnell) + * Update changelog and setup (Tarun Gupta Akirala) + * Update README in preperation for release (Matthew McConnell) + * Update notes (Tarun Gupta Akirala) +### Fixed] +* Fix logic for determing existance of C1S and C2 forms (AjanthaRamineni) +* Fix column numbering on FVP B8 form (Naomi Braun) +* Fix bug where 2 questions should be able to hold values regardless of other values (Matthew McConnell) +* fixes #25 and adds more debugging logs (Tarun Gupta Akirala) + + + ## [0.2.4] - 2017-03-27 + ### Added + * Added few log statements as changes. + * Project handover from takirala to ctsit + ## [0.2.3] - 2017-02-14 ### Changed * Refactored c1s form - redcap C1 form to C1S in alz website @@ -49,4 +75,4 @@ * Created error messages where data does not meet form definitions (Tarun Gupta Akirala) * Added the C1S temporary Spanish form definitions and rules (Tarun Gupta Akirala) * Added flag to have NACCulator output only the Neuropathology form (Tarun Gupta Akirala) - * Added ability to check for data in C2 or C1S form and make determination on which form to use based on data present or not present (Tarun Gupta Akirala) \ No newline at end of file + * Added ability to check for data in C2 or C1S form and make determination on which form to use based on data present or not present (Tarun Gupta Akirala)j diff --git a/README.md b/README.md index 4111ecd..038d6c3 100644 --- a/README.md +++ b/README.md @@ -28,6 +28,9 @@ This is not exhaustive, but here is an explanation of some important files. * `tools/generator.py`: generates Python objects based on NACC Data Element Dictionaries in CSV. +* `/run_filters.py and run_filters.sh`: + pulls data from REDCap based on the settings found in nacculator_cfg.ini (for .py) + and filters_config.cfg (for .sh). HOW TO Convert from REDCap to NACC --------------------------------- @@ -46,7 +49,7 @@ The program accepts two arguments -file and -(ivp|fvp|np). Both the arguments ar $ PYTHONPATH=. ./nacc/redcap2nacc.py -h usage: redcap2nacc.py [-h] [-fvp | -ivp | -np | -f {cleanPtid,updateField,replaceDrugId,fillDefault,fixC1S}] - [-file FILE] [-meta FILTER_META] + [-file FILE] [-meta FILTER_CONFIG] Process redcap form output to nacculator. @@ -58,7 +61,7 @@ The program accepts two arguments -file and -(ivp|fvp|np). Both the arguments ar -f or --filter Accepts one of {cleanPtid,updateField,replaceDrugId,fillDefault,fixC1S} Set this flag to process the filter -file FILE Path of the csv file to be processed. - -meta FILTER_META Input file for the filter metadata (in case cleanPtid is used) + -meta FILTER_META Filter config file (nacculator_cfg.ini) when running filters Example Usage @@ -66,9 +69,7 @@ Example Usage To use a filter, - PYTHONPATH=. ./nacc/redcap2nacc.py -f cleanPtid -meta someFileName.csv < data.csv > data.txt - -Only cleanPtid filter requires a meta file to be passed to it. Other filters do not need a meta tag. + PYTHONPATH=. ./nacc/redcap2nacc.py -f cleanPtid -meta nacculator_cfg.ini < data.csv > data.txt _Note: output is written to `STDOUT`; errors are written to `STDERR`; input can be `STDIN` or the first argument passed to `redcap2nacc`._ @@ -81,18 +82,29 @@ HOW TO Use nacculator to filter data If your data is not clean enough to be processed by nacculator, there are some built in functions to clean (read transform) the data. +In order to properly use the filters, the first step is to check and validate +that the nacculator_cfg.ini file has the proper settings for the filter to run. +The config file contains sections with in-code filter function name. Each of +these sections contains elements necessary for the filter to run. +The filters described below will discuss what is required, if anything. +If the filter requires the config, it must be passed with the -meta flag like +the example above shows. + * **cleanPtid** - This filter requires the meta option to be set using the -meta flag. The meta - file can be a csv file of ptids to be removed. All the records whose ptid is - found in the passed meta file will be discarded in the output file. + **Filter config required** + This filter requires a section in the config called 'filter_clean_ptid'. This + section will contain a single key 'filepath' which will point to a csv file + of ptids to be removed. All the records whose ptid with same packet and visit + num found in the passed meta file will be discarded in the output file. Example meta file: - $ cat sampleRemovePtidFile.csv - ptids - 110001 - 110003 + Patient ID,Packet type,Visit Num,Status + 110001,I,1,Current + 110001,M,M1,Current + 110003,I,001,Current + 110003,F,002,Current * **replaceDrugId** @@ -101,16 +113,24 @@ built in functions to clean (read transform) the data. This filter does not require any meta data file as of now. -* **fixC1S** +* **fixHeaders** - This filter fixes the column names of some of the fields in C1S form. This - filter does not check for any data. It always replaces the column names if found. + **Filter config required** + This filter requires a section in the config called 'filter_fix_headers' with + as many keys as needed to replace the necessary columns. See example below. + This filter fixes the column names of any column found in the filter mapping. + This filter does not check for any data. It always replaces the column names + if found. Currently, below replacements are used: - c1s_2a_npsylan -> c1s_2_npsycloc - c1s_2a_npsylanx -> c1s_2a_npsylan - b6s_2a1_npsylanx -> c1s_2a1_npsylanx + config: + c1s_2a_npsylan: c1s_2_npsycloc + c1s_2a_npsylanx: c1s_2a_npsylan + b6s_2a1_npsylanx: c1s_2a1_npsylanx + fu_otherneur: fu_othneur + fu_otherneurx: fu_othneurxs + fu_strokedec: fu_strokdec * **fillDefault** @@ -131,6 +151,27 @@ built in functions to clean (read transform) the data. This filter is used to update non blank fields. Currently, only adcid is updated to 41. +* **removePtid** + + **Filter config required** + This filter requires a section in the config called 'filter_remove_ptid' with + a single key called 'ptid_format'. The value for that key is a regex string + to match ptids that are to be kept. + + This filter is used to remove ptids that may have a different set of ids for a + different study, or help limit which ids show up in the final result. + + config: + ptid_format: 11\d.* + +* **removeDateRecord** + + This filter is used to remove records who may be missing visit dates. It + searches for rows missing the visit day, month, or year. If any of those + fields are missing, it removes the row. + + + HOW TO Generate New Forms ------------------------ diff --git a/dev-requirements.txt b/dev-requirements.txt new file mode 100644 index 0000000..bf1e34b --- /dev/null +++ b/dev-requirements.txt @@ -0,0 +1,2 @@ +-e git+git@github.com:ctsit/cappy.git@1.2.0#egg=cappy +PyYAML diff --git a/filter_config_example.yaml b/filter_config_example.yaml new file mode 100644 index 0000000..dfc74fa --- /dev/null +++ b/filter_config_example.yaml @@ -0,0 +1,12 @@ +token: Your RedCap Token +redcap_server: Your Redcap Server +filter_config: + ptid_format: Your Ptid Format + current_sub: Path/to/Current_db.csv + header_mapping: + c1s_2a_npsylan : c1s_2_npsycloc + c1s_2a_npsylanx : c1s_2a_npsylan + b6s_2a1_npsylanx : c1s_2a1_npsylanx + fu_otherneur : fu_othneur + fu_otherneurx : fu_othneurxs + fu_strokedec : fu_strokdec diff --git a/filters_config.cfg.example b/filters_config.cfg.example new file mode 100644 index 0000000..2912fea --- /dev/null +++ b/filters_config.cfg.example @@ -0,0 +1,5 @@ +token="1234567890" +content="record" +format="csv" +type="flat" +redcap_server="https://my.redcap.server/redcap/api" diff --git a/getPacketStatus.js b/getPacketStatus.js new file mode 100644 index 0000000..e6415c3 --- /dev/null +++ b/getPacketStatus.js @@ -0,0 +1,16 @@ +var statusList = document.getElementsByName('XID')[0].options; +packets = [['Patient ID','Packet type','Visit Num','Status']]; +for(i=6; i < statusList.length; i++){ + label = statusList[i].label.split(" "); + csv = [label[3], label[6], label[10], label[19]]; + packets[i] = csv;} + +var csvContent = "data:text/csv;charset=utf-8,"; +packets.forEach(function(infoArray, index){ + + dataString = infoArray.join(","); + csvContent += index < packets.length ? dataString+ "\n" : dataString; +}); + +var encodedUri = encodeURI(csvContent); +window.open(encodedUri); diff --git a/nacc/redcap2nacc.py b/nacc/redcap2nacc.py index 53011dd..8a0ad8f 100755 --- a/nacc/redcap2nacc.py +++ b/nacc/redcap2nacc.py @@ -144,11 +144,19 @@ def main(): """ parser = argparse.ArgumentParser(description='Process redcap form output to nacculator.') - filters_names = { 'cleanPtid' : 'clean_ptid', + filters_names = { + 'cleanPtid' : 'clean_ptid', 'replaceDrugId' : 'replace_drug_id', - 'fixC1S' : 'fix_c1s', + 'fixHeaders' : 'fix_headers', 'fillDefault' : 'fill_default', - 'updateField' : 'update_field'} + 'updateField' : 'update_field', + 'removePtid' : 'remove_ptid', + 'removeDateRecord' : 'eliminate_empty_date'} + + filter_exclusive_names = { + 'cleanPtid' : 'clean_ptid', + 'removeRedCapEvent':'eliminate_redcapeventname' + } option_group = parser.add_mutually_exclusive_group() option_group.add_argument('-fvp', action='store_true', dest='fvp', help='Set this flag to process as fvp data') @@ -172,14 +180,16 @@ def main(): output = sys.stdout if options.filter: - filter_method = getattr(filters, 'filter_' + filters_names[options.filter]) - filter_method(fp, options.filter_meta, output) + filter_method = 'filter_' + filters_names[options.filter] + filter_func = getattr(filters, filter_method) + filter_func(fp, options.filter_meta, output) else: reader = csv.DictReader(fp) - for record in reader: + for record in reader: + print >> sys.stderr, "[START] ptid : " + str(record['ptid']) try: if options.ivp: - packet = ivp_builder.build_uds3_ivp_form(record) + packet = ivp_builder.build_uds3_ivp_form(record) elif options.np: packet = np_builder.build_uds3_np_form(record) elif options.fvp: @@ -206,4 +216,4 @@ def main(): print form if __name__ == '__main__': - main() \ No newline at end of file + main() diff --git a/nacc/uds3/filters.py b/nacc/uds3/filters.py index b20a4e3..95402ad 100644 --- a/nacc/uds3/filters.py +++ b/nacc/uds3/filters.py @@ -1,11 +1,9 @@ import os import sys import csv +import re import fileinput - -fix_c1s_headers = { 'c1s_2a_npsylan' : 'c1s_2_npsycloc', - 'c1s_2a_npsylanx' : 'c1s_2a_npsylan', - 'b6s_2a1_npsylanx' : 'c1s_2a1_npsylanx'} +import ConfigParser fill_default_values = { 'nogds' : 0, 'arthupex' : 0, @@ -17,31 +15,82 @@ fill_non_blank_values = { 'adcid' : '41' } -def write_headers(reader, output): - if output.fieldnames is None: - # Initially empty file. Write column headers. - output.fieldnames = reader.fieldnames - output_header = dict((h,h) for h in reader.fieldnames) - output.writerow(output_header) +#This dictionary contains the keys used in the config +def validate(func): + def read_config(config_path): + config = ConfigParser.ConfigParser() + config.read(config_path) + return config + + def get_reqs_dict(config_path): + config = read_config(config_path) + reqs = None + if config.has_section(func.__name__): + reqs = dict(config.items(func.__name__)) + return reqs + + def validate_filter(*args, **kwargs): + config_path = args[1] + data_dict = None + if config_path: + data_dict = get_reqs_dict(args[1]) + updated_args = list(args) + updated_args[1] = data_dict + func(*updated_args,**kwargs) -def filter_clean_ptid(input_ptr, filter_meta, output_ptr): + return validate_filter +@validate +def filter_clean_ptid(input_ptr, filter_config, output_ptr): +# TODO To deal with M Flag in Current_db.csv + + filepath = filter_config['filepath'] reader = csv.DictReader(input_ptr) output = csv.DictWriter(output_ptr, None) write_headers(reader, output) - with open(filter_meta, 'r') as ptid_file: - ptids = ptid_file.read().splitlines() - for record in reader: - ptid = record['ptid'] - if ptid not in ptids: + for record in reader: + ptid = record['ptid'] + visit_num = record['visitnum'] + with open(filepath, 'r') as ptid_file: + curr_ptid = csv.DictReader(ptid_file) + repeat_flag = 0 + + for row in curr_ptid: + packet_type = row['Packet type'] + curr_visit = row['Visit Num'] + + if ptid == row['Patient ID']: + prog_followup_visit = re.compile("followup.*") + prog_initial_visit = re.compile("initial.*") + prog_mile_visit = re.compile("milestone.*") + if packet_type == "I" and prog_initial_visit.match(record['redcap_event_name']): + repeat_flag = 1 + print >> sys.stderr, 'Eliminated ptid : ' + ptid + " Event Name : " + record['redcap_event_name'] + + elif packet_type == "F" and prog_followup_visit.match(record['redcap_event_name']): + if (visit_num and visit_num == curr_visit) or visit_num == '': + repeat_flag = 1 + print >> sys.stderr, 'Eliminated ptid : ' + ptid + " Event Name : " + record['redcap_event_name'] + + elif packet_type == "M" and prog_mile_visit.match(record['redcap_event_name']): + # The visit num for Mile Stone is given in M1...M2...M3 for so to get integra; part of it we use Regex + if (visit_num and re.search('\d+',curr_visit).group() == visit_num) or visit_num == '': + repeat_flag = 1 + print >> sys.stderr, 'Eliminated ptid : ' + ptid+ " Event Name : " + record['redcap_event_name'] + if(repeat_flag == 0): output.writerow(record) - else: - print >> sys.stderr, 'Eliminated ptid : ' + ptid - return + return output -def filter_replace_drug_id(input_ptr, filter_meta, output_ptr): +def write_headers(reader, output): + if output.fieldnames is None: + # Initially empty file. Write column headers. + output.fieldnames = reader.fieldnames + output_header = dict((h,h) for h in reader.fieldnames) + output.writerow(output_header) +@validate +def filter_replace_drug_id(input_ptr, filter_meta, output_ptr): reader = csv.DictReader(input_ptr) output = csv.DictWriter(output_ptr, None) write_headers(reader, output) @@ -60,18 +109,41 @@ def filter_replace_drug_id(input_ptr, filter_meta, output_ptr): print >> sys.stderr, 'Processed ptid : ' + record['ptid'] + ' Updated ' + str(count) + ' fields.' return -def filter_fix_c1s(input_ptr, filter_meta, output_ptr): +@validate +def filter_fix_headers(input_file, header_mapping, output_file): + csv_reader = csv.reader(input_file) + csv_writer = csv.writer(output_file) + headers = csv_reader.next() + fixed_headers = list(map(lambda header: header_mapping.get(header,header), headers)) + csv_writer.writerow(fixed_headers) + csv_writer.writerows([row for row in csv_reader]) - lines = input_ptr.read().splitlines() - header = True - for line in lines: - if header: - header = False - for key in fix_c1s_headers.keys(): - line=line.replace(key, fix_c1s_headers[key],1) - print line return +@validate +def filter_remove_ptid(input_ptr, filter_config, output_ptr): + regex_exp = filter_config['ptid_format'] + reader = csv.DictReader(input_ptr) + output = csv.DictWriter(output_ptr, None) + write_headers(reader, output) + for record in reader: + prog = re.compile(regex_exp) + if prog.match(record['ptid'])!=None: + output.writerow(record) + else: + print >> sys.stderr, 'Removed ptid : ' + record['ptid'] + +@validate +def filter_eliminate_empty_date(input_ptr, filter_meta, output_ptr): + reader = csv.DictReader(input_ptr) + output = csv.DictWriter(output_ptr, None) + write_headers(reader, output) + for record in reader: + if record['visitmo']=='' or record['visitday']=='' or record['visityr']=='': + print >> sys.stderr, ' Empty Visit Date ' + record['ptid'] + else: + output.writerow(record) + def fill_value_of_fields(input_ptr, output_ptr, keysDict, blankCheck=False, defaultCheck=False): reader = csv.DictReader(input_ptr) output = csv.DictWriter(output_ptr, None) @@ -90,8 +162,10 @@ def fill_value_of_fields(input_ptr, output_ptr, keysDict, blankCheck=False, defa print >> sys.stderr, 'Processed ptid : ' + record['ptid'] + ' Updated ' + str(count) + ' fields.' return +@validate def filter_fill_default(input_ptr, filter_meta, output_ptr): fill_value_of_fields(input_ptr, output_ptr, fill_default_values, defaultCheck=True) +@validate def filter_update_field(input_ptr, filter_meta, output_ptr): fill_value_of_fields(input_ptr, output_ptr, fill_non_blank_values, blankCheck=True) diff --git a/nacc/uds3/fvp/builder.py b/nacc/uds3/fvp/builder.py index d0a3f08..070e58f 100644 --- a/nacc/uds3/fvp/builder.py +++ b/nacc/uds3/fvp/builder.py @@ -46,7 +46,7 @@ def build_uds3_fvp_form(record): a2.INCALLS = record['fu_incalls'] a2.INRELY = record['fu_inrely'] packet.append(a2) - + a3 = fvp_forms.FormA3() a3.NWINFMUT = record['fu_nwinfmut'] a3.FADMUT = record['fu_fadmut'] @@ -543,14 +543,18 @@ def build_uds3_fvp_form(record): b9.FTLDEVAL = record['fu_ftldeval'] packet.append(b9) - # Among C1 and C2 forms, one must be filled, one must be empty. - isC1NotBlank = '0' + (record['fu_mmseloc'] and record['fu_mmseloc'].strip()) \ - or (record['fu_cogstat'] and record['fu_cogstat'].strip()) - isC2NotBlank = '0' + (record['fu_mocacomp'] and record['fu_mocacomp'].strip()) \ - or (record['fu_cogstat_c2'] and record['fu_cogstat_c2'].strip()) - condition = int(isC1NotBlank) + int(isC2NotBlank) + isC1NotBlank = 0 + isC2NotBlank = 0 + + if(len(record['fu_mmseloc'].strip())!=0 or len(record['fu_cogstat'].strip())!=0): + isC1NotBlank = 1 + + if(len(record['fu_mocacomp'].strip())!=0 or len(record['fu_cogstat_c2'].strip())!=0): + isC2NotBlank = 1 + + condition = isC1NotBlank + isC2NotBlank if(condition != 1): ptid = record['ptid'] @@ -558,7 +562,7 @@ def build_uds3_fvp_form(record): message = message + " for PTID : " + ("unknown" if not ptid else ptid) raise Exception(message) - if(isC1NotBlank): + if(int(isC1NotBlank)): add_redcap_C1_alz_C1S(record, packet) else: addC2(record, packet) @@ -780,7 +784,7 @@ def add_redcap_C1_alz_C1S(record, packet): c1.NPSYLANX = record['fu_npsylanx'] c1.LOGIMO = record['fu_logimo'] c1.LOGIDAY = record['fu_logiday'] #TODO - c1.LOGIYR = record['fu_logiyr'] #TODO + c1.LOGIYR = record['fu_logiyr'] #TODO c1.LOGIPREV = record['fu_logiprev'] c1.LOGIMEM = record['fu_logimem'] c1.UDSBENTC = record['fu_udsbentc_c1'] #TODO @@ -801,7 +805,7 @@ def add_redcap_C1_alz_C1S(record, packet): c1.UDSBENTD = record['fu_udsbentd_c1'] #TODO c1.UDSBENRS = record['fu_udsbenrs_c1'] #TODO c1.BOSTON = record['fu_boston'] - c1.UDSVERFC = record['fu_udsverfc_c1'] #TODO + c1.UDSVERFC = record['fu_udsverfc_c1'] #TODO c1.UDSVERFN = record['fu_udsverfn_c1'] #TODO c1.UDSVERNF = record['fu_udsvernf_c1'] #TODO c1.UDSVERLC = record['fu_udsverlc_c1'] #TODO diff --git a/nacc/uds3/fvp/forms.py b/nacc/uds3/fvp/forms.py index 05eb64c..489c70a 100644 --- a/nacc/uds3/fvp/forms.py +++ b/nacc/uds3/fvp/forms.py @@ -103,88 +103,88 @@ def __init__(self): self.fields['NWINFSIB'] = nacc.uds3.Field(name='NWINFSIB', typename='Num', position=(478, 478), length=1, inclusive_range=(0, 1), allowable_values=['1', '0'], blanks=['Blank if Question 6 SIBS = 0 (No)']) self.fields['SIB1MOB'] = nacc.uds3.Field(name='SIB1MOB', typename='Num', position=(480, 481), length=2, inclusive_range=(1, 12), allowable_values=['99'], blanks=['Blank if Question 6 SIBS = 0 (No)', 'Blank if Question 6a NWINFSIB = 0 (No)']) self.fields['SIB1YOB'] = nacc.uds3.Field(name='SIB1YOB', typename='Num', position=(483, 486), length=4, inclusive_range=(1875, CURRENT_YEAR), allowable_values=['9999'], blanks=['Blank if Question 6 SIBS = 0 (No)', 'Blank if Question 6a NWINFSIB = 0 (No)']) - self.fields['SIB1AGD'] = nacc.uds3.Field(name='SIB1AGD', typename='Num', position=(488, 490), length=3, inclusive_range=(15, 110), allowable_values=['999', '888'], blanks=['Blank if Question 6 SIBS = 0 (No)', 'Blank if Question 6a NWINFSIB = 0 (No)']) + self.fields['SIB1AGD'] = nacc.uds3.Field(name='SIB1AGD', typename='Num', position=(488, 490), length=3, inclusive_range=(1, 110), allowable_values=['999', '888'], blanks=['Blank if Question 6 SIBS = 0 (No)', 'Blank if Question 6a NWINFSIB = 0 (No)']) self.fields['SIB1NEU'] = nacc.uds3.Field(name='SIB1NEU', typename='Num', position=(492, 492), length=1, inclusive_range=(1, 5), allowable_values=['9', '3', '2', '1', '8', '5', '4'], blanks=['Blank if Question 6 SIBS = 0 (No)', 'Blank if Question 6a NWINFSIB = 0 (No)']) self.fields['SIB1PDX'] = nacc.uds3.Field(name='SIB1PDX', typename='Num', position=(494, 496), length=3, inclusive_range=(40, 490), allowable_values=['999'], blanks=['Blank if Question 6 SIBS = 0 (No)', 'Blank if Question 6a NWINFSIB = 0 (No)', 'Blank if Question 6aa4 SIB1NEU = 8 (N/A)', 'Blank if Question 6aa4 SIB1NEU = 9 (Unknown)']) self.fields['SIB1MOE'] = nacc.uds3.Field(name='SIB1MOE', typename='Num', position=(498, 498), length=1, inclusive_range=(1, 7), allowable_values=['7', '3', '2', '1', '6', '5', '4'], blanks=['Blank if Question 6 SIBS = 0 (No)', 'Blank if Question 6a NWINFSIB = 0 (No)', 'Blank if Question 6aa4 SIB1NEU = 8 (N/A)', 'Blank if Question 6aa4 SIB1NEU = 9 (Unknown)']) - self.fields['SIB1AGO'] = nacc.uds3.Field(name='SIB1AGO', typename='Num', position=(500, 502), length=3, inclusive_range=(15, 110), allowable_values=['999'], blanks=['Blank if Question 6 SIBS = 0 (No)', 'Blank if Question 6a NWINFSIB = 0 (No)', 'Blank if Question 6aa4 SIB1NEU = 8 (N/A)', 'Blank if Question 6aa4 SIB1NEU = 9 (Unknown)']) + self.fields['SIB1AGO'] = nacc.uds3.Field(name='SIB1AGO', typename='Num', position=(500, 502), length=3, inclusive_range=(1, 110), allowable_values=['999'], blanks=['Blank if Question 6 SIBS = 0 (No)', 'Blank if Question 6a NWINFSIB = 0 (No)', 'Blank if Question 6aa4 SIB1NEU = 8 (N/A)', 'Blank if Question 6aa4 SIB1NEU = 9 (Unknown)']) self.fields['SIB2MOB'] = nacc.uds3.Field(name='SIB2MOB', typename='Num', position=(504, 505), length=2, inclusive_range=(1, 12), allowable_values=['99', '99'], blanks=['Blank if Question 6 SIBS = 0 (No)', 'Blank if Question 6a NWINFSIB = 0 (No)']) self.fields['SIB2YOB'] = nacc.uds3.Field(name='SIB2YOB', typename='Num', position=(507, 510), length=4, inclusive_range=(1875, CURRENT_YEAR), allowable_values=['9999', '99'], blanks=['Blank if Question 6 SIBS = 0 (No)', 'Blank if Question 6a NWINFSIB = 0 (No)']) - self.fields['SIB2AGD'] = nacc.uds3.Field(name='SIB2AGD', typename='Num', position=(512, 514), length=3, inclusive_range=(15, 110), allowable_values=['999', '888'], blanks=['Blank if Question 6 SIBS = 0 (No)', 'Blank if Question 6a NWINFSIB = 0 (No)']) + self.fields['SIB2AGD'] = nacc.uds3.Field(name='SIB2AGD', typename='Num', position=(512, 514), length=3, inclusive_range=(1, 110), allowable_values=['999', '888'], blanks=['Blank if Question 6 SIBS = 0 (No)', 'Blank if Question 6a NWINFSIB = 0 (No)']) self.fields['SIB2NEU'] = nacc.uds3.Field(name='SIB2NEU', typename='Num', position=(516, 516), length=1, inclusive_range=(1, 5), allowable_values=['9', '3', '2', '1', '8', '5', '4'], blanks=['Blank if Question 6 SIBS = 0 (No)', 'Blank if Question 6a NWINFSIB = 0 (No)']) self.fields['SIB2PDX'] = nacc.uds3.Field(name='SIB2PDX', typename='Num', position=(518, 520), length=3, inclusive_range=(40, 490), allowable_values=['999'], blanks=['Blank if Question 6 SIBS = 0 (No)', 'Blank if Question 6a NWINFSIB = 0 (No)', 'Blank if Question 6ab4 SIB2NEU = 8 (N/A)', 'Blank if Question 6ab4 SIB2NEU = 9 (Unknown)']) self.fields['SIB2MOE'] = nacc.uds3.Field(name='SIB2MOE', typename='Num', position=(522, 522), length=1, inclusive_range=(1, 7), allowable_values=['7', '3', '2', '1', '6', '5', '4'], blanks=['Blank if Question 6 SIBS = 0 (No)', 'Blank if Question 6a NWINFSIB = 0 (No)', 'Blank if Question 6ab4 SIB2NEU = 8 (N/A)', 'Blank if Question 6ab4 SIB2NEU = 9 (Unknown)']) - self.fields['SIB2AGO'] = nacc.uds3.Field(name='SIB2AGO', typename='Num', position=(524, 526), length=3, inclusive_range=(15, 110), allowable_values=['999'], blanks=['Blank if Question 6 SIBS = 0 (No)', 'Blank if Question 6a NWINFSIB = 0 (No)', 'Blank if Question 6ab4 SIB2NEU = 8 (N/A)', 'Blank if Question 6ab4 SIB2NEU = 9 (Unknown)']) + self.fields['SIB2AGO'] = nacc.uds3.Field(name='SIB2AGO', typename='Num', position=(524, 526), length=3, inclusive_range=(1, 110), allowable_values=['999'], blanks=['Blank if Question 6 SIBS = 0 (No)', 'Blank if Question 6a NWINFSIB = 0 (No)', 'Blank if Question 6ab4 SIB2NEU = 8 (N/A)', 'Blank if Question 6ab4 SIB2NEU = 9 (Unknown)']) self.fields['SIB3MOB'] = nacc.uds3.Field(name='SIB3MOB', typename='Num', position=(528, 529), length=2, inclusive_range=(1, 12), allowable_values=['99', '99'], blanks=['Blank if Question 6 SIBS = 0 (No)', 'Blank if Question 6a NWINFSIB = 0 (No)']) self.fields['SIB3YOB'] = nacc.uds3.Field(name='SIB3YOB', typename='Num', position=(531, 534), length=4, inclusive_range=(1875, CURRENT_YEAR), allowable_values=['9999', '99'], blanks=['Blank if Question 6 SIBS = 0 (No)', 'Blank if Question 6a NWINFSIB = 0 (No)']) - self.fields['SIB3AGD'] = nacc.uds3.Field(name='SIB3AGD', typename='Num', position=(536, 538), length=3, inclusive_range=(15, 110), allowable_values=['999', '888'], blanks=['Blank if Question 6 SIBS = 0 (No)', 'Blank if Question 6a NWINFSIB = 0 (No)']) + self.fields['SIB3AGD'] = nacc.uds3.Field(name='SIB3AGD', typename='Num', position=(536, 538), length=3, inclusive_range=(1, 110), allowable_values=['999', '888'], blanks=['Blank if Question 6 SIBS = 0 (No)', 'Blank if Question 6a NWINFSIB = 0 (No)']) self.fields['SIB3NEU'] = nacc.uds3.Field(name='SIB3NEU', typename='Num', position=(540, 540), length=1, inclusive_range=(1, 5), allowable_values=['9', '3', '2', '1', '8', '5', '4'], blanks=['Blank if Question 6 SIBS = 0 (No)', 'Blank if Question 6a NWINFSIB = 0 (No)']) self.fields['SIB3PDX'] = nacc.uds3.Field(name='SIB3PDX', typename='Num', position=(542, 544), length=3, inclusive_range=(40, 490), allowable_values=['999'], blanks=['Blank if Question 6 SIBS = 0 (No)', 'Blank if Question 6a NWINFSIB = 0 (No)', 'Blank if Question 6ac4 SIB3NEU = 8 (N/A)', 'Blank if Question 6ac4 SIB3NEU = 9 (Unknown)']) self.fields['SIB3MOE'] = nacc.uds3.Field(name='SIB3MOE', typename='Num', position=(546, 546), length=1, inclusive_range=(1, 7), allowable_values=['7', '3', '2', '1', '6', '5', '4'], blanks=['Blank if Question 6 SIBS = 0 (No)', 'Blank if Question 6a NWINFSIB = 0 (No)', 'Blank if Question 6ac4 SIB3NEU = 8 (N/A)', 'Blank if Question 6ac4 SIB3NEU = 9 (Unknown)']) - self.fields['SIB3AGO'] = nacc.uds3.Field(name='SIB3AGO', typename='Num', position=(548, 550), length=3, inclusive_range=(15, 110), allowable_values=['999'], blanks=['Blank if Question 6 SIBS = 0 (No)', 'Blank if Question 6a NWINFSIB = 0 (No)', 'Blank if Question 6ac4 SIB3NEU = 8 (N/A)', 'Blank if Question 6ac4 SIB3NEU = 9 (Unknown)']) + self.fields['SIB3AGO'] = nacc.uds3.Field(name='SIB3AGO', typename='Num', position=(548, 550), length=3, inclusive_range=(1, 110), allowable_values=['999'], blanks=['Blank if Question 6 SIBS = 0 (No)', 'Blank if Question 6a NWINFSIB = 0 (No)', 'Blank if Question 6ac4 SIB3NEU = 8 (N/A)', 'Blank if Question 6ac4 SIB3NEU = 9 (Unknown)']) self.fields['SIB4MOB'] = nacc.uds3.Field(name='SIB4MOB', typename='Num', position=(552, 553), length=2, inclusive_range=(1, 12), allowable_values=['99', '99'], blanks=['Blank if Question 6 SIBS = 0 (No)', 'Blank if Question 6a NWINFSIB = 0 (No)']) self.fields['SIB4YOB'] = nacc.uds3.Field(name='SIB4YOB', typename='Num', position=(555, 558), length=4, inclusive_range=(1875, CURRENT_YEAR), allowable_values=['9999', '99'], blanks=['Blank if Question 6 SIBS = 0 (No)', 'Blank if Question 6a NWINFSIB = 0 (No)']) - self.fields['SIB4AGD'] = nacc.uds3.Field(name='SIB4AGD', typename='Num', position=(560, 562), length=3, inclusive_range=(15, 110), allowable_values=['999', '888'], blanks=['Blank if Question 6 SIBS = 0 (No)', 'Blank if Question 6a NWINFSIB = 0 (No)']) + self.fields['SIB4AGD'] = nacc.uds3.Field(name='SIB4AGD', typename='Num', position=(560, 562), length=3, inclusive_range=(1, 110), allowable_values=['999', '888'], blanks=['Blank if Question 6 SIBS = 0 (No)', 'Blank if Question 6a NWINFSIB = 0 (No)']) self.fields['SIB4NEU'] = nacc.uds3.Field(name='SIB4NEU', typename='Num', position=(564, 564), length=1, inclusive_range=(1, 5), allowable_values=['9', '3', '2', '1', '8', '5', '4'], blanks=['Blank if Question 6 SIBS = 0 (No)', 'Blank if Question 6a NWINFSIB = 0 (No)']) self.fields['SIB4PDX'] = nacc.uds3.Field(name='SIB4PDX', typename='Num', position=(566, 568), length=3, inclusive_range=(40, 490), allowable_values=['999'], blanks=['Blank if Question 6 SIBS = 0 (No)', 'Blank if Question 6a NWINFSIB = 0 (No)', 'Blank if Question 6ad4 SIB4NEU = 8 (N/A)', 'Blank if Question 6ad4 SIB4NEU = 9 (Unknown)']) self.fields['SIB4MOE'] = nacc.uds3.Field(name='SIB4MOE', typename='Num', position=(570, 570), length=1, inclusive_range=(1, 7), allowable_values=['7', '3', '2', '1', '6', '5', '4'], blanks=['Blank if Question 6 SIBS = 0 (No)', 'Blank if Question 6a NWINFSIB = 0 (No)', 'Blank if Question 6ad4 SIB4NEU = 8 (N/A)', 'Blank if Question 6ad4 SIB4NEU = 9 (Unknown)']) - self.fields['SIB4AGO'] = nacc.uds3.Field(name='SIB4AGO', typename='Num', position=(572, 574), length=3, inclusive_range=(15, 110), allowable_values=['999'], blanks=['Blank if Question 6 SIBS = 0 (No)', 'Blank if Question 6a NWINFSIB = 0 (No)', 'Blank if Question 6ad4 SIB4NEU = 8 (N/A)', 'Blank if Question 6ad4 SIB4NEU = 9 (Unknown)']) + self.fields['SIB4AGO'] = nacc.uds3.Field(name='SIB4AGO', typename='Num', position=(572, 574), length=3, inclusive_range=(1, 110), allowable_values=['999'], blanks=['Blank if Question 6 SIBS = 0 (No)', 'Blank if Question 6a NWINFSIB = 0 (No)', 'Blank if Question 6ad4 SIB4NEU = 8 (N/A)', 'Blank if Question 6ad4 SIB4NEU = 9 (Unknown)']) self.fields['SIB5MOB'] = nacc.uds3.Field(name='SIB5MOB', typename='Num', position=(576, 577), length=2, inclusive_range=(1, 12), allowable_values=['99', '99'], blanks=['Blank if Question 6 SIBS = 0 (No)', 'Blank if Question 6a NWINFSIB = 0 (No)']) self.fields['SIB5YOB'] = nacc.uds3.Field(name='SIB5YOB', typename='Num', position=(579, 582), length=4, inclusive_range=(1875, CURRENT_YEAR), allowable_values=['9999', '99'], blanks=['Blank if Question 6 SIBS = 0 (No)', 'Blank if Question 6a NWINFSIB = 0 (No)']) - self.fields['SIB5AGD'] = nacc.uds3.Field(name='SIB5AGD', typename='Num', position=(584, 586), length=3, inclusive_range=(15, 110), allowable_values=['999', '888'], blanks=['Blank if Question 6 SIBS = 0 (No)', 'Blank if Question 6a NWINFSIB = 0 (No)']) + self.fields['SIB5AGD'] = nacc.uds3.Field(name='SIB5AGD', typename='Num', position=(584, 586), length=3, inclusive_range=(1, 110), allowable_values=['999', '888'], blanks=['Blank if Question 6 SIBS = 0 (No)', 'Blank if Question 6a NWINFSIB = 0 (No)']) self.fields['SIB5NEU'] = nacc.uds3.Field(name='SIB5NEU', typename='Num', position=(588, 588), length=1, inclusive_range=(1, 5), allowable_values=['9', '3', '2', '1', '8', '5', '4'], blanks=['Blank if Question 6 SIBS = 0 (No)', 'Blank if Question 6a NWINFSIB = 0 (No)']) self.fields['SIB5PDX'] = nacc.uds3.Field(name='SIB5PDX', typename='Num', position=(590, 592), length=3, inclusive_range=(40, 490), allowable_values=['999'], blanks=['Blank if Question 6 SIBS = 0 (No)', 'Blank if Question 6a NWINFSIB = 0 (No)', 'Blank if Question 6ae4 SIB5NEU = 8 (N/A)', 'Blank if Question 6ae4 SIB5NEU = 9 (Unknown)']) self.fields['SIB5MOE'] = nacc.uds3.Field(name='SIB5MOE', typename='Num', position=(594, 594), length=1, inclusive_range=(1, 7), allowable_values=['7', '3', '2', '1', '6', '5', '4'], blanks=['Blank if Question 6 SIBS = 0 (No)', 'Blank if Question 6a NWINFSIB = 0 (No)', 'Blank if Question 6ae4 SIB5NEU = 8 (N/A)', 'Blank if Question 6ae4 SIB5NEU = 9 (Unknown)']) - self.fields['SIB5AGO'] = nacc.uds3.Field(name='SIB5AGO', typename='Num', position=(596, 598), length=3, inclusive_range=(15, 110), allowable_values=['999'], blanks=['Blank if Question 6 SIBS = 0 (No)', 'Blank if Question 6a NWINFSIB = 0 (No)', 'Blank if Question 6ae4 SIB5NEU = 8 (N/A)', 'Blank if Question 6ae4 SIB5NEU = 9 (Unknown)']) + self.fields['SIB5AGO'] = nacc.uds3.Field(name='SIB5AGO', typename='Num', position=(596, 598), length=3, inclusive_range=(1, 110), allowable_values=['999'], blanks=['Blank if Question 6 SIBS = 0 (No)', 'Blank if Question 6a NWINFSIB = 0 (No)', 'Blank if Question 6ae4 SIB5NEU = 8 (N/A)', 'Blank if Question 6ae4 SIB5NEU = 9 (Unknown)']) self.fields['SIB6MOB'] = nacc.uds3.Field(name='SIB6MOB', typename='Num', position=(600, 601), length=2, inclusive_range=(1, 12), allowable_values=['99', '99'], blanks=['Blank if Question 6 SIBS = 0 (No)', 'Blank if Question 6a NWINFSIB = 0 (No)']) self.fields['SIB6YOB'] = nacc.uds3.Field(name='SIB6YOB', typename='Num', position=(603, 606), length=4, inclusive_range=(1875, CURRENT_YEAR), allowable_values=['9999', '99'], blanks=['Blank if Question 6 SIBS = 0 (No)', 'Blank if Question 6a NWINFSIB = 0 (No)']) - self.fields['SIB6AGD'] = nacc.uds3.Field(name='SIB6AGD', typename='Num', position=(608, 610), length=3, inclusive_range=(15, 110), allowable_values=['999', '888'], blanks=['Blank if Question 6 SIBS = 0 (No)', 'Blank if Question 6a NWINFSIB = 0 (No)']) + self.fields['SIB6AGD'] = nacc.uds3.Field(name='SIB6AGD', typename='Num', position=(608, 610), length=3, inclusive_range=(1, 110), allowable_values=['999', '888'], blanks=['Blank if Question 6 SIBS = 0 (No)', 'Blank if Question 6a NWINFSIB = 0 (No)']) self.fields['SIB6NEU'] = nacc.uds3.Field(name='SIB6NEU', typename='Num', position=(612, 612), length=1, inclusive_range=(1, 5), allowable_values=['9', '3', '2', '1', '8', '5', '4'], blanks=['Blank if Question 6 SIBS = 0 (No)', 'Blank if Question 6a NWINFSIB = 0 (No)']) self.fields['SIB6PDX'] = nacc.uds3.Field(name='SIB6PDX', typename='Num', position=(614, 616), length=3, inclusive_range=(40, 490), allowable_values=['999'], blanks=['Blank if Question 6 SIBS = 0 (No)', 'Blank if Question 6a NWINFSIB = 0 (No)', 'Blank if Question 6af4 SIB6NEU = 8 (N/A)', 'Blank if Question 6af4 SIB6NEU = 9 (Unknown)']) self.fields['SIB6MOE'] = nacc.uds3.Field(name='SIB6MOE', typename='Num', position=(618, 618), length=1, inclusive_range=(1, 7), allowable_values=['7', '3', '2', '1', '6', '5', '4'], blanks=['Blank if Question 6 SIBS = 0 (No)', 'Blank if Question 6a NWINFSIB = 0 (No)', 'Blank if Question 6af4 SIB6NEU = 8 (N/A)', 'Blank if Question 6af4 SIB6NEU = 9 (Unknown)']) - self.fields['SIB6AGO'] = nacc.uds3.Field(name='SIB6AGO', typename='Num', position=(620, 622), length=3, inclusive_range=(15, 110), allowable_values=['999'], blanks=['Blank if Question 6 SIBS = 0 (No)', 'Blank if Question 6a NWINFSIB = 0 (No)', 'Blank if Question 6af4 SIB6NEU = 8 (N/A)', 'Blank if Question 6af4 SIB6NEU = 9 (Unknown)']) + self.fields['SIB6AGO'] = nacc.uds3.Field(name='SIB6AGO', typename='Num', position=(620, 622), length=3, inclusive_range=(1, 110), allowable_values=['999'], blanks=['Blank if Question 6 SIBS = 0 (No)', 'Blank if Question 6a NWINFSIB = 0 (No)', 'Blank if Question 6af4 SIB6NEU = 8 (N/A)', 'Blank if Question 6af4 SIB6NEU = 9 (Unknown)']) self.fields['SIB7MOB'] = nacc.uds3.Field(name='SIB7MOB', typename='Num', position=(624, 625), length=2, inclusive_range=(1, 12), allowable_values=['99', '99'], blanks=['Blank if Question 6 SIBS = 0 (No)', 'Blank if Question 6a NWINFSIB = 0 (No)']) self.fields['SIB7YOB'] = nacc.uds3.Field(name='SIB7YOB', typename='Num', position=(627, 630), length=4, inclusive_range=(1875, CURRENT_YEAR), allowable_values=['9999', '99'], blanks=['Blank if Question 6 SIBS = 0 (No)', 'Blank if Question 6a NWINFSIB = 0 (No)']) - self.fields['SIB7AGD'] = nacc.uds3.Field(name='SIB7AGD', typename='Num', position=(632, 634), length=3, inclusive_range=(15, 110), allowable_values=['999', '888'], blanks=['Blank if Question 6 SIBS = 0 (No)', 'Blank if Question 6a NWINFSIB = 0 (No)']) + self.fields['SIB7AGD'] = nacc.uds3.Field(name='SIB7AGD', typename='Num', position=(632, 634), length=3, inclusive_range=(1, 110), allowable_values=['999', '888'], blanks=['Blank if Question 6 SIBS = 0 (No)', 'Blank if Question 6a NWINFSIB = 0 (No)']) self.fields['SIB7NEU'] = nacc.uds3.Field(name='SIB7NEU', typename='Num', position=(636, 636), length=1, inclusive_range=(1, 5), allowable_values=['9', '3', '2', '1', '8', '5', '4'], blanks=['Blank if Question 6 SIBS = 0 (No)', 'Blank if Question 6a NWINFSIB = 0 (No)']) self.fields['SIB7PDX'] = nacc.uds3.Field(name='SIB7PDX', typename='Num', position=(638, 640), length=3, inclusive_range=(40, 490), allowable_values=['999'], blanks=['Blank if Question 6 SIBS = 0 (No)', 'Blank if Question 6a NWINFSIB = 0 (No)', 'Blank if Question 6ag4 SIB7NEU = 8 (N/A)', 'Blank if Question 6ag4 SIB7NEU = 9 (Unknown)']) self.fields['SIB7MOE'] = nacc.uds3.Field(name='SIB7MOE', typename='Num', position=(642, 642), length=1, inclusive_range=(1, 7), allowable_values=['7', '3', '2', '1', '6', '5', '4'], blanks=['Blank if Question 6 SIBS = 0 (No)', 'Blank if Question 6a NWINFSIB = 0 (No)', 'Blank if Question 6ag4 SIB7NEU = 8 (N/A)', 'Blank if Question 6ag4 SIB7NEU = 9 (Unknown)']) - self.fields['SIB7AGO'] = nacc.uds3.Field(name='SIB7AGO', typename='Num', position=(644, 646), length=3, inclusive_range=(15, 110), allowable_values=['999'], blanks=['Blank if Question 6 SIBS = 0 (No)', 'Blank if Question 6a NWINFSIB = 0 (No)', 'Blank if Question 6ag4 SIB7NEU = 8 (N/A)', 'Blank if Question 6ag4 SIB7NEU = 9 (Unknown)']) + self.fields['SIB7AGO'] = nacc.uds3.Field(name='SIB7AGO', typename='Num', position=(644, 646), length=3, inclusive_range=(1, 110), allowable_values=['999'], blanks=['Blank if Question 6 SIBS = 0 (No)', 'Blank if Question 6a NWINFSIB = 0 (No)', 'Blank if Question 6ag4 SIB7NEU = 8 (N/A)', 'Blank if Question 6ag4 SIB7NEU = 9 (Unknown)']) self.fields['SIB8MOB'] = nacc.uds3.Field(name='SIB8MOB', typename='Num', position=(648, 649), length=2, inclusive_range=(1, 12), allowable_values=['99', '99'], blanks=['Blank if Question 6 SIBS = 0 (No)', 'Blank if Question 6a NWINFSIB = 0 (No)']) self.fields['SIB8YOB'] = nacc.uds3.Field(name='SIB8YOB', typename='Num', position=(651, 654), length=4, inclusive_range=(1875, CURRENT_YEAR), allowable_values=['9999', '99'], blanks=['Blank if Question 6 SIBS = 0 (No)', 'Blank if Question 6a NWINFSIB = 0 (No)']) - self.fields['SIB8AGD'] = nacc.uds3.Field(name='SIB8AGD', typename='Num', position=(656, 658), length=3, inclusive_range=(15, 110), allowable_values=['999', '888'], blanks=['Blank if Question 6 SIBS = 0 (No)', 'Blank if Question 6a NWINFSIB = 0 (No)']) + self.fields['SIB8AGD'] = nacc.uds3.Field(name='SIB8AGD', typename='Num', position=(656, 658), length=3, inclusive_range=(1, 110), allowable_values=['999', '888'], blanks=['Blank if Question 6 SIBS = 0 (No)', 'Blank if Question 6a NWINFSIB = 0 (No)']) self.fields['SIB8NEU'] = nacc.uds3.Field(name='SIB8NEU', typename='Num', position=(660, 660), length=1, inclusive_range=(1, 5), allowable_values=['9', '3', '2', '1', '8', '5', '4'], blanks=['Blank if Question 6 SIBS = 0 (No)', 'Blank if Question 6a NWINFSIB = 0 (No)']) self.fields['SIB8PDX'] = nacc.uds3.Field(name='SIB8PDX', typename='Num', position=(662, 664), length=3, inclusive_range=(40, 490), allowable_values=['999'], blanks=['Blank if Question 6 SIBS = 0 (No)', 'Blank if Question 6a NWINFSIB = 0 (No)', 'Blank if Question 6ah4 SIB8NEU = 8 (N/A)', 'Blank if Question 6ah4 SIB8NEU = 9 (Unknown)']) self.fields['SIB8MOE'] = nacc.uds3.Field(name='SIB8MOE', typename='Num', position=(666, 666), length=1, inclusive_range=(1, 7), allowable_values=['7', '3', '2', '1', '6', '5', '4'], blanks=['Blank if Question 6 SIBS = 0 (No)', 'Blank if Question 6a NWINFSIB = 0 (No)', 'Blank if Question 6ah4 SIB8NEU = 8 (N/A)', 'Blank if Question 6ah4 SIB8NEU = 9 (Unknown)']) - self.fields['SIB8AGO'] = nacc.uds3.Field(name='SIB8AGO', typename='Num', position=(668, 670), length=3, inclusive_range=(15, 110), allowable_values=['999'], blanks=['Blank if Question 6 SIBS = 0 (No)', 'Blank if Question 6a NWINFSIB = 0 (No)', 'Blank if Question 6ah4 SIB8NEU = 8 (N/A)', 'Blank if Question 6ah4 SIB8NEU = 9 (Unknown)']) + self.fields['SIB8AGO'] = nacc.uds3.Field(name='SIB8AGO', typename='Num', position=(668, 670), length=3, inclusive_range=(1, 110), allowable_values=['999'], blanks=['Blank if Question 6 SIBS = 0 (No)', 'Blank if Question 6a NWINFSIB = 0 (No)', 'Blank if Question 6ah4 SIB8NEU = 8 (N/A)', 'Blank if Question 6ah4 SIB8NEU = 9 (Unknown)']) self.fields['SIB9MOB'] = nacc.uds3.Field(name='SIB9MOB', typename='Num', position=(672, 673), length=2, inclusive_range=(1, 12), allowable_values=['99', '99'], blanks=['Blank if Question 6 SIBS = 0 (No)', 'Blank if Question 6a NWINFSIB = 0 (No)']) self.fields['SIB9YOB'] = nacc.uds3.Field(name='SIB9YOB', typename='Num', position=(675, 678), length=4, inclusive_range=(1875, CURRENT_YEAR), allowable_values=['9999', '99'], blanks=['Blank if Question 6 SIBS = 0 (No)', 'Blank if Question 6a NWINFSIB = 0 (No)']) - self.fields['SIB9AGD'] = nacc.uds3.Field(name='SIB9AGD', typename='Num', position=(680, 682), length=3, inclusive_range=(15, 110), allowable_values=['999', '888'], blanks=['Blank if Question 6 SIBS = 0 (No)', 'Blank if Question 6a NWINFSIB = 0 (No)']) + self.fields['SIB9AGD'] = nacc.uds3.Field(name='SIB9AGD', typename='Num', position=(680, 682), length=3, inclusive_range=(1, 110), allowable_values=['999', '888'], blanks=['Blank if Question 6 SIBS = 0 (No)', 'Blank if Question 6a NWINFSIB = 0 (No)']) self.fields['SIB9NEU'] = nacc.uds3.Field(name='SIB9NEU', typename='Num', position=(684, 684), length=1, inclusive_range=(1, 5), allowable_values=['9', '3', '2', '1', '8', '5', '4'], blanks=['Blank if Question 6 SIBS = 0 (No)', 'Blank if Question 6a NWINFSIB = 0 (No)']) self.fields['SIB9PDX'] = nacc.uds3.Field(name='SIB9PDX', typename='Num', position=(686, 688), length=3, inclusive_range=(40, 490), allowable_values=['999'], blanks=['Blank if Question 6 SIBS = 0 (No)', 'Blank if Question 6a NWINFSIB = 0 (No)', 'Blank if Question 6ai4 SIB9NEU = 8 (N/A)', 'Blank if Question 6ai4 SIB9NEU = 9 (Unknown)']) self.fields['SIB9MOE'] = nacc.uds3.Field(name='SIB9MOE', typename='Num', position=(690, 690), length=1, inclusive_range=(1, 7), allowable_values=['7', '3', '2', '1', '6', '5', '4'], blanks=['Blank if Question 6 SIBS = 0 (No)', 'Blank if Question 6a NWINFSIB = 0 (No)', 'Blank if Question 6ai4 SIB9NEU = 8 (N/A)', 'Blank if Question 6ai4 SIB9NEU = 9 (Unknown)']) - self.fields['SIB9AGO'] = nacc.uds3.Field(name='SIB9AGO', typename='Num', position=(692, 694), length=3, inclusive_range=(15, 110), allowable_values=['999'], blanks=['Blank if Question 6 SIBS = 0 (No)', 'Blank if Question 6a NWINFSIB = 0 (No)', 'Blank if Question 6ai4 SIB9NEU = 8 (N/A)', 'Blank if Question 6ai4 SIB9NEU = 9 (Unknown)']) + self.fields['SIB9AGO'] = nacc.uds3.Field(name='SIB9AGO', typename='Num', position=(692, 694), length=3, inclusive_range=(1, 110), allowable_values=['999'], blanks=['Blank if Question 6 SIBS = 0 (No)', 'Blank if Question 6a NWINFSIB = 0 (No)', 'Blank if Question 6ai4 SIB9NEU = 8 (N/A)', 'Blank if Question 6ai4 SIB9NEU = 9 (Unknown)']) self.fields['SIB10MOB'] = nacc.uds3.Field(name='SIB10MOB', typename='Num', position=(696, 697), length=2, inclusive_range=(1, 12), allowable_values=['99', '99'], blanks=['Blank if Question 6 SIBS = 0 (No)', 'Blank if Question 6a NWINFSIB = 0 (No)']) self.fields['SIB10YOB'] = nacc.uds3.Field(name='SIB10YOB', typename='Num', position=(699, 702), length=4, inclusive_range=(1875, CURRENT_YEAR), allowable_values=['9999', '99'], blanks=['Blank if Question 6 SIBS = 0 (No)', 'Blank if Question 6a NWINFSIB = 0 (No)']) - self.fields['SIB10AGD'] = nacc.uds3.Field(name='SIB10AGD', typename='Num', position=(704, 706), length=3, inclusive_range=(15, 110), allowable_values=['999', '888'], blanks=['Blank if Question 6 SIBS = 0 (No)', 'Blank if Question 6a NWINFSIB = 0 (No)']) + self.fields['SIB10AGD'] = nacc.uds3.Field(name='SIB10AGD', typename='Num', position=(704, 706), length=3, inclusive_range=(1, 110), allowable_values=['999', '888'], blanks=['Blank if Question 6 SIBS = 0 (No)', 'Blank if Question 6a NWINFSIB = 0 (No)']) self.fields['SIB10NEU'] = nacc.uds3.Field(name='SIB10NEU', typename='Num', position=(708, 708), length=1, inclusive_range=(1, 5), allowable_values=['9', '3', '2', '1', '8', '5', '4'], blanks=['Blank if Question 6 SIBS = 0 (No)', 'Blank if Question 6a NWINFSIB = 0 (No)']) self.fields['SIB10PDX'] = nacc.uds3.Field(name='SIB10PDX', typename='Num', position=(710, 712), length=3, inclusive_range=(40, 490), allowable_values=['999'], blanks=['Blank if Question 6 SIBS = 0 (No)', 'Blank if Question 6a NWINFSIB = 0 (No)', 'Blank if Question 6aj4 SIB10NEU = 8 (N/A)', 'Blank if Question 6aj4 SIB10NEU = 9 (Unknown)']) self.fields['SIB10MOE'] = nacc.uds3.Field(name='SIB10MOE', typename='Num', position=(714, 714), length=1, inclusive_range=(1, 7), allowable_values=['7', '3', '2', '1', '6', '5', '4'], blanks=['Blank if Question 6 SIBS = 0 (No)', 'Blank if Question 6a NWINFSIB = 0 (No)', 'Blank if Question 6aj4 SIB10NEU = 8 (N/A)', 'Blank if Question 6aj4 SIB10NEU = 9 (Unknown)']) - self.fields['SIB10AGO'] = nacc.uds3.Field(name='SIB10AGO', typename='Num', position=(716, 718), length=3, inclusive_range=(15, 110), allowable_values=['999'], blanks=['Blank if Question 6 SIBS = 0 (No)', 'Blank if Question 6a NWINFSIB = 0 (No)', 'Blank if Question 6aj4 SIB10NEU = 8 (N/A)', 'Blank if Question 6aj4 SIB10NEU = 9 (Unknown)']) + self.fields['SIB10AGO'] = nacc.uds3.Field(name='SIB10AGO', typename='Num', position=(716, 718), length=3, inclusive_range=(1, 110), allowable_values=['999'], blanks=['Blank if Question 6 SIBS = 0 (No)', 'Blank if Question 6a NWINFSIB = 0 (No)', 'Blank if Question 6aj4 SIB10NEU = 8 (N/A)', 'Blank if Question 6aj4 SIB10NEU = 9 (Unknown)']) self.fields['SIB11MOB'] = nacc.uds3.Field(name='SIB11MOB', typename='Num', position=(720, 721), length=2, inclusive_range=(1, 12), allowable_values=['99', '99'], blanks=['Blank if Question 6 SIBS = 0 (No)', 'Blank if Question 6a NWINFSIB = 0 (No)']) self.fields['SIB11YOB'] = nacc.uds3.Field(name='SIB11YOB', typename='Num', position=(723, 726), length=4, inclusive_range=(1875, CURRENT_YEAR), allowable_values=['9999', '99'], blanks=['Blank if Question 6 SIBS = 0 (No)', 'Blank if Question 6a NWINFSIB = 0 (No)']) - self.fields['SIB11AGD'] = nacc.uds3.Field(name='SIB11AGD', typename='Num', position=(728, 730), length=3, inclusive_range=(15, 110), allowable_values=['999', '888'], blanks=['Blank if Question 6 SIBS = 0 (No)', 'Blank if Question 6a NWINFSIB = 0 (No)']) + self.fields['SIB11AGD'] = nacc.uds3.Field(name='SIB11AGD', typename='Num', position=(728, 730), length=3, inclusive_range=(1, 110), allowable_values=['999', '888'], blanks=['Blank if Question 6 SIBS = 0 (No)', 'Blank if Question 6a NWINFSIB = 0 (No)']) self.fields['SIB11NEU'] = nacc.uds3.Field(name='SIB11NEU', typename='Num', position=(732, 732), length=1, inclusive_range=(1, 5), allowable_values=['9', '3', '2', '1', '8', '5', '4'], blanks=['Blank if Question 6 SIBS = 0 (No)', 'Blank if Question 6a NWINFSIB = 0 (No)']) self.fields['SIB11PDX'] = nacc.uds3.Field(name='SIB11PDX', typename='Num', position=(734, 736), length=3, inclusive_range=(40, 490), allowable_values=['999'], blanks=['Blank if Question 6 SIBS = 0 (No)', 'Blank if Question 6a NWINFSIB = 0 (No)', 'Blank if Question 6ak4 SIB11NEU = 8 (N/A)', 'Blank if Question 6ak4 SIB11NEU = 9 (Unknown)']) self.fields['SIB11MOE'] = nacc.uds3.Field(name='SIB11MOE', typename='Num', position=(738, 738), length=1, inclusive_range=(1, 7), allowable_values=['7', '3', '2', '1', '6', '5', '4'], blanks=['Blank if Question 6 SIBS = 0 (No)', 'Blank if Question 6a NWINFSIB = 0 (No)', 'Blank if Question 6ak4 SIB11NEU = 8 (N/A)', 'Blank if Question 6ak4 SIB11NEU = 9 (Unknown)']) - self.fields['SIB11AGO'] = nacc.uds3.Field(name='SIB11AGO', typename='Num', position=(740, 742), length=3, inclusive_range=(15, 110), allowable_values=['999'], blanks=['Blank if Question 6 SIBS = 0 (No)', 'Blank if Question 6a NWINFSIB = 0 (No)', 'Blank if Question 6ak4 SIB11NEU = 8 (N/A)', 'Blank if Question 6ak4 SIB11NEU = 9 (Unknown)']) + self.fields['SIB11AGO'] = nacc.uds3.Field(name='SIB11AGO', typename='Num', position=(740, 742), length=3, inclusive_range=(1, 110), allowable_values=['999'], blanks=['Blank if Question 6 SIBS = 0 (No)', 'Blank if Question 6a NWINFSIB = 0 (No)', 'Blank if Question 6ak4 SIB11NEU = 8 (N/A)', 'Blank if Question 6ak4 SIB11NEU = 9 (Unknown)']) self.fields['SIB12MOB'] = nacc.uds3.Field(name='SIB12MOB', typename='Num', position=(744, 745), length=2, inclusive_range=(1, 12), allowable_values=['99', '99'], blanks=['Blank if Question 6 SIBS = 0 (No)', 'Blank if Question 6a NWINFSIB = 0 (No)']) self.fields['SIB12YOB'] = nacc.uds3.Field(name='SIB12YOB', typename='Num', position=(747, 750), length=4, inclusive_range=(1875, CURRENT_YEAR), allowable_values=['9999', '99'], blanks=['Blank if Question 6 SIBS = 0 (No)', 'Blank if Question 6a NWINFSIB = 0 (No)']) - self.fields['SIB12AGD'] = nacc.uds3.Field(name='SIB12AGD', typename='Num', position=(752, 754), length=3, inclusive_range=(15, 110), allowable_values=['999', '888'], blanks=['Blank if Question 6 SIBS = 0 (No)', 'Blank if Question 6a NWINFSIB = 0 (No)']) + self.fields['SIB12AGD'] = nacc.uds3.Field(name='SIB12AGD', typename='Num', position=(752, 754), length=3, inclusive_range=(1, 110), allowable_values=['999', '888'], blanks=['Blank if Question 6 SIBS = 0 (No)', 'Blank if Question 6a NWINFSIB = 0 (No)']) self.fields['SIB12NEU'] = nacc.uds3.Field(name='SIB12NEU', typename='Num', position=(756, 756), length=1, inclusive_range=(1, 5), allowable_values=['9', '3', '2', '1', '8', '5', '4'], blanks=['Blank if Question 6 SIBS = 0 (No)', 'Blank if Question 6a NWINFSIB = 0 (No)']) self.fields['SIB12PDX'] = nacc.uds3.Field(name='SIB12PDX', typename='Num', position=(758, 760), length=3, inclusive_range=(40, 490), allowable_values=['999'], blanks=['Blank if Question 6 SIBS = 0 (No)', 'Blank if Question 6a NWINFSIB = 0 (No)', 'Blank if Question 6al4 SIB12NEU = 8 (N/A)', 'Blank if Question 6al4 SIB12NEU = 9 (Unknown)']) self.fields['SIB12MOE'] = nacc.uds3.Field(name='SIB12MOE', typename='Num', position=(762, 762), length=1, inclusive_range=(1, 7), allowable_values=['7', '3', '2', '1', '6', '5', '4'], blanks=['Blank if Question 6 SIBS = 0 (No)', 'Blank if Question 6a NWINFSIB = 0 (No)', 'Blank if Question 6al4 SIB12NEU = 8 (N/A)', 'Blank if Question 6al4 SIB12NEU = 9 (Unknown)']) - self.fields['SIB12AGO'] = nacc.uds3.Field(name='SIB12AGO', typename='Num', position=(764, 766), length=3, inclusive_range=(15, 110), allowable_values=['999'], blanks=['Blank if Question 6 SIBS = 0 (No)', 'Blank if Question 6a NWINFSIB = 0 (No)', 'Blank if Question 6al4 SIB12NEU = 8 (N/A)', 'Blank if Question 6al4 SIB12NEU = 9 (Unknown)']) + self.fields['SIB12AGO'] = nacc.uds3.Field(name='SIB12AGO', typename='Num', position=(764, 766), length=3, inclusive_range=(1, 110), allowable_values=['999'], blanks=['Blank if Question 6 SIBS = 0 (No)', 'Blank if Question 6a NWINFSIB = 0 (No)', 'Blank if Question 6al4 SIB12NEU = 8 (N/A)', 'Blank if Question 6al4 SIB12NEU = 9 (Unknown)']) self.fields['SIB13MOB'] = nacc.uds3.Field(name='SIB13MOB', typename='Num', position=(768, 769), length=2, inclusive_range=(1, 12), allowable_values=['99', '99'], blanks=['Blank if Question 6 SIBS = 0 (No)', 'Blank if Question 6a NWINFSIB = 0 (No)']) self.fields['SIB13YOB'] = nacc.uds3.Field(name='SIB13YOB', typename='Num', position=(771, 774), length=4, inclusive_range=(1875, CURRENT_YEAR), allowable_values=['9999', '99'], blanks=['Blank if Question 6 SIBS = 0 (No)', 'Blank if Question 6a NWINFSIB = 0 (No)']) self.fields['SIB13AGD'] = nacc.uds3.Field(name='SIB13AGD', typename='Num', position=(776, 778), length=3, inclusive_range=(15, 110), allowable_values=['999', '888'], blanks=['Blank if Question 6 SIBS = 0 (No)', 'Blank if Question 6a NWINFSIB = 0 (No)']) @@ -194,160 +194,160 @@ def __init__(self): self.fields['SIB13AGO'] = nacc.uds3.Field(name='SIB13AGO', typename='Num', position=(788, 790), length=3, inclusive_range=(15, 110), allowable_values=['999'], blanks=['Blank if Question 6 SIBS = 0 (No)', 'Blank if Question 6a NWINFSIB = 0 (No)', 'Blank if Question 6am4 SIB13NEU = 8 (N/A)', 'Blank if Question 6am4 SIB13NEU = 9 (Unknown)']) self.fields['SIB14MOB'] = nacc.uds3.Field(name='SIB14MOB', typename='Num', position=(792, 793), length=2, inclusive_range=(1, 12), allowable_values=['99', '99'], blanks=['Blank if Question 6 SIBS = 0 (No)', 'Blank if Question 6a NWINFSIB = 0 (No)']) self.fields['SIB14YOB'] = nacc.uds3.Field(name='SIB14YOB', typename='Num', position=(795, 798), length=4, inclusive_range=(1875, CURRENT_YEAR), allowable_values=['9999', '99'], blanks=['Blank if Question 6 SIBS = 0 (No)', 'Blank if Question 6a NWINFSIB = 0 (No)']) - self.fields['SIB14AGD'] = nacc.uds3.Field(name='SIB14AGD', typename='Num', position=(800, 802), length=3, inclusive_range=(15, 110), allowable_values=['999', '888'], blanks=['Blank if Question 6 SIBS = 0 (No)', 'Blank if Question 6a NWINFSIB = 0 (No)']) + self.fields['SIB14AGD'] = nacc.uds3.Field(name='SIB14AGD', typename='Num', position=(800, 802), length=3, inclusive_range=(1, 110), allowable_values=['999', '888'], blanks=['Blank if Question 6 SIBS = 0 (No)', 'Blank if Question 6a NWINFSIB = 0 (No)']) self.fields['SIB14NEU'] = nacc.uds3.Field(name='SIB14NEU', typename='Num', position=(804, 804), length=1, inclusive_range=(1, 5), allowable_values=['9', '3', '2', '1', '8', '5', '4'], blanks=['Blank if Question 6 SIBS = 0 (No)', 'Blank if Question 6a NWINFSIB = 0 (No)']) self.fields['SIB14PDX'] = nacc.uds3.Field(name='SIB14PDX', typename='Num', position=(806, 808), length=3, inclusive_range=(40, 490), allowable_values=['999'], blanks=['Blank if Question 6 SIBS = 0 (No)', 'Blank if Question 6a NWINFSIB = 0 (No)', 'Blank if Question 6an4 SIB14NEU = 8 (N/A)', 'Blank if Question 6an4 SIB14NEU = 9 (Unknown)']) self.fields['SIB14MOE'] = nacc.uds3.Field(name='SIB14MOE', typename='Num', position=(810, 810), length=1, inclusive_range=(1, 7), allowable_values=['7', '3', '2', '1', '6', '5', '4'], blanks=['Blank if Question 6 SIBS = 0 (No)', 'Blank if Question 6a NWINFSIB = 0 (No)', 'Blank if Question 6an4 SIB14NEU = 8 (N/A)', 'Blank if Question 6an4 SIB14NEU = 9 (Unknown)']) - self.fields['SIB14AGO'] = nacc.uds3.Field(name='SIB14AGO', typename='Num', position=(812, 814), length=3, inclusive_range=(15, 110), allowable_values=['999'], blanks=['Blank if Question 6 SIBS = 0 (No)', 'Blank if Question 6a NWINFSIB = 0 (No)', 'Blank if Question 6an4 SIB14NEU = 8 (N/A)', 'Blank if Question 6an4 SIB14NEU = 9 (Unknown)']) + self.fields['SIB14AGO'] = nacc.uds3.Field(name='SIB14AGO', typename='Num', position=(812, 814), length=3, inclusive_range=(1, 110), allowable_values=['999'], blanks=['Blank if Question 6 SIBS = 0 (No)', 'Blank if Question 6a NWINFSIB = 0 (No)', 'Blank if Question 6an4 SIB14NEU = 8 (N/A)', 'Blank if Question 6an4 SIB14NEU = 9 (Unknown)']) self.fields['SIB15MOB'] = nacc.uds3.Field(name='SIB15MOB', typename='Num', position=(816, 817), length=2, inclusive_range=(1, 12), allowable_values=['99', '99'], blanks=['Blank if Question 6 SIBS = 0 (No)', 'Blank if Question 6a NWINFSIB = 0 (No)']) self.fields['SIB15YOB'] = nacc.uds3.Field(name='SIB15YOB', typename='Num', position=(819, 822), length=4, inclusive_range=(1875, CURRENT_YEAR), allowable_values=['9999', '99'], blanks=['Blank if Question 6 SIBS = 0 (No)', 'Blank if Question 6a NWINFSIB = 0 (No)']) - self.fields['SIB15AGD'] = nacc.uds3.Field(name='SIB15AGD', typename='Num', position=(824, 826), length=3, inclusive_range=(15, 110), allowable_values=['999', '888'], blanks=['Blank if Question 6 SIBS = 0 (No)', 'Blank if Question 6a NWINFSIB = 0 (No)']) + self.fields['SIB15AGD'] = nacc.uds3.Field(name='SIB15AGD', typename='Num', position=(824, 826), length=3, inclusive_range=(1, 110), allowable_values=['999', '888'], blanks=['Blank if Question 6 SIBS = 0 (No)', 'Blank if Question 6a NWINFSIB = 0 (No)']) self.fields['SIB15NEU'] = nacc.uds3.Field(name='SIB15NEU', typename='Num', position=(828, 828), length=1, inclusive_range=(1, 5), allowable_values=['9', '3', '2', '1', '8', '5', '4'], blanks=['Blank if Question 6 SIBS = 0 (No)', 'Blank if Question 6a NWINFSIB = 0 (No)']) self.fields['SIB15PDX'] = nacc.uds3.Field(name='SIB15PDX', typename='Num', position=(830, 832), length=3, inclusive_range=(40, 490), allowable_values=['999'], blanks=['Blank if Question 6 SIBS = 0 (No)', 'Blank if Question 6a NWINFSIB = 0 (No)', 'Blank if Question 6ao4 SIB15NEU = 8 (N/A)', 'Blank if Question 6ao4 SIB15NEU = 9 (Unknown)']) self.fields['SIB15MOE'] = nacc.uds3.Field(name='SIB15MOE', typename='Num', position=(834, 834), length=1, inclusive_range=(1, 7), allowable_values=['7', '3', '2', '1', '6', '5', '4'], blanks=['Blank if Question 6 SIBS = 0 (No)', 'Blank if Question 6a NWINFSIB = 0 (No)', 'Blank if Question 6ao4 SIB15NEU = 8 (N/A)', 'Blank if Question 6ao4 SIB15NEU = 9 (Unknown)']) - self.fields['SIB15AGO'] = nacc.uds3.Field(name='SIB15AGO', typename='Num', position=(836, 838), length=3, inclusive_range=(15, 110), allowable_values=['999'], blanks=['Blank if Question 6 SIBS = 0 (No)', 'Blank if Question 6a NWINFSIB = 0 (No)', 'Blank if Question 6ao4 SIB15NEU = 8 (N/A)', 'Blank if Question 6ao4 SIB15NEU = 9 (Unknown)']) + self.fields['SIB15AGO'] = nacc.uds3.Field(name='SIB15AGO', typename='Num', position=(836, 838), length=3, inclusive_range=(1, 110), allowable_values=['999'], blanks=['Blank if Question 6 SIBS = 0 (No)', 'Blank if Question 6a NWINFSIB = 0 (No)', 'Blank if Question 6ao4 SIB15NEU = 8 (N/A)', 'Blank if Question 6ao4 SIB15NEU = 9 (Unknown)']) self.fields['SIB16MOB'] = nacc.uds3.Field(name='SIB16MOB', typename='Num', position=(840, 841), length=2, inclusive_range=(1, 12), allowable_values=['99', '99'], blanks=['Blank if Question 6 SIBS = 0 (No)', 'Blank if Question 6a NWINFSIB = 0 (No)']) self.fields['SIB16YOB'] = nacc.uds3.Field(name='SIB16YOB', typename='Num', position=(843, 846), length=4, inclusive_range=(1875, CURRENT_YEAR), allowable_values=['9999', '99'], blanks=['Blank if Question 6 SIBS = 0 (No)', 'Blank if Question 6a NWINFSIB = 0 (No)']) - self.fields['SIB16AGD'] = nacc.uds3.Field(name='SIB16AGD', typename='Num', position=(848, 850), length=3, inclusive_range=(15, 110), allowable_values=['999', '888'], blanks=['Blank if Question 6 SIBS = 0 (No)', 'Blank if Question 6a NWINFSIB = 0 (No)']) + self.fields['SIB16AGD'] = nacc.uds3.Field(name='SIB16AGD', typename='Num', position=(848, 850), length=3, inclusive_range=(1, 110), allowable_values=['999', '888'], blanks=['Blank if Question 6 SIBS = 0 (No)', 'Blank if Question 6a NWINFSIB = 0 (No)']) self.fields['SIB16NEU'] = nacc.uds3.Field(name='SIB16NEU', typename='Num', position=(852, 852), length=1, inclusive_range=(1, 5), allowable_values=['9', '3', '2', '1', '8', '5', '4'], blanks=['Blank if Question 6 SIBS = 0 (No)', 'Blank if Question 6a NWINFSIB = 0 (No)']) self.fields['SIB16PDX'] = nacc.uds3.Field(name='SIB16PDX', typename='Num', position=(854, 856), length=3, inclusive_range=(40, 490), allowable_values=['999'], blanks=['Blank if Question 6 SIBS = 0 (No)', 'Blank if Question 6a NWINFSIB = 0 (No)', 'Blank if Question 6ap4 SIB16NEU = 8 (N/A)', 'Blank if Question 6ap4 SIB16NEU = 9 (Unknown)']) self.fields['SIB16MOE'] = nacc.uds3.Field(name='SIB16MOE', typename='Num', position=(858, 858), length=1, inclusive_range=(1, 7), allowable_values=['7', '3', '2', '1', '6', '5', '4'], blanks=['Blank if Question 6 SIBS = 0 (No)', 'Blank if Question 6a NWINFSIB = 0 (No)', 'Blank if Question 6ap4 SIB16NEU = 8 (N/A)', 'Blank if Question 6ap4 SIB16NEU = 9 (Unknown)']) - self.fields['SIB16AGO'] = nacc.uds3.Field(name='SIB16AGO', typename='Num', position=(860, 862), length=3, inclusive_range=(15, 110), allowable_values=['999'], blanks=['Blank if Question 6 SIBS = 0 (No)', 'Blank if Question 6a NWINFSIB = 0 (No)', 'Blank if Question 6ap4 SIB16NEU = 8 (N/A)', 'Blank if Question 6ap4 SIB16NEU = 9 (Unknown)']) + self.fields['SIB16AGO'] = nacc.uds3.Field(name='SIB16AGO', typename='Num', position=(860, 862), length=3, inclusive_range=(1, 110), allowable_values=['999'], blanks=['Blank if Question 6 SIBS = 0 (No)', 'Blank if Question 6a NWINFSIB = 0 (No)', 'Blank if Question 6ap4 SIB16NEU = 8 (N/A)', 'Blank if Question 6ap4 SIB16NEU = 9 (Unknown)']) self.fields['SIB17MOB'] = nacc.uds3.Field(name='SIB17MOB', typename='Num', position=(864, 865), length=2, inclusive_range=(1, 12), allowable_values=['99', '99'], blanks=['Blank if Question 6 SIBS = 0 (No)', 'Blank if Question 6a NWINFSIB = 0 (No)']) self.fields['SIB17YOB'] = nacc.uds3.Field(name='SIB17YOB', typename='Num', position=(867, 870), length=4, inclusive_range=(1875, CURRENT_YEAR), allowable_values=['9999', '99'], blanks=['Blank if Question 6 SIBS = 0 (No)', 'Blank if Question 6a NWINFSIB = 0 (No)']) - self.fields['SIB17AGD'] = nacc.uds3.Field(name='SIB17AGD', typename='Num', position=(872, 874), length=3, inclusive_range=(15, 110), allowable_values=['999', '888'], blanks=['Blank if Question 6 SIBS = 0 (No)', 'Blank if Question 6a NWINFSIB = 0 (No)']) + self.fields['SIB17AGD'] = nacc.uds3.Field(name='SIB17AGD', typename='Num', position=(872, 874), length=3, inclusive_range=(1, 110), allowable_values=['999', '888'], blanks=['Blank if Question 6 SIBS = 0 (No)', 'Blank if Question 6a NWINFSIB = 0 (No)']) self.fields['SIB17NEU'] = nacc.uds3.Field(name='SIB17NEU', typename='Num', position=(876, 876), length=1, inclusive_range=(1, 5), allowable_values=['9', '3', '2', '1', '8', '5', '4'], blanks=['Blank if Question 6 SIBS = 0 (No)', 'Blank if Question 6a NWINFSIB = 0 (No)']) self.fields['SIB17PDX'] = nacc.uds3.Field(name='SIB17PDX', typename='Num', position=(878, 880), length=3, inclusive_range=(40, 490), allowable_values=['999'], blanks=['Blank if Question 6 SIBS = 0 (No)', 'Blank if Question 6a NWINFSIB = 0 (No)', 'Blank if Question 6aq4 SIB17NEU = 8 (N/A)', 'Blank if Question 6aq4 SIB17NEU = 9 (Unknown)']) self.fields['SIB17MOE'] = nacc.uds3.Field(name='SIB17MOE', typename='Num', position=(882, 882), length=1, inclusive_range=(1, 7), allowable_values=['7', '3', '2', '1', '6', '5', '4'], blanks=['Blank if Question 6 SIBS = 0 (No)', 'Blank if Question 6a NWINFSIB = 0 (No)', 'Blank if Question 6aq4 SIB17NEU = 8 (N/A)', 'Blank if Question 6aq4 SIB17NEU = 9 (Unknown)']) - self.fields['SIB17AGO'] = nacc.uds3.Field(name='SIB17AGO', typename='Num', position=(884, 886), length=3, inclusive_range=(15, 110), allowable_values=['999'], blanks=['Blank if Question 6 SIBS = 0 (No)', 'Blank if Question 6a NWINFSIB = 0 (No)', 'Blank if Question 6aq4 SIB17NEU = 8 (N/A)', 'Blank if Question 6aq4 SIB17NEU = 9 (Unknown)']) + self.fields['SIB17AGO'] = nacc.uds3.Field(name='SIB17AGO', typename='Num', position=(884, 886), length=3, inclusive_range=(1, 110), allowable_values=['999'], blanks=['Blank if Question 6 SIBS = 0 (No)', 'Blank if Question 6a NWINFSIB = 0 (No)', 'Blank if Question 6aq4 SIB17NEU = 8 (N/A)', 'Blank if Question 6aq4 SIB17NEU = 9 (Unknown)']) self.fields['SIB18MOB'] = nacc.uds3.Field(name='SIB18MOB', typename='Num', position=(888, 889), length=2, inclusive_range=(1, 12), allowable_values=['99', '99'], blanks=['Blank if Question 6 SIBS = 0 (No)', 'Blank if Question 6a NWINFSIB = 0 (No)']) self.fields['SIB18YOB'] = nacc.uds3.Field(name='SIB18YOB', typename='Num', position=(891, 894), length=4, inclusive_range=(1875, CURRENT_YEAR), allowable_values=['9999', '99'], blanks=['Blank if Question 6 SIBS = 0 (No)', 'Blank if Question 6a NWINFSIB = 0 (No)']) - self.fields['SIB18AGD'] = nacc.uds3.Field(name='SIB18AGD', typename='Num', position=(896, 898), length=3, inclusive_range=(15, 110), allowable_values=['999', '888'], blanks=['Blank if Question 6 SIBS = 0 (No)', 'Blank if Question 6a NWINFSIB = 0 (No)']) + self.fields['SIB18AGD'] = nacc.uds3.Field(name='SIB18AGD', typename='Num', position=(896, 898), length=3, inclusive_range=(1, 110), allowable_values=['999', '888'], blanks=['Blank if Question 6 SIBS = 0 (No)', 'Blank if Question 6a NWINFSIB = 0 (No)']) self.fields['SIB18NEU'] = nacc.uds3.Field(name='SIB18NEU', typename='Num', position=(900, 900), length=1, inclusive_range=(1, 5), allowable_values=['9', '3', '2', '1', '8', '5', '4'], blanks=['Blank if Question 6 SIBS = 0 (No)', 'Blank if Question 6a NWINFSIB = 0 (No)']) self.fields['SIB18PDX'] = nacc.uds3.Field(name='SIB18PDX', typename='Num', position=(902, 904), length=3, inclusive_range=(40, 490), allowable_values=['999'], blanks=['Blank if Question 6 SIBS = 0 (No)', 'Blank if Question 6a NWINFSIB = 0 (No)', 'Blank if Question 6ar4 SIB18NEU = 8 (N/A)', 'Blank if Question 6ar4 SIB18NEU = 9 (Unknown)']) self.fields['SIB18MOE'] = nacc.uds3.Field(name='SIB18MOE', typename='Num', position=(906, 906), length=1, inclusive_range=(1, 7), allowable_values=['7', '3', '2', '1', '6', '5', '4'], blanks=['Blank if Question 6 SIBS = 0 (No)', 'Blank if Question 6a NWINFSIB = 0 (No)', 'Blank if Question 6ar4 SIB18NEU = 8 (N/A)', 'Blank if Question 6ar4 SIB18NEU = 9 (Unknown)']) - self.fields['SIB18AGO'] = nacc.uds3.Field(name='SIB18AGO', typename='Num', position=(908, 910), length=3, inclusive_range=(15, 110), allowable_values=['999'], blanks=['Blank if Question 6 SIBS = 0 (No)', 'Blank if Question 6a NWINFSIB = 0 (No)', 'Blank if Question 6ar4 SIB18NEU = 8 (N/A)', 'Blank if Question 6ar4 SIB18NEU = 9 (Unknown)']) + self.fields['SIB18AGO'] = nacc.uds3.Field(name='SIB18AGO', typename='Num', position=(908, 910), length=3, inclusive_range=(1, 110), allowable_values=['999'], blanks=['Blank if Question 6 SIBS = 0 (No)', 'Blank if Question 6a NWINFSIB = 0 (No)', 'Blank if Question 6ar4 SIB18NEU = 8 (N/A)', 'Blank if Question 6ar4 SIB18NEU = 9 (Unknown)']) self.fields['SIB19MOB'] = nacc.uds3.Field(name='SIB19MOB', typename='Num', position=(912, 913), length=2, inclusive_range=(1, 12), allowable_values=['99', '99'], blanks=['Blank if Question 6 SIBS = 0 (No)', 'Blank if Question 6a NWINFSIB = 0 (No)']) self.fields['SIB19YOB'] = nacc.uds3.Field(name='SIB19YOB', typename='Num', position=(915, 918), length=4, inclusive_range=(1875, CURRENT_YEAR), allowable_values=['9999', '99'], blanks=['Blank if Question 6 SIBS = 0 (No)', 'Blank if Question 6a NWINFSIB = 0 (No)']) - self.fields['SIB19AGD'] = nacc.uds3.Field(name='SIB19AGD', typename='Num', position=(920, 922), length=3, inclusive_range=(15, 110), allowable_values=['999', '888'], blanks=['Blank if Question 6 SIBS = 0 (No)', 'Blank if Question 6a NWINFSIB = 0 (No)']) + self.fields['SIB19AGD'] = nacc.uds3.Field(name='SIB19AGD', typename='Num', position=(920, 922), length=3, inclusive_range=(1, 110), allowable_values=['999', '888'], blanks=['Blank if Question 6 SIBS = 0 (No)', 'Blank if Question 6a NWINFSIB = 0 (No)']) self.fields['SIB19NEU'] = nacc.uds3.Field(name='SIB19NEU', typename='Num', position=(924, 924), length=1, inclusive_range=(1, 5), allowable_values=['9', '3', '2', '1', '8', '5', '4'], blanks=['Blank if Question 6 SIBS = 0 (No)', 'Blank if Question 6a NWINFSIB = 0 (No)']) self.fields['SIB19PDX'] = nacc.uds3.Field(name='SIB19PDX', typename='Num', position=(926, 928), length=3, inclusive_range=(40, 490), allowable_values=['999'], blanks=['Blank if Question 6 SIBS = 0 (No)', 'Blank if Question 6a NWINFSIB = 0 (No)', 'Blank if Question 6as4 SIB19NEU = 8 (N/A)', 'Blank if Question 6as4 SIB19NEU = 9 (Unknown)']) self.fields['SIB19MOE'] = nacc.uds3.Field(name='SIB19MOE', typename='Num', position=(930, 930), length=1, inclusive_range=(1, 7), allowable_values=['7', '3', '2', '1', '6', '5', '4'], blanks=['Blank if Question 6 SIBS = 0 (No)', 'Blank if Question 6a NWINFSIB = 0 (No)', 'Blank if Question 6as4 SIB19NEU = 8 (N/A)', 'Blank if Question 6as4 SIB19NEU = 9 (Unknown)']) - self.fields['SIB19AGO'] = nacc.uds3.Field(name='SIB19AGO', typename='Num', position=(932, 934), length=3, inclusive_range=(15, 110), allowable_values=['999'], blanks=['Blank if Question 6 SIBS = 0 (No)', 'Blank if Question 6a NWINFSIB = 0 (No)', 'Blank if Question 6as4 SIB19NEU = 8 (N/A)', 'Blank if Question 6as4 SIB19NEU = 9 (Unknown)']) + self.fields['SIB19AGO'] = nacc.uds3.Field(name='SIB19AGO', typename='Num', position=(932, 934), length=3, inclusive_range=(1, 110), allowable_values=['999'], blanks=['Blank if Question 6 SIBS = 0 (No)', 'Blank if Question 6a NWINFSIB = 0 (No)', 'Blank if Question 6as4 SIB19NEU = 8 (N/A)', 'Blank if Question 6as4 SIB19NEU = 9 (Unknown)']) self.fields['SIB20MOB'] = nacc.uds3.Field(name='SIB20MOB', typename='Num', position=(936, 937), length=2, inclusive_range=(1, 12), allowable_values=['99', '99'], blanks=['Blank if Question 6 SIBS = 0 (No)', 'Blank if Question 6a NWINFSIB = 0 (No)']) self.fields['SIB20YOB'] = nacc.uds3.Field(name='SIB20YOB', typename='Num', position=(939, 942), length=4, inclusive_range=(1875, CURRENT_YEAR), allowable_values=['9999', '99'], blanks=['Blank if Question 6 SIBS = 0 (No)', 'Blank if Question 6a NWINFSIB = 0 (No)']) - self.fields['SIB20AGD'] = nacc.uds3.Field(name='SIB20AGD', typename='Num', position=(944, 946), length=3, inclusive_range=(15, 110), allowable_values=['999', '888'], blanks=['Blank if Question 6 SIBS = 0 (No)', 'Blank if Question 6a NWINFSIB = 0 (No)']) + self.fields['SIB20AGD'] = nacc.uds3.Field(name='SIB20AGD', typename='Num', position=(944, 946), length=3, inclusive_range=(1, 110), allowable_values=['999', '888'], blanks=['Blank if Question 6 SIBS = 0 (No)', 'Blank if Question 6a NWINFSIB = 0 (No)']) self.fields['SIB20NEU'] = nacc.uds3.Field(name='SIB20NEU', typename='Num', position=(948, 948), length=1, inclusive_range=(1, 5), allowable_values=['9', '3', '2', '1', '8', '5', '4'], blanks=['Blank if Question 6 SIBS = 0 (No)', 'Blank if Question 6a NWINFSIB = 0 (No)']) self.fields['SIB20PDX'] = nacc.uds3.Field(name='SIB20PDX', typename='Num', position=(950, 952), length=3, inclusive_range=(40, 490), allowable_values=['999'], blanks=['Blank if Question 6 SIBS = 0 (No)', 'Blank if Question 6a NWINFSIB = 0 (No)', 'Blank if Question 6at4 SIB20NEU = 8 (N/A)', 'Blank if Question 6at4 SIB20NEU = 9 (Unknown)']) self.fields['SIB20MOE'] = nacc.uds3.Field(name='SIB20MOE', typename='Num', position=(954, 954), length=1, inclusive_range=(1, 7), allowable_values=['7', '3', '2', '1', '6', '5', '4'], blanks=['Blank if Question 6 SIBS = 0 (No)', 'Blank if Question 6a NWINFSIB = 0 (No)', 'Blank if Question 6at4 SIB20NEU = 8 (N/A)', 'Blank if Question 6at4 SIB20NEU = 9 (Unknown)']) - self.fields['SIB20AGO'] = nacc.uds3.Field(name='SIB20AGO', typename='Num', position=(956, 958), length=3, inclusive_range=(15, 110), allowable_values=['999'], blanks=['Blank if Question 6 SIBS = 0 (No)', 'Blank if Question 6a NWINFSIB = 0 (No)', 'Blank if Question 6at4 SIB20NEU = 8 (N/A)', 'Blank if Question 6at4 SIB20NEU = 9 (Unknown)']) + self.fields['SIB20AGO'] = nacc.uds3.Field(name='SIB20AGO', typename='Num', position=(956, 958), length=3, inclusive_range=(1, 110), allowable_values=['999'], blanks=['Blank if Question 6 SIBS = 0 (No)', 'Blank if Question 6a NWINFSIB = 0 (No)', 'Blank if Question 6at4 SIB20NEU = 8 (N/A)', 'Blank if Question 6at4 SIB20NEU = 9 (Unknown)']) self.fields['KIDS'] = nacc.uds3.Field(name='KIDS', typename='Num', position=(960, 961), length=2, inclusive_range=(0, 15), allowable_values=[], blanks=[]) self.fields['NWINFKID'] = nacc.uds3.Field(name='NWINFKID', typename='Num', position=(963, 963), length=1, inclusive_range=(0, 1), allowable_values=['1', '0'], blanks=[]) self.fields['KID1MOB'] = nacc.uds3.Field(name='KID1MOB', typename='Num', position=(965, 966), length=2, inclusive_range=(1, 12), allowable_values=['99', '99'], blanks=['Blank if Question 7 KIDS = 0 (No)', 'Blank if Question 7a NWINFKID = 0 (No)']) self.fields['KID1YOB'] = nacc.uds3.Field(name='KID1YOB', typename='Num', position=(968, 971), length=4, inclusive_range=(1875, CURRENT_YEAR), allowable_values=['9999', '99'], blanks=['Blank if Question 7 KIDS = 0 (No)', 'Blank if Question 7a NWINFKID = 0 (No)']) - self.fields['KID1AGD'] = nacc.uds3.Field(name='KID1AGD', typename='Num', position=(973, 975), length=3, inclusive_range=(15, 110), allowable_values=['999', '888'], blanks=['Blank if Question 7 KIDS = 0 (No)', 'Blank if Question 7a NWINFKID = 0 (No)']) + self.fields['KID1AGD'] = nacc.uds3.Field(name='KID1AGD', typename='Num', position=(973, 975), length=3, inclusive_range=(1, 110), allowable_values=['999', '888'], blanks=['Blank if Question 7 KIDS = 0 (No)', 'Blank if Question 7a NWINFKID = 0 (No)']) self.fields['KID1NEU'] = nacc.uds3.Field(name='KID1NEU', typename='Num', position=(977, 977), length=1, inclusive_range=(1, 5), allowable_values=['9', '3', '2', '1', '8', '5', '4'], blanks=['Blank if Question 7 KIDS = 0 (No)', 'Blank if Question 7a NWINFKID = 0 (No)']) self.fields['KID1PDX'] = nacc.uds3.Field(name='KID1PDX', typename='Num', position=(979, 981), length=3, inclusive_range=(40, 490), allowable_values=['999'], blanks=['Blank if Question 7 KIDS = 0 (No)', 'Blank if Question 7a NWINFKID = 0 (No)', 'Blank if Question 7aa4 KID1NEU = 8 (N/A)', 'Blank if Question 7aa4 KID1NEU = 9 (Unknown)']) self.fields['KID1MOE'] = nacc.uds3.Field(name='KID1MOE', typename='Num', position=(983, 983), length=1, inclusive_range=(1, 7), allowable_values=['7', '3', '2', '1', '6', '5', '4'], blanks=['Blank if Question 7 KIDS = 0 (No)', 'Blank if Question 7a NWINFKID = 0 (No)', 'Blank if Question 7aa4 KID1NEU = 8 (N/A)', 'Blank if Question 7aa4 KID1NEU = 9 (Unknown)']) - self.fields['KID1AGO'] = nacc.uds3.Field(name='KID1AGO', typename='Num', position=(985, 987), length=3, inclusive_range=(15, 110), allowable_values=['999'], blanks=['Blank if Question 7 KIDS = 0 (No)', 'Blank if Question 7a NWINFKID = 0 (No)', 'Blank if Question 7aa4 KID1NEU = 8 (N/A)', 'Blank if Question 7aa4 KID1NEU = 9 (Unknown)']) + self.fields['KID1AGO'] = nacc.uds3.Field(name='KID1AGO', typename='Num', position=(985, 987), length=3, inclusive_range=(1, 110), allowable_values=['999'], blanks=['Blank if Question 7 KIDS = 0 (No)', 'Blank if Question 7a NWINFKID = 0 (No)', 'Blank if Question 7aa4 KID1NEU = 8 (N/A)', 'Blank if Question 7aa4 KID1NEU = 9 (Unknown)']) self.fields['KID2MOB'] = nacc.uds3.Field(name='KID2MOB', typename='Num', position=(989, 990), length=2, inclusive_range=(1, 12), allowable_values=['99', '99'], blanks=['Blank if Question 7 KIDS = 0 (No)', 'Blank if Question 7a NWINFKID = 0 (No)']) self.fields['KID2YOB'] = nacc.uds3.Field(name='KID2YOB', typename='Num', position=(992, 995), length=4, inclusive_range=(1875, CURRENT_YEAR), allowable_values=['9999', '99'], blanks=['Blank if Question 7 KIDS = 0 (No)', 'Blank if Question 7a NWINFKID = 0 (No)']) - self.fields['KID2AGD'] = nacc.uds3.Field(name='KID2AGD', typename='Num', position=(997, 999), length=3, inclusive_range=(15, 110), allowable_values=['999', '888'], blanks=['Blank if Question 7 KIDS = 0 (No)', 'Blank if Question 7a NWINFKID = 0 (No)']) + self.fields['KID2AGD'] = nacc.uds3.Field(name='KID2AGD', typename='Num', position=(997, 999), length=3, inclusive_range=(1, 110), allowable_values=['999', '888'], blanks=['Blank if Question 7 KIDS = 0 (No)', 'Blank if Question 7a NWINFKID = 0 (No)']) self.fields['KID2NEU'] = nacc.uds3.Field(name='KID2NEU', typename='Num', position=(1001, 1001), length=1, inclusive_range=(1, 5), allowable_values=['9', '3', '2', '1', '8', '5', '4'], blanks=['Blank if Question 7 KIDS = 0 (No)', 'Blank if Question 7a NWINFKID = 0 (No)']) self.fields['KID2PDX'] = nacc.uds3.Field(name='KID2PDX', typename='Num', position=(1003, 1005), length=3, inclusive_range=(40, 490), allowable_values=['999'], blanks=['Blank if Question 7 KIDS = 0 (No)', 'Blank if Question 7a NWINFKID = 0 (No)', 'Blank if Question 7ab4 KID2NEU = 8 (N/A)', 'Blank if Question 7ab4 KID2NEU = 9 (Unknown)']) self.fields['KID2MOE'] = nacc.uds3.Field(name='KID2MOE', typename='Num', position=(1007, 1007), length=1, inclusive_range=(1, 7), allowable_values=['7', '3', '2', '1', '6', '5', '4'], blanks=['Blank if Question 7 KIDS = 0 (No)', 'Blank if Question 7a NWINFKID = 0 (No)', 'Blank if Question 7ab4 KID2NEU = 8 (N/A)', 'Blank if Question 7ab4 KID2NEU = 9 (Unknown)']) - self.fields['KID2AGO'] = nacc.uds3.Field(name='KID2AGO', typename='Num', position=(1009, 1011), length=3, inclusive_range=(15, 110), allowable_values=['999'], blanks=['Blank if Question 7 KIDS = 0 (No)', 'Blank if Question 7a NWINFKID = 0 (No)', 'Blank if Question 7ab4 KID2NEU = 8 (N/A)', 'Blank if Question 7ab4 KID2NEU = 9 (Unknown)']) + self.fields['KID2AGO'] = nacc.uds3.Field(name='KID2AGO', typename='Num', position=(1009, 1011), length=3, inclusive_range=(1, 110), allowable_values=['999'], blanks=['Blank if Question 7 KIDS = 0 (No)', 'Blank if Question 7a NWINFKID = 0 (No)', 'Blank if Question 7ab4 KID2NEU = 8 (N/A)', 'Blank if Question 7ab4 KID2NEU = 9 (Unknown)']) self.fields['KID3MOB'] = nacc.uds3.Field(name='KID3MOB', typename='Num', position=(1013, 1014), length=2, inclusive_range=(1, 12), allowable_values=['99', '99'], blanks=['Blank if Question 7 KIDS = 0 (No)', 'Blank if Question 7a NWINFKID = 0 (No)']) self.fields['KID3YOB'] = nacc.uds3.Field(name='KID3YOB', typename='Num', position=(1016, 1019), length=4, inclusive_range=(1875, CURRENT_YEAR), allowable_values=['9999', '99'], blanks=['Blank if Question 7 KIDS = 0 (No)', 'Blank if Question 7a NWINFKID = 0 (No)']) - self.fields['KID3AGD'] = nacc.uds3.Field(name='KID3AGD', typename='Num', position=(1021, 1023), length=3, inclusive_range=(15, 110), allowable_values=['999', '888'], blanks=['Blank if Question 7 KIDS = 0 (No)', 'Blank if Question 7a NWINFKID = 0 (No)']) + self.fields['KID3AGD'] = nacc.uds3.Field(name='KID3AGD', typename='Num', position=(1021, 1023), length=3, inclusive_range=(1, 110), allowable_values=['999', '888'], blanks=['Blank if Question 7 KIDS = 0 (No)', 'Blank if Question 7a NWINFKID = 0 (No)']) self.fields['KID3NEU'] = nacc.uds3.Field(name='KID3NEU', typename='Num', position=(1025, 1025), length=1, inclusive_range=(1, 5), allowable_values=['9', '3', '2', '1', '8', '5', '4'], blanks=['Blank if Question 7 KIDS = 0 (No)', 'Blank if Question 7a NWINFKID = 0 (No)']) self.fields['KID3PDX'] = nacc.uds3.Field(name='KID3PDX', typename='Num', position=(1027, 1029), length=3, inclusive_range=(40, 490), allowable_values=['999'], blanks=['Blank if Question 7 KIDS = 0 (No)', 'Blank if Question 7a NWINFKID = 0 (No)', 'Blank if Question 7ac4 KID3NEU = 8 (N/A)', 'Blank if Question 7ac4 KID3NEU = 9 (Unknown)']) self.fields['KID3MOE'] = nacc.uds3.Field(name='KID3MOE', typename='Num', position=(1031, 1031), length=1, inclusive_range=(1, 7), allowable_values=['7', '3', '2', '1', '6', '5', '4'], blanks=['Blank if Question 7 KIDS = 0 (No)', 'Blank if Question 7a NWINFKID = 0 (No)', 'Blank if Question 7ac4 KID3NEU = 8 (N/A)', 'Blank if Question 7ac4 KID3NEU = 9 (Unknown)']) - self.fields['KID3AGO'] = nacc.uds3.Field(name='KID3AGO', typename='Num', position=(1033, 1035), length=3, inclusive_range=(15, 110), allowable_values=['999'], blanks=['Blank if Question 7 KIDS = 0 (No)', 'Blank if Question 7a NWINFKID = 0 (No)', 'Blank if Question 7ac4 KID3NEU = 8 (N/A)', 'Blank if Question 7ac4 KID3NEU = 9 (Unknown)']) + self.fields['KID3AGO'] = nacc.uds3.Field(name='KID3AGO', typename='Num', position=(1033, 1035), length=3, inclusive_range=(1, 110), allowable_values=['999'], blanks=['Blank if Question 7 KIDS = 0 (No)', 'Blank if Question 7a NWINFKID = 0 (No)', 'Blank if Question 7ac4 KID3NEU = 8 (N/A)', 'Blank if Question 7ac4 KID3NEU = 9 (Unknown)']) self.fields['KID4MOB'] = nacc.uds3.Field(name='KID4MOB', typename='Num', position=(1037, 1038), length=2, inclusive_range=(1, 12), allowable_values=['99', '99'], blanks=['Blank if Question 7 KIDS = 0 (No)', 'Blank if Question 7a NWINFKID = 0 (No)']) self.fields['KID4YOB'] = nacc.uds3.Field(name='KID4YOB', typename='Num', position=(1040, 1043), length=4, inclusive_range=(1875, CURRENT_YEAR), allowable_values=['9999', '99'], blanks=['Blank if Question 7 KIDS = 0 (No)', 'Blank if Question 7a NWINFKID = 0 (No)']) - self.fields['KID4AGD'] = nacc.uds3.Field(name='KID4AGD', typename='Num', position=(1045, 1047), length=3, inclusive_range=(15, 110), allowable_values=['999', '888'], blanks=['Blank if Question 7 KIDS = 0 (No)', 'Blank if Question 7a NWINFKID = 0 (No)']) + self.fields['KID4AGD'] = nacc.uds3.Field(name='KID4AGD', typename='Num', position=(1045, 1047), length=3, inclusive_range=(1, 110), allowable_values=['999', '888'], blanks=['Blank if Question 7 KIDS = 0 (No)', 'Blank if Question 7a NWINFKID = 0 (No)']) self.fields['KID4NEU'] = nacc.uds3.Field(name='KID4NEU', typename='Num', position=(1049, 1049), length=1, inclusive_range=(1, 5), allowable_values=['9', '3', '2', '1', '8', '5', '4'], blanks=['Blank if Question 7 KIDS = 0 (No)', 'Blank if Question 7a NWINFKID = 0 (No)']) self.fields['KID4PDX'] = nacc.uds3.Field(name='KID4PDX', typename='Num', position=(1051, 1053), length=3, inclusive_range=(40, 490), allowable_values=['999'], blanks=['Blank if Question 7 KIDS = 0 (No)', 'Blank if Question 7a NWINFKID = 0 (No)', 'Blank if Question 7ad4 KID4NEU = 8 (N/A)', 'Blank if Question 7ad4 KID4NEU = 9 (Unknown)']) self.fields['KID4MOE'] = nacc.uds3.Field(name='KID4MOE', typename='Num', position=(1055, 1055), length=1, inclusive_range=(1, 7), allowable_values=['7', '3', '2', '1', '6', '5', '4'], blanks=['Blank if Question 7 KIDS = 0 (No)', 'Blank if Question 7a NWINFKID = 0 (No)', 'Blank if Question 7ad4 KID4NEU = 8 (N/A)', 'Blank if Question 7ad4 KID4NEU = 9 (Unknown)']) - self.fields['KID4AGO'] = nacc.uds3.Field(name='KID4AGO', typename='Num', position=(1057, 1059), length=3, inclusive_range=(15, 110), allowable_values=['999'], blanks=['Blank if Question 7 KIDS = 0 (No)', 'Blank if Question 7a NWINFKID = 0 (No)', 'Blank if Question 7ad4 KID4NEU = 8 (N/A)', 'Blank if Question 7ad4 KID4NEU = 9 (Unknown)']) + self.fields['KID4AGO'] = nacc.uds3.Field(name='KID4AGO', typename='Num', position=(1057, 1059), length=3, inclusive_range=(1, 110), allowable_values=['999'], blanks=['Blank if Question 7 KIDS = 0 (No)', 'Blank if Question 7a NWINFKID = 0 (No)', 'Blank if Question 7ad4 KID4NEU = 8 (N/A)', 'Blank if Question 7ad4 KID4NEU = 9 (Unknown)']) self.fields['KID5MOB'] = nacc.uds3.Field(name='KID5MOB', typename='Num', position=(1061, 1062), length=2, inclusive_range=(1, 12), allowable_values=['99', '99'], blanks=['Blank if Question 7 KIDS = 0 (No)', 'Blank if Question 7a NWINFKID = 0 (No)']) self.fields['KID5YOB'] = nacc.uds3.Field(name='KID5YOB', typename='Num', position=(1064, 1067), length=4, inclusive_range=(1875, CURRENT_YEAR), allowable_values=['9999', '99'], blanks=['Blank if Question 7 KIDS = 0 (No)', 'Blank if Question 7a NWINFKID = 0 (No)']) - self.fields['KID5AGD'] = nacc.uds3.Field(name='KID5AGD', typename='Num', position=(1069, 1071), length=3, inclusive_range=(15, 110), allowable_values=['999'], blanks=['Blank if Question 7 KIDS = 0 (No)', 'Blank if Question 7a NWINFKID = 0 (No)']) + self.fields['KID5AGD'] = nacc.uds3.Field(name='KID5AGD', typename='Num', position=(1069, 1071), length=3, inclusive_range=(1, 110), allowable_values=['999', '888'], blanks=['Blank if Question 7 KIDS = 0 (No)', 'Blank if Question 7a NWINFKID = 0 (No)']) self.fields['KID5NEU'] = nacc.uds3.Field(name='KID5NEU', typename='Num', position=(1073, 1073), length=1, inclusive_range=(1, 5), allowable_values=['9', '3', '2', '1', '8', '5', '4'], blanks=['Blank if Question 7 KIDS = 0 (No)', 'Blank if Question 7a NWINFKID = 0 (No)']) self.fields['KID5PDX'] = nacc.uds3.Field(name='KID5PDX', typename='Num', position=(1075, 1077), length=3, inclusive_range=(40, 490), allowable_values=['999'], blanks=['Blank if Question 7 KIDS = 0 (No)', 'Blank if Question 7a NWINFKID = 0 (No)', 'Blank if Question 7ae4 KID5NEU = 8 (N/A)', 'Blank if Question 7ae4 KID5NEU = 9 (Unknown)']) self.fields['KID5MOE'] = nacc.uds3.Field(name='KID5MOE', typename='Num', position=(1079, 1079), length=1, inclusive_range=(1, 7), allowable_values=['7', '3', '2', '1', '6', '5', '4'], blanks=['Blank if Question 7 KIDS = 0 (No)', 'Blank if Question 7a NWINFKID = 0 (No)', 'Blank if Question 7ae4 KID5NEU = 8 (N/A)', 'Blank if Question 7ae4 KID5NEU = 9 (Unknown)']) - self.fields['KID5AGO'] = nacc.uds3.Field(name='KID5AGO', typename='Num', position=(1081, 1083), length=3, inclusive_range=(15, 110), allowable_values=['999'], blanks=['Blank if Question 7 KIDS = 0 (No)', 'Blank if Question 7a NWINFKID = 0 (No)', 'Blank if Question 7ae4 KID5NEU = 8 (N/A)', 'Blank if Question 7ae4 KID5NEU = 9 (Unknown)']) + self.fields['KID5AGO'] = nacc.uds3.Field(name='KID5AGO', typename='Num', position=(1081, 1083), length=3, inclusive_range=(1, 110), allowable_values=['999'], blanks=['Blank if Question 7 KIDS = 0 (No)', 'Blank if Question 7a NWINFKID = 0 (No)', 'Blank if Question 7ae4 KID5NEU = 8 (N/A)', 'Blank if Question 7ae4 KID5NEU = 9 (Unknown)']) self.fields['KID6MOB'] = nacc.uds3.Field(name='KID6MOB', typename='Num', position=(1085, 1086), length=2, inclusive_range=(1, 12), allowable_values=['99', '99'], blanks=['Blank if Question 7 KIDS = 0 (No)', 'Blank if Question 7a NWINFKID = 0 (No)']) self.fields['KID6YOB'] = nacc.uds3.Field(name='KID6YOB', typename='Num', position=(1088, 1091), length=4, inclusive_range=(1875, CURRENT_YEAR), allowable_values=['9999', '99'], blanks=['Blank if Question 7 KIDS = 0 (No)', 'Blank if Question 7a NWINFKID = 0 (No)']) - self.fields['KID6AGD'] = nacc.uds3.Field(name='KID6AGD', typename='Num', position=(1093, 1095), length=3, inclusive_range=(15, 110), allowable_values=['999', '888'], blanks=['Blank if Question 7 KIDS = 0 (No)', 'Blank if Question 7a NWINFKID = 0 (No)']) + self.fields['KID6AGD'] = nacc.uds3.Field(name='KID6AGD', typename='Num', position=(1093, 1095), length=3, inclusive_range=(1, 110), allowable_values=['999', '888'], blanks=['Blank if Question 7 KIDS = 0 (No)', 'Blank if Question 7a NWINFKID = 0 (No)']) self.fields['KID6NEU'] = nacc.uds3.Field(name='KID6NEU', typename='Num', position=(1097, 1097), length=1, inclusive_range=(1, 5), allowable_values=['9', '3', '2', '1', '8', '5', '4'], blanks=['Blank if Question 7 KIDS = 0 (No)', 'Blank if Question 7a NWINFKID = 0 (No)']) self.fields['KID6PDX'] = nacc.uds3.Field(name='KID6PDX', typename='Num', position=(1099, 1101), length=3, inclusive_range=(40, 490), allowable_values=['999'], blanks=['Blank if Question 7 KIDS = 0 (No)', 'Blank if Question 7a NWINFKID = 0 (No)', 'Blank if Question 7a4 KID6NEU = 8 (N/A)', 'Blank if Question 7a4 KID6NEU = 9 (Unknown)']) self.fields['KID6MOE'] = nacc.uds3.Field(name='KID6MOE', typename='Num', position=(1103, 1103), length=1, inclusive_range=(1, 7), allowable_values=['7', '3', '2', '1', '6', '5', '4'], blanks=['Blank if Question 7 KIDS = 0 (No)', 'Blank if Question 7a NWINFKID = 0 (No)', 'Blank if Question 7aF4 KID6NEU = 8 (N/A)', 'Blank if Question 7aF4 KID6NEU = 9 (Unknown)']) - self.fields['KID6AGO'] = nacc.uds3.Field(name='KID6AGO', typename='Num', position=(1105, 1107), length=3, inclusive_range=(15, 110), allowable_values=['999'], blanks=['Blank if Question 7 KIDS = 0 (No)', 'Blank if Question 7a NWINFKID = 0 (No)', 'Blank if Question 7aF4 KID6NEU = 8 (N/A)', 'Blank if Question 7aF4 KID6NEU = 9 (Unknown)']) + self.fields['KID6AGO'] = nacc.uds3.Field(name='KID6AGO', typename='Num', position=(1105, 1107), length=3, inclusive_range=(1, 110), allowable_values=['999'], blanks=['Blank if Question 7 KIDS = 0 (No)', 'Blank if Question 7a NWINFKID = 0 (No)', 'Blank if Question 7aF4 KID6NEU = 8 (N/A)', 'Blank if Question 7aF4 KID6NEU = 9 (Unknown)']) self.fields['KID7MOB'] = nacc.uds3.Field(name='KID7MOB', typename='Num', position=(1109, 1110), length=2, inclusive_range=(1, 12), allowable_values=['99', '99'], blanks=['Blank if Question 7 KIDS = 0 (No)', 'Blank if Question 7a NWINFKID = 0 (No)']) self.fields['KID7YOB'] = nacc.uds3.Field(name='KID7YOB', typename='Num', position=(1112, 1115), length=4, inclusive_range=(1875, CURRENT_YEAR), allowable_values=['9999', '99'], blanks=['Blank if Question 7 KIDS = 0 (No)', 'Blank if Question 7a NWINFKID = 0 (No)']) - self.fields['KID7AGD'] = nacc.uds3.Field(name='KID7AGD', typename='Num', position=(1117, 1119), length=3, inclusive_range=(15, 110), allowable_values=['999', '888'], blanks=['Blank if Question 7 KIDS = 0 (No)', 'Blank if Question 7a NWINFKID = 0 (No)']) + self.fields['KID7AGD'] = nacc.uds3.Field(name='KID7AGD', typename='Num', position=(1117, 1119), length=3, inclusive_range=(1, 110), allowable_values=['999', '888'], blanks=['Blank if Question 7 KIDS = 0 (No)', 'Blank if Question 7a NWINFKID = 0 (No)']) self.fields['KID7NEU'] = nacc.uds3.Field(name='KID7NEU', typename='Num', position=(1121, 1121), length=1, inclusive_range=(1, 5), allowable_values=['9', '3', '2', '1', '8', '5', '4'], blanks=['Blank if Question 7 KIDS = 0 (No)', 'Blank if Question 7a NWINFKID = 0 (No)']) self.fields['KID7PDX'] = nacc.uds3.Field(name='KID7PDX', typename='Num', position=(1123, 1125), length=3, inclusive_range=(40, 490), allowable_values=['999'], blanks=['Blank if Question 7 KIDS = 0 (No)', 'Blank if Question 7a NWINFKID = 0 (No)', 'Blank if Question 7ag4 KID7NEU = 8 (N/A)', 'Blank if Question 7ag4 KID7NEU = 9 (Unknown)']) self.fields['KID7MOE'] = nacc.uds3.Field(name='KID7MOE', typename='Num', position=(1127, 1127), length=1, inclusive_range=(1, 7), allowable_values=['7', '3', '2', '1', '6', '5', '4'], blanks=['Blank if Question 7 KIDS = 0 (No)', 'Blank if Question 7a NWINFKID = 0 (No)', 'Blank if Question 7ag4 KID7NEU = 8 (N/A)', 'Blank if Question 7ag4 KID7NEU = 9 (Unknown)']) - self.fields['KID7AGO'] = nacc.uds3.Field(name='KID7AGO', typename='Num', position=(1129, 1131), length=3, inclusive_range=(15, 110), allowable_values=['999'], blanks=['Blank if Question 7 KIDS = 0 (No)', 'Blank if Question 7a NWINFKID = 0 (No)', 'Blank if Question 7ag4 KID7NEU = 8 (N/A)', 'Blank if Question 7ag4 KID7NEU = 9 (Unknown)']) + self.fields['KID7AGO'] = nacc.uds3.Field(name='KID7AGO', typename='Num', position=(1129, 1131), length=3, inclusive_range=(1, 110), allowable_values=['999'], blanks=['Blank if Question 7 KIDS = 0 (No)', 'Blank if Question 7a NWINFKID = 0 (No)', 'Blank if Question 7ag4 KID7NEU = 8 (N/A)', 'Blank if Question 7ag4 KID7NEU = 9 (Unknown)']) self.fields['KID8MOB'] = nacc.uds3.Field(name='KID8MOB', typename='Num', position=(1133, 1134), length=2, inclusive_range=(1, 12), allowable_values=['99', '99'], blanks=['Blank if Question 7 KIDS = 0 (No)', 'Blank if Question 7a NWINFKID = 0 (No)']) self.fields['KID8YOB'] = nacc.uds3.Field(name='KID8YOB', typename='Num', position=(1136, 1139), length=4, inclusive_range=(1875, CURRENT_YEAR), allowable_values=['9999', '99'], blanks=['Blank if Question 7 KIDS = 0 (No)', 'Blank if Question 7a NWINFKID = 0 (No)']) - self.fields['KID8AGD'] = nacc.uds3.Field(name='KID8AGD', typename='Num', position=(1141, 1143), length=3, inclusive_range=(15, 110), allowable_values=['999', '888'], blanks=['Blank if Question 7 KIDS = 0 (No)', 'Blank if Question 7a NWINFKID = 0 (No)']) + self.fields['KID8AGD'] = nacc.uds3.Field(name='KID8AGD', typename='Num', position=(1141, 1143), length=3, inclusive_range=(1, 110), allowable_values=['999', '888'], blanks=['Blank if Question 7 KIDS = 0 (No)', 'Blank if Question 7a NWINFKID = 0 (No)']) self.fields['KID8NEU'] = nacc.uds3.Field(name='KID8NEU', typename='Num', position=(1145, 1145), length=1, inclusive_range=(1, 5), allowable_values=['9', '3', '2', '1', '8', '5', '4'], blanks=['Blank if Question 7 KIDS = 0 (No)', 'Blank if Question 7a NWINFKID = 0 (No)']) self.fields['KID8PDX'] = nacc.uds3.Field(name='KID8PDX', typename='Num', position=(1147, 1149), length=3, inclusive_range=(40, 490), allowable_values=['999'], blanks=['Blank if Question 7 KIDS = 0 (No)', 'Blank if Question 7a NWINFKID = 0 (No)', 'Blank if Question 7ah4 KID8NEU = 8 (N/A)', 'Blank if Question 7ah4 KID8NEU = 9 (Unknown)']) self.fields['KID8MOE'] = nacc.uds3.Field(name='KID8MOE', typename='Num', position=(1151, 1151), length=1, inclusive_range=(1, 7), allowable_values=['7', '3', '2', '1', '6', '5', '4'], blanks=['Blank if Question 7 KIDS = 0 (No)', 'Blank if Question 7a NWINFKID = 0 (No)', 'Blank if Question 7ah4 KID8NEU = 8 (N/A)', 'Blank if Question 7ah4 KID8NEU = 9 (Unknown)']) - self.fields['KID8AGO'] = nacc.uds3.Field(name='KID8AGO', typename='Num', position=(1153, 1155), length=3, inclusive_range=(15, 110), allowable_values=['999'], blanks=['Blank if Question 7 KIDS = 0 (No)', 'Blank if Question 7a NWINFKID = 0 (No)', 'Blank if Question 7ah4 KID8NEU = 8 (N/A)', 'Blank if Question 7ah4 KID8NEU = 9 (Unknown)']) + self.fields['KID8AGO'] = nacc.uds3.Field(name='KID8AGO', typename='Num', position=(1153, 1155), length=3, inclusive_range=(1, 110), allowable_values=['999'], blanks=['Blank if Question 7 KIDS = 0 (No)', 'Blank if Question 7a NWINFKID = 0 (No)', 'Blank if Question 7ah4 KID8NEU = 8 (N/A)', 'Blank if Question 7ah4 KID8NEU = 9 (Unknown)']) self.fields['KID9MOB'] = nacc.uds3.Field(name='KID9MOB', typename='Num', position=(1157, 1158), length=2, inclusive_range=(1, 12), allowable_values=['99', '99'], blanks=['Blank if Question 7 KIDS = 0 (No)', 'Blank if Question 7a NWINFKID = 0 (No)']) self.fields['KID9YOB'] = nacc.uds3.Field(name='KID9YOB', typename='Num', position=(1160, 1163), length=4, inclusive_range=(1875, CURRENT_YEAR), allowable_values=['9999', '99'], blanks=['Blank if Question 7 KIDS = 0 (No)', 'Blank if Question 7a NWINFKID = 0 (No)']) - self.fields['KID9AGD'] = nacc.uds3.Field(name='KID9AGD', typename='Num', position=(1165, 1167), length=3, inclusive_range=(15, 110), allowable_values=['999', '888'], blanks=['Blank if Question 7 KIDS = 0 (No)', 'Blank if Question 7a NWINFKID = 0 (No)']) + self.fields['KID9AGD'] = nacc.uds3.Field(name='KID9AGD', typename='Num', position=(1165, 1167), length=3, inclusive_range=(1, 110), allowable_values=['999', '888'], blanks=['Blank if Question 7 KIDS = 0 (No)', 'Blank if Question 7a NWINFKID = 0 (No)']) self.fields['KID9NEU'] = nacc.uds3.Field(name='KID9NEU', typename='Num', position=(1169, 1169), length=1, inclusive_range=(1, 5), allowable_values=['9', '3', '2', '1', '8', '5', '4'], blanks=['Blank if Question 7 KIDS = 0 (No)', 'Blank if Question 7a NWINFKID = 0 (No)']) self.fields['KID9PDX'] = nacc.uds3.Field(name='KID9PDX', typename='Num', position=(1171, 1173), length=3, inclusive_range=(40, 490), allowable_values=['999'], blanks=['Blank if Question 7 KIDS = 0 (No)', 'Blank if Question 7a NWINFKID = 0 (No)', 'Blank if Question 7ai4 KID9NEU = 8 (N/A)', 'Blank if Question 7ai4 KID9NEU = 9 (Unknown)']) self.fields['KID9MOE'] = nacc.uds3.Field(name='KID9MOE', typename='Num', position=(1175, 1175), length=1, inclusive_range=(1, 7), allowable_values=['7', '3', '2', '1', '6', '5', '4'], blanks=['Blank if Question 7 KIDS = 0 (No)', 'Blank if Question 7a NWINFKID = 0 (No)', 'Blank if Question 7ai4 KID9NEU = 8 (N/A)', 'Blank if Question 7ai4 KID9NEU = 9 (Unknown)']) - self.fields['KID9AGO'] = nacc.uds3.Field(name='KID9AGO', typename='Num', position=(1177, 1179), length=3, inclusive_range=(15, 110), allowable_values=['999'], blanks=['Blank if Question 7 KIDS = 0 (No)', 'Blank if Question 7a NWINFKID = 0 (No)', 'Blank if Question 7ai4 KID9NEU = 8 (N/A)', 'Blank if Question 7ai4 KID9NEU = 9 (Unknown)']) + self.fields['KID9AGO'] = nacc.uds3.Field(name='KID9AGO', typename='Num', position=(1177, 1179), length=3, inclusive_range=(1, 110), allowable_values=['999'], blanks=['Blank if Question 7 KIDS = 0 (No)', 'Blank if Question 7a NWINFKID = 0 (No)', 'Blank if Question 7ai4 KID9NEU = 8 (N/A)', 'Blank if Question 7ai4 KID9NEU = 9 (Unknown)']) self.fields['KID10MOB'] = nacc.uds3.Field(name='KID10MOB', typename='Num', position=(1181, 1182), length=2, inclusive_range=(1, 12), allowable_values=['99', '99'], blanks=['Blank if Question 7 KIDS = 0 (No)', 'Blank if Question 7a NWINFKID = 0 (No)']) self.fields['KID10YOB'] = nacc.uds3.Field(name='KID10YOB', typename='Num', position=(1184, 1187), length=4, inclusive_range=(1875, CURRENT_YEAR), allowable_values=['9999', '99'], blanks=['Blank if Question 7 KIDS = 0 (No)', 'Blank if Question 7a NWINFKID = 0 (No)']) - self.fields['KID10AGD'] = nacc.uds3.Field(name='KID10AGD', typename='Num', position=(1189, 1191), length=3, inclusive_range=(15, 110), allowable_values=['999', '888'], blanks=['Blank if Question 7 KIDS = 0 (No)', 'Blank if Question 7a NWINFKID = 0 (No)']) + self.fields['KID10AGD'] = nacc.uds3.Field(name='KID10AGD', typename='Num', position=(1189, 1191), length=3, inclusive_range=(1, 110), allowable_values=['999', '888'], blanks=['Blank if Question 7 KIDS = 0 (No)', 'Blank if Question 7a NWINFKID = 0 (No)']) self.fields['KID10NEU'] = nacc.uds3.Field(name='KID10NEU', typename='Num', position=(1193, 1193), length=1, inclusive_range=(1, 5), allowable_values=['9', '3', '2', '1', '8', '5', '4'], blanks=['Blank if Question 7 KIDS = 0 (No)', 'Blank if Question 7a NWINFKID = 0 (No)']) self.fields['KID10PDX'] = nacc.uds3.Field(name='KID10PDX', typename='Num', position=(1195, 1197), length=3, inclusive_range=(40, 490), allowable_values=['999'], blanks=['Blank if Question 7 KIDS = 0 (No)', 'Blank if Question 7a NWINFKID = 0 (No)', 'Blank if Question 7aj4 KID10NEU = 8 (N/A)', 'Blank if Question 7aj4 KID10NEU = 9 (Unknown)']) self.fields['KID10MOE'] = nacc.uds3.Field(name='KID10MOE', typename='Num', position=(1199, 1199), length=1, inclusive_range=(1, 7), allowable_values=['7', '3', '2', '1', '6', '5', '4'], blanks=['Blank if Question 7 KIDS = 0 (No)', 'Blank if Question 7a NWINFKID = 0 (No)', 'Blank if Question 7aj4 KID10NEU = 8 (N/A)', 'Blank if Question 7aj4 KID10NEU = 9 (Unknown)']) - self.fields['KID10AGO'] = nacc.uds3.Field(name='KID10AGO', typename='Num', position=(1201, 1203), length=3, inclusive_range=(15, 110), allowable_values=['999'], blanks=['Blank if Question 7 KIDS = 0 (No)', 'Blank if Question 7a NWINFKID = 0 (No)', 'Blank if Question 7aj4 KID10NEU = 8 (N/A)', 'Blank if Question 7aj4 KID10NEU = 9 (Unknown)']) + self.fields['KID10AGO'] = nacc.uds3.Field(name='KID10AGO', typename='Num', position=(1201, 1203), length=3, inclusive_range=(1, 110), allowable_values=['999'], blanks=['Blank if Question 7 KIDS = 0 (No)', 'Blank if Question 7a NWINFKID = 0 (No)', 'Blank if Question 7aj4 KID10NEU = 8 (N/A)', 'Blank if Question 7aj4 KID10NEU = 9 (Unknown)']) self.fields['KID11MOB'] = nacc.uds3.Field(name='KID11MOB', typename='Num', position=(1205, 1206), length=2, inclusive_range=(1, 12), allowable_values=['99', '99'], blanks=['Blank if Question 7 KIDS = 0 (No)', 'Blank if Question 7a NWINFKID = 0 (No)']) self.fields['KID11YOB'] = nacc.uds3.Field(name='KID11YOB', typename='Num', position=(1208, 1211), length=4, inclusive_range=(1875, CURRENT_YEAR), allowable_values=['9999', '99'], blanks=['Blank if Question 7 KIDS = 0 (No)', 'Blank if Question 7a NWINFKID = 0 (No)']) - self.fields['KID11AGD'] = nacc.uds3.Field(name='KID11AGD', typename='Num', position=(1213, 1215), length=3, inclusive_range=(15, 110), allowable_values=['999', '888'], blanks=['Blank if Question 7 KIDS = 0 (No)', 'Blank if Question 7a NWINFKID = 0 (No)']) + self.fields['KID11AGD'] = nacc.uds3.Field(name='KID11AGD', typename='Num', position=(1213, 1215), length=3, inclusive_range=(1, 110), allowable_values=['999', '888'], blanks=['Blank if Question 7 KIDS = 0 (No)', 'Blank if Question 7a NWINFKID = 0 (No)']) self.fields['KID11NEU'] = nacc.uds3.Field(name='KID11NEU', typename='Num', position=(1217, 1217), length=1, inclusive_range=(1, 5), allowable_values=['9', '3', '2', '1', '8', '5', '4'], blanks=['Blank if Question 7 KIDS = 0 (No)', 'Blank if Question 7a NWINFKID = 0 (No)']) self.fields['KID11PDX'] = nacc.uds3.Field(name='KID11PDX', typename='Num', position=(1219, 1221), length=3, inclusive_range=(40, 490), allowable_values=['999'], blanks=['Blank if Question 7 KIDS = 0 (No)', 'Blank if Question 7a NWINFKID = 0 (No)', 'Blank if Question 7ak4 KID11NEU = 8 (N/A)', 'Blank if Question 7ak4 KID11NEU = 9 (Unknown)']) self.fields['KID11MOE'] = nacc.uds3.Field(name='KID11MOE', typename='Num', position=(1223, 1223), length=1, inclusive_range=(1, 7), allowable_values=['7', '3', '2', '1', '6', '5', '4'], blanks=['Blank if Question 7 KIDS = 0 (No)', 'Blank if Question 7a NWINFKID = 0 (No)', 'Blank if Question 7ak4 KID11NEU = 8 (N/A)', 'Blank if Question 7ak4 KID11NEU = 9 (Unknown)']) - self.fields['KID11AGO'] = nacc.uds3.Field(name='KID11AGO', typename='Num', position=(1225, 1227), length=3, inclusive_range=(15, 110), allowable_values=['999'], blanks=['Blank if Question 7 KIDS = 0 (No)', 'Blank if Question 7a NWINFKID = 0 (No)', 'Blank if Question 7ak4 KID11NEU = 8 (N/A)', 'Blank if Question 7ak4 KID11NEU = 9 (Unknown)']) + self.fields['KID11AGO'] = nacc.uds3.Field(name='KID11AGO', typename='Num', position=(1225, 1227), length=3, inclusive_range=(1, 110), allowable_values=['999'], blanks=['Blank if Question 7 KIDS = 0 (No)', 'Blank if Question 7a NWINFKID = 0 (No)', 'Blank if Question 7ak4 KID11NEU = 8 (N/A)', 'Blank if Question 7ak4 KID11NEU = 9 (Unknown)']) self.fields['KID12MOB'] = nacc.uds3.Field(name='KID12MOB', typename='Num', position=(1229, 1230), length=2, inclusive_range=(1, 12), allowable_values=['99', '99'], blanks=['Blank if Question 7 KIDS = 0 (No)', 'Blank if Question 7a NWINFKID = 0 (No)']) self.fields['KID12YOB'] = nacc.uds3.Field(name='KID12YOB', typename='Num', position=(1232, 1235), length=4, inclusive_range=(1875, CURRENT_YEAR), allowable_values=['9999', '99'], blanks=['Blank if Question 7 KIDS = 0 (No)', 'Blank if Question 7a NWINFKID = 0 (No)']) - self.fields['KID12AGD'] = nacc.uds3.Field(name='KID12AGD', typename='Num', position=(1237, 1239), length=3, inclusive_range=(15, 110), allowable_values=['999', '888'], blanks=['Blank if Question 7 KIDS = 0 (No)', 'Blank if Question 7a NWINFKID = 0 (No)']) + self.fields['KID12AGD'] = nacc.uds3.Field(name='KID12AGD', typename='Num', position=(1237, 1239), length=3, inclusive_range=(1, 110), allowable_values=['999', '888'], blanks=['Blank if Question 7 KIDS = 0 (No)', 'Blank if Question 7a NWINFKID = 0 (No)']) self.fields['KID12NEU'] = nacc.uds3.Field(name='KID12NEU', typename='Num', position=(1241, 1241), length=1, inclusive_range=(1, 5), allowable_values=['9', '3', '2', '1', '8', '5', '4'], blanks=['Blank if Question 7 KIDS = 0 (No)', 'Blank if Question 7a NWINFKID = 0 (No)']) self.fields['KID12PDX'] = nacc.uds3.Field(name='KID12PDX', typename='Num', position=(1243, 1245), length=3, inclusive_range=(40, 490), allowable_values=['999'], blanks=['Blank if Question 7 KIDS = 0 (No)', 'Blank if Question 7a NWINFKID = 0 (No)', 'Blank if Question 7al4 KID12NEU = 8 (N/A)', 'Blank if Question 7al4 KID12NEU = 9 (Unknown)']) self.fields['KID12MOE'] = nacc.uds3.Field(name='KID12MOE', typename='Num', position=(1247, 1247), length=1, inclusive_range=(1, 7), allowable_values=['7', '3', '2', '1', '6', '5', '4'], blanks=['Blank if Question 7 KIDS = 0 (No)', 'Blank if Question 7a NWINFKID = 0 (No)', 'Blank if Question 7al4 KID12NEU = 8 (N/A)', 'Blank if Question 7al4 KID12NEU = 9 (Unknown)']) - self.fields['KID12AGO'] = nacc.uds3.Field(name='KID12AGO', typename='Num', position=(1249, 1251), length=3, inclusive_range=(15, 110), allowable_values=['999'], blanks=['Blank if Question 7 KIDS = 0 (No)', 'Blank if Question 7a NWINFKID = 0 (No)', 'Blank if Question 7al4 KID12NEU = 8 (N/A)', 'Blank if Question 7al4 KID12NEU = 9 (Unknown)']) + self.fields['KID12AGO'] = nacc.uds3.Field(name='KID12AGO', typename='Num', position=(1249, 1251), length=3, inclusive_range=(1, 110), allowable_values=['999'], blanks=['Blank if Question 7 KIDS = 0 (No)', 'Blank if Question 7a NWINFKID = 0 (No)', 'Blank if Question 7al4 KID12NEU = 8 (N/A)', 'Blank if Question 7al4 KID12NEU = 9 (Unknown)']) self.fields['KID13MOB'] = nacc.uds3.Field(name='KID13MOB', typename='Num', position=(1253, 1254), length=2, inclusive_range=(1, 12), allowable_values=['99', '99'], blanks=['Blank if Question 7 KIDS = 0 (No)', 'Blank if Question 7a NWINFKID = 0 (No)']) self.fields['KID13YOB'] = nacc.uds3.Field(name='KID13YOB', typename='Num', position=(1256, 1259), length=4, inclusive_range=(1875, CURRENT_YEAR), allowable_values=['9999', '99'], blanks=['Blank if Question 7 KIDS = 0 (No)', 'Blank if Question 7a NWINFKID = 0 (No)']) - self.fields['KID13AGD'] = nacc.uds3.Field(name='KID13AGD', typename='Num', position=(1261, 1263), length=3, inclusive_range=(15, 110), allowable_values=['999', '888'], blanks=['Blank if Question 7 KIDS = 0 (No)', 'Blank if Question 7a NWINFKID = 0 (No)']) + self.fields['KID13AGD'] = nacc.uds3.Field(name='KID13AGD', typename='Num', position=(1261, 1263), length=3, inclusive_range=(1, 110), allowable_values=['999', '888'], blanks=['Blank if Question 7 KIDS = 0 (No)', 'Blank if Question 7a NWINFKID = 0 (No)']) self.fields['KID13NEU'] = nacc.uds3.Field(name='KID13NEU', typename='Num', position=(1265, 1265), length=1, inclusive_range=(1, 5), allowable_values=['9', '3', '2', '1', '8', '5', '4'], blanks=['Blank if Question 7 KIDS = 0 (No)', 'Blank if Question 7a NWINFKID = 0 (No)']) self.fields['KID13PDX'] = nacc.uds3.Field(name='KID13PDX', typename='Num', position=(1267, 1269), length=3, inclusive_range=(40, 490), allowable_values=['999'], blanks=['Blank if Question 7 KIDS = 0 (No)', 'Blank if Question 7a NWINFKID = 0 (No)', 'Blank if Question 7am4 KID13NEU = 8 (N/A)', 'Blank if Question 7am4 KID13NEU = 9 (Unknown)']) self.fields['KID13MOE'] = nacc.uds3.Field(name='KID13MOE', typename='Num', position=(1271, 1271), length=1, inclusive_range=(1, 7), allowable_values=['7', '3', '2', '1', '6', '5', '4'], blanks=['Blank if Question 7 KIDS = 0 (No)', 'Blank if Question 7a NWINFKID = 0 (No)', 'Blank if Question 7am4 KID13NEU = 8 (N/A)', 'Blank if Question 7am4 KID13NEU = 9 (Unknown)']) - self.fields['KID13AGO'] = nacc.uds3.Field(name='KID13AGO', typename='Num', position=(1273, 1275), length=3, inclusive_range=(15, 110), allowable_values=['999'], blanks=['Blank if Question 7 KIDS = 0 (No)', 'Blank if Question 7a NWINFKID = 0 (No)', 'Blank if Question 7am4 KID13NEU = 8 (N/A)', 'Blank if Question 7am4 KID13NEU = 9 (Unknown)']) + self.fields['KID13AGO'] = nacc.uds3.Field(name='KID13AGO', typename='Num', position=(1273, 1275), length=3, inclusive_range=(1, 110), allowable_values=['999'], blanks=['Blank if Question 7 KIDS = 0 (No)', 'Blank if Question 7a NWINFKID = 0 (No)', 'Blank if Question 7am4 KID13NEU = 8 (N/A)', 'Blank if Question 7am4 KID13NEU = 9 (Unknown)']) self.fields['KID14MOB'] = nacc.uds3.Field(name='KID14MOB', typename='Num', position=(1277, 1278), length=2, inclusive_range=(1, 12), allowable_values=['99', '99'], blanks=['Blank if Question 7 KIDS = 0 (No)', 'Blank if Question 7a NWINFKID = 0 (No)']) self.fields['KID14YOB'] = nacc.uds3.Field(name='KID14YOB', typename='Num', position=(1280, 1283), length=4, inclusive_range=(1875, CURRENT_YEAR), allowable_values=['9999', '99'], blanks=['Blank if Question 7 KIDS = 0 (No)', 'Blank if Question 7a NWINFKID = 0 (No)']) - self.fields['KID14AGD'] = nacc.uds3.Field(name='KID14AGD', typename='Num', position=(1285, 1287), length=3, inclusive_range=(15, 110), allowable_values=['999', '888'], blanks=['Blank if Question 7 KIDS = 0 (No)', 'Blank if Question 7a NWINFKID = 0 (No)']) + self.fields['KID14AGD'] = nacc.uds3.Field(name='KID14AGD', typename='Num', position=(1285, 1287), length=3, inclusive_range=(1, 110), allowable_values=['999', '888'], blanks=['Blank if Question 7 KIDS = 0 (No)', 'Blank if Question 7a NWINFKID = 0 (No)']) self.fields['KID14NEU'] = nacc.uds3.Field(name='KID14NEU', typename='Num', position=(1289, 1289), length=1, inclusive_range=(1, 5), allowable_values=['9', '3', '2', '1', '8', '5', '4'], blanks=['Blank if Question 7 KIDS = 0 (No)', 'Blank if Question 7a NWINFKID = 0 (No)']) self.fields['KID14PDX'] = nacc.uds3.Field(name='KID14PDX', typename='Num', position=(1291, 1293), length=3, inclusive_range=(40, 490), allowable_values=['999'], blanks=['Blank if Question 7 KIDS = 0 (No)', 'Blank if Question 7a NWINFKID = 0 (No)', 'Blank if Question 7an4 KID14NEU = 8 (N/A)', 'Blank if Question 7an4 KID14NEU = 9 (Unknown)']) self.fields['KID14MOE'] = nacc.uds3.Field(name='KID14MOE', typename='Num', position=(1295, 1295), length=1, inclusive_range=(1, 7), allowable_values=['7', '3', '2', '1', '6', '5', '4'], blanks=['Blank if Question 7 KIDS = 0 (No)', 'Blank if Question 7a NWINFKID = 0 (No)', 'Blank if Question 7an4 KID14NEU = 8 (N/A)', 'Blank if Question 7an4 KID14NEU = 9 (Unknown)']) - self.fields['KID14AGO'] = nacc.uds3.Field(name='KID14AGO', typename='Num', position=(1297, 1299), length=3, inclusive_range=(15, 110), allowable_values=['999'], blanks=['Blank if Question 7 KIDS = 0 (No)', 'Blank if Question 7a NWINFKID = 0 (No)', 'Blank if Question 7an4 KID14NEU = 8 (N/A)', 'Blank if Question 7an4 KID14NEU = 9 (Unknown)']) + self.fields['KID14AGO'] = nacc.uds3.Field(name='KID14AGO', typename='Num', position=(1297, 1299), length=3, inclusive_range=(1, 110), allowable_values=['999'], blanks=['Blank if Question 7 KIDS = 0 (No)', 'Blank if Question 7a NWINFKID = 0 (No)', 'Blank if Question 7an4 KID14NEU = 8 (N/A)', 'Blank if Question 7an4 KID14NEU = 9 (Unknown)']) self.fields['KID15MOB'] = nacc.uds3.Field(name='KID15MOB', typename='Num', position=(1301, 1302), length=2, inclusive_range=(1, 12), allowable_values=['99', '99'], blanks=['Blank if Question 7 KIDS = 0 (No)', 'Blank if Question 7a NWINFKID = 0 (No)']) self.fields['KID15YOB'] = nacc.uds3.Field(name='KID15YOB', typename='Num', position=(1304, 1307), length=4, inclusive_range=(1875, CURRENT_YEAR), allowable_values=['9999', '99'], blanks=['Blank if Question 7 KIDS = 0 (No)', 'Blank if Question 7a NWINFKID = 0 (No)']) - self.fields['KID15AGD'] = nacc.uds3.Field(name='KID15AGD', typename='Num', position=(1309, 1311), length=3, inclusive_range=(15, 110), allowable_values=['999', '888'], blanks=['Blank if Question 7 KIDS = 0 (No)', 'Blank if Question 7a NWINFKID = 0 (No)']) + self.fields['KID15AGD'] = nacc.uds3.Field(name='KID15AGD', typename='Num', position=(1309, 1311), length=3, inclusive_range=(1, 110), allowable_values=['999', '888'], blanks=['Blank if Question 7 KIDS = 0 (No)', 'Blank if Question 7a NWINFKID = 0 (No)']) self.fields['KID15NEU'] = nacc.uds3.Field(name='KID15NEU', typename='Num', position=(1313, 1313), length=1, inclusive_range=(1, 5), allowable_values=['9', '3', '2', '1', '8', '5', '4'], blanks=['Blank if Question 7 KIDS = 0 (No)', 'Blank if Question 7a NWINFKID = 0 (No)']) self.fields['KID15PDX'] = nacc.uds3.Field(name='KID15PDX', typename='Num', position=(1315, 1317), length=3, inclusive_range=(40, 490), allowable_values=['999'], blanks=['Blank if Question 7 KIDS = 0 (No)', 'Blank if Question 7a NWINFKID = 0 (No)', 'Blank if Question 7ao4 KID15NEU = 8 (N/A)', 'Blank if Question 7ao4 KID15NEU = 9 (Unknown)']) self.fields['KID15MOE'] = nacc.uds3.Field(name='KID15MOE', typename='Num', position=(1319, 1319), length=1, inclusive_range=(1, 7), allowable_values=['7', '3', '2', '1', '6', '5', '4'], blanks=['Blank if Question 7 KIDS = 0 (No)', 'Blank if Question 7a NWINFKID = 0 (No)', 'Blank if Question 7ao4 KID15NEU = 8 (N/A)', 'Blank if Question 7ao4 KID15NEU = 9 (Unknown)']) - self.fields['KID15AGO'] = nacc.uds3.Field(name='KID15AGO', typename='Num', position=(1321, 1323), length=3, inclusive_range=(15, 110), allowable_values=['999'], blanks=['Blank if Question 7 KIDS = 0 (No)', 'Blank if Question 7a NWINFKID = 0 (No)', 'Blank if Question 7ao4 KID15NEU = 8 (N/A)', 'Blank if Question 7ao4 KID15NEU = 9 (Unknown)']) + self.fields['KID15AGO'] = nacc.uds3.Field(name='KID15AGO', typename='Num', position=(1321, 1323), length=3, inclusive_range=(1, 110), allowable_values=['999'], blanks=['Blank if Question 7 KIDS = 0 (No)', 'Blank if Question 7a NWINFKID = 0 (No)', 'Blank if Question 7ao4 KID15NEU = 8 (N/A)', 'Blank if Question 7ao4 KID15NEU = 9 (Unknown)']) class FormA4D(nacc.uds3.FieldBag): @@ -484,25 +484,25 @@ def __init__(self): self.fields['CORTVISR'] = nacc.uds3.Field(name='CORTVISR', typename='Num', position=(79, 79), length=1, inclusive_range=(0, 1), allowable_values=['8', '1', '0'], blanks=['Blank if Question 1 NORMEXAM ne 1 (Yes)', 'Blank if Question 3 CVDSIGNS = 0 (No)']) self.fields['SOMATL'] = nacc.uds3.Field(name='SOMATL', typename='Num', position=(81, 81), length=1, inclusive_range=(0, 1), allowable_values=['8', '1', '0'], blanks=['Blank if Question 1 NORMEXAM ne 1 (Yes)', 'Blank if Question 3 CVDSIGNS = 0 (No)']) self.fields['SOMATR'] = nacc.uds3.Field(name='SOMATR', typename='Num', position=(83, 83), length=1, inclusive_range=(0, 1), allowable_values=['8', '1', '0'], blanks=['Blank if Question 1 NORMEXAM ne 1 (Yes)', 'Blank if Question 3 CVDSIGNS = 0 (No)']) - self.fields['CVDATAXL'] = nacc.uds3.Field(name='CVDATAXL', typename='Num', position=(85, 85), length=1, inclusive_range=(0, 1), allowable_values=['8', '1', '0'], blanks=['Blank if Question 1 NORMEXAM ne 1 (Yes)', 'Blank if Question 3 CVDSIGNS = 0 (No)']) - self.fields['CVDATAXR'] = nacc.uds3.Field(name='CVDATAXR', typename='Num', position=(87, 87), length=1, inclusive_range=(0, 1), allowable_values=['8', '1', '0'], blanks=['Blank if Question 1 NORMEXAM ne 1 (Yes)', 'Blank if Question 3 CVDSIGNS = 0 (No)']) - self.fields['POSTCORT'] = nacc.uds3.Field(name='POSTCORT', typename='Num', position=(89, 89), length=1, inclusive_range=(0, 1), allowable_values=['1', '0'], blanks=['Blank if Question 1 NORMEXAM ne 1 (Yes)']) - self.fields['PSPCBS'] = nacc.uds3.Field(name='PSPCBS', typename='Num', position=(91, 91), length=1, inclusive_range=(0, 1), allowable_values=['1', '0'], blanks=['Blank if Question 1 NORMEXAM ne 1 (Yes)']) - self.fields['EYEPSP'] = nacc.uds3.Field(name='EYEPSP', typename='Num', position=(93, 93), length=1, inclusive_range=(0, 1), allowable_values=['8', '1', '0'], blanks=['Blank if Question 1 NORMEXAM ne 1 (Yes)', 'Blank if Question 5 PSPCBS = 0 (No)']) - self.fields['DYSPSP'] = nacc.uds3.Field(name='DYSPSP', typename='Num', position=(95, 95), length=1, inclusive_range=(0, 1), allowable_values=['8', '1', '0'], blanks=['Blank if Question 1 NORMEXAM ne 1 (Yes)', 'Blank if Question 5 PSPCBS = 0 (No)']) - self.fields['AXIALPSP'] = nacc.uds3.Field(name='AXIALPSP', typename='Num', position=(97, 97), length=1, inclusive_range=(0, 1), allowable_values=['8', '1', '0'], blanks=['Blank if Question 1 NORMEXAM ne 1 (Yes)', 'Blank if Question 5 PSPCBS = 0 (No)']) - self.fields['GAITPSP'] = nacc.uds3.Field(name='GAITPSP', typename='Num', position=(99, 99), length=1, inclusive_range=(0, 1), allowable_values=['8', '1', '0'], blanks=['Blank if Question 1 NORMEXAM ne 1 (Yes)', 'Blank if Question 5 PSPCBS = 0 (No)']) - self.fields['APRAXSP'] = nacc.uds3.Field(name='APRAXSP', typename='Num', position=(101, 101), length=1, inclusive_range=(0, 1), allowable_values=['8', '1', '0'], blanks=['Blank if Question 1 NORMEXAM ne 1 (Yes)', 'Blank if Question 5 PSPCBS = 0 (No)']) - self.fields['APRAXL'] = nacc.uds3.Field(name='APRAXL', typename='Num', position=(103, 103), length=1, inclusive_range=(0, 1), allowable_values=['8', '1', '0'], blanks=['Blank if Question 1 NORMEXAM ne 1 (Yes)', 'Blank if Question 5 PSPCBS = 0 (No)']) - self.fields['APRAXR'] = nacc.uds3.Field(name='APRAXR', typename='Num', position=(105, 105), length=1, inclusive_range=(0, 1), allowable_values=['8', '1', '0'], blanks=['Blank if Question 1 NORMEXAM ne 1 (Yes)', 'Blank if Question 5 PSPCBS = 0 (No)']) - self.fields['CORTSENL'] = nacc.uds3.Field(name='CORTSENL', typename='Num', position=(107, 107), length=1, inclusive_range=(0, 1), allowable_values=['8', '1', '0'], blanks=['Blank if Question 1 NORMEXAM ne 1 (Yes)', 'Blank if Question 5 PSPCBS = 0 (No)']) - self.fields['CORTSENR'] = nacc.uds3.Field(name='CORTSENR', typename='Num', position=(109, 109), length=1, inclusive_range=(0, 1), allowable_values=['8', '1', '0'], blanks=['Blank if Question 1 NORMEXAM ne 1 (Yes)', 'Blank if Question 5 PSPCBS = 0 (No)']) - self.fields['ATAXL'] = nacc.uds3.Field(name='ATAXL', typename='Num', position=(111, 111), length=1, inclusive_range=(0, 1), allowable_values=['8', '1', '0'], blanks=['Blank if Question 1 NORMEXAM ne 1 (Yes)', 'Blank if Question 5 PSPCBS = 0 (No)']) - self.fields['ATAXR'] = nacc.uds3.Field(name='ATAXR', typename='Num', position=(113, 113), length=1, inclusive_range=(0, 1), allowable_values=['8', '1', '0'], blanks=['Blank if Question 1 NORMEXAM ne 1 (Yes)', 'Blank if Question 5 PSPCBS = 0 (No)']) - self.fields['ALIENLML'] = nacc.uds3.Field(name='ALIENLML', typename='Num', position=(115, 115), length=1, inclusive_range=(0, 1), allowable_values=['8', '1', '0'], blanks=['Blank if Question 1 NORMEXAM ne 1 (Yes)', 'Blank if Question 5 PSPCBS = 0 (No)']) - self.fields['ALIENLMR'] = nacc.uds3.Field(name='ALIENLMR', typename='Num', position=(117, 117), length=1, inclusive_range=(0, 1), allowable_values=['8', '1', '0'], blanks=['Blank if Question 1 NORMEXAM ne 1 (Yes)', 'Blank if Question 5 PSPCBS = 0 (No)']) - self.fields['DYSTONL'] = nacc.uds3.Field(name='DYSTONL', typename='Num', position=(119, 119), length=1, inclusive_range=(0, 1), allowable_values=['8', '1', '0'], blanks=['Blank if Question 1 NORMEXAM ne 1 (Yes)', 'Blank if Question 5 PSPCBS = 0 (No)']) - self.fields['DYSTONR'] = nacc.uds3.Field(name='DYSTONR', typename='Num', position=(121, 121), length=1, inclusive_range=(0, 1), allowable_values=['8', '1', '0'], blanks=['Blank if Question 1 NORMEXAM ne 1 (Yes)', 'Blank if Question 5 PSPCBS = 0 (No)']) + self.fields['POSTCORT'] = nacc.uds3.Field(name='POSTCORT', typename='Num', position=(85, 85), length=1, inclusive_range=(0, 1), allowable_values=['1', '0'], blanks=['Blank if Question 1 NORMEXAM ne 1 (Yes)']) + self.fields['PSPCBS'] = nacc.uds3.Field(name='PSPCBS', typename='Num', position=(87, 87), length=1, inclusive_range=(0, 1), allowable_values=['1', '0'], blanks=['Blank if Question 1 NORMEXAM ne 1 (Yes)']) + self.fields['EYEPSP'] = nacc.uds3.Field(name='EYEPSP', typename='Num', position=(89, 89), length=1, inclusive_range=(0, 1), allowable_values=['8', '1', '0'], blanks=['Blank if Question 1 NORMEXAM ne 1 (Yes)', 'Blank if Question 5 PSPCBS = 0 (No)']) + self.fields['DYSPSP'] = nacc.uds3.Field(name='DYSPSP', typename='Num', position=(91, 91), length=1, inclusive_range=(0, 1), allowable_values=['8', '1', '0'], blanks=['Blank if Question 1 NORMEXAM ne 1 (Yes)', 'Blank if Question 5 PSPCBS = 0 (No)']) + self.fields['AXIALPSP'] = nacc.uds3.Field(name='AXIALPSP', typename='Num', position=(93, 93), length=1, inclusive_range=(0, 1), allowable_values=['8', '1', '0'], blanks=['Blank if Question 1 NORMEXAM ne 1 (Yes)', 'Blank if Question 5 PSPCBS = 0 (No)']) + self.fields['GAITPSP'] = nacc.uds3.Field(name='GAITPSP', typename='Num', position=(95, 95), length=1, inclusive_range=(0, 1), allowable_values=['8', '1', '0'], blanks=['Blank if Question 1 NORMEXAM ne 1 (Yes)', 'Blank if Question 5 PSPCBS = 0 (No)']) + self.fields['APRAXSP'] = nacc.uds3.Field(name='APRAXSP', typename='Num', position=(97, 97), length=1, inclusive_range=(0, 1), allowable_values=['8', '1', '0'], blanks=['Blank if Question 1 NORMEXAM ne 1 (Yes)', 'Blank if Question 5 PSPCBS = 0 (No)']) + self.fields['APRAXL'] = nacc.uds3.Field(name='APRAXL', typename='Num', position=(99, 99), length=1, inclusive_range=(0, 1), allowable_values=['8', '1', '0'], blanks=['Blank if Question 1 NORMEXAM ne 1 (Yes)', 'Blank if Question 5 PSPCBS = 0 (No)']) + self.fields['APRAXR'] = nacc.uds3.Field(name='APRAXR', typename='Num', position=(101, 101), length=1, inclusive_range=(0, 1), allowable_values=['8', '1', '0'], blanks=['Blank if Question 1 NORMEXAM ne 1 (Yes)', 'Blank if Question 5 PSPCBS = 0 (No)']) + self.fields['CORTSENL'] = nacc.uds3.Field(name='CORTSENL', typename='Num', position=(103, 103), length=1, inclusive_range=(0, 1), allowable_values=['8', '1', '0'], blanks=['Blank if Question 1 NORMEXAM ne 1 (Yes)', 'Blank if Question 5 PSPCBS = 0 (No)']) + self.fields['CORTSENR'] = nacc.uds3.Field(name='CORTSENR', typename='Num', position=(105, 105), length=1, inclusive_range=(0, 1), allowable_values=['8', '1', '0'], blanks=['Blank if Question 1 NORMEXAM ne 1 (Yes)', 'Blank if Question 5 PSPCBS = 0 (No)']) + self.fields['ATAXL'] = nacc.uds3.Field(name='ATAXL', typename='Num', position=(107, 107), length=1, inclusive_range=(0, 1), allowable_values=['8', '1', '0'], blanks=['Blank if Question 1 NORMEXAM ne 1 (Yes)', 'Blank if Question 5 PSPCBS = 0 (No)']) + self.fields['ATAXR'] = nacc.uds3.Field(name='ATAXR', typename='Num', position=(109, 109), length=1, inclusive_range=(0, 1), allowable_values=['8', '1', '0'], blanks=['Blank if Question 1 NORMEXAM ne 1 (Yes)', 'Blank if Question 5 PSPCBS = 0 (No)']) + self.fields['ALIENLML'] = nacc.uds3.Field(name='ALIENLML', typename='Num', position=(111, 111), length=1, inclusive_range=(0, 1), allowable_values=['8', '1', '0'], blanks=['Blank if Question 1 NORMEXAM ne 1 (Yes)', 'Blank if Question 5 PSPCBS = 0 (No)']) + self.fields['ALIENLMR'] = nacc.uds3.Field(name='ALIENLMR', typename='Num', position=(113, 113), length=1, inclusive_range=(0, 1), allowable_values=['8', '1', '0'], blanks=['Blank if Question 1 NORMEXAM ne 1 (Yes)', 'Blank if Question 5 PSPCBS = 0 (No)']) + self.fields['DYSTONL'] = nacc.uds3.Field(name='DYSTONL', typename='Num', position=(115, 115), length=1, inclusive_range=(0, 1), allowable_values=['8', '1', '0'], blanks=['Blank if Question 1 NORMEXAM ne 1 (Yes)', 'Blank if Question 5 PSPCBS = 0 (No)']) + self.fields['DYSTONR'] = nacc.uds3.Field(name='DYSTONR', typename='Num', position=(117, 117), length=1, inclusive_range=(0, 1), allowable_values=['8', '1', '0'], blanks=['Blank if Question 1 NORMEXAM ne 1 (Yes)', 'Blank if Question 5 PSPCBS = 0 (No)']) + self.fields['MYOCLLT'] = nacc.uds3.Field(name='MYOCLLT', typename='Num', position=(119, 119), length=1, inclusive_range=(0, 1), allowable_values=['8', '1', '0'], blanks=['Blank if Question 1 NORMEXAM ne 1 (Yes)', 'Blank if Question 5 PSPCBS = 0 (No)']) + self.fields['MYOCLRT'] = nacc.uds3.Field(name='MYOCLRT', typename='Num', position=(121, 121), length=1, inclusive_range=(0, 1), allowable_values=['8', '1', '0'], blanks=['Blank if Question 1 NORMEXAM ne 1 (Yes)', 'Blank if Question 5 PSPCBS = 0 (No)']) self.fields['ALSFIND'] = nacc.uds3.Field(name='ALSFIND', typename='Num', position=(123, 123), length=1, inclusive_range=(0, 1), allowable_values=['1', '0'], blanks=['Blank if Question 1 NORMEXAM ne 1 (Yes)']) self.fields['GAITNPH'] = nacc.uds3.Field(name='GAITNPH', typename='Num', position=(125, 125), length=1, inclusive_range=(0, 1), allowable_values=['1', '0'], blanks=['Blank if Question 1 NORMEXAM ne 1 (Yes)']) self.fields['OTHNEUR'] = nacc.uds3.Field(name='OTHNEUR', typename='Num', position=(127, 127), length=1, inclusive_range=(0, 1), allowable_values=['1', '0'], blanks=['Blank if Question 1 NORMEXAM = 0 (No)']) @@ -868,7 +868,7 @@ def __init__(self): self.fields['ANTIENC'] = nacc.uds3.Field(name='ANTIENC', typename='Num', position=(280, 280), length=1, inclusive_range=(0, 1), allowable_values=['8', '1', '0'], blanks=[]) self.fields['ANTIENCX'] = nacc.uds3.Field(name='ANTIENCX', typename='Char', position=(282, 341), length=60, inclusive_range=None, allowable_values=[], blanks=['Blank if Question 22 ANTIENC ne 1 (Yes)']) self.fields['OTHCOND'] = nacc.uds3.Field(name='OTHCOND', typename='Num', position=(343, 343), length=1, inclusive_range=(0, 1), allowable_values=['1', '0'], blanks=[]) - self.fields['OTHCONDX'] = nacc.uds3.Field(name='OTHCONDX', typename='Num', position=(345, 404), length=60, inclusive_range=(), allowable_values=[], blanks=['Blank if Question 23 OTHCOND ne 1 (Yes)']) + self.fields['OTHCONDX'] = nacc.uds3.Field(name='OTHCONDX', typename='Char', position=(345, 404), length=60, inclusive_range=None, allowable_values=[], blanks=['Blank if Question 23 OTHCOND ne 1 (Yes)']) class FormZ1(nacc.uds3.FieldBag): diff --git a/nacc/uds3/ivp/builder.py b/nacc/uds3/ivp/builder.py index 493acb4..9433eb3 100644 --- a/nacc/uds3/ivp/builder.py +++ b/nacc/uds3/ivp/builder.py @@ -7,7 +7,7 @@ from nacc.uds3 import blanks import forms as ivp_forms from nacc.uds3 import packet as ivp_packet - +import sys def build_uds3_ivp_form(record): """ Converts REDCap CSV data into a packet (list of IVP Form objects) """ @@ -626,20 +626,26 @@ def build_uds3_ivp_form(record): packet.append(b9) # Among C1S and C2 forms, one must be filled, one must be empty. - isC1SNotBlank = '0' + (record['c1s_1a_mmseloc'] and record['c1s_1a_mmseloc'].strip()) \ - or (record['c1s_11a_cogstat'] and record['c1s_11a_cogstat'].strip()) - isC2NotBlank = '0' + (record['mocacomp'] and record['mocacomp'].strip()) \ - or (record['cogstat_c2'] and record['cogstat_c2'].strip()) - condition = int(isC1SNotBlank) + int(isC2NotBlank) + isC1SNotBlank = 0 + + isC2NotBlank = 0 + + if(len(record['c1s_1a_mmseloc'].strip())!=0 or len(record['c1s_11a_cogstat'].strip())!=0): + isC1SNotBlank = 1 + + if(len(record['mocacomp'].strip())!=0 or len(record['cogstat_c2'].strip())!=0): + isC2NotBlank = 1 + + condition = isC1SNotBlank + isC2NotBlank if(condition != 1): ptid = record['ptid'] - message = "Could not parse packet as " + ("both" if condition > 1 else "neither") + " c1s/c2 forms has data"; + message = "Could not parse packet as " + ("both" if condition > 1 else "neither") + " c1s/c2 forms has data " message = message + " for PTID : " + ("unknown" if not ptid else ptid) raise Exception(message) - if(isC1SNotBlank): + if(int(isC1SNotBlank)): addC1S(record, packet) else: addC2(record, packet) diff --git a/nacc/uds3/ivp/forms.py b/nacc/uds3/ivp/forms.py index a91e0c6..243d6ca 100644 --- a/nacc/uds3/ivp/forms.py +++ b/nacc/uds3/ivp/forms.py @@ -767,7 +767,7 @@ def __init__(self): self.fields['UDSVERFC'] = nacc.uds3.Field(name='UDSVERFC', typename='Num', position=(334, 335), length=2, inclusive_range=(0, 40), allowable_values=['96', '95', '98', '97'], blanks=[]) self.fields['UDSVERFN'] = nacc.uds3.Field(name='UDSVERFN', typename='Num', position=(337, 338), length=2, inclusive_range=(0, 15), allowable_values=[], blanks=['Blank if Question 12a UDSVERFC = 95-98']) self.fields['UDSVERNF'] = nacc.uds3.Field(name='UDSVERNF', typename='Num', position=(340, 341), length=2, inclusive_range=(0, 15), allowable_values=[], blanks=['Blank if Question 12a UDSVERFC = 95-98']) - self.fields['UDSVERLC'] = nacc.uds3.Field(name='UDSVERLC', typename='Num', position=(343, 344), length=2, inclusive_range=(0, 40), allowable_values=['96', '95', '98', '97'], blanks=['Blank if Question 12a UDSVERFC = 95-98']) + self.fields['UDSVERLC'] = nacc.uds3.Field(name='UDSVERLC', typename='Num', position=(343, 344), length=2, inclusive_range=(0, 40), allowable_values=['96', '95', '98', '97'], blanks=[]) self.fields['UDSVERLR'] = nacc.uds3.Field(name='UDSVERLR', typename='Num', position=(346, 347), length=2, inclusive_range=(0, 15), allowable_values=[], blanks=['Blank if Question 12d UDSVERLC = 95-98']) self.fields['UDSVERLN'] = nacc.uds3.Field(name='UDSVERLN', typename='Num', position=(349, 350), length=2, inclusive_range=(0, 15), allowable_values=[], blanks=['Blank if Question 12d UDSVERLC = 95-98']) self.fields['UDSVERTN'] = nacc.uds3.Field(name='UDSVERTN', typename='Num', position=(352, 353), length=2, inclusive_range=(0, 80), allowable_values=[], blanks=['Blank if Question 12d UDSVERLC = 95-98']) @@ -971,4 +971,4 @@ def __init__(self): self.fields['B6COMM'] = nacc.uds3.Field(name='B6COMM', typename='Char', position=(380, 439), length=60, inclusive_range=None, allowable_values=[], blanks=[]) self.fields['B7SUB'] = nacc.uds3.Field(name='B7SUB', typename='Num', position=(441, 441), length=1, inclusive_range=(0, 1), allowable_values=['1', '0'], blanks=[]) self.fields['B7NOT'] = nacc.uds3.Field(name='B7NOT', typename='Num', position=(443, 444), length=2, inclusive_range=(95, 98), allowable_values=['97', '96', '95', '98'], blanks=['Blank if Question 7 B7SUB = 1 (Yes)']) - self.fields['B7COMM'] = nacc.uds3.Field(name='B7COMM', typename='Char', position=(446, 505), length=60, inclusive_range=None, allowable_values=[], blanks=[]) \ No newline at end of file + self.fields['B7COMM'] = nacc.uds3.Field(name='B7COMM', typename='Char', position=(446, 505), length=60, inclusive_range=None, allowable_values=[], blanks=[]) diff --git a/nacculator_cfg.ini.example b/nacculator_cfg.ini.example new file mode 100644 index 0000000..8273c5c --- /dev/null +++ b/nacculator_cfg.ini.example @@ -0,0 +1,21 @@ +[DEFAULT] + +[cappy] +token: Your REDCAP Token +redcap_server: Your Redcap Server + +#[filters] - Each section is named after the corresponding function name +#in filters.py +[filter_clean_ptid] +filepath: path/to/current-db-subjects.csv + +[filter_fix_headers] +c1s_2a_npsylan: c1s_2_npsycloc +c1s_2a_npsylanx: c1s_2a_npsylan +b6s_2a1_npsylanx: c1s_2a1_npsylanx +fu_otherneur: fu_othneur +fu_otherneurx: fu_othneurxs +fu_strokedec: fu_strokdec + +[filter_remove_ptid] +ptid_format: 11\d.* \ No newline at end of file diff --git a/run_filters.py b/run_filters.py new file mode 100644 index 0000000..d18eeba --- /dev/null +++ b/run_filters.py @@ -0,0 +1,136 @@ +import os +import sys +import csv +import json +import datetime +import time +import nacc +import ConfigParser +from cappy import API +from nacc.uds3.filters import * + +# Creating a folder which contains Intermediate files +def recent_run_folder(out_dir): + #Check if directory exists. If not, create it. + if not os.path.exists(out_dir): + try: + os.makedirs(out_dir) + except Exception as e: + raise e + +def get_headers(input_ptr): + reader = csv.DictReader(input_ptr) + headers = reader.fieldnames + print headers + + +def run_all_filters(folder_name, config): + # Calling Filters + try: + print >> sys.stderr, "--------------Removing subjects already in current--------------------" + input_path = os.path.join(folder_name, "redcap_input.csv") + output_path = os.path.join(folder_name, "clean.csv") + print >> sys.stderr, "Processing" + with open (output_path,'w') as output_ptr, open (input_path,'r') as input_ptr: + filter_clean_ptid(input_ptr, config, output_ptr) + + print >> sys.stderr, "--------------Replacing drug IDs--------------------" + input_path = os.path.join(folder_name, "clean.csv") + output_path = os.path.join(folder_name, "drugs.csv") + with open (output_path,'w') as output_ptr, open (input_path,'r') as input_ptr: + filter_replace_drug_id(input_ptr, config, output_ptr) + + print >> sys.stderr, "--------------Fixing Headers--------------------" + input_path = os.path.join(folder_name, "drugs.csv") + output_path = os.path.join(folder_name, "clean_headers.csv") + with open (output_path,'w') as output_ptr, open (input_path,'r') as input_ptr: + filter_fix_headers(input_ptr, config, output_ptr) + + print >> sys.stderr, "--------------Filling in Defaults--------------------" + input_path = os.path.join(folder_name, "clean_headers.csv") + output_path = os.path.join(folder_name, "default.csv") + with open (output_path,'w') as output_ptr, open (input_path,'r') as input_ptr: + filter_fill_default(input_ptr, config, output_ptr) + + print >> sys.stderr, "--------------Updating fields--------------------" + input_path = os.path.join(folder_name, "default.csv") + output_path = os.path.join(folder_name, "Update_field.csv") + with open (output_path,'w') as output_ptr, open (input_path,'r') as input_ptr: + filter_update_field(input_ptr, config, output_ptr) + + print >> sys.stderr, "--------------Removing Unnecessary Records--------------------" + input_path = os.path.join(folder_name, "Update_field.csv") + output_path = os.path.join(folder_name, "CleanedPtid_Update.csv") + with open (output_path,'w') as output_ptr, open (input_path,'r') as input_ptr: + filter_remove_ptid(input_ptr, config, output_ptr) + + print >> sys.stderr, "--------------Removing Records without VisitDate--------------------" + input_path = os.path.join(folder_name, "CleanedPtid_Update.csv") + output_path = os.path.join(folder_name, "final_Update.csv") + with open (output_path,'w') as output_ptr, open (input_path,'r') as input_ptr: + filter_eliminate_empty_date(input_ptr, config, output_ptr) + + except Exception as e: + print "Error in Opening a file" + print e + + + return + +def read_config(config_path): + config = ConfigParser.ConfigParser() + config.read(config_path) + return config + +# Getting Data From RedCap +def get_data_from_redcap(folder_name, config): + # Enter the path for filters_config + try: + token = config.get('cappy','token') + redcap_url= config.get('cappy','redcap_server') + except Exception as e: + print >> sys.stderr, "Please check the config file and validate all the proper fields exist" + print e + raise e + + redcap_access_api = API(token, redcap_url, 'master.yaml') + res = redcap_access_api.export_records(adhoc_redcap_options={ + 'format': 'csv' + }) + try: + rawdata = str(res.content).encode("utf-8") + myreader = csv.reader(rawdata.splitlines()) + try: + with open(os.path.join(folder_name, "redcap_input.csv"),"w") as file: + writer = csv.writer(file, delimiter=',') + for row in myreader: + writer.writerow(row) + except Exception as e: + print("Error in Writing") + print e + + except: + print("Error in CSV file") + + return + + +if __name__ == '__main__': + currentdate = datetime.datetime.now().strftime('%m-%d-%Y') + folder_name = "run_" + currentdate + print >> sys.stderr, "Recent folder " + folder_name + + current_directory = os.getcwd() + identified_folder = os.path.join(current_directory, folder_name) + + if not os.path.exists(identified_folder): + recent_run_folder(identified_folder) + +# Reading from Config and Accessing the necessary Data + config_path = sys.argv[1] + config = read_config(config_path) + + get_data_from_redcap(folder_name, config) + run_all_filters(folder_name, config_path) + + exit() diff --git a/run_filters.sh b/run_filters.sh new file mode 100755 index 0000000..87b9db2 --- /dev/null +++ b/run_filters.sh @@ -0,0 +1,26 @@ +DATE=`date +%Y-%m-%d` +RUNPATH=run_$DATE +NACCPATH=./nacc/redcap2nacc.py + +echo "Reading config...." >&2 +source filters_config.cfg + +mkdir $RUNPATH +curl -v -d token=$token -d content=$content -d format=$format -d type=$type $redcap_server > $RUNPATH/input.csv +echo "--------------Removing subjects already in current--------------------" +PYTHONPATH=. $NACCPATH -f cleanPtid -meta nacculator_cfg.ini < $RUNPATH/input.csv > $RUNPATH/clean.csv +echo "--------------Replacing drug IDs--------------------" +PYTHONPATH=. $NACCPATH -f replaceDrugId < $RUNPATH/clean.csv > $RUNPATH/drugs.csv +echo "--------------Fixing C1S in files--------------------" +PYTHONPATH=. $NACCPATH -f fixHeaders -meta nacculator_cfg.ini < $RUNPATH/drugs.csv > $RUNPATH/fixed_headers.csv +echo "--------------Filling in Defaults--------------------" +PYTHONPATH=. $NACCPATH -f fillDefault < $RUNPATH/fixed_headers.csv > $RUNPATH/default.csv +echo "--------------Updating fields------------------------" +PYTHONPATH=. $NACCPATH -f updateField < $RUNPATH/default.csv > $RUNPATH/Update.csv +echo "--------------Removing Unnecessary Records------------------------" +PYTHONPATH=. $NACCPATH -f removePtid -meta nacculator_cfg.ini < $RUNPATH/Update.csv > $RUNPATH/CleanedPtid_Update.csv +echo "--------------Removing Records without VisitDate------------------------" +PYTHONPATH=. $NACCPATH -f removeDateRecord < $RUNPATH/CleanedPtid_Update.csv > $RUNPATH/final_Update.csv + +# TODO Remove Gainesville People (excel) and NueroPath, IVP +#TODO Put all follow ups in a directory, nueropath in a file, ivp in a file. diff --git a/setup.py b/setup.py index 6af4ccd..b38ad8e 100644 --- a/setup.py +++ b/setup.py @@ -6,7 +6,7 @@ from setuptools import setup, find_packages -VERSION="0.2.3" +VERSION="0.3.0" setup( name="nacculator",