Following this link may get you blocked.


Syllabi for my courses can be found at

Term Course Syllabus Sections offered
Fall Bmes201: Programming and Modeling for BME I syllabus in-person only
Fall Bmes546: Biocomputational Languages syllabus in-person or online (synchronous or asynchronous)
Fall Bmes550: Advanced Biocomputational Languages syllabus in-person or online (synchronous or asynchronous)
Winter Bmes484,544: Genome Information Engineering (aka Bioinformatics I) syllabus in-person or online (synchronous or asynchronous)
Winter Bmes547: Machine Learning in Biomedical Engineering syllabus in-person or online (synchronous or asynchronous)
Spring Bmes483/543: Quantitative Systems Biology and Bioinformatics (aka Bioinformatics II) syllabus in-person or online (only synchronous)
Spring Bmes673: Biosimulation II syllabus in-person or online (synchronous or asynchronous)
last offered: 20204 BMES375: Computational Bioengineering syllabus not currently teaching
last offered: 20093 BMES480,680: Scientific Computing & Visualization not currently teaching

FAQ: Can I take one of these courses online ?

My graduate courses have in both in-person and online sections. The online section students can follow the course synchronously via Zoom at the same time that the in-person section is being held. For some courses (listed as “asynchronous” above), students also have the option to follow the course asynchronously through Zoom lecture recordings, as well as additional videos that are part of the lecture material.

Bmes483/543 course involves student presentations and discussions throughout the Quarter, so asynchronous option is not available for that course; online section students will need to join on Zoom during the class time.

FAQ: Can I take Bmes483/543 without first taking Bmes484/544

Yes. Even though I would recommend taking Bmes484/544 first, it is not required. Bmes484/544 covers theory & algorithms for sequence analysis, whereas Bmes483/543 covers applications in microarrays, RNA-seq, and other expression analysis.

FAQ: I am a new Graduate Student at Biomed.Drexel, should I take Bmes546 or Bmes550 ?

Bmes546 is designed as an introductory programming course, where the programming language is Matlab. Most students taking Bmes546 are new to computer programming. If you have not had any formal education in computer programming or you do not know Matlab, you should enroll in Bmes546. Matlab is going to be used in your upcoming engineering courses (e.g., Biosimulation), so you need to gain Matlab programming skills before getting to those courses.

In order to waive out of Bmes546, you need to be able to know the following basic programming concepts: selection statements, loops, functions, structs, cell arrays, vectorized code (ie., performing a mathmetical operation on each element of a vector),logical indexing, data import, basic statistics (finding average or standard deviation), and creating plots. As an example task you are expected to solve, consider the following problem:

Write a function xls_columnaverage(file, columnname) that takes as input arguments: the name of
an Excel file and the name of a column of interest. Assume that the first row of the Excel file
contains the field names (describing what each column contains), and the remaining rows contain
numerical data. Your function should load the data contained in the Excel file and calculate the
average of the column whose name is contained in columnname. The column average should be returned
from the function. Your function should work when it is called with any Exccel file and column name,
assuming the Excel file satisfies the constraints described above.

To test your function, create two example Excel files called sample1.xlsx and sample2.xlsx.
Add mock patient information to these Excel files. Make sample2 columns be in different order than sample1.
Include columns representing name, age, height, and weight. Add several rows of example patients to
each of these files.

Test your function in Matlab command window with the following test cases:

>> xls_columnaverage('sample1.xlsx','age')

>>  xls_columnaverage('sample2.xlsx','weight')

Double-check the answers from your function and make sure they match with what you get from manual calculations of the data.

If you have a strong background in Matlab and consequently waive out of Bmes546, you would take the advanced course, Bmes-550.

If you do not have experience in Matlab, but are well-versed in another programming language (e.g., Python) and believe you can bring yourself up to speed in Matlab on your own, you may take Bmes-550 instead.

Bmes-550 focuses on some of the advanced programming concepts, such as object oriented programming, database programming, web programming. Bmes-550 is more about these programming concepts rather than a specific programming language. Before you take Bmes-550, you are required to have a strong background in at least one programming language i.e., you may have taken Bmes-546 before you take Bmes-550, or you have strong background in Matlab and have waived out of Bmes546, or you have strong background in another programming language and have taught yourself Matlab before taking Bmes-550. Bmes-550 will use various programming languages (Matlab, C++, Python, R). You do not need to know all of these programming languages before taking Bmes550. Having a strong background in at least one programming language, students are expected to quickly adapt to other programming languages they have not used before. A brief introduction to other programming languages will be provided within the course.

After reading this, if you are still unsure about which course you should take, please get in touch with me (gmail: ahmetmsacan) and/or your advisor; list any programming courses you have taken and tell us about your programming experience outside class.

FAQ: I am a BS/MS student at Biomed.Drexel, can I take Bmes546 ?

