When a Mouse on a Computer Sniffs

My name is Jaesuk Park, and I go by Eugene. I am a rising senior majoring in Applied Mathematics in McCormick School of Engineering, with second- and third-majors in Integrated Science and Mathematics and a minor in Computer Science. I'm using this grant to tie all of these areas of study together, namely by modeling neurons in the mammalian olfactory system using various computational modeling tools and techniques. After this summer, I am planning to further develop this work into a senior honors thesis in the Integrated Science Program. I'm excited to see how different areas of STEM can work together to elucidate knowledge! Eugene has been funded by a Summer Undergraduate Research Grant by Northwestern's Office of Undergraduate Research.

Interlude: A Photo Essay of Summer 2016

So far I’ve posted mostly about what happened in my research work. But this doesn’t mean that I have not had fun!

In fact, this summer was full of fun times and adventures, ranging from multiple dinner night-out with friends to my first Fourth of July celebration in the US (!!!) to an excursion all the way to Chicago Chinatown.

I believe the best way to present how much fun I had is with VISUALS. (Note: Sadly, I chose to not include any picture of my friends in this post just so that the protection of their privacy is guaranteed. So, no pictures from more than five dinner night-outs with various friends in town. Sorry!)

So.. without further ado:


My first eye-witnessing of Fourth of July celebration, done right.

My first eye-witnessing of Fourth of July celebration, done right.


A sublime sunset, right after a dinner night out (near Noyes St) with a friend of mine.

A sublime sunset, right after a dinner night out (near Noyes St) with a friend of mine.


A Saturday adventure at Chinatown!

A Saturday adventure at Chinatown!


This is me! With a DELICIOUS smoothie.

This is me! With a DELICIOUS smoothie.


At a public park near the Chinatown.

At a public park near the Chinatown.


Couldn't really tell if they're ducks or geese.. Oops. Also...muddy.

Couldn’t really tell if they’re ducks or geese.. Oops. Also…muddy.


Me again! This time in the Metra train on my way back to Evanston from Chicago downtown.

Me again! This time in the Metra train on my way back to Evanston from Chicago downtown.


Wicker Park Fest...with an imminent rain? Nah, maybe Shake Shack at Old Orchard instead.

Wicker Park Fest…with an imminent rain? Nah, maybe Shake Shack at Old Orchard instead.


Finally, an Instagram photo in summary of this whole summer :) Title: A Midsummer Night's Dream.

Finally, an Instagram photo in summary of this whole summer 🙂 Title: A Midsummer Night’s Dream.

Week 4: Back to the Summer Research! And… the Limbo of Unproductivity

Alright, my dear readers. If you have read my posts up to this point, starting from my very first intro post through my recounting of the first three weeks — well, first of all, thank you. I really appreciate the fact that you have taken your time to see what I’ve been up to.


That said, I’m sad to tell you that I don’t have that much exciting update for the fourth week.


Except that on Monday, July 18, as part of Northwestern’s local partnership program, a handful of Evanston Township High School kids visited NU campus to shadow some of the graduate and undergraduate students conducting research on campus for the summer, including myself. Those kids ranged from rising sophomores to rising seniors. Rising high school sophomores already thinking about career? Are you kidding me? Wtf did *I* do back in those days? Three kids shadowed me that day: one in the morning, two in the afternoon.

Technically I was asked to do the daily tasks as usual, but instead I decided to walk them through my code line by line, explaining what each line of code helps in my research so that they can understand why I do this kind of stuff (I mean, who’d think it’s fun to just sit down watching me looking at the computer screen for hours?).

Incidentally, my task for that day was to clean up the code by removing unnecessary lines, organizing the comments, and reordering and grouping some of the code lines for better readability, which enabled me to do my daily task while explaining the code to those high school kids.


So that was that.


But then for the next two days, I found myself having an unusually hard time getting back on track. Like, on Wednesday, for example, I somehow just could not pull myself to work.

