Post Operative Appearance of Femoral Acetabular Impingement Osteotomy

I think the jury is still out on which patients can definitely benefit from this procedure.  FAI is definitely a real entity, but not every patient benefits from the operative treatment.  I know people who have done very well and others who have intractable pain.

 

Regardless, this is a nice look at the osteotomy site following debulking of the abnormal morphology.  Without an op note and arthrogram, it’s difficult to make any call about the anterior superior labrum except that it is abnormal.  That signal that looks like a tear could easily be from debridement and reattachment.

 

There is also a defect in the anterior right femoral head neck junction that probably represents a fibroosseous lesion or Pitts pit. Given that there was FAI on the other side, this probably represents a fibroosseous lesion associated with contralateral FAI.

 

 

Advertisements

Analysis of Radiology Report Word Frequency – Part I

The point of this programming exercise is to find outlier words that speech recognition shouldn’t, but does, insert into the dictated reports.  By taking a large sample size for a user, the word frequency can be used to remove inappropriate words from the user dictionary.

As an example, I had the word “heber” escape my proofreading at one point and it made it into the list.  I’ve removed it now, but the ultimate goal is to check each report for outlier words, and when they fall below a frequency threshold, to flag them for review.

You can see that there are some words that just don’t belong.  This frequency analysis allows removal from the lexicon and by doing so, should improve reports AND recognition. There are a few problems with the data that are fixable.

  • Indexing of unimportant elements
    • Numbers
    • Measurements (cm, mm, g …)
    • HTML tags
    • Technique (modalities and technique description)
  • Punctuation filtering
    • gives rise to concatenated words

composite

From the radiologist’s perspective, if you are going to give a diagnosis that you’ve never given before, it should not be taken lightly.  This follows the axiom that an uncommon presentation of a common disease is more common than a rare disease.  If at all possible, try to have another radiologist consult and confirm your suspicions and for heaven’s sake, if there is a differential, please give it.

I have frequently seen radiologists try to hit a “home run” by naming a rare disease, not giving a differential, and flubbing the case because it’s actually a common disease with an unusual presentation.

The point of that aside is that a frequency analysis can prompt the radiologist to ask “do I really mean to use that word” and if you do, it will make you think about whether that is the correct and only differential consideration you want to give.

All too often, technology solutions in medicine increase the burden on the physician rather than facilitate the practice of medicine.  EMRs are a perfect example.  You spend more time clicking than caring.  The eventual goal will be a real time prompt on signing a report that keeps the rad out of trouble and produces a polished professional report.  At the end of the day, the report is the indelible work product.

Ridiculous Rehydration Myths

This is the second “developed by a doctor” rehydration product I’ve seen this year.

 

 

I get it that medicine isn’t as fulfilling as you thought it would be but using your credentials to foist psuedoscience on the public places you in the same category as Dr. Oz.

This is water.  Salt water.  I use salt in the chemical sense here meaning a com

bana1_screen

bination of anion and cation.

Let us take a look at the claims on “Science” page of their website.

 

 

 

  • 4 Adult BANa’s is comparable to 1L Normal Saline IV

Okay, that’s a claim that can be substantiated.  Saline has NaCl and water.  Take it with a grain of salt, literally.  800 mg x 4 = 3.2 g of salt.  A big grain of salt, but still a grain.

Further, Normal Saline has been shown to be associated with renal failure in critcially ill adults.  While an athlete is not critically ill, they are undergoing a fair amount of physiological stress.

Don’t take my word for it, read the trials (SALT-ED and SMART) and judge which one you’d rather have.  While BANa is more of balanced solution, they don’t bother comparing it to lactated Ringers.  That seems like a pretty big oversight, but then again, marketers don’t read journals.

  • Absorption rate into your body is comparable between oral consumption and IV fluids given in the ER
  • Faster recovery time
  • Hydration equals Performance – both physical performance, and mental acuity

The next 3 selling points beg the question:

  1. Where do these statements come from?
  2. Is there scientific data?
  3. Where are the references to support these claims?
  4. Hydration is important but hydration ≠ performance.  There are many factors in performance.

Let’s see what they come back with on this one.

bana2_screen

 

Parsing Radiology Exam Data with Python Class

I’ve had a really clunky program to track what I do.  It lets me know how much volume I’m reading calculated each 30 min based a logfile.

I’ve decided to get a little more sophisticated with the program because it has grown to the point where it’s painful for me to edit, and if I wrote it, it must be completely abstruse to someone else.

I have never used a class in python but it solves many issues for me:

  • Cleans up the code
  • Moves functions to a module for importing and repurposing
  • Teaches me how to construct a class properly
  • Allows parsing of text with a structure that makes sense
    • Class instance attributes now make inherent sense
  • Eliminates having to bring global var into functions for modification
    • The class instance can access global counters
    • The class output can eliminate the need for global counters
  • Allows me to expand to the class to perform other manipulation
    • calculating age of patient
    • SQL archival
  • Works in python 2 and 3
  • Uses the Regex from hell

 

parser_fx.py
import re

class Parser:
    """
    A class to parse data strings into components
    USE:
    from parser_fx import *
    result = Parser()     ## Instantiate class
    result.parse(study)   ## Pass the instance a study string
    result.XXXXXXX        ## Attributes of result now available
    """

    def __init__(self):
        """ Simply establishes the regex expression"""
        self.regex = re.compile(r'([\'A-Z\s-]+)(\[.+||\s])\s*'
                                '(CURRENT STUDY:)([A-Z\s/\[\]]+)'
                                '([\d-]+)\s([\d:]+)\s'
                                '(\[DOB:[\s0-9/]+])\s+(\[ID:.+])')

    def parse(self, study_string=('SIMPSON HOMER J[Prelim  report]CURRENT STUDY:'
        'CT HEAD 2016-01-01 23:59:59 [DOB: 1111/1/11 ] [ID: 1234567]')):
        """Parser with failure options"""
        self.study_string = study_string
        try:
            self.matchobj = self.regex.match(self.study_string)
            ## Attributes: name, prelim/final, study, date, time dob, ID 
            self.name = self.matchobj.group(1)
            self.type = self.matchobj.group(2)[1:7].rstrip()
            self.study_name = self.matchobj.group(4)
            self.date = self.matchobj.group(5)
            self.time = self.matchobj.group(6)
            self.DOB = self.matchobj.group(7)
            self.ID = self.matchobj.group(8)[1:-1]
        except:
            print("REGEX Match Failed")
            

    """  Leaving here as an example to follow 
    def ID(self):
        ''' returns study  '''
        self.ID = self.matchobj.group(8)
        return self.ID   
    """


"""
study= ('SIMPSON HOMER J[Prelim  report]CURRENT STUDY:'
        'CT HEAD 2016-01-01 23:59:59 [DOB: 1111/1/11 ] [ID: 1234567]')
result = Parser()
result.parse(study)
print("%s | %s | %s | %s | %s | %s" %(result.type, result.name,
        result.study_name, result.date, result.time, result.ID))

"""

After testing for a week, I’ll report back on success or failure.