Beginner's Tools for Research

While getting into research, the first thing that overwhelms most is the literature survey. Initially, it might seem like it’s never-ending. Each article will cite plenty of other articles to read for an overall understanding. Eventually, it can be a real struggle to keep track of what you have read and find a specific article in your mind.

Over time, you might remember keywords and images to search for the article to dig deeper into the details. Scopus, Google Scholar, or just a web search is utilized for finding articles. One good way to keep track of an article is to write a line or two about it under a broader topic and cite it. You can do it in a notebook/diary, but with an increasing number of articles and topics, it might be difficult to navigate.

Another practical issue is accessibility. When you are discussing with someone, you may have your computer in front of you rather than the diary for a quick search. Then, if you want to write and share something, it is 99% of the time digital, so it might be faster if you already have something written digitally. Although nothing can beat pen and paper while connecting ideas or resolving complex queries.

During experiments, you will generate a lot of data repeatedly, and processing and visualizing them manually (Excel-Origin way) can be frustrating. You will get addicted to automation and workflows for faster understanding of data, and be less bored once you get used to writing codes/scripts.

In this context, I will give a glimpse of three free tools I found very useful while starting as a PhD student -

  • Zotero - for collecting, navigating, and citing articles
  • Zettlr - for writing, consolidating topics with citations and cross-referencing
  • Python and VS Code - automating data processing and visualizations.

Zotero

Zotero is a free, easy-to-use tool to help you collect, organize, annotate, cite, and share research.’ When you get a relevant paper, just copy the DOI and enter it in Zotero; it will automatically fetch all details of the paper and, if possible, also the PDF in the Zotero library. You can have different libraries in Zotero for different research topics.

The features I find attractive in Zotero -

  • adding new papers just by entering the DOI
  • exporting citations for $\LaTeX$
  • citing directly in MS Word
  • integrated search bar
  • integrated PDF reader with highlighting and note-taking
  • tagging
  • RSS feeds for getting journal research updates
  • auto update exported bib file with BetterBibTex
  • visualizing connection between the articles with Cita
  • multi-device sync with account (but limited storage)
Adding citations in Zotero

For getting more detailed use cases, go through the Zotero documentation

Better BibTeX (Zotero Plug-In) - LaTeX - LibGuides at University of Massachusetts Amherst
Wikidata’s Cita page

Zettlr

Writing long documents in MS Word, especially when you’ve got figures and equations, can make you :grimacing: :sob:! That’s why a lot of us switch to LaTeX. It makes writing long documents way easier since you don’t have to stress about formatting, numbering, or hunting for symbols for equations.

But in LaTeX, you need to compile the document you have written every time you want to see the final result. While just jotting down a draft, it might feel like a lot of work, and you go back to Word. Markdown comes as a saviour with very minimal writing syntax, but works like a live LaTeX document. There are different Markdown flavours available with a few variations in syntax.

For jotting down connected topics or ideas, and also writing articles for publishing, Zettlr is a tool of comfort. Interestingly, whatever you write in Zettlr, you can export to PDF, Word, LaTeX, HTML, and so on. It can serve as a primary drafting station. Citations, equations, links, images, videos, tables, lists, anything at ease. This page itself is written in Zettlr.

Writing equation and symbols in Zettlr

Using a bibliography source file loaded, you can seamlessly add citations inline -

Adding citations in Zettlr

Visit Zettlr documentation page to explore the possibilities.

Basic markdown sytax
Zettlr citations documentation
Zotero and Zettlr integration
Hendrick’s blog post on Zettlr
pandoc-crossref releases page

Python and VS Code

Most of the time, an experiment is repeated multiple times, and the data have to be processed after every run to properly understand the results. Automating the process, or at least parts of it, makes the workflow significantly faster. For example, when I record a series of continuous spectra to observe changes in an optical mode, the experiment generates thousands of spectra stored as columns in the dataset, as shown below.

# wl    scan1	scan2	scan3	scan4	scan5	scan6 	scan7	scan8	scan9...
420.27	0.6294	0.63077	0.68675	0.62037	0.67407	0.65529	0.68027	0.66025	0.69008...
420.87	0.69319	0.61734	0.66561	0.71034	0.66313	0.7125	0.69145	0.67011	0.6864...
421.46	0.67991	0.68286	0.65843	0.66553	0.64906	0.64739	0.67605	0.67591	0.68637...
422.06	0.65386	0.63681	0.71062	0.67727	0.67607	0.64761	0.68161	0.63457	0.69282...
422.65	0.64531	0.6476	0.69234	0.6564	0.66911	0.67382	0.67398	0.68798	0.66124...
423.25	0.63986	0.66041	0.65199	0.65917	0.66475	0.63997	0.65185	0.67728	0.6418...
423.84	0.57841	0.58663	0.63932	0.62626	0.62668	0.62391	0.65501	0.62359	0.63286...
.
.

Plotting the spectra, identifying the modes, and calculating their quality factors can be challenging without using code. The left image shows the raw data as a colormap, where the y-axis represents wavelength and the x-axis represents scan number. From this data, I want to determine the quality factors of the modes and compare the spectra with simulations to extract the actual values of a parameter along the x-axis. Doing this manually using graph-plotting software would be a nightmare — especially when I have around 20 such datasets to analyze! The image on the right shows the final processed spectra, with the modes traced and the x-axis labeled as thickness.

For this the flow of code code is -

flowchart LR
    load["Load TXT"]
    slice["`pick spectrum
	(one column)`"]
	findpeak["`find the dips 
	`"]
	compare["`compare with 
	simulation`"]
	storepeak["store data"]
	plot[plot]
    load --> slice --> findpeak --> compare --> storepeak --> plot
	storepeak --> slice

	linkStyle default stroke:red,stroke-width:4px

The Python packages needed for this are NumPy, SciPy, and Matplotlib only.

Once the script is ready, for every new dataset you simply need to provide the file path, and the script will return the processed plots and extracted data automatically. Some pieces of code will be used repeatedly, so over time you will start developing your own functions or even small libraries that can be imported into other scripts. Writing your first script may feel slow and frustrating, but the time it saves later is absolutely worth it.

Python is a free and open-source programming language widely used because of its simple syntax, extensive collection of libraries, and large online community with active forums and Q&A resources. Whatever you want to do with your data, chances are someone has already discussed it online. Once you install Python, try running -

import antigravity

Also, for generating repetitive publication-quality plots, custom plotting styles can be saved as .mplstyle files and reused while plotting.

Python is the interpreter, but you still need a text editor to write and run the code. The choice of editor can significantly affect how quickly you can write code and how frustrated you feel while working. With its wide range of extensions and keyboard shortcuts, Visual Studio Code (VS Code) makes it easier to manage projects of any size. If you want to work with Jupyter notebooks, VS Code supports them seamlessly.

Python for beginners
Customizing Matplotlib with style sheets and rcParams
SciencePlots, mpltex, LovelyPlots
Quick Start Guide for Python in VS Code
vscode tips and tricks

Further Reading

‘How to keep a lab notebook’ post in science.org