Professor Riecke, my faculty advisor for this project, warned me before that he would be out of the country from mid-July to mid-August for conference and vacation. And John, the graduate student who would provide me guidance as needed, was also in that conference, scheduled to return to office on July 26. And I failed to anticipate the temporary absence of those sources of guidance to be this much impactful on my productivity level.


Do you see that huge blank space under Wed 7/20?

Do you see that huge blank space under Wed 7/20?


Ever since Prof. Riecke and I have decided to abandon the agent-based modeling platform (for the reasons described in one of the previous posts) and switch into MATLAB platform to continue my project, my contribution boiled down to implementing the modifications I have described on my URG proposal in the original MATLAB code file written by Prof. Riecke and his former graduate students.

The problem was, I found his original code file to be poorly organized. It has evolved so over time, as he explained, upon adding bits and pieces of code snippets without sufficiently explaining why each modification was made. Because the people involved in the prior projects already knew what was going on, they didn’t feel the need to explain those things, so they didn’t bother.

Hence, the tasks that I was doing — reorganizing and updating the code, as well as writing down the explanation for each part of the code while making sure the computed output remains the same — were not the most intellectually exciting tasks you could do. In fact, they were pretty tedious. They involved line-by-line comparisons of the code (which, by the way, is this one mammoth code file with over 5,000 lines) to identify where exactly the updates were made, and how. Yes, this is a problem that could have been easily avoided with sound software engineering practices like modularization, proper documentation, and version control, but that was the point — I was doing the cleanup so that this kind of frustration could be reduced in the future.


I’m one of those people who feel depressed upon feeling unproductive. Which didn’t help — it made the looming tasks seem like even greater burden, which made me feel less certain that I’d be able to get them done on time, which then made me procrastinate even more and be even more unproductive. It was a vicious cycle!

It felt absolutely terrible on Wednesday.


Thankfully, I pulled myself back up on Thursday. Once I hit the bottom of unproductiveness and managed to sit down and start working, the so-called “sense of flow” came back. And I was able to write all the looming lines of code that I had to write for this week in one sitting.

But the unproductiveness on Wednesday turned out to be a nontrivial hit. By the end of Friday, I had some output verification tasks outstanding — the tasks I promised myself to complete by the end of the week.

Week 3: Another Promising Initial Result before Entering the Limbo

At the end of Week 2, given all the adjustments made in the previous two weeks, Professor Riecke and I have agreed to use MATLAB and proceed with the next stage of my URG project. As proposed in my URG proposal, I would test how better/worse does the simulated network of neurons perform in odor discrimination when we don’t just have granule cells come and go, but also their connections (i.e., synaptic strengths) with mitral cells come and go — depending on how active those connections are.

Writing code for that feature was pretty straightforward; I finished it in half a day. Once I wrote the necessary code, however, it wasn’t so obvious which values I should set to all the new variables I introduced in the code. So I spent next two or so days on running the code over and over again, with various combinations of possible values.


Meanwhile, two graduate students named John and Xize (both from China) came to work in the same office space (located in the fourth floor of Tech). Professor Riecke has decided to have me work together with John while Prof. Riecke himself goes overseas for conference (and vacation) during Weeks 4-7 of my URG period.


On the door of my summer office space in Tech M457.

On the door of my summer office space in Tech M457.


By the end of Week 3, the code ran without generating any errors. Also, the preliminary result from the simulated neuronal network seemed to indicate faster learning with the new feature added, with an appropriate choice of the new parameters. Upon meeting with Professor Riecke on Friday afternoon of that week, he said that I’m moving along quite faster than he had initially thought!


And that concluded the third week of the URG project, with the previously mentioned two-week break right around the corner.

Week 2: The Bittersweet Taste of *REAL* Research

By the end of Week 1, it seemed like I was making a quick yet substantial progress. I mean, isn’t reaching the first milestone on Day 3 at least *something*?

