Code Monkey home page Code Monkey logo

Hey!

Welcome to my Github profile. A tiny corner on the internet you somehow stumbled into!

I’m a physicist and worked on the search for ‘solar axions’ using ‘helioscopes’ (CAST) during my PhD thesis (axions are hypothetical particles that help to solve a mathematical problem in physics, but might be a dark matter candidate. Helioscopes are “telescopes” that observe the Sun using a magnet instead of some kind of mirror).

In some way, I was lucky to be doing my PhD research in a group where we always had too few people for too many research projects (sounds familiar? 🤭). It meant I had to / could write all the analysis code for my thesis work from scratch in whatever language I wanted. Back in 2016 I was generally a fan of Python, but was annoyed by its slow performance if one wasn’t careful. While shopping around for a suitable language, I eventually stumbled on Nim and the rest is history.

I’m interested in coding especially in applications for scientific computing and machine learning. Recently I’ve also been dabbling a bit more on the cryptography side (mostly related to Ethereum).

Below is an overview of my work, split by different categories of things I care about.

Unless otherwise specified, all code below is written in Nim.

Physics research 🧑‍🔬🔭📡☀️

  • phd - The git repository of my PhD thesis. See https://phd.vindaar.de for the companion website to my thesis, which links to the publication and an (extended) HTML version.
  • TimepixAnalysis - The main data analysis framework for my PhD thesis.
  • xrayAttenuation - A library for the calculation of X-ray interactions with matter (transmission, reflection, …), including typical surface coatings used in modern X-ray optics.
  • TrAXer - Interactive X-ray raytracer for the simulation of X-ray optics.
  • mclimit - Nim port of ROOT’s TLimit class / Tom Junk’s mclimit C code for confidence level calculations for searches with small statistics.

Libraries interfacing with common tools

  • NimBoltz - A Magboltz interfacer from Nim, which generates Magboltz input files for the user and can act as a Magboltz runner (running multiple processes in parallel). Magboltz is the program to simulate transport of electrons in gaseous under the influence of electromagnetic fields (i.e. to calculate gas properties as used in gaseous detectors).
  • GarfieldNim - An (incomplete) Nim wrapper for Garfield++ (tool / library for the simulation of particle detectors commonly used for micropattern gaseous detectors).
  • mcpl - A Nim wrapper for the mcpl (Monte Carlo Particle List) file format.
  • horizonsAPI - A library to interface with JPL’s Horizons API (for solar system orbital data).

Scientific computing libraries 🔬🧮🔥

  • ggplotnim - A Nim plotting library heavily inspired by ggplot2.
  • ginger - The backend library for ggplotnim, which handles the actual rendering of ggplotnim plots to PDF, SVG, PNG targets (mainly via Cairo or TikZ).
  • Unchained - A library for compile-time physical unit checking and conversions.
  • Measuremancer - A library for automatic error propagation of measurements with uncertainties.
  • nimhdf5 - Nim bindings to the HDF5 library (similar to h5py).
  • rnim - A library to interface with the R programming language from Nim (similar to nimpy or nimjl).
  • Arraymancer - Co-maintainer of Arraymancer, Nim’s most important tensor library (think numpy).
  • Flambeau - Co-maintainer of Flambeau, our Nim wrapper of libtorch, the C++ backend of PyTorch.
  • nimlopt - Nim wrapper of NLopt, a non linear optimization library.
  • nim-mpfit - Nim wrapper of cMPFIT, a Levenberg-Marquardt least squares fitting library.
  • impulse - Co-maintainer of impulse, a signal processing library for Nim.
  • scinim - Co-maintainer of scinim, a general library for different aspects related to scientific computing in Nim. What might become an equivalent to scipy for Nim in the future.

General purpose libraries 🖥️📄

  • shell - A mini DSL to execute processes from Nim, in the form of a shell-like DSL. Supports constructs like expect.
  • LatexDSL - A DSL to generate LaTeX from Nim, which includes some compile-time checking, easy TeX c
  • cacheMe - A helper library to cache function calls over multiple program runs (intended for expensive, deterministic operations).
  • flatBuffers - A library to save / load nested Nim object as flat binary files.
  • forked - Provides a simplified abstraction forked over cligen’s procpool (multiprocessing). Multiprocess your for loops!
  • JsonSchemaValidator - A JSON schema validation library.
  • orgtable - A (very early) library to produce Org mode tables from Nim data structures.

Experimental ideas and hacks 🧪⚗️🌋

  • NimJit - Attempts to write a JIT compiler for Nim based on libgccjit. Initial attempts based on semchecked Nim AST, current version based on NIR (Nim’s current highly experimental IR).
  • hotpatching - Fun hack to hotpatch a Nim function at runtime.

Machine learning projects 📜🧠🤯📎

  • llama2nim - A Nim port of Andrej Karpathy’s llama2.c.
  • llm.nim - A Nim port of the CPU version of Andrej Karpathy’s llm.c.
  • train_ingrid.nim - The training code for the MLP used for data classification as part of my PhD thesis (based on Flambeau / libtorch).
  • QuasarContANN - Work from 2014 on using MLPs and CNNs for Quasar spectra predictions (prediction of the spectra in the Ly-α forest) using Theano.
  • runtimeGrad - A library for 3 different automatic differentiation implementations (Wengert list, dual numbers & complex step derivative).
  • abyss - A very experimental attempt at a Zygote.jl like source-to-source, reverse mode automatic differentiation library for Nim.
  • astGrad - A compile-time symbolic differentiation library to differentiate (math based) Nim code based on its AST.
  • NeuralNetworkLiveDemo - Demo (part of a talk) of training a simple MLP on MNIST with a browser based live interface into the training progress.

Other languages

  • expressionEval - A C++, header only, math expression evaluator library, intended to be used as part of a ROOT based C++ framework (but never was).

Sebastian's Projects

alea icon alea

Define and compose random variables

arraymancer icon arraymancer

A fast, ergonomic and portable tensor library in Nim with a deep learning focus

cacheme icon cacheme

A basic procedure caching macro helper

chroma icon chroma

Everything you want to do with colors, in nim.

cligen icon cligen

Nim library to infer/generate command-line-interfaces / option / argument parsing; Docs at

detectorlib icon detectorlib

It is used to define a detector readout topology, and access gas or other detector properties. It also implements processes including routines for event reconstruction from real detector data, and/or emulation of different physical response effects, such as electron diffusion.

docopt.nim icon docopt.nim

Command line arguments parser that will make you smile (port of docopt to Nim)

emacs.d icon emacs.d

This repository contains my emacs.d to be able to synchronize my emacs settings between different computers.

expressioneval icon expressioneval

Header only math expression library for C++. Not pretty, but works.

flatbuffers icon flatbuffers

Another library for reading/writing Nim objects to binary files

forked icon forked

Syntax sugar for `cligen`'s procpool for easy multiprocessing

framework icon framework

The main project containing the core C++ classes defining framework behaviour and primordial analysis and helper tools. It centralises all other rest-for-physics repositories through submodules.

genki-study-resources icon genki-study-resources

A collection of exercises for practicing what is taught in Genki: An Integrated Course in Elementary Japanese.

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.