# create a callback def cb(success, trials): if success: # loop trials for trial in trials: doc = trial.doc or {} print 'Trial "%s" [ %s ]' % (trial.title, trial.nct) print ' keyw: %s' % '; '.join(doc.get('keyword') or []) print ' cond: %s' % '; '.join( doc.get('condition_browse', {}).get('mesh_term', [])) print ' intr: %s' % '; '.join( doc.get('intervention_browse', {}).get('mesh_term', [])) print ' intn: %s' % "\n ----> ".join([ p.get('intervention_name') or '' for p in doc.get('intervention', []) ]) print ' prim: %s' % "\n ----> ".join([ p.get('measure') or '' for p in doc.get('primary_outcome', []) ]) # print ' armg: %s' % "\n ----> ".join([a.get('description') or '' for a in doc.get('arm_group', [])]) print "\n" # run! print 'Run id %d' % run.run_id run.run(callback=cb)
def find_trials(): """ Initiates the chain to find trials for the given condition or search- term. Supply with parameters: - "cond" or "term", the prior taking precedence - "gender" ('male' or 'female') - "age" (in years) - "latlng", comma-separated latitude and longituted of the patient - "remember_input" if the condition or term should be stored in the session This method forks off and prints the status to a file which can be read by calling /trials_status/<run-id>. "run-id" is returned from this call. """ # get the runner run_id = datetime.now().isoformat() runner = Runner.get(run_id) if runner is None: runner = Runner(run_id, "run-server") runner.in_background = True # configure cond = bottle.request.query.get('cond') term = bottle.request.query.get('term') if cond: cond = re.sub(r'\s+\((disorder|finding)\)', '', cond) runner.condition = cond elif term: term = re.sub(r'\s+-(\w+)', r' NOT \1', term) term = re.sub(r'\s*([^\w\d])\s+([^-])', r' AND \2', term) runner.term = term else: bottle.abort(400, 'You need to specify "cond" or "term"') # latitude and longitude latlng = bottle.request.query.get('latlng') if latlng is None or 0 == len(latlng): latlng = '42.358,-71.06' # default to Boston parts = latlng.split(',', 2) if parts is None or 2 != len(parts): bottle.abort(400, '"latlng" must be two numbers separated by a comma') lat = parts[0] lng = parts[1] runner.reference_location = (lat, lng) # store in session age = bottle.request.query.get('age') sess = _get_session() runs = sess.get('runs', {}) runs[run_id] = { 'cond': cond, 'gender': bottle.request.query.get('gender'), 'age': int(age) if age else None, 'latlng': latlng } sess['runs'] = runs if 'true' == bottle.request.query.get('remember_input'): if cond or term: sess['last_manual_input'] = cond or term elif 'last_manual_input' in sess: del sess['last_manual_input'] # launch and return id runner.run([ 'id', 'acronym', 'keyword', 'brief_title', 'official_title', 'brief_summary', 'overall_contact', 'eligibility', 'location', 'attributes', 'intervention', 'intervention_browse', 'phase', 'study_design', 'primary_outcome' ]) return run_id
def find_trials(): """ Initiates the chain to find trials for the given condition or search- term. Supply with parameters: - "cond" or "term", the prior taking precedence - "gender" ('male' or 'female') - "age" (in years) - "latlng", comma-separated latitude and longituted of the patient - "remember_input" if the condition or term should be stored in the session This method forks off and prints the status to a file which can be read by calling /trials_status/<run-id>. "run-id" is returned from this call. """ # get the runner run_id = datetime.now().isoformat() runner = Runner.get(run_id) if runner is None: runner = Runner(run_id, "run-server") runner.in_background = True # configure cond = bottle.request.query.get('cond') term = bottle.request.query.get('term') if cond: cond = re.sub(r'\s+\((disorder|finding)\)', '', cond) runner.condition = cond elif term: term = re.sub(r'\s+-(\w+)', r' NOT \1', term) term = re.sub(r'\s*([^\w\d])\s+([^-])', r' AND \2', term) runner.term = term else: bottle.abort(400, 'You need to specify "cond" or "term"') # latitude and longitude latlng = bottle.request.query.get('latlng') if latlng is None or 0 == len(latlng): latlng = '42.358,-71.06' # default to Boston parts = latlng.split(',', 2) if parts is None or 2 != len(parts): bottle.abort(400, '"latlng" must be two numbers separated by a comma') lat = parts[0] lng = parts[1] runner.reference_location = (lat, lng) # store in session age = bottle.request.query.get('age') sess = _get_session() runs = sess.get('runs', {}) runs[run_id] = { 'cond': cond, 'gender': bottle.request.query.get('gender'), 'age': int(age) if age else None, 'latlng': latlng } sess['runs'] = runs if 'true' == bottle.request.query.get('remember_input'): if cond or term: sess['last_manual_input'] = cond or term elif 'last_manual_input' in sess: del sess['last_manual_input'] # launch and return id runner.run(['id', 'acronym', 'keyword', 'brief_title', 'official_title', 'brief_summary', 'overall_contact', 'eligibility', 'location', 'attributes', 'intervention', 'intervention_browse', 'phase', 'study_design', 'primary_outcome']) return run_id
run = Runner(666, 'run-alternative') run.catch_exceptions = False #run.limit = 3 run.discard_cached = False run.term = "pulmonary arterial hypertension" # run.term = "juvenile rheumatoid arthritis" run.analyze_eligibility = False run.analyze_keypaths = set(['condition_browse', 'intervention_browse', 'intervention', 'keyword', 'primary_outcome', 'arm_group']) # create a callback def cb(success, trials): if success: # loop trials for trial in trials: doc = trial.doc or {} print 'Trial "%s" [ %s ]' % (trial.title, trial.nct) print ' keyw: %s' % '; '.join(doc.get('keyword') or []) print ' cond: %s' % '; '.join(doc.get('condition_browse', {}).get('mesh_term', [])) print ' intr: %s' % '; '.join(doc.get('intervention_browse', {}).get('mesh_term', [])) print ' intn: %s' % "\n ----> ".join([p.get('intervention_name') or '' for p in doc.get('intervention', [])]) print ' prim: %s' % "\n ----> ".join([p.get('measure') or '' for p in doc.get('primary_outcome', [])]) # print ' armg: %s' % "\n ----> ".join([a.get('description') or '' for a in doc.get('arm_group', [])]) print "\n" # run! print 'Run id %d' % run.run_id run.run(callback=cb)
# recruiting = raw_input("Recruiting: [no] ") # if recruiting is None or len(recruiting) < 1: # recruiting = False # else: # recruiting = recruiting[:1] is 'y' or recruiting[:1] is 'Y' # run the runner now = date.today() run_id = now.isoformat() run_dir = "run-%s-%s" % (re.sub(r"[^\w\d\-]+", "_", term.lower()), run_id) runner = Runner(run_id, run_dir) runner.run_ctakes = True runner.run_metamap = True runner.term = term runner.log_status = True runner.run() # generate HTML report if _generate_report: print "Generating report..." recr_status = "" if _use_recruiting: recr_status = ", recruiting" if recruiting else ", not recruiting" html = """<html> <head> <meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> <title>Report: %s</title> <style> body { font-size: small; font-family: 'Helvetica-Neue', Helvetica, sans-serif; } table { border-collapse: collapse; }
# recruiting = raw_input("Recruiting: [no] ") # if recruiting is None or len(recruiting) < 1: # recruiting = False # else: # recruiting = recruiting[:1] is 'y' or recruiting[:1] is 'Y' # run the runner now = date.today() run_id = now.isoformat() run_dir = "run-%s-%s" % (re.sub(r'[^\w\d\-]+', '_', term.lower()), run_id) runner = Runner(run_id, run_dir) runner.run_ctakes = True runner.run_metamap = True runner.term = term runner.log_status = True runner.run() # generate HTML report if _generate_report: print 'Generating report...' recr_status = '' if _use_recruiting: recr_status = ', recruiting' if recruiting else ', not recruiting' html = """<html> <head> <meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> <title>Report: %s</title> <style> body { font-size: small; font-family: 'Helvetica-Neue', Helvetica, sans-serif; } table { border-collapse: collapse; }