As it turned out on Monday of Week 2: not really.

Well, I guess yes, I did make a progress. That is, if you count convincing myself of the rationale of, and coming to terms with, the decision to ditch the entire platform I was planning to spend the entire summer on as a “progress”; if you count discarding the code base that showed the promising result (shown on the previous post) based on the same rationale as a “progress”; if you count learning how to get back up after dwelling in the disappointment from the setback for a few days as a “progress.”


The matrix-free agent-based model was shown on Monday to be a no-go.


Essentially, it ran too much more slowly than its matrix-utilizing counterpart to justify the advantage of being able to modularize the code as I explained in the URG proposal. Although it wouldn’t have surprised or bothered me so much if it ran just a bit more slowly, but it ran 70x more slowly than the other NetLogo code that relied heavily on matrices.

So the question became: what’s the point of using NetLogo if I have to use matrices anyway?

In fact, MATLAB was so much better in handling matrices than NetLogo was. For example, changing the size of a matrix could be done with one line of code in MATLAB, but in NetLogo it involved 1) converting a matrix into a list of lists, 2) adding/removing elements to/from the list of lists, and 3) converting the list of lists back into a matrix.


And that’s how I came to ditch NetLogo and agent-based modeling approach for this project.


On a brighter note, coming back to the summer living place in the evening and seeing this cute little bunny on the grass was quite a joy.

On a brighter note, coming back to the summer living place in the evening and seeing this cute little bunny on the grass was quite a joy.


My next setback came at the end of this second week, when I attempted to speed up the current MATLAB code by incorporating the CUDA-integration features provided in MATLAB’s Parallel Computing Toolbox.


I thought letting the graphics processing units (GPUs) handle all the matrix multiplications done throughout the simulation would speed things up a lot. Prof. Riecke and I were hoping for at least 10x speedup compared to a pure CPU-based simulation.

The result? Little/no speedup.

Why was that? Upon looking further into it, I found out that the CPU is much faster on a per-core basis (~100x faster, according to the lecture note from the class on CUDA programming I took this past winter), which makes the problem size of this project (a few hundreds of neurons) too small to make the usage of GPU bring such a huge speedup. Furthermore, a good chunk of the matrix operations done in the MATLAB code were element-by-element, which also decreased the amount of opportunity for a huge speedup.



But after all, this is what a real research was supposed to be about. There’s nothing worth doing that is easy. They say it’s something to be concerned about, not something to rejoice over, when everything goes as expected, with zero major obstacles. This is exactly what they mean when they say that. And after all, I’m getting a good dosage of what a REAL research life is about — what I’ll be experiencing in the graduate school on a daily basis.


What else can I ask for?

Week 1: First Milestone Achieved Already… Wait, Are You Sure?

After a week of spring quarter final exam madness and whatnot.. Here we go!


As in any self-motivated endeavor, I was off to a great start. Within the span of two hours, I got the basic skeleton of the code down. As stated in my URG proposal, the first three weeks were to be spent on building an agent-based model (ABM) code that reproduces the result generated by the MATLAB code written by Professor Riecke (my faculty advisor) and his graduate students. I was using this agent-based modeling platform called NetLogo (developed by Prof. Uri Wilensky at NU) — both because the platform was designed to be really easy to learn and because I had a prior experience with the platform, it wasn’t hard to get the basic skeleton down within the span of two hours. It looked like this:


Writing code in NetLogo is easy enough to produce something like this within two hours.

Writing code in NetLogo is easy enough to produce something like this within two hours.


Yes, I made this…only to completely revamp it by the end of next two days.


On Day 3, my model looked something like this:


Where I ended up at on Day 3.

Where I ended up at on Day 3.


You see, I was iterating fast. Really fast. Partly it was because I was excited to see aesthetically pleasing (and, as a matter of fact, consistent with the prior result!) results like the one above, but partly it was also because I ran into the first roadblock on Day 1 (within like five hours after start), which made me think that I should really buckle up, since it became more likely for there to be A LOT more ahead.