Technically, yes; but I do not believe it is an effective use of your time. You are encouraged to take Bmes-550 instead. Bmes546 is designed for graduate students with no programming experience in Matlab. You should already have the knowledge covered in Bmes546 from your undergraduate courses.

FAQ: I am not a BMES student, can I take Bmes547 Machine Learning in Biomedical Engineering?

Yes, and you will be welcome. Having students from other domains of study provides unique perspectives and enriches the course. You may not have the pre-requisite courses (Bmes546 or Bmes550). These pre-requisite courses can be waived (subject to instructor and advisor approvals) if you have necessary programming background. To request a waiver, please email me (gmail: ahmetmsacan) and provide the following information: Which programming language(s) do you know and at what level? List programming courses you have taken in the past, as well as any programming projects you have worked on in or outside coursework.

In Bmes547, my programming demonstrations are mostly in Matlab, and sometimes in Python. Except when the focus is on a particular programming library, students are free to use any programming language for the assignments and the course project. Even though you can use any programming language for the course, I would recommend you bring yourself up to speed in Matlab to get the most out of the programming demonstrations. When working on the assignments, most students use Matlab, some students use Python, and a few students use R. Although possible, I have not had any students using Java for this course. Other programming languages may be used as well, subject to availability of machine learning functions and libraries.

This course is a mix of theory & applications. The level of theory covered is different for each ML method. For basic methods like PCA and gradient descent, I cover more detail of how these methods are constructed and implemented; for other methods, like SVM, I give just enough background to understand the parameters that one might need to adjust. If you have taken other machine learning methods, there will likely be overlap with the theory covered in this course.

My course syllabi are available at:

Also check out some of the ML projects that studens have worked on for this course in the past:

FAQ: What level of programming experience is required for Bmes484/544 and Bmes483/543?

You need to know at least one programming language. The following demonstrates the level of programming knowledge you are expected to have in order to take these courses. The level of programming proficiency coming into these courses will be inversely correlated with how much time you would need to dedicate to these courses. Check how much time it takes you to solve the example problem below. Multiply that time by x5 to get an estimate of how much time you will need to spend weekly on the programming assignments.

Write a function reversecomplementdna(s) that takes a strand of DNA and returns its reverse complement and the number of hydrogen bonds formed between the two strands.

  • Consider the following single-stranded DNA, written from 5' end to the 3' end: 5'-ATGCATGGC-3'
  • The complementary strand of the above DNA segment can be written by replacing A with T, T with A, G with C, and C with G: 3'-TACGTACCG-5'
  • The reverse complement is than obtained by writing the complementary strand from 5' end to 3' end: 5'-GCCATGCAT-3'
  • The complementarity of the nucleotides is determined by the hydrogen bonds formed between the nucleotides. There are two hydrogen bonds between A and T, and there are three hydrogen bonds between C and G. In the following double-stranded DNA,
  • The complementary bases in this DNA segment form a total of 23 hydrogen bonds.
>> % Matlab example output:
>> [rc,bonds] = reversecomplementdna('ATGCATGGC')
rc = 

bonds = 
>> # Pyhon example output: return the result as a dictionary:
>> ans = reversecomplementdna('ATGCATGGC')
ans = {'reversecomplement': 'GCCATGCAT', 'bonds': 23}
  • If you are using Matlab, do not use functions seqrcomplement(), seqcomplement(), or seqreverse() to solve this problem.
  • If you are using Python, do not use the Biopython library.

FAQ: I am an undergraduate Biomed student with the Bioinformatics concentration and am minoring in Math. Which Math courses should I take?

I find the courses listed below relevant to Bioinformatics. These courses are not necessary to do Bioinformatics work but may help understand some of the Bioinformatics algorithms and methods better or create your own such methods when needed.

  • MATH 305 Introduction to Optimization Theory
  • MATH 410 Scientific Data Analysis I
  • MATH 411 Scientific Data Analysis II
  • MATH 319 Techniques of Data Analysis
  • MATH 450 Introduction to Graph Theory
  • MATH 422 Introduction to Topology. May be useful if you want to work with protein, RNA, or DNA 3-dimensional structures.
  • MATH 450 Introduction to Graph Theory. Useful for understanding how sequence analysis algorithms work.
  • MATH 483 Introduction to Monte Carlo Methods. Useful for simulation methods, e.g., protein dynamics simulations and drug docking.

FAQ: I am an undergraduate Biomed student with the Bioinformatics concentration and am minoring in Computer Science. Which CS courses should I take?

  • CS 260 Data Structures
  • CS 457 Data Structures and Algorithms I
  • CS 458 Data Structures and Algorithms II
  • CS 380 Artificial Intelligence
  • CS 383 Machine Learning
  • CS 385 Evolutionary Computing
  • CS 461 Database Systems
  • CS 481 Advanced Artificial Intelligence