From 9171267996bbd489a9f8e957528d20bd03ceef7e Mon Sep 17 00:00:00 2001 From: Samantha Emerson Date: Wed, 18 May 2022 15:04:57 -0400 Subject: [PATCH 1/7] Add ability to run filters on a local redcap export csv rather than automatically downloading via redcap api --- README.md | 31 ++++++++++- nacc/local_filters.py | 120 ++++++++++++++++++++++++++++++++++++++++++ 2 files changed, 150 insertions(+), 1 deletion(-) create mode 100644 nacc/local_filters.py diff --git a/README.md b/README.md index 5460b10..6830a8a 100644 --- a/README.md +++ b/README.md @@ -121,8 +121,37 @@ The filters can be run all at once with your REDCap API token using: You can find more details on `nacculator_filters` under the section: HOW TO Acquire current-db-subjects.csv for the filters -Or they can be run one at a time on a `.csv` file with the `-f` and `-meta` + +RUNNING ALL FILTERS ON A LOCAL FILE +------------------------------------------------------ + +REDCap has an export size limit that can be exceeded with a large project like +the ADRC. When the size of the project surpasses the REDCap limit, the +`nacculator_filters` command will no longer work. The data must be manually +exported from the project in chunks (whether by event or by ptid). However you +choose to export the data, keep in mind that all of the fields in a packet need +to be present in the input csv you use. So, for example, the A1 and A2 forms in +the IVP cannot be exported and run separately through NACCulator. + +You can still run all the filters using your config file on a REDCap-exported +csv, even when not using `nacculator_filters`. The command to use this filter +locally is: + + $ python3 nacc/local_filters.py nacculator_cfg.ini redcap_input.csv + +where `redcap_input.csv` is the location of the file you want to filter. The +filter will then run as normal, creating a `run_CURRENT-DATE` folder and +depositing each stage of the filter process in this folder. The final output +of the filter process is a csv file called `final_Update.csv` which can then +be run through NACCulator. + + +RUNNING INDIVIDUAL FILTERS +------------------------------------------------------ + +The filters can also be run one at a time on a `.csv` file with the `-f` and `-meta` flags. + For example, to run the fixHeaders filter: $ redcap2nacc -f fixHeaders -meta nacculator_cfg.ini filtered_output.csv diff --git a/nacc/local_filters.py b/nacc/local_filters.py new file mode 100644 index 0000000..b7eb094 --- /dev/null +++ b/nacc/local_filters.py @@ -0,0 +1,120 @@ +import os +import sys +import csv +import datetime +import configparser +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, input_name): + # Calling Filters + try: + print("--------------Removing subjects already in current--------------------", file=sys.stderr) + if input_name: + input_path = input_name + else: + input_path = os.path.join(folder_name, "redcap_input.csv") + output_path = os.path.join(folder_name, "clean.csv") + print("Processing", file=sys.stderr) + with open(output_path, 'w') as output_ptr, open(input_path, 'r') as input_ptr: + filter_clean_ptid(input_ptr, config, output_ptr) + + print("--------------Replacing drug IDs--------------------", file=sys.stderr) + 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("--------------Fixing Headers--------------------", file=sys.stderr) + 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("--------------Filling in Defaults--------------------", file=sys.stderr) + 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("--------------Updating fields--------------------", file=sys.stderr) + input_path = os.path.join(folder_name, "default.csv") + output_path = os.path.join(folder_name, "update_fields.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("--------------Fixing Visit Dates--------------------", file=sys.stderr) + input_path = os.path.join(folder_name, "update_fields.csv") + output_path = os.path.join(folder_name, "proper_visitdate.csv") + with open(output_path, 'w') as output_ptr, open(input_path, 'r') as input_ptr: + filter_fix_visitdate(input_ptr, config, output_ptr) + + print("--------------Removing Unnecessary Records--------------------", file=sys.stderr) + input_path = os.path.join(folder_name, "proper_visitdate.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("--------------Removing Records without VisitDate--------------------", file=sys.stderr) + 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 + + +def main(): + currentdate = datetime.datetime.now().strftime('%m-%d-%Y') + folder_name = "run_" + currentdate + input_name = "" + print("Recent folder " + folder_name, file=sys.stderr) + + 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] + try: + if sys.argv[2]: + input_name = sys.argv[2] + except IndexError: + pass + # config = read_config(config_path) + + run_all_filters(folder_name, config_path, input_name) + + exit() + + +if __name__ == '__main__': + main() From 921a2eebad5ede113dd0874c76804958b9cb3bad Mon Sep 17 00:00:00 2001 From: Samantha Emerson Date: Tue, 21 Jun 2022 12:56:49 -0400 Subject: [PATCH 2/7] Update Z1X positions in forms.py for lbd short version --- nacc/lbd/v3_1/fvp/forms.py | 86 +++++++++++++++++++------------------- 1 file changed, 43 insertions(+), 43 deletions(-) diff --git a/nacc/lbd/v3_1/fvp/forms.py b/nacc/lbd/v3_1/fvp/forms.py index 3198ccd..c1b1f7c 100644 --- a/nacc/lbd/v3_1/fvp/forms.py +++ b/nacc/lbd/v3_1/fvp/forms.py @@ -46,49 +46,49 @@ def __init__(self): self.fields['LANGA4'] = nacc.uds3.Field(name='LANGA4', typename='Num', position=(61, 61), length=1, inclusive_range=(1, 2), allowable_values=['1', '2'], blanks=['Blank if Question 4b A4SUB = 0 (No)']) self.fields['A4SUB'] = nacc.uds3.Field(name='A4SUB', typename='Num', position=(63, 63), length=1, inclusive_range=(0, 1), allowable_values=['0', '1'], blanks=[]) self.fields['A4NOT'] = nacc.uds3.Field(name='A4NOT', typename='Num', position=(65, 66), length=2, inclusive_range=None, allowable_values=['95', '96', '97', '98'], blanks=['Blank if Question 4b A4SUB = 1 (Yes)']) - self.fields['LANGB1'] = nacc.uds3.Field(name='LANGB1', typename='Num', position=(70, 70), length=1, inclusive_range=(1, 2), allowable_values=['1', '2'], blanks=['Blank if Question 6b B1SUB = 0 (No)']) - self.fields['B1SUB'] = nacc.uds3.Field(name='B1SUB', typename='Num', position=(72, 72), length=1, inclusive_range=(0, 1), allowable_values=['0', '1'], blanks=[]) - self.fields['B1NOT'] = nacc.uds3.Field(name='B1NOT', typename='Num', position=(74, 75), length=2, inclusive_range=None, allowable_values=['95', '96', '97', '98'], blanks=['Blank if Question 6b B1SUB = 1 (Yes)']) - self.fields['LANGB4'] = nacc.uds3.Field(name='LANGB4', typename='Num', position=(77, 77), length=1, inclusive_range=(1, 2), allowable_values=['1', '2'], blanks=[]) - self.fields['LANGB5'] = nacc.uds3.Field(name='LANGB5', typename='Num', position=(79, 79), length=1, inclusive_range=(1, 2), allowable_values=['1', '2'], blanks=['Blank if Question 8b B5SUB = 0 (No)']) - self.fields['B5SUB'] = nacc.uds3.Field(name='B5SUB', typename='Num', position=(81, 81), length=1, inclusive_range=(0, 1), allowable_values=['0', '1'], blanks=[]) - self.fields['B5NOT'] = nacc.uds3.Field(name='B5NOT', typename='Num', position=(83, 84), length=2, inclusive_range=None, allowable_values=['95', '96', '97', '98'], blanks=['Blank if Question 8b B5SUB = 1 (Yes)']) - self.fields['LANGB6'] = nacc.uds3.Field(name='LANGB6', typename='Num', position=(86, 86), length=1, inclusive_range=(1, 2), allowable_values=['1', '2'], blanks=['Blank if Question 9b B6SUB = 0 (No)']) - self.fields['B6SUB'] = nacc.uds3.Field(name='B6SUB', typename='Num', position=(88, 88), length=1, inclusive_range=(0, 1), allowable_values=['0', '1'], blanks=[]) - self.fields['B6NOT'] = nacc.uds3.Field(name='B6NOT', typename='Num', position=(90, 91), length=2, inclusive_range=None, allowable_values=['95', '96', '97', '98'], blanks=['Blank if Question 9b B6SUB = 1 (Yes)']) - self.fields['LANGB7'] = nacc.uds3.Field(name='LANGB7', typename='Num', position=(93, 93), length=1, inclusive_range=(1, 2), allowable_values=['1', '2'], blanks=['Blank if Question 10b B7SUB = 0 (No)']) - self.fields['B7SUB'] = nacc.uds3.Field(name='B7SUB', typename='Num', position=(95, 95), length=1, inclusive_range=(0, 1), allowable_values=['0', '1'], blanks=[]) - self.fields['B7NOT'] = nacc.uds3.Field(name='B7NOT', typename='Num', position=(97, 98), length=2, inclusive_range=None, allowable_values=['95', '96', '97', '98'], blanks=['Blank if Question 10b B7SUB = 1 (Yes)']) - self.fields['LANGB8'] = nacc.uds3.Field(name='LANGB8', typename='Num', position=(100, 100), length=1, inclusive_range=(1, 2), allowable_values=['1', '2'], blanks=[]) - self.fields['LANGB9'] = nacc.uds3.Field(name='LANGB9', typename='Num', position=(102, 102), length=1, inclusive_range=(1, 2), allowable_values=['1', '2'], blanks=[]) - self.fields['LANGC2'] = nacc.uds3.Field(name='LANGC2', typename='Num', position=(104, 104), length=1, inclusive_range=(1, 2), allowable_values=['1', '2'], blanks=[]) - self.fields['LANGD1'] = nacc.uds3.Field(name='LANGD1', typename='Num', position=(106, 106), length=1, inclusive_range=(1, 2), allowable_values=['1', '2'], blanks=[]) - self.fields['LANGD2'] = nacc.uds3.Field(name='LANGD2', typename='Num', position=(108, 108), length=1, inclusive_range=(1, 2), allowable_values=['1', '2'], blanks=[]) - self.fields['LANGA3A'] = nacc.uds3.Field(name='LANGA3A', typename='Num', position=(110, 110), length=1, inclusive_range=(1, 2), allowable_values=['1', '2'], blanks=['Blank if Question 16b FTDA3AFS = 0 (No)']) - self.fields['FTDA3AFS'] = nacc.uds3.Field(name='FTDA3AFS', typename='Num', position=(112, 112), length=1, inclusive_range=(0, 1), allowable_values=['0', '1'], blanks=[]) - self.fields['FTDA3AFR'] = nacc.uds3.Field(name='FTDA3AFR', typename='Num', position=(114, 115), length=2, inclusive_range=None, allowable_values=['95', '96', '97', '98', '99'], blanks=['Blank if Question 16b FTDA3AFS = 1 (Yes)']) - self.fields['LANGB3F'] = nacc.uds3.Field(name='LANGB3F', typename='Num', position=(117, 117), length=1, inclusive_range=(1, 2), allowable_values=['1', '2'], blanks=[]) - self.fields['LANGB9F'] = nacc.uds3.Field(name='LANGB9F', typename='Num', position=(119, 119), length=1, inclusive_range=(1, 2), allowable_values=['1', '2'], blanks=[]) - self.fields['LANGC1F'] = nacc.uds3.Field(name='LANGC1F', typename='Num', position=(121, 121), length=1, inclusive_range=(1, 2), allowable_values=['1', '2'], blanks=[]) - self.fields['LANGC2F'] = nacc.uds3.Field(name='LANGC2F', typename='Num', position=(123, 123), length=1, inclusive_range=(1, 2), allowable_values=['1', '2'], blanks=[]) - self.fields['LANGC3F'] = nacc.uds3.Field(name='LANGC3F', typename='Num', position=(125, 125), length=1, inclusive_range=(1, 2), allowable_values=['1', '2'], blanks=[]) - self.fields['LANGC4F'] = nacc.uds3.Field(name='LANGC4F', typename='Num', position=(127, 127), length=1, inclusive_range=(1, 2), allowable_values=['1', '2'], blanks=['Blank if Question 22b FTDC4FS = 0 (No)']) - self.fields['FTDC4FS'] = nacc.uds3.Field(name='FTDC4FS', typename='Num', position=(129, 129), length=1, inclusive_range=(0, 1), allowable_values=['0', '1'], blanks=[]) - self.fields['FTDC4FR'] = nacc.uds3.Field(name='FTDC4FR', typename='Num', position=(131, 132), length=2, inclusive_range=None, allowable_values=['95', '96', '97', '98', '99'], blanks=['Blank if Question 22b FTDC4FS = 1 (Yes)']) - self.fields['LANGC5F'] = nacc.uds3.Field(name='LANGC5F', typename='Num', position=(134, 134), length=1, inclusive_range=(1, 2), allowable_values=['1', '2'], blanks=['Blank if Question 23b FTDC5FS = 0 (No)']) - self.fields['FTDC5FS'] = nacc.uds3.Field(name='FTDC5FS', typename='Num', position=(136, 136), length=1, inclusive_range=(0, 1), allowable_values=['0', '1'], blanks=[]) - self.fields['FTDC5FR'] = nacc.uds3.Field(name='FTDC5FR', typename='Num', position=(138, 139), length=2, inclusive_range=None, allowable_values=['95', '96', '97', '98', '99'], blanks=['Blank if Question 23b FTDC5FS = 1 (Yes)']) - self.fields['LANGC6F'] = nacc.uds3.Field(name='LANGC6F', typename='Num', position=(141, 141), length=1, inclusive_range=(1, 2), allowable_values=['1', '2'], blanks=['Blank if Question 24b FTDC6FS = 0 (No)']) - self.fields['FTDC6FS'] = nacc.uds3.Field(name='FTDC6FS', typename='Num', position=(143, 143), length=1, inclusive_range=(0, 1), allowable_values=['0', '1'], blanks=[]) - self.fields['FTDC6FR'] = nacc.uds3.Field(name='FTDC6FR', typename='Num', position=(145, 146), length=2, inclusive_range=None, allowable_values=['95', '96', '97', '98', '99'], blanks=['Blank if Question 24b FTDC6FS= 1 (Yes)']) - self.fields['LANGE2F'] = nacc.uds3.Field(name='LANGE2F', typename='Num', position=(148, 148), length=1, inclusive_range=(1, 2), allowable_values=['1', '2'], blanks=[]) - self.fields['LANGE3F'] = nacc.uds3.Field(name='LANGE3F', typename='Num', position=(150, 150), length=1, inclusive_range=(1, 2), allowable_values=['1', '2'], blanks=[]) - self.fields['LANGCLS'] = nacc.uds3.Field(name='LANGCLS', typename='Num', position=(152, 152), length=1, inclusive_range=(1, 2), allowable_values=['1', '2'], blanks=['Blank if Question 27b CLSSUB = 0 (No)']) - self.fields['CLSSUB'] = nacc.uds3.Field(name='CLSSUB', typename='Num', position=(154, 154), length=1, inclusive_range=(0, 1), allowable_values=['0', '1'], blanks=[]) - self.fields['B2LSUB'] = nacc.uds3.Field(name='B2LSUB', typename='Num', position=(156, 156), length=1, inclusive_range=(0, 1), allowable_values=['0', '1'], blanks=[]) - self.fields['B2LNOT'] = nacc.uds3.Field(name='B2LNOT', typename='Num', position=(158, 159), length=2, inclusive_range=None, allowable_values=['95', '96', '97', '98', '99'], blanks=['Blank if Question 28b B2LSUB = 1 (Yes)']) - self.fields['B6LSUB'] = nacc.uds3.Field(name='B6LSUB', typename='Num', position=(161, 161), length=1, inclusive_range=(0, 1), allowable_values=['0', '1'], blanks=[]) - self.fields['B6LNOT'] = nacc.uds3.Field(name='B6LNOT', typename='Num', position=(163, 164), length=2, inclusive_range=None, allowable_values=['95', '96', '97', '98', '99'], blanks=['Blank if Question 29b B6LSUB = 1 (Yes)']) + self.fields['LANGB1'] = nacc.uds3.Field(name='LANGB1', typename='Num', position=(68, 68), length=1, inclusive_range=(1, 2), allowable_values=['1', '2'], blanks=['Blank if Question 6b B1SUB = 0 (No)']) + self.fields['B1SUB'] = nacc.uds3.Field(name='B1SUB', typename='Num', position=(70, 70), length=1, inclusive_range=(0, 1), allowable_values=['0', '1'], blanks=[]) + self.fields['B1NOT'] = nacc.uds3.Field(name='B1NOT', typename='Num', position=(72, 73), length=2, inclusive_range=None, allowable_values=['95', '96', '97', '98'], blanks=['Blank if Question 6b B1SUB = 1 (Yes)']) + self.fields['LANGB4'] = nacc.uds3.Field(name='LANGB4', typename='Num', position=(75, 75), length=1, inclusive_range=(1, 2), allowable_values=['1', '2'], blanks=[]) + self.fields['LANGB5'] = nacc.uds3.Field(name='LANGB5', typename='Num', position=(77, 77), length=1, inclusive_range=(1, 2), allowable_values=['1', '2'], blanks=['Blank if Question 8b B5SUB = 0 (No)']) + self.fields['B5SUB'] = nacc.uds3.Field(name='B5SUB', typename='Num', position=(79, 79), length=1, inclusive_range=(0, 1), allowable_values=['0', '1'], blanks=[]) + self.fields['B5NOT'] = nacc.uds3.Field(name='B5NOT', typename='Num', position=(81, 82), length=2, inclusive_range=None, allowable_values=['95', '96', '97', '98'], blanks=['Blank if Question 8b B5SUB = 1 (Yes)']) + self.fields['LANGB6'] = nacc.uds3.Field(name='LANGB6', typename='Num', position=(84, 84), length=1, inclusive_range=(1, 2), allowable_values=['1', '2'], blanks=['Blank if Question 9b B6SUB = 0 (No)']) + self.fields['B6SUB'] = nacc.uds3.Field(name='B6SUB', typename='Num', position=(86, 86), length=1, inclusive_range=(0, 1), allowable_values=['0', '1'], blanks=[]) + self.fields['B6NOT'] = nacc.uds3.Field(name='B6NOT', typename='Num', position=(88, 89), length=2, inclusive_range=None, allowable_values=['95', '96', '97', '98'], blanks=['Blank if Question 9b B6SUB = 1 (Yes)']) + self.fields['LANGB7'] = nacc.uds3.Field(name='LANGB7', typename='Num', position=(91, 91), length=1, inclusive_range=(1, 2), allowable_values=['1', '2'], blanks=['Blank if Question 10b B7SUB = 0 (No)']) + self.fields['B7SUB'] = nacc.uds3.Field(name='B7SUB', typename='Num', position=(93, 93), length=1, inclusive_range=(0, 1), allowable_values=['0', '1'], blanks=[]) + self.fields['B7NOT'] = nacc.uds3.Field(name='B7NOT', typename='Num', position=(95, 96), length=2, inclusive_range=None, allowable_values=['95', '96', '97', '98'], blanks=['Blank if Question 10b B7SUB = 1 (Yes)']) + self.fields['LANGB8'] = nacc.uds3.Field(name='LANGB8', typename='Num', position=(98, 98), length=1, inclusive_range=(1, 2), allowable_values=['1', '2'], blanks=[]) + self.fields['LANGB9'] = nacc.uds3.Field(name='LANGB9', typename='Num', position=(100, 100), length=1, inclusive_range=(1, 2), allowable_values=['1', '2'], blanks=[]) + self.fields['LANGC2'] = nacc.uds3.Field(name='LANGC2', typename='Num', position=(102, 102), length=1, inclusive_range=(1, 2), allowable_values=['1', '2'], blanks=[]) + self.fields['LANGD1'] = nacc.uds3.Field(name='LANGD1', typename='Num', position=(104, 104), length=1, inclusive_range=(1, 2), allowable_values=['1', '2'], blanks=[]) + self.fields['LANGD2'] = nacc.uds3.Field(name='LANGD2', typename='Num', position=(106, 106), length=1, inclusive_range=(1, 2), allowable_values=['1', '2'], blanks=[]) + self.fields['LANGA3A'] = nacc.uds3.Field(name='LANGA3A', typename='Num', position=(108, 108), length=1, inclusive_range=(1, 2), allowable_values=['1', '2'], blanks=['Blank if Question 16b FTDA3AFS = 0 (No)']) + self.fields['FTDA3AFS'] = nacc.uds3.Field(name='FTDA3AFS', typename='Num', position=(110, 110), length=1, inclusive_range=(0, 1), allowable_values=['0', '1'], blanks=[]) + self.fields['FTDA3AFR'] = nacc.uds3.Field(name='FTDA3AFR', typename='Num', position=(112, 113), length=2, inclusive_range=None, allowable_values=['95', '96', '97', '98', '99'], blanks=['Blank if Question 16b FTDA3AFS = 1 (Yes)']) + self.fields['LANGB3F'] = nacc.uds3.Field(name='LANGB3F', typename='Num', position=(115, 115), length=1, inclusive_range=(1, 2), allowable_values=['1', '2'], blanks=[]) + self.fields['LANGB9F'] = nacc.uds3.Field(name='LANGB9F', typename='Num', position=(117, 117), length=1, inclusive_range=(1, 2), allowable_values=['1', '2'], blanks=[]) + self.fields['LANGC1F'] = nacc.uds3.Field(name='LANGC1F', typename='Num', position=(119, 119), length=1, inclusive_range=(1, 2), allowable_values=['1', '2'], blanks=[]) + self.fields['LANGC2F'] = nacc.uds3.Field(name='LANGC2F', typename='Num', position=(121, 121), length=1, inclusive_range=(1, 2), allowable_values=['1', '2'], blanks=[]) + self.fields['LANGC3F'] = nacc.uds3.Field(name='LANGC3F', typename='Num', position=(123, 123), length=1, inclusive_range=(1, 2), allowable_values=['1', '2'], blanks=[]) + self.fields['LANGC4F'] = nacc.uds3.Field(name='LANGC4F', typename='Num', position=(125, 125), length=1, inclusive_range=(1, 2), allowable_values=['1', '2'], blanks=['Blank if Question 22b FTDC4FS = 0 (No)']) + self.fields['FTDC4FS'] = nacc.uds3.Field(name='FTDC4FS', typename='Num', position=(127, 127), length=1, inclusive_range=(0, 1), allowable_values=['0', '1'], blanks=[]) + self.fields['FTDC4FR'] = nacc.uds3.Field(name='FTDC4FR', typename='Num', position=(129, 130), length=2, inclusive_range=None, allowable_values=['95', '96', '97', '98', '99'], blanks=['Blank if Question 22b FTDC4FS = 1 (Yes)']) + self.fields['LANGC5F'] = nacc.uds3.Field(name='LANGC5F', typename='Num', position=(132, 132), length=1, inclusive_range=(1, 2), allowable_values=['1', '2'], blanks=['Blank if Question 23b FTDC5FS = 0 (No)']) + self.fields['FTDC5FS'] = nacc.uds3.Field(name='FTDC5FS', typename='Num', position=(134, 134), length=1, inclusive_range=(0, 1), allowable_values=['0', '1'], blanks=[]) + self.fields['FTDC5FR'] = nacc.uds3.Field(name='FTDC5FR', typename='Num', position=(136, 137), length=2, inclusive_range=None, allowable_values=['95', '96', '97', '98', '99'], blanks=['Blank if Question 23b FTDC5FS = 1 (Yes)']) + self.fields['LANGC6F'] = nacc.uds3.Field(name='LANGC6F', typename='Num', position=(139, 139), length=1, inclusive_range=(1, 2), allowable_values=['1', '2'], blanks=['Blank if Question 24b FTDC6FS = 0 (No)']) + self.fields['FTDC6FS'] = nacc.uds3.Field(name='FTDC6FS', typename='Num', position=(141, 141), length=1, inclusive_range=(0, 1), allowable_values=['0', '1'], blanks=[]) + self.fields['FTDC6FR'] = nacc.uds3.Field(name='FTDC6FR', typename='Num', position=(143, 144), length=2, inclusive_range=None, allowable_values=['95', '96', '97', '98', '99'], blanks=['Blank if Question 24b FTDC6FS= 1 (Yes)']) + self.fields['LANGE2F'] = nacc.uds3.Field(name='LANGE2F', typename='Num', position=(146, 146), length=1, inclusive_range=(1, 2), allowable_values=['1', '2'], blanks=[]) + self.fields['LANGE3F'] = nacc.uds3.Field(name='LANGE3F', typename='Num', position=(148, 148), length=1, inclusive_range=(1, 2), allowable_values=['1', '2'], blanks=[]) + self.fields['LANGCLS'] = nacc.uds3.Field(name='LANGCLS', typename='Num', position=(150, 150), length=1, inclusive_range=(1, 2), allowable_values=['1', '2'], blanks=['Blank if Question 27b CLSSUB = 0 (No)']) + self.fields['CLSSUB'] = nacc.uds3.Field(name='CLSSUB', typename='Num', position=(152, 152), length=1, inclusive_range=(0, 1), allowable_values=['0', '1'], blanks=[]) + self.fields['B2LSUB'] = nacc.uds3.Field(name='B2LSUB', typename='Num', position=(154, 154), length=1, inclusive_range=(0, 1), allowable_values=['0', '1'], blanks=[]) + self.fields['B2LNOT'] = nacc.uds3.Field(name='B2LNOT', typename='Num', position=(156, 157), length=2, inclusive_range=None, allowable_values=['95', '96', '97', '98', '99'], blanks=['Blank if Question 28b B2LSUB = 1 (Yes)']) + self.fields['B6LSUB'] = nacc.uds3.Field(name='B6LSUB', typename='Num', position=(159, 159), length=1, inclusive_range=(0, 1), allowable_values=['0', '1'], blanks=[]) + self.fields['B6LNOT'] = nacc.uds3.Field(name='B6LNOT', typename='Num', position=(161, 162), length=2, inclusive_range=None, allowable_values=['95', '96', '97', '98', '99'], blanks=['Blank if Question 29b B6LSUB = 1 (Yes)']) class FormB1L(nacc.uds3.FieldBag): From fcb974bc42a18a1f5e5b61a784666a6d5181248c Mon Sep 17 00:00:00 2001 From: Samantha Emerson Date: Tue, 21 Jun 2022 13:42:59 -0400 Subject: [PATCH 3/7] Re-adjust Z1X spacing on FVP LBDSV to account for invisible deprecated C1 form --- nacc/lbd/v3_1/fvp/forms.py | 56 +++++++++++++++++++------------------- 1 file changed, 28 insertions(+), 28 deletions(-) diff --git a/nacc/lbd/v3_1/fvp/forms.py b/nacc/lbd/v3_1/fvp/forms.py index c1b1f7c..48fc191 100644 --- a/nacc/lbd/v3_1/fvp/forms.py +++ b/nacc/lbd/v3_1/fvp/forms.py @@ -61,34 +61,34 @@ def __init__(self): self.fields['B7NOT'] = nacc.uds3.Field(name='B7NOT', typename='Num', position=(95, 96), length=2, inclusive_range=None, allowable_values=['95', '96', '97', '98'], blanks=['Blank if Question 10b B7SUB = 1 (Yes)']) self.fields['LANGB8'] = nacc.uds3.Field(name='LANGB8', typename='Num', position=(98, 98), length=1, inclusive_range=(1, 2), allowable_values=['1', '2'], blanks=[]) self.fields['LANGB9'] = nacc.uds3.Field(name='LANGB9', typename='Num', position=(100, 100), length=1, inclusive_range=(1, 2), allowable_values=['1', '2'], blanks=[]) - self.fields['LANGC2'] = nacc.uds3.Field(name='LANGC2', typename='Num', position=(102, 102), length=1, inclusive_range=(1, 2), allowable_values=['1', '2'], blanks=[]) - self.fields['LANGD1'] = nacc.uds3.Field(name='LANGD1', typename='Num', position=(104, 104), length=1, inclusive_range=(1, 2), allowable_values=['1', '2'], blanks=[]) - self.fields['LANGD2'] = nacc.uds3.Field(name='LANGD2', typename='Num', position=(106, 106), length=1, inclusive_range=(1, 2), allowable_values=['1', '2'], blanks=[]) - self.fields['LANGA3A'] = nacc.uds3.Field(name='LANGA3A', typename='Num', position=(108, 108), length=1, inclusive_range=(1, 2), allowable_values=['1', '2'], blanks=['Blank if Question 16b FTDA3AFS = 0 (No)']) - self.fields['FTDA3AFS'] = nacc.uds3.Field(name='FTDA3AFS', typename='Num', position=(110, 110), length=1, inclusive_range=(0, 1), allowable_values=['0', '1'], blanks=[]) - self.fields['FTDA3AFR'] = nacc.uds3.Field(name='FTDA3AFR', typename='Num', position=(112, 113), length=2, inclusive_range=None, allowable_values=['95', '96', '97', '98', '99'], blanks=['Blank if Question 16b FTDA3AFS = 1 (Yes)']) - self.fields['LANGB3F'] = nacc.uds3.Field(name='LANGB3F', typename='Num', position=(115, 115), length=1, inclusive_range=(1, 2), allowable_values=['1', '2'], blanks=[]) - self.fields['LANGB9F'] = nacc.uds3.Field(name='LANGB9F', typename='Num', position=(117, 117), length=1, inclusive_range=(1, 2), allowable_values=['1', '2'], blanks=[]) - self.fields['LANGC1F'] = nacc.uds3.Field(name='LANGC1F', typename='Num', position=(119, 119), length=1, inclusive_range=(1, 2), allowable_values=['1', '2'], blanks=[]) - self.fields['LANGC2F'] = nacc.uds3.Field(name='LANGC2F', typename='Num', position=(121, 121), length=1, inclusive_range=(1, 2), allowable_values=['1', '2'], blanks=[]) - self.fields['LANGC3F'] = nacc.uds3.Field(name='LANGC3F', typename='Num', position=(123, 123), length=1, inclusive_range=(1, 2), allowable_values=['1', '2'], blanks=[]) - self.fields['LANGC4F'] = nacc.uds3.Field(name='LANGC4F', typename='Num', position=(125, 125), length=1, inclusive_range=(1, 2), allowable_values=['1', '2'], blanks=['Blank if Question 22b FTDC4FS = 0 (No)']) - self.fields['FTDC4FS'] = nacc.uds3.Field(name='FTDC4FS', typename='Num', position=(127, 127), length=1, inclusive_range=(0, 1), allowable_values=['0', '1'], blanks=[]) - self.fields['FTDC4FR'] = nacc.uds3.Field(name='FTDC4FR', typename='Num', position=(129, 130), length=2, inclusive_range=None, allowable_values=['95', '96', '97', '98', '99'], blanks=['Blank if Question 22b FTDC4FS = 1 (Yes)']) - self.fields['LANGC5F'] = nacc.uds3.Field(name='LANGC5F', typename='Num', position=(132, 132), length=1, inclusive_range=(1, 2), allowable_values=['1', '2'], blanks=['Blank if Question 23b FTDC5FS = 0 (No)']) - self.fields['FTDC5FS'] = nacc.uds3.Field(name='FTDC5FS', typename='Num', position=(134, 134), length=1, inclusive_range=(0, 1), allowable_values=['0', '1'], blanks=[]) - self.fields['FTDC5FR'] = nacc.uds3.Field(name='FTDC5FR', typename='Num', position=(136, 137), length=2, inclusive_range=None, allowable_values=['95', '96', '97', '98', '99'], blanks=['Blank if Question 23b FTDC5FS = 1 (Yes)']) - self.fields['LANGC6F'] = nacc.uds3.Field(name='LANGC6F', typename='Num', position=(139, 139), length=1, inclusive_range=(1, 2), allowable_values=['1', '2'], blanks=['Blank if Question 24b FTDC6FS = 0 (No)']) - self.fields['FTDC6FS'] = nacc.uds3.Field(name='FTDC6FS', typename='Num', position=(141, 141), length=1, inclusive_range=(0, 1), allowable_values=['0', '1'], blanks=[]) - self.fields['FTDC6FR'] = nacc.uds3.Field(name='FTDC6FR', typename='Num', position=(143, 144), length=2, inclusive_range=None, allowable_values=['95', '96', '97', '98', '99'], blanks=['Blank if Question 24b FTDC6FS= 1 (Yes)']) - self.fields['LANGE2F'] = nacc.uds3.Field(name='LANGE2F', typename='Num', position=(146, 146), length=1, inclusive_range=(1, 2), allowable_values=['1', '2'], blanks=[]) - self.fields['LANGE3F'] = nacc.uds3.Field(name='LANGE3F', typename='Num', position=(148, 148), length=1, inclusive_range=(1, 2), allowable_values=['1', '2'], blanks=[]) - self.fields['LANGCLS'] = nacc.uds3.Field(name='LANGCLS', typename='Num', position=(150, 150), length=1, inclusive_range=(1, 2), allowable_values=['1', '2'], blanks=['Blank if Question 27b CLSSUB = 0 (No)']) - self.fields['CLSSUB'] = nacc.uds3.Field(name='CLSSUB', typename='Num', position=(152, 152), length=1, inclusive_range=(0, 1), allowable_values=['0', '1'], blanks=[]) - self.fields['B2LSUB'] = nacc.uds3.Field(name='B2LSUB', typename='Num', position=(154, 154), length=1, inclusive_range=(0, 1), allowable_values=['0', '1'], blanks=[]) - self.fields['B2LNOT'] = nacc.uds3.Field(name='B2LNOT', typename='Num', position=(156, 157), length=2, inclusive_range=None, allowable_values=['95', '96', '97', '98', '99'], blanks=['Blank if Question 28b B2LSUB = 1 (Yes)']) - self.fields['B6LSUB'] = nacc.uds3.Field(name='B6LSUB', typename='Num', position=(159, 159), length=1, inclusive_range=(0, 1), allowable_values=['0', '1'], blanks=[]) - self.fields['B6LNOT'] = nacc.uds3.Field(name='B6LNOT', typename='Num', position=(161, 162), length=2, inclusive_range=None, allowable_values=['95', '96', '97', '98', '99'], blanks=['Blank if Question 29b B6LSUB = 1 (Yes)']) + self.fields['LANGC2'] = nacc.uds3.Field(name='LANGC2', typename='Num', position=(104, 104), length=1, inclusive_range=(1, 2), allowable_values=['1', '2'], blanks=[]) + self.fields['LANGD1'] = nacc.uds3.Field(name='LANGD1', typename='Num', position=(106, 106), length=1, inclusive_range=(1, 2), allowable_values=['1', '2'], blanks=[]) + self.fields['LANGD2'] = nacc.uds3.Field(name='LANGD2', typename='Num', position=(108, 108), length=1, inclusive_range=(1, 2), allowable_values=['1', '2'], blanks=[]) + self.fields['LANGA3A'] = nacc.uds3.Field(name='LANGA3A', typename='Num', position=(110, 110), length=1, inclusive_range=(1, 2), allowable_values=['1', '2'], blanks=['Blank if Question 16b FTDA3AFS = 0 (No)']) + self.fields['FTDA3AFS'] = nacc.uds3.Field(name='FTDA3AFS', typename='Num', position=(112, 112), length=1, inclusive_range=(0, 1), allowable_values=['0', '1'], blanks=[]) + self.fields['FTDA3AFR'] = nacc.uds3.Field(name='FTDA3AFR', typename='Num', position=(114, 115), length=2, inclusive_range=None, allowable_values=['95', '96', '97', '98', '99'], blanks=['Blank if Question 16b FTDA3AFS = 1 (Yes)']) + self.fields['LANGB3F'] = nacc.uds3.Field(name='LANGB3F', typename='Num', position=(117, 117), length=1, inclusive_range=(1, 2), allowable_values=['1', '2'], blanks=[]) + self.fields['LANGB9F'] = nacc.uds3.Field(name='LANGB9F', typename='Num', position=(119, 119), length=1, inclusive_range=(1, 2), allowable_values=['1', '2'], blanks=[]) + self.fields['LANGC1F'] = nacc.uds3.Field(name='LANGC1F', typename='Num', position=(121, 121), length=1, inclusive_range=(1, 2), allowable_values=['1', '2'], blanks=[]) + self.fields['LANGC2F'] = nacc.uds3.Field(name='LANGC2F', typename='Num', position=(123, 123), length=1, inclusive_range=(1, 2), allowable_values=['1', '2'], blanks=[]) + self.fields['LANGC3F'] = nacc.uds3.Field(name='LANGC3F', typename='Num', position=(125, 125), length=1, inclusive_range=(1, 2), allowable_values=['1', '2'], blanks=[]) + self.fields['LANGC4F'] = nacc.uds3.Field(name='LANGC4F', typename='Num', position=(127, 127), length=1, inclusive_range=(1, 2), allowable_values=['1', '2'], blanks=['Blank if Question 22b FTDC4FS = 0 (No)']) + self.fields['FTDC4FS'] = nacc.uds3.Field(name='FTDC4FS', typename='Num', position=(129, 129), length=1, inclusive_range=(0, 1), allowable_values=['0', '1'], blanks=[]) + self.fields['FTDC4FR'] = nacc.uds3.Field(name='FTDC4FR', typename='Num', position=(131, 132), length=2, inclusive_range=None, allowable_values=['95', '96', '97', '98', '99'], blanks=['Blank if Question 22b FTDC4FS = 1 (Yes)']) + self.fields['LANGC5F'] = nacc.uds3.Field(name='LANGC5F', typename='Num', position=(134, 134), length=1, inclusive_range=(1, 2), allowable_values=['1', '2'], blanks=['Blank if Question 23b FTDC5FS = 0 (No)']) + self.fields['FTDC5FS'] = nacc.uds3.Field(name='FTDC5FS', typename='Num', position=(136, 136), length=1, inclusive_range=(0, 1), allowable_values=['0', '1'], blanks=[]) + self.fields['FTDC5FR'] = nacc.uds3.Field(name='FTDC5FR', typename='Num', position=(138, 139), length=2, inclusive_range=None, allowable_values=['95', '96', '97', '98', '99'], blanks=['Blank if Question 23b FTDC5FS = 1 (Yes)']) + self.fields['LANGC6F'] = nacc.uds3.Field(name='LANGC6F', typename='Num', position=(141, 141), length=1, inclusive_range=(1, 2), allowable_values=['1', '2'], blanks=['Blank if Question 24b FTDC6FS = 0 (No)']) + self.fields['FTDC6FS'] = nacc.uds3.Field(name='FTDC6FS', typename='Num', position=(143, 143), length=1, inclusive_range=(0, 1), allowable_values=['0', '1'], blanks=[]) + self.fields['FTDC6FR'] = nacc.uds3.Field(name='FTDC6FR', typename='Num', position=(145, 146), length=2, inclusive_range=None, allowable_values=['95', '96', '97', '98', '99'], blanks=['Blank if Question 24b FTDC6FS= 1 (Yes)']) + self.fields['LANGE2F'] = nacc.uds3.Field(name='LANGE2F', typename='Num', position=(148, 148), length=1, inclusive_range=(1, 2), allowable_values=['1', '2'], blanks=[]) + self.fields['LANGE3F'] = nacc.uds3.Field(name='LANGE3F', typename='Num', position=(150, 150), length=1, inclusive_range=(1, 2), allowable_values=['1', '2'], blanks=[]) + self.fields['LANGCLS'] = nacc.uds3.Field(name='LANGCLS', typename='Num', position=(152, 152), length=1, inclusive_range=(1, 2), allowable_values=['1', '2'], blanks=['Blank if Question 27b CLSSUB = 0 (No)']) + self.fields['CLSSUB'] = nacc.uds3.Field(name='CLSSUB', typename='Num', position=(154, 154), length=1, inclusive_range=(0, 1), allowable_values=['0', '1'], blanks=[]) + self.fields['B2LSUB'] = nacc.uds3.Field(name='B2LSUB', typename='Num', position=(156, 156), length=1, inclusive_range=(0, 1), allowable_values=['0', '1'], blanks=[]) + self.fields['B2LNOT'] = nacc.uds3.Field(name='B2LNOT', typename='Num', position=(158, 159), length=2, inclusive_range=None, allowable_values=['95', '96', '97', '98', '99'], blanks=['Blank if Question 28b B2LSUB = 1 (Yes)']) + self.fields['B6LSUB'] = nacc.uds3.Field(name='B6LSUB', typename='Num', position=(161, 161), length=1, inclusive_range=(0, 1), allowable_values=['0', '1'], blanks=[]) + self.fields['B6LNOT'] = nacc.uds3.Field(name='B6LNOT', typename='Num', position=(163, 164), length=2, inclusive_range=None, allowable_values=['95', '96', '97', '98', '99'], blanks=['Blank if Question 29b B6LSUB = 1 (Yes)']) class FormB1L(nacc.uds3.FieldBag): From b777689fe6b93842b9021acb95aea27dd5fbdc24 Mon Sep 17 00:00:00 2001 From: Samantha Emerson Date: Fri, 24 Jun 2022 10:42:42 -0400 Subject: [PATCH 4/7] Update allowable_favlues on FTDRATIO in ftld forms.py files to account for error code --- nacc/ftld/fvp/forms.py | 2 +- nacc/ftld/ivp/forms.py | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/nacc/ftld/fvp/forms.py b/nacc/ftld/fvp/forms.py index 5aefe4a..2ba463f 100644 --- a/nacc/ftld/fvp/forms.py +++ b/nacc/ftld/fvp/forms.py @@ -170,7 +170,7 @@ def __init__(self): self.fields['FTDSENPR'] = nacc.uds3.Field(name='FTDSENPR', typename='Num', position=(96, 97), length=2, inclusive_range=(0, 20), allowable_values=[], blanks=['Blank if Question 5a FTDSENAS = 95-98']) self.fields['FTDNOUNC'] = nacc.uds3.Field(name='FTDNOUNC', typename='Num', position=(99, 100), length=2, inclusive_range=(0, 16), allowable_values=['95', '96', '97', '98'], blanks=[]) self.fields['FTDVERBC'] = nacc.uds3.Field(name='FTDVERBC', typename='Num', position=(102, 103), length=2, inclusive_range=(0, 16), allowable_values=[], blanks=['Blank if Question 6a FTDNOUNC = 95-98']) - self.fields['FTDRATIO'] = nacc.uds3.Field(name='FTDRATIO', typename='Num', position=(105, 109), length=5, inclusive_range=(0,16), allowable_values=[], blanks=['Blank if Question 6a FTDNOUNC = 95-98']) + self.fields['FTDRATIO'] = nacc.uds3.Field(name='FTDRATIO', typename='Num', position=(105, 109), length=5, inclusive_range=(0,16), allowable_values=[88.88], blanks=['Blank if Question 6a FTDNOUNC = 95-98']) self.fields['FTDREAAS'] = nacc.uds3.Field(name='FTDREAAS', typename='Num', position=(111, 112), length=2, inclusive_range=(0, 5), allowable_values=['95', '96', '97', '98'], blanks=[]) self.fields['FTDREAOS'] = nacc.uds3.Field(name='FTDREAOS', typename='Num', position=(114, 115), length=2, inclusive_range=(0, 37), allowable_values=[], blanks=['Blank if Question 7a FTDREAAS = 95-98']) self.fields['FTDREASR'] = nacc.uds3.Field(name='FTDREASR', typename='Num', position=(117, 118), length=2, inclusive_range=(0, 20), allowable_values=[], blanks=['Blank if Question 7a FTDREAAS = 95-98']) diff --git a/nacc/ftld/ivp/forms.py b/nacc/ftld/ivp/forms.py index 7a61d98..efad14a 100644 --- a/nacc/ftld/ivp/forms.py +++ b/nacc/ftld/ivp/forms.py @@ -171,7 +171,7 @@ def __init__(self): self.fields['FTDSENPR'] = nacc.uds3.Field(name='FTDSENPR', typename='Num', position=(96, 97), length=2, inclusive_range=(0, 20), allowable_values=[], blanks=['Blank if Question 5a FTDSENAS = 95-98']) self.fields['FTDNOUNC'] = nacc.uds3.Field(name='FTDNOUNC', typename='Num', position=(99, 100), length=2, inclusive_range=(0, 16), allowable_values=['95', '96', '97', '98'], blanks=[]) self.fields['FTDVERBC'] = nacc.uds3.Field(name='FTDVERBC', typename='Num', position=(102, 103), length=2, inclusive_range=(0, 16), allowable_values=[], blanks=['Blank if Question 6a FTDNOUNC = 95-98']) - self.fields['FTDRATIO'] = nacc.uds3.Field(name='FTDRATIO', typename='Num', position=(105, 109), length=5, inclusive_range=(0,16), allowable_values=[], blanks=['Blank if Question 6a FTDNOUNC = 95-98']) + self.fields['FTDRATIO'] = nacc.uds3.Field(name='FTDRATIO', typename='Num', position=(105, 109), length=5, inclusive_range=(0,16), allowable_values=[88.88], blanks=['Blank if Question 6a FTDNOUNC = 95-98']) self.fields['FTDREAAS'] = nacc.uds3.Field(name='FTDREAAS', typename='Num', position=(111, 112), length=2, inclusive_range=(0, 5), allowable_values=['95', '96', '97', '98'], blanks=[]) self.fields['FTDREAOS'] = nacc.uds3.Field(name='FTDREAOS', typename='Num', position=(114, 115), length=2, inclusive_range=(0, 37), allowable_values=[], blanks=['Blank if Question 7a FTDREAAS = 95-98']) self.fields['FTDREASR'] = nacc.uds3.Field(name='FTDREASR', typename='Num', position=(117, 118), length=2, inclusive_range=(0, 20), allowable_values=[], blanks=['Blank if Question 7a FTDREAAS = 95-98']) From 27ffebb1d23cdea511085b86b31f7baf6e0fa058 Mon Sep 17 00:00:00 2001 From: Samantha Emerson Date: Mon, 29 Aug 2022 11:33:59 -0400 Subject: [PATCH 5/7] Add missing field for #3 in LBD Short Version FVP form E2L in the builder file --- nacc/lbd/v3_1/fvp/builder.py | 1 + 1 file changed, 1 insertion(+) diff --git a/nacc/lbd/v3_1/fvp/builder.py b/nacc/lbd/v3_1/fvp/builder.py index 39db4fb..9e9b933 100644 --- a/nacc/lbd/v3_1/fvp/builder.py +++ b/nacc/lbd/v3_1/fvp/builder.py @@ -447,6 +447,7 @@ def add_e2l(record,packet): E2L.LBIFPtPP = record['fu_LBIFPtPP'.lower()] E2L.LBIFPISL = record['fu_LBIFPISL'.lower()] E2L.LBIFPAVL = record['fu_LBIFPAVL'.lower()] + E2L.LBIAPet = record['fu_LBIAPet'.lower()] E2L.LBIAPAVL = record['fu_LBIAPAVL'.lower()] E2L.LBItPet = record['fu_LBItPet'.lower()] E2L.LBItPAVL = record['fu_LBItPAVL'.lower()] From d78536d5ceb62cc61efed7b3e52c513371ae8d84 Mon Sep 17 00:00:00 2001 From: mbentz-uf Date: Wed, 31 Aug 2022 10:49:05 -0400 Subject: [PATCH 6/7] Update gitignore --- .gitignore | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/.gitignore b/.gitignore index 76e2638..df3133f 100644 --- a/.gitignore +++ b/.gitignore @@ -13,3 +13,7 @@ build/ # Anything else is probably a preference. Think twice and then ask three people # before adding something else. + +run_*/ +nacculator_cfg.ini +.DS_STORE From 3eb8f9cc7d84cd7368eb1b81f22b5320d7379a9f Mon Sep 17 00:00:00 2001 From: mbentz-uf Date: Wed, 31 Aug 2022 10:56:14 -0400 Subject: [PATCH 7/7] Update CHANGELOG, AUTHORS, and setup.py for release 1.10.0 --- AUTHORS | 1 + CHANGELOG | 14 ++++++++++++++ setup.py | 2 +- 3 files changed, 16 insertions(+), 1 deletion(-) diff --git a/AUTHORS b/AUTHORS index 6404b25..adb1dd1 100644 --- a/AUTHORS +++ b/AUTHORS @@ -22,6 +22,7 @@ Contributors at the University of Florida * Tarun Gupta Akirala * Christopher P. Barnes + * Michael Bentz * Naomi Braun * Philip Chase * Samantha Emerson diff --git a/CHANGELOG b/CHANGELOG index 941b682..051b5c9 100644 --- a/CHANGELOG +++ b/CHANGELOG @@ -1,5 +1,19 @@ Changelog ========= +## [1.10.0] - 2022-08-31 +### Summary +This release introduces minor fixes to the FTLD and LBD Short Version modules. + +### Added + * Add missing field for #3 in LBD Short Version FVP form E2L in the builder file (Samantha Emerson) + * Add ability to run filters on a local redcap export csv rather than automatically downloading via redcap api (Samantha Emerson) + +### Changed + * Update gitignore (mbentz-uf) + * Update allowable_favlues on FTDRATIO in ftld forms.py files to account for error code (Samantha Emerson) + * Re-adjust Z1X spacing on FVP LBDSV to account for invisible deprecated C1 form (Samantha Emerson) + * Update Z1X positions in forms.py for lbd short version (Samantha Emerson) + ## [1.9.0] - 2022-06-24 ### Summary diff --git a/setup.py b/setup.py index 54e86a0..03e0834 100644 --- a/setup.py +++ b/setup.py @@ -6,7 +6,7 @@ from setuptools import setup, find_packages -VERSION = "1.9.0" +VERSION = "1.10.0" setup( name="nacculator",