As it turned out on the first day, the simulation model I was envisioning was qualitatively different from Professor Riecke’s original model.

In highly technical terms, I was envisioning a model where the voltage for each postsynaptic neuron is updated each time a discrete synaptic firing occurs. In Prof. Riecke’s model, on the other hand, synaptic firing is treated in aggregate as a firing rate, whose value then changes over the simulated time according to a system of differential equations. Since I was describing neurons with their voltages instead of firing rates like Prof. Riecke’s model did, the two models could not be juxtaposed in the first place.

Essentially this meant, in non-technical terms, that I had to change the way I model from ground-up — from describing neurons with how much electric charge they have to describing them with how often they fire signals to one another. Because the second way of modeling was mostly governed by a system of differential equations, it was much more conducive to using matrix multiplications. Incidentally, NetLogo had a nice matrix extension for me to use.


By the end of the first week, building on the preliminary result from Day 3, I was figuring out a way to quantitatively verify the outputs. But there was one thing in my model that just seemed way off from that in the original model: the number of cells that are created throughout the simulation.

At the same time, I was creating another NetLogo code file, which also described neurons with how often they fire signals to one another, but without using any matrices. My next step for this project stage depended on how much better does this matrix-free version of NetLogo code performs than the one using matrices in terms of accuracy and computational efficiency (i.e., how fast the code runs).


So.. did the matrix-free code performed better? Or worse? Stay tuned!


“I Got the URG!!” …and Now Welcome to Bureaucracy

It was the late morning of Wednesday, April 13, 2016. I was getting out of my 11am class at Tech and checking my phone when I saw the email notification.

Subject line: Proposal application decision

‘Welp. Here it is. So… do I have something to do for this summer?’

I crossed my fingers and opened the email:

Dear Eugene Park,

The Undergraduate Research Grant Committee (URGC) has completed its review of proposals for the current grant competition. As chair of the Committee, I am pleased to inform you that your proposal … has been awarded a Northwestern University Undergraduate Research Grant in the amount of $3500 (U.S. Dollars).




(To everyone who happened to be at Tech first floor lobby during that time, that Asian dude walking out of the building constantly yelling “YES” while staring at his smartphone screen was me. Hi.)

As a student in McCormick, however, there was now a slight complication. McCormick also has its own summer research grant program in the amount of $5,000, and its application was due before the URG result came out. Because the result for that wasn’t going to be released for another week or two, accepting the URG right away would automatically disqualify me from receiving the grant from McCormick, due to the URG rule. And it gives me more money But I also had to formally accept the URG soon so that I can get all the paperwork done on time. And the clause “Please accept the award as soon as you are able” in the above email scared me a bit tbh

As it turns out, the dean of McCormick already knew that I received the URG. Maybe I was too loud at the Tech lobby that day About two weeks later, I received from McCormick grant committee one of the few rejection emails that I was able to brush off really quickly.

Because hey, you know what — I GOT THE URG.

Once I was ready to formally accept the URG, I initiated the paperwork process right away. Because I am an international student (i.e., holding a visa), I had to keep the most up-to-date information in something called Foreign National Information System (FNIS). As a “non-resident alien” (as US Customs and Immigration Service calls me), this is but one of the many bureaucratic measures international students face. The following quote from the FNIS Request form summarizes it well:

FNIS must be updated EVERY time you extend your status or change status while being paid by Northwestern. You must also always bring your original immigration document, I-94, and passport in PERSON to the Payroll Office to extend your work eligibility. … Failure to complete these requirements may result in incorrect taxation and termination of employment.

So I took my I-20 (the “original immigration document”), printout of I-94, and passport directly to the Payroll office. (This was actually NOT what I was supposed to do; more on that below.) A lady at the front desk kindly looked up my former NU employment record (from when I was a Northwestern employee 1.5 years ago) and told me to go ahead and start a new I-9 eVerify (the electronic process for all new employees and returning employees after 6 months of inactivity) right at that spot. She also checked the validities of Form W-4 (employment form; federal and state level separate) and my direct deposit form.

I then went back to the Office of Undergraduate Research and notified them that all paperworks have been done, only to realize like a minute later that the IL Department of Children & Family Services Form was missing. I ended up successfully giving them the completed form, completing everything within the span of two hours. And I thought that was it for me to be able to receive the $$$.


When I met Dr. Peter Civetta at the URG recipient reception event, it was revealed that I was not supposed to process the W-4 forms, IL Department of Children & Family Services form, and the FNIS Request Form (with the other documentations) directly with the Payroll Office, but rather to bring them to the Office of Undergradute Research so that they can work with the Payroll Office and ensure everything has been processed. Damnit just show me the money So I explained everything to Dr. Civetta or should I call him Peter?, and he got back to me on the next day confirming that all matters have been sorted out, and everything is well.

Except that it still wasn’t. A few days later, I received another email from Peter Dr. Civetta that I had to redo the I-9 eVerify process to get paid. Confused, I went straight into his office, telling him that I thought everything was fine. When I went to Payroll Office to see what was happening (as he kindly told me to), I learned why they notified that I had to redo the process.

They didn’t know that Eugene Park and Jaesuk Park were the same person. Sucks to have two names, huh?

By the way, the lady at the Payroll office front desk was truly the best. As I was being paranoid (read: freaking out) about paperworks slipping through the crack and the USCIS somehow coming to get me deported and %#U#*U(&##, she calmly assured me that everything is fine, and I am good to go. God bless her.

Fortunately, once that was sorted out, everything else went smoothly. And on Friday, May 27, 2016, I saw on my online bank statement a clearly printed green text, ‘$3,500.00’.

In the next couple blog posts, I will recount the first three weeks of summer research.

Draft, Revise, and Repeat: Writing the URG Proposal

I know it’s different from what I said in the previous post, but I thought I would be able to express why I chose my summer research topic in a more coherent way if I postpone it until later. Also, I realized that this post would become too long if I put the other two stories I promised before on one post, so I have decided to break them up into two posts. Enjoy!


I thought it was an exaggeration when a friend of mine (who received an Academic Year URG around that time) told me, “Prepare to do at least five revisions.”

Is that really necessary?’ I thought at first. Part of it was that I was not used to revising any piece of writing more than twice; another part of it was that I had less than a month until the application deadline — I didn’t quite yet believe in myself enough at that point. Will I even be able to get through three revisions, given how hard it is to schedule meetings with people who can actually help me in revising?

Little did I know that I would end up actually writing six drafts in total before receiving the money.

Finding this flyer in my res college hallway was a huge blessing.

Finding this flyer in my res college hallway was a huge blessing.

During the course of proposal writing, I was one of the beneficiaries of the student outreach effort from the Office of Undergraduate Research, namely the research proposal workshops held in dining halls. I would bring a printed copy of the draft, and a staff member from the office (S/O to Veronique!! And also to Megan at one of the walk-in hours towards the end) would closely go through the draft with me, focusing the feedback on the proposal organization (i.e., what elements to add, which elements to expand, and which elements to condense upon running out of the two-page space limit).

After I receive the feedback, I would go ahead and write the next draft, and this time I would bring it to Professor Riecke, who has done computational neuroscience research in my major department and would later become the faculty sponsor. He would also give me lots of feedback, but mostly focused on the content (i.e., whether a given paragraph/sentence conveys factually correct information in sufficient detail). I would then incorporate the feedback to write the next draft and bring it again to an Office of Undergraduate Research staff, and the cycle would restart.

The greatest weakness of my drafts in multiple feedback sessions in a row was on the methodology section. I kept falling short on sufficiently answering, How will I know whether or not my result so far is correct so that I can move onto the next stage in the project? There is only so much space I could fit everything in, so the background section was the major target for condensation throughout the revision process.

(For those of you not familiar with different components of a URG proposal, see here.)

Looking back, writing the methodology section was an exercise of dividing the whole project into a sequence of stages and specifying, for each stage, what output would indicate that I am ready to move onto the next.

At any event, after frantically going back and forth between the Office of Undergraduate Research staff and Prof. Riecke, I was able to complete the sixth (final) draft, which was the fifth revision, within the span of nineteen days from the day I began the first draft. Not only did my friend turn out to be exactly right, but also the people whom I had perceived to be not very approachable turned out to be so approachable and willing to help throughout the entire process of the grant proposal writing.

Finally, the thrill (read: anxiety) upon uploading the proposal on the URG application portal was really one of a kind.

Ready, Set, Go!

Alright, first things first.

Notice the date of this post. It’s already July. And I started my project on June 13 (so like three and a half weeks ago). What this means is that I’m already in the middle of the project. I’ve already made quite a lot of progress, encountered A LOT of roadblocks (for a 3-week period), and had to adjust the project direction multiple times. Hence throughout this post, you’ll see quite a bit of “I was to” phrase, particularly when I describe the background of how my project came about, my anticipated day-to-day tasks, and anything else that was true at the beginning of this project.

So what is this all about?

On April 13, 2016, the Office of Undergraduate Research has agreed to pay my summer living expenses in lump sum so that I can stay in Evanston and conduct an eight-week-long independent research project: to model neurons in the olfactory system to further elucidate how exactly do mammals like mice discriminate between odors that are highly similar.

Because the nature of my research project is computational, I was not to work in a traditional “lab” setting (unlike many of my friends who are also doing summer research in STEM) that one frequently imagines for STEM research. You know, where everyone’s wearing lab coats in a room full of sophisticated equipments and measurement tools — no, none of that. Instead, I was to be sitting in front of my good five-year-old MacBook Pro almost the whole time — writing codes, running the codes, and repeat.

Sound dull?

No, it’s fascinating! Think about it: you’re essentially putting the part of a mouse (particularly the part in charge of smelling things) inside a computer. And you’re playing around with the mouse purely inside the computer, so there is absolutely zero animal abuse in and of itself (okay, well, the work I do has to eventually be verified by working with real living mice, so I guess not quite?). Moreover, you’re not just playing around with the mouse — you’re also growing the mouse each time you run the code — up to the point where it comes to learn to separate one smell (represented as a series of numbers so that it can understand) from another one that’s really similar.

As you’ll see in one of the later posts, however, the time scale I’m simulating (several days/weeks) actually turns out to be one of the factors I somehow missed when I was first writing the proposal, as well as the reason for one of the earlier adjustments in my project direction, which included a change of the modeling platform I was to use.

More on that coming soon.

The timeline of events is as follows: first, I conduct the research project for three weeks from the week of June 13 to the end of the week of June 27 (that is, July 1). Then I take a two-week break from the research to complete a short, intensive biology laboratory course (during which I am not allowed to continue on my research project), which I count towards my academic degree requirement, from July 5 to July 15. Afterward, I come back and finish the research project during the remaining five weeks of the grant period, from the week of July 18 to the end of the week of August 15 (that is, August 19).

A few days ago was the Fourth of July, so right now is the first of the two weeks of break from the research project, which makes it a perfect time to document all the things that happened during the first three weeks. Once that’s over and I return back to research, I’ll be using this blog to document my progress and jot down my thoughts, hopefully on a regular basis.

In the next blog post, I will be recounting in detail on how this project came about, including the journey of crafting the research proposal and getting it revised over and over again, the excitement when I was notified of the award on April 13, and the whole shenanigans of getting all the paperwork done to see the text ‘$3,500’ on my bank statement.

Ready to roll?