2
\$\begingroup\$

I have written a function that gets a function as input (acquired from numpy.poly1d). The function has access to the GUI variables self.batch and self.inputFile, these variables specify if the function is called in batch mode or not and what the current inputFile (for transformation is).

My main concerns are:

  • Would you understand the function based on my documentation?
  • Is vectorizing only the values to be transformed correct?
  • Is the function in general correct (meaning pythonic?)

The function:

def transformFile(self, f):
    """ This function gets a single function as input, reads the
    raw data file and transforms the read m/z values in the raw data
    file with the given function. The transformed m/z values are 
    stored in a calibrated_<inputfile>.xy file (if program is running
    in batchProcess mode) or asks the user for a filepath to save
    the calibrated file (if program is running in single spectrum mode).

    INPUT: a numpy polynomial (poly1d) function
    OUTPUT: a calibrated data file
    """
    # Prepare variables required for transformation
    outputBatch = []
    mzList = []
    intList = []
    with open (self.inputFile,'r') as fr:
        if self.batch == False:
            output = tkFileDialog.asksaveasfilename()
            if output:
                pass
            else:
                tkMessageBox.showinfo("File Error","No output file selected")
                return
        else: 
            parts = os.path.split(str(self.inputFile))
            output = "calibrated_"+str(parts[-1])
        if self.log == True:
            with open('MassyTools.log','a') as fw:
                fw.write(str(datetime.now())+"\tWriting output file: "+output+"\n")
        for line in fr:
            line = line.rstrip('\n')
            values = line.split()
            mzList.append(float(values[0]))
            intList.append(int(values[1]))
        # Transform python list into numpy array
        mzArray = numpy.array(mzList)
        newArray = f(mzArray)
        # Prepare the output as a list
        for index, i in enumerate(newArray):
            outputBatch.append(str(i)+" "+str(intList[index])+"\n")
        # Join the output list elements
        joinedOutput = ''.join(outputBatch)
        with open(output,'w') as fw:
            fw.write(joinedOutput)
        if self.log == True:
            with open('MassyTools.log','a') as fw:
                fw.write(str(datetime.now())+"\tFinished writing output file: "+output+"\n")    
\$\endgroup\$

0

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Browse other questions tagged or ask your own question.