Skip to main content

Library for Silicon Photomultipliers simulation.

Project description

SimSiPM

GitHub release

GCC AppleClang

GitHub issues GitHub last commit GitHub license

Downloads Downloads

Authors

SimSiPM has been developed by Edoardo Proserpio under the supervision of professor Romualdo Santoro at University of Insubria Como - Italy.
SimSiPM is distrubuted as an Open Source project and if you plan to use it please acknowledge us as authors or cite us in your paper.

Table of contents

  1. Introduction
  2. Features
  3. Installation
  1. C++ Basic use
  2. Python Basic use
  3. Advanced use
  1. Contributing

Introduction

SimSiPM is a simple and easy to use C++ library providing a set of object-oriented tools with all the functionality needed to describe and simulate Silicon PhotonMultipliers (SiPM) sensors. The main goal of SimSiPM is to include the response of SiPM sensors, along with noise and saturation effects, in the description of a generic detector in order to have a more detailed simulation. It can also be used to perform optimization studies considering different SiPMs models allowing to choose the most suitable product available on the market.

SimSiPM code mostly follows FCCSW rules and guidelines concerning C++. SimSiPM has been developed especially for high-energy physics applications and particle physics experiments, however its flexibility allows to simulate any kind of experiments involving SiPM devices.

SimSiPM does not have any major external dependency making it the perfect candidate to be used in an already existing environment (Geant4 or DD4HEP) or as "stand-alone".

Features

  • Easy to use:
    • Straight forward installation without external dependencies
    • Easy to use Object Oriented paradigm
    • Python implementation via Pybind11
  • Description of SiPM sensors:
    • Driven by parameters that can be obtained from the datasheet or laboratory measurements
    • High level of customization allowing to describe a wide range of use cases
    • Does not include tedious electronic circuit simulations
  • High performance:
    • Very fast signal generation
    • Reliable description of SiPM signals and related quantities over all the dynamic range
    • Low memory footprint (if you do not intend to save all waveforms!)

Installation

SimSiPM is fully functional without any external dependencies other than CMake.

Optional dependencies:

  • Pybind11: to generate python bindings
  • Doxygen: to generate documentation
  • GTest/Pytest: for advanced testing

C++

SimSiPM can be installed using the standard CMake workflow:

# In SimSiPM directory
cmake -B build -S .
make -C build
make -C build install

It is advisable to enable compiler optimizations like -O3 and -mfma -mavx2 since some parts of code are specifically written to exploit vectorization capabilities of the compilers.

Installation directory can be specified with -DCMAKE_INSTALL_PREFIX variable.

Python bindings can be compiled and installed by adding the variable -DCOMPILE_PYTHON_BINDINGS=ON but this requires Pybind11. The corresponding python module is called SiPM and each class can be accessed as a sub-module.

import SiPM
from SiPM import SiPMSensor

print(SiPM.__version__)

Python

It is also possible to use pip to install only the Python version using a precompiled binary wheel. This installation method is easyer but performance may be impaired with respect to the C++/Pybind11 installation.

pip install SiPM

C++ basic use

SimSiPM focuses on simplicity! It does not make use of pointers, or custom classes as parameters of the simulation or input. In most cases a std::vector is all that you need in order to get started.

SiPMProperties

SiPMProperties class stores all SiPM and simulation parameters. It can be used to define the SiPM detector model in use and it can be shared among different SiPMs in case many identical sensors are needed.

#include "SiPMProperties.h"
using namespace sipm;

// Create a SiPMProperties object
SiPMProperties myProperties;

// Edit some parameters
myProperties.setDcr(250e3);           // Using proper setter
myProperties.setProperty("Xt",0.03);  // Using parameter name
std::cout<<myProperties<<"\n";        // All classes can be printed using std::cout

// ===> SiPM Properties <===
// Address: 0x7f2cf11ea018
// Size: 1.00 mm
// Pitch: 25.00 um
// Number of cells: 1600
// Hit distribution: Uniform
// Cell recovery time: 50.00 ns
// Dark count rate: 250.00 kHz
// Optical crosstalk probability: 3.00 %
// Delayed optical crosstalk is OFF
// Afterpulse probability: 3.00 %
// Tau afterpulses (fast): 10.00 ns
// Tau afterpulses (slow): 80.00 ns
// Cell-to-cell gain variation: 5.00 %
// SNR: 30.00 dB
// Photon detection efficiency is OFF (100 %)
// Rising time of signal: 1.00 ns
// Falling time of signal (fast): 50.00 ns
// Signal length: 500.00 ns
// Sampling time: 1.00 ns

SiPMSensor

SiPMSensor class is the core of the simulation and is created from a SiPMProperties class. It stores input photoelectrons, it runs the event simulation and gives a signal as output.

#include "SiPMProperties.h"
using namespace sipm;

// Create a SiPMSensor object
SiPMSensor mySensor(myProperties);

// Change parameters
mySensor.properties().setAp(0.01);    // Using proper getter/setter
mySensor.setProperty("Pitch", 25);    // Using parameter name
std::cout<<mySensor<<"\n";

// ===> SiPM Sensor <===
// Address: 0x7f48ef5d62f0
// ===> SiPM Properties <===
// Address: 0x7f48ef5d62f0
// Size: 1.00 mm
// Pitch: 25.00 um
// Number of cells: 1600
// Hit distribution: Uniform
// Cell recovery time: 50.00 ns
// Dark count rate: 200.00 kHz
// Optical crosstalk probability: 5.00 %
// Delayed optical crosstalk is OFF
// Afterpulse probability: 1.00 %
// Tau afterpulses (fast): 10.00 ns
// Tau afterpulses (slow): 80.00 ns
// Cell-to-cell gain variation: 5.00 %
// SNR: 30.00 dB
// Photon detection efficiency is OFF (100 %)
// Rising time of signal: 1.00 ns
// Falling time of signal (fast): 50.00 ns
// Signal length: 500.00 ns
// Sampling time: 1.00 ns
// Address :0x7ffcded8a300
// ===> SiPM Debug Info <===
// Number of photons impinging to the sensor: 0
// Number of photoelectrons detected: 0
// Number of dark count events (DCR): 0
// Number of optical crosstalk events (XT + DTX): 0
// Number of delayed optical crosstalk events (DXT): 0
// Number of afterpulsing events (AP): 10.00

SiPMAnalogSignal

SiPMAnalogSignal class is a wrapper around std::vector that expands its features. It contains the samples of the SiPM waveform along with some properties and methods used to extract features from the signal.

SiPMAnalogSignal signal = mySensor.signal();
double sampling = signal.sampling();
double sample = signal[10];
std::cout<<signal<<"\n";

// ===> SiPM Analog Signal <===
// Address: 0x7f48ef5d64e8
// Signal length is: 0.00 ns
// Signal is sampled every: 1.00 ns
// Signal contains: 0 points

Input and simulation

The only input needed for the simulation of a SiPM event is the arriving time of each photon to the sensitive surface of the SiPM detector. In order to have a detailed description of the dependency of the PDE with respect to the photon wavelength it is possible to add the wavelength information togheter with the time information.

It is possible to add individual photons in a loop

mySensor.resetState();
for(...){
  // Generate times for photons
  mySensor.addPhoton(time);   // Appends a single photon (time is in ns)
}
mySensor.runEvent();          // Runs the simulation

It is also possible to add all photons at once

std::vector<double> times = {13.12, 25.45, 33.68};
mySensor.resetState();
mySensor.addPhotons(times);    // Sets photon times (times are in ns) (not appending)
mySensor.runEvent();           // Runs the simulation

Signal output and signal features

The simulation can output the signal waveform and can also perform some simple features extraction.

SiPMAnalogSignal mySignal = mySensor.signal();

double integral = signal.integral(5,250,0.5);   // (intStart, intGate, threshold)
double peak = signal.peak(5,250,0.5);   // (intStart, intGate, threshold)
double toa = signal.toa(5,250,0.5);   // (intStart, intGate, threshold)
double tot = signal.tot(5,250,0.5);   // (intStart, intGate, threshold)

// It is possible to iterate throw an analog signal
for(int i=0;i<mySignal.size();++i){
  double sample = mySignal[i]
  // Do something with sample
}

// It is possible to convert an analog signal to a simple vector
std::vector<double> waveform = mySignal.waveform();

Complete event loop

This is an example of "stand-alone" usage of SimSiPM. In case SimSiPM is used in Geant4 or other framework, then the generation of photon times has to be caryed by the user (usually in G4UserSteppingAction) and the event has to be simulated after all photons have been added (usually in G4UserEventAction).

// Create sensor and set parameters
SiPMProperties myProperties;
SiPMSensor mySensor(myProperties);
// ...

// Store results in here
std::vector<double> integral(NEVENTS);
// peak
// ...

for(int i=0;i<NEVENTS;++i){
  // Generate photons times accordingly
  // to your experimental setup
  mySensor.resetState();
  mySensor.addPhotons(times);
  mySensor.runEvent();

  SiPMAnalogSignal mySignal = mySensor.signal();

  integral[i] = signal.integral(10,250,0.5);
  // peak
  // ...
}

Python basic use

Python bindings are generated for all the classes using Pybind11. This allows for an almost 1:1 mapping of the C++ functionalities in Python.

from SiPM import SiPMSensor, SiPMProperties

myProperties = SiPMProperties()
myProperties.setDcr(250e3)
myProperties.setProperty("Xt",0.03)

mySensor = SiPMSensor(myProperties)

mySensor.resetState()
mySensor.addPhotons([13.12, 25.45, 33.68])
mySensor.runEvent()

mySignal = mySensor.signal()
integral = mySignal.integral(10,250,0.5)

Advanced use

PDE

No Pde

Tracking a large number of photons throwgh a scintillator crystal or optical fiber is a very CPU-intensive task. Since most of photons will not be detected due to photon detection efficiency (PDE) it is a waste of time to track all of them.

By default SiPM sensors have PDE set to 100% meaning that every photon given as input is converted to a photoelectron, detected and generates a signal. This allows to generate and track only the photons that will be detected by the sensor. For example the geometry of IDEA dual-readout calorimeter requires the simulation of 130 millions of optical fibers and in each one of those photons are tracked by Geant4 requiring a lot of CPU time. It would be meaningless to track photons along the fibers if they are not detected, so PDE is evaluated before the tracking of photons.

Simple PDE

It is possible to account for PDE in the simulation using a fixed value of PDE for all photons. In this case the probability to detect a photon is proportional to PDE. This option can be used if the spectrum of emitted photons is very narrow or if the SiPM has a wide and flat spectral response.

// Set in SiPMProperties
myProperties.setPdeType(sipm::SiPMProperties::PdeType::kSimplePde);
myProperties.setPde(0.27);

// Change setting of a sensor
mySensor.properties().setPdeType(sipm::SiPMProperties::PdeType::kSimplePde);
mySensor.setProperty("Pde",0.27); // or mySensor.properties().setPde(0.27);

To revert back at default setting of 100% PDE use setPdeType(sipm::SiPMProperties::PdeType::kSimplePde)

Spectral PDE

In SiPM sensors PDE strongly depends on photon wavelength. In some cases it might be necessary to consider the spectral response of the SiPM for a more accurate simulation. This can be done by feeding the SiPM settings with two arrays containing wavelengths and corresponding PDEs.

In this case it is also necessary to input photon wavelength along with its time.

std::vector<double> wlen = {800, 750, 700, 650, 600, 550, 500, 450, 400, 350, 300};
std::vector<double> pde = {0.22, 0.30, 0.40, 0.45, 0.50, 0.50, 0.45, 0.35, 0.25, 0.15, 0.0};

myProperties.setPdeType(sipm::SiPMProperties::PdeType::kSpectrumPde);
myProperties.setPdeSpectrum(wlen,pde);

// Adding photons to the sensor
mySensor.addPhoton(photonTime, photonWlen);
// or mySensor.addPhotons(photonTimes, photonWlens);

The input values for PDE given by the user are interpolated using the formula below to obtain additional 25 values over the given range. Then, during the simulation, values are linearly interpolated between the points of the newly obtained curve.

Hit distribution

By default photoelectrons hits are considered to be uniformly distributed on the surface of the SiPM. In most cases this assumption resembles what happens in a typical setup but sometimes the geometry of the sensor or the optical characteristics of the setup lead to an inhomogeneous distribution of the light on the sensor's surface.

Uniform hit distribution

This is the default setting: each SiPM cell has the same probability to be hitted. This setting should work in most of scenarios.

myPropertie.setHitDistribution(sipm::SiPMProperties::HitDistribution::kUniform);

Circular hit distribution

In this case 90% of photons are placed in a circle centered in the sensor and with a diameter that is the same as the sensor's side lenght. The remaining 10% is distributed outside this circle. This setting resembles those cases where light is focused in the central region.

myPropertie.setHitDistribution(sipm::SiPMProperties::HitDistribution::kCircle);

Gaussian hit distribution

In this case 95% of the photons are distributed following a gaussian distribution centered in the sensor. The remaining 5% is distributed uniformly on the sensor.

myPropertie.setHitDistribution(sipm::SiPMProperties::HitDistribution::kGaussian);

Contributing

Feel free to contact me if you have any problem while including SimSiPM in your project, if you find a bug or have any suggestion or improvement. I would be pleased to discuss it with you.

Cite

Even thou SimSiPM has been used in simulations related to published articles, there is not yet an article about SimSiPM itself. So if you need to cite SimSiPM please use:

@manual{,
title = {{SimSiPM: a library for SiPM simulation}},
author = {Proserpio, Edoardo, and Santoro, Romualdo},
address = {Como, Italy},
year = 2021,
url = {https://github.com/EdoPro98/SimSiPM}
}

Contacts

Author: Edoardo Proserpio
Email: edoardo.proserpio@gmail.com (private)
Email: eproserpio@studenti.uninsubria.it (instiutional)

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

sipm-2.3.1.tar.gz (31.0 kB view details)

Uploaded Source

Built Distributions

SiPM-2.3.1-cp313-cp313-musllinux_1_2_x86_64.whl (1.2 MB view details)

Uploaded CPython 3.13 musllinux: musl 1.2+ x86-64

SiPM-2.3.1-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (245.3 kB view details)

Uploaded CPython 3.13 manylinux: glibc 2.17+ x86-64

SiPM-2.3.1-cp313-cp313-macosx_10_13_x86_64.whl (182.9 kB view details)

Uploaded CPython 3.13 macOS 10.13+ x86-64

SiPM-2.3.1-cp312-cp312-musllinux_1_2_x86_64.whl (1.2 MB view details)

Uploaded CPython 3.12 musllinux: musl 1.2+ x86-64

SiPM-2.3.1-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (245.8 kB view details)

Uploaded CPython 3.12 manylinux: glibc 2.17+ x86-64

SiPM-2.3.1-cp312-cp312-macosx_10_13_x86_64.whl (182.8 kB view details)

Uploaded CPython 3.12 macOS 10.13+ x86-64

SiPM-2.3.1-cp311-cp311-musllinux_1_2_x86_64.whl (1.2 MB view details)

Uploaded CPython 3.11 musllinux: musl 1.2+ x86-64

SiPM-2.3.1-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (249.8 kB view details)

Uploaded CPython 3.11 manylinux: glibc 2.17+ x86-64

SiPM-2.3.1-cp311-cp311-macosx_10_9_x86_64.whl (181.6 kB view details)

Uploaded CPython 3.11 macOS 10.9+ x86-64

SiPM-2.3.1-cp310-cp310-musllinux_1_2_x86_64.whl (1.2 MB view details)

Uploaded CPython 3.10 musllinux: musl 1.2+ x86-64

SiPM-2.3.1-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (246.9 kB view details)

Uploaded CPython 3.10 manylinux: glibc 2.17+ x86-64

SiPM-2.3.1-cp310-cp310-macosx_10_9_x86_64.whl (180.4 kB view details)

Uploaded CPython 3.10 macOS 10.9+ x86-64

SiPM-2.3.1-cp39-cp39-musllinux_1_2_x86_64.whl (1.2 MB view details)

Uploaded CPython 3.9 musllinux: musl 1.2+ x86-64

SiPM-2.3.1-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (247.5 kB view details)

Uploaded CPython 3.9 manylinux: glibc 2.17+ x86-64

SiPM-2.3.1-cp39-cp39-macosx_10_9_x86_64.whl (180.6 kB view details)

Uploaded CPython 3.9 macOS 10.9+ x86-64

SiPM-2.3.1-cp38-cp38-musllinux_1_2_x86_64.whl (1.2 MB view details)

Uploaded CPython 3.8 musllinux: musl 1.2+ x86-64

SiPM-2.3.1-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (246.3 kB view details)

Uploaded CPython 3.8 manylinux: glibc 2.17+ x86-64

SiPM-2.3.1-cp38-cp38-macosx_10_9_x86_64.whl (180.3 kB view details)

Uploaded CPython 3.8 macOS 10.9+ x86-64

SiPM-2.3.1-cp37-cp37m-musllinux_1_2_x86_64.whl (1.2 MB view details)

Uploaded CPython 3.7m musllinux: musl 1.2+ x86-64

SiPM-2.3.1-cp37-cp37m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (244.3 kB view details)

Uploaded CPython 3.7m manylinux: glibc 2.17+ x86-64

SiPM-2.3.1-cp37-cp37m-macosx_10_9_x86_64.whl (176.5 kB view details)

Uploaded CPython 3.7m macOS 10.9+ x86-64

SiPM-2.3.1-cp36-cp36m-musllinux_1_2_x86_64.whl (1.2 MB view details)

Uploaded CPython 3.6m musllinux: musl 1.2+ x86-64

SiPM-2.3.1-cp36-cp36m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (245.3 kB view details)

Uploaded CPython 3.6m manylinux: glibc 2.17+ x86-64

SiPM-2.3.1-cp36-cp36m-macosx_10_9_x86_64.whl (175.8 kB view details)

Uploaded CPython 3.6m macOS 10.9+ x86-64

File details

Details for the file sipm-2.3.1.tar.gz.

File metadata

  • Download URL: sipm-2.3.1.tar.gz
  • Upload date:
  • Size: 31.0 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/5.1.1 CPython/3.9.20

File hashes

Hashes for sipm-2.3.1.tar.gz
Algorithm Hash digest
SHA256 6d49cf4f5c2f32bb897a4d76085343ba14bdea7a4b5bf07ac94b31d05cdf3d36
MD5 e2e7d6c3bca7009ce7d16b5ac828525c
BLAKE2b-256 305f6d56e619c6701b8c938e1cd74a7ade8e912c8b354356e60e6c6f9fa07775

See more details on using hashes here.

Provenance

File details

Details for the file SiPM-2.3.1-cp313-cp313-musllinux_1_2_x86_64.whl.

File metadata

File hashes

Hashes for SiPM-2.3.1-cp313-cp313-musllinux_1_2_x86_64.whl
Algorithm Hash digest
SHA256 3a5788802682201c848ca2333bd24bf4d505d52ae9bd520de5356a9f17a98dbe
MD5 ad7e19ef41def1adb6c3326b4d6b7348
BLAKE2b-256 ef3c55ee83f634978ae20cd87ecefe3852f0a1fdc1bd92c91b7449ca454f0cb5

See more details on using hashes here.

Provenance

File details

Details for the file SiPM-2.3.1-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl.

File metadata

File hashes

Hashes for SiPM-2.3.1-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
Algorithm Hash digest
SHA256 5c9810cf6a8adaff8726ad41a64a7309099580969dbbbcef48227ee1aeb08596
MD5 4507ac536aa35559c0ddc4a4c4bbc678
BLAKE2b-256 1531c1a043e098a73b280f8b6e3f0f88610f2b3fb64b30f11c8353b4dedbb592

See more details on using hashes here.

Provenance

File details

Details for the file SiPM-2.3.1-cp313-cp313-macosx_10_13_x86_64.whl.

File metadata

File hashes

Hashes for SiPM-2.3.1-cp313-cp313-macosx_10_13_x86_64.whl
Algorithm Hash digest
SHA256 e207c4f360ac5a95377b3e221509eb6058e5e9b08843a9b6b2eae4578dda917c
MD5 7f87c88ea7f4aab011981f5b1b861122
BLAKE2b-256 c67763974ac8870fa0399302f5a60f5465b8617ca6ecb6c4cdffb88ef68e089d

See more details on using hashes here.

Provenance

File details

Details for the file SiPM-2.3.1-cp312-cp312-musllinux_1_2_x86_64.whl.

File metadata

File hashes

Hashes for SiPM-2.3.1-cp312-cp312-musllinux_1_2_x86_64.whl
Algorithm Hash digest
SHA256 52dc6f5b11bf415454a8bb9708e30c4e7e6d0d8c8c5b9d9169b2900eae11fb28
MD5 88019bf00b24163eed5bf7c0956f6a88
BLAKE2b-256 03019d5dd68d9ca9ce7a953192198214a1d69dc684c17d74436631491b714ec7

See more details on using hashes here.

Provenance

File details

Details for the file SiPM-2.3.1-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl.

File metadata

File hashes

Hashes for SiPM-2.3.1-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
Algorithm Hash digest
SHA256 1500a40080fe7b207ff0508c99470c2ce4e711dfe22e3b2a38a46675cc1ef003
MD5 a7d31df69dc462a39de219894a0d4a43
BLAKE2b-256 775ee02492b95c810b9db233484e1668ca10d2823dfe1ac6dec6ef51f80afb93

See more details on using hashes here.

Provenance

File details

Details for the file SiPM-2.3.1-cp312-cp312-macosx_10_13_x86_64.whl.

File metadata

File hashes

Hashes for SiPM-2.3.1-cp312-cp312-macosx_10_13_x86_64.whl
Algorithm Hash digest
SHA256 7ee3baf93a7fa9e6352cc2bfbb808e439eed65e09d75ed658d5bc6d54f169bd6
MD5 8e50573dadb7ecc32cc06bac1846c943
BLAKE2b-256 ddd1b805f4639b799797638c7099bead8d56e12aed2f5db6b00f98ce94cf0d39

See more details on using hashes here.

Provenance

File details

Details for the file SiPM-2.3.1-cp311-cp311-musllinux_1_2_x86_64.whl.

File metadata

File hashes

Hashes for SiPM-2.3.1-cp311-cp311-musllinux_1_2_x86_64.whl
Algorithm Hash digest
SHA256 3a8956360c7595ce4181b522cd6410d1745f579acfd2c6aaa150a41018082895
MD5 68035259b0850e412b7c9cf007e806e6
BLAKE2b-256 d66fe89098d77c2eed522a50291c06bd135b61e5d1798e9b9705338b785d5c2e

See more details on using hashes here.

Provenance

File details

Details for the file SiPM-2.3.1-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl.

File metadata

File hashes

Hashes for SiPM-2.3.1-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
Algorithm Hash digest
SHA256 ac0febf68284f68fb064381a48422e15f055327fde89d7d06b58c0b1de5b6b27
MD5 999ef55f5cb47447ff7e66fb14933198
BLAKE2b-256 1e303115746fc47be631124140ef2c4f6982093d0e00bcd84cc3b80deba5f605

See more details on using hashes here.

Provenance

File details

Details for the file SiPM-2.3.1-cp311-cp311-macosx_10_9_x86_64.whl.

File metadata

File hashes

Hashes for SiPM-2.3.1-cp311-cp311-macosx_10_9_x86_64.whl
Algorithm Hash digest
SHA256 7c18fd3bf1ebf5cefe8bb5184f4d6bb215238dad944d9614531c9b56f3ff6319
MD5 b6a7c3d5ce717d3596c17ba5299ce1e7
BLAKE2b-256 cdd5a6163627eb33d20c191cd7efecdd9bf465b463c66d599dbc296ca9d58a3a

See more details on using hashes here.

Provenance

File details

Details for the file SiPM-2.3.1-cp310-cp310-musllinux_1_2_x86_64.whl.

File metadata

File hashes

Hashes for SiPM-2.3.1-cp310-cp310-musllinux_1_2_x86_64.whl
Algorithm Hash digest
SHA256 d3b30f405836cedcfb238eef1e7e665fa782b09b01c3a779d0c13632d7cf0d6f
MD5 20dde795ac3ef3739b13697d3ade89cd
BLAKE2b-256 9fdf8abd80c0c9cb1307ec11dada168e4f54dfd7d90d12592423ccd2153ba647

See more details on using hashes here.

Provenance

File details

Details for the file SiPM-2.3.1-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl.

File metadata

File hashes

Hashes for SiPM-2.3.1-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
Algorithm Hash digest
SHA256 de3dfb7776ecb6ed88e6e87c03092abe321c2bbc2e01bed75a2b8ae98b35cb1a
MD5 c2c8ff62c195045d260d1d6d0b9cb0a3
BLAKE2b-256 0a830ddcf242ecf3b49c772463b31132a386444435fd40f8f66a047d020377ab

See more details on using hashes here.

Provenance

File details

Details for the file SiPM-2.3.1-cp310-cp310-macosx_10_9_x86_64.whl.

File metadata

File hashes

Hashes for SiPM-2.3.1-cp310-cp310-macosx_10_9_x86_64.whl
Algorithm Hash digest
SHA256 d56064e04231865f18100ebc723b4c8ef1435150c68f7fec4ed80e709ba96c37
MD5 a9712b5a90de40eaf1ec39ca717c11fe
BLAKE2b-256 fb192def38336dee18741eda3fa00d15aa085ea0a8d38a355324d70826c65e77

See more details on using hashes here.

Provenance

File details

Details for the file SiPM-2.3.1-cp39-cp39-musllinux_1_2_x86_64.whl.

File metadata

File hashes

Hashes for SiPM-2.3.1-cp39-cp39-musllinux_1_2_x86_64.whl
Algorithm Hash digest
SHA256 dd6eaeb06bd2f8b431c74c4b9cf109fb741c0a2096ef6a8408bdd3891f0707fb
MD5 c66b63882e19e5bab6b3cc759f08c0fb
BLAKE2b-256 6a813c0cb47021699e082bae663671c8e3851cdc2d86683de8f15092cb470294

See more details on using hashes here.

Provenance

File details

Details for the file SiPM-2.3.1-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl.

File metadata

File hashes

Hashes for SiPM-2.3.1-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
Algorithm Hash digest
SHA256 51b9f119a70b16d70a926afa5f8b69a82b8310f0d154c3d20dff21a6d1603655
MD5 d118927645b53fffa7273e3435da8ec6
BLAKE2b-256 deb280621f57b8033cd9abed09c4225355119b1e3afbfa2638265fbaac317dca

See more details on using hashes here.

Provenance

File details

Details for the file SiPM-2.3.1-cp39-cp39-macosx_10_9_x86_64.whl.

File metadata

File hashes

Hashes for SiPM-2.3.1-cp39-cp39-macosx_10_9_x86_64.whl
Algorithm Hash digest
SHA256 91e93d9e5a1a2cf0b4dc7f1db0ee2072653de48b729bf2d0210bdb8928df0730
MD5 c682c442c2aac6064be5d253212c68d3
BLAKE2b-256 3286bbc966e00e8b65a274d8226dd0470c2cd5bd7d6bec4f430267b6fb9b7121

See more details on using hashes here.

Provenance

File details

Details for the file SiPM-2.3.1-cp38-cp38-musllinux_1_2_x86_64.whl.

File metadata

File hashes

Hashes for SiPM-2.3.1-cp38-cp38-musllinux_1_2_x86_64.whl
Algorithm Hash digest
SHA256 561d08c96aeb10fcfaaf4abe4022dc306538a599f5dd438e111a224eb34a1e73
MD5 5d2497d13c03712de8fa55bc1febb885
BLAKE2b-256 2dae0bac6f10d14a227019c6af4ab8d3d3693766b2721182fad7c962d0a03ed6

See more details on using hashes here.

Provenance

File details

Details for the file SiPM-2.3.1-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl.

File metadata

File hashes

Hashes for SiPM-2.3.1-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
Algorithm Hash digest
SHA256 beb47f4f40b73b4b42e118a33bac156265c4e1e582d597ff5b9e362266bc03bc
MD5 7d9926c1cc02b446caadf1a1b63cf6b5
BLAKE2b-256 0ea3f5686831056d2301a20ec718be2c2aacede7b296536639b370a064edc60f

See more details on using hashes here.

Provenance

File details

Details for the file SiPM-2.3.1-cp38-cp38-macosx_10_9_x86_64.whl.

File metadata

File hashes

Hashes for SiPM-2.3.1-cp38-cp38-macosx_10_9_x86_64.whl
Algorithm Hash digest
SHA256 b8e9c4c1748a8484dfdab6d6fef24917ecbf2d5169e255448307a173cdc582b0
MD5 9c6aed7ea48ea88d89bb7381a4c00e30
BLAKE2b-256 0d7f9bbf56c90ec1a2b5624b0f11d4b277f2a7799a6855a9aa12bbcd6e11040e

See more details on using hashes here.

Provenance

File details

Details for the file SiPM-2.3.1-cp37-cp37m-musllinux_1_2_x86_64.whl.

File metadata

File hashes

Hashes for SiPM-2.3.1-cp37-cp37m-musllinux_1_2_x86_64.whl
Algorithm Hash digest
SHA256 edb0f1e25830ad0de1f082cd49f6e8c3f7a84fa5a3a73cdbca37f7bba3426912
MD5 054d321a5ccbd8a3c7b4c74fb51b7178
BLAKE2b-256 2351ac496fc7b58a78dd69da8888515506fb1697f93b332a81743feb0b327a84

See more details on using hashes here.

Provenance

File details

Details for the file SiPM-2.3.1-cp37-cp37m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl.

File metadata

File hashes

Hashes for SiPM-2.3.1-cp37-cp37m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
Algorithm Hash digest
SHA256 bc22bb9d4cebb0a04b4f65c131337396b914eb3a3a9508e3c4c5f2842eebaf6b
MD5 cf83f963f791ef0160d1b0ae2d3b5e36
BLAKE2b-256 3a8a2ce1169763629abb1b9fd3df63537db4c4c26745638dd2c2cc7a40e28131

See more details on using hashes here.

Provenance

File details

Details for the file SiPM-2.3.1-cp37-cp37m-macosx_10_9_x86_64.whl.

File metadata

File hashes

Hashes for SiPM-2.3.1-cp37-cp37m-macosx_10_9_x86_64.whl
Algorithm Hash digest
SHA256 cd0832b10de5042d4dd9599780400002751bf107a788927584418029878018df
MD5 861fc3719c7735758863e7f4ec170902
BLAKE2b-256 9bc7f7ef6a707972d3307030c01fcb61e52723568ab9239133a3ed3767125928

See more details on using hashes here.

Provenance

File details

Details for the file SiPM-2.3.1-cp36-cp36m-musllinux_1_2_x86_64.whl.

File metadata

File hashes

Hashes for SiPM-2.3.1-cp36-cp36m-musllinux_1_2_x86_64.whl
Algorithm Hash digest
SHA256 4b0d5c91ead9eab68a146a6abc02c4b76676ba1e7121f98bc1bc92479cc8477d
MD5 005cc506100599503117d3364c3c4378
BLAKE2b-256 00b9294c83e9dbb434aed73938399d06571cb594090c0203d1b68fdb26991a32

See more details on using hashes here.

Provenance

File details

Details for the file SiPM-2.3.1-cp36-cp36m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl.

File metadata

File hashes

Hashes for SiPM-2.3.1-cp36-cp36m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
Algorithm Hash digest
SHA256 2e3d461995fd6a6b32df28287bf673acbdb1e8191ff7752270f933594ab5670d
MD5 63944fa9ab439688485267bcde59db2f
BLAKE2b-256 39f2c030b32fe17e10ffbee3652350f553f9c52a6e4335ccf46f87fbfce7dd16

See more details on using hashes here.

Provenance

File details

Details for the file SiPM-2.3.1-cp36-cp36m-macosx_10_9_x86_64.whl.

File metadata

File hashes

Hashes for SiPM-2.3.1-cp36-cp36m-macosx_10_9_x86_64.whl
Algorithm Hash digest
SHA256 37f9312e405ad62b97a4ff9fa8062051fad69dd250440d3db91ba8ef6775afc5
MD5 dea4824cd95ab4ef5bdda608a936ce35
BLAKE2b-256 95d955f56be2db3b85368872a8fe9a4f04c56f8d0979d846c1974574477ef25d

See more details on using hashes here.

Provenance

Supported by

AWS AWS Cloud computing and Security Sponsor Datadog Datadog Monitoring Fastly Fastly CDN Google Google Download Analytics Microsoft Microsoft PSF Sponsor Pingdom Pingdom Monitoring Sentry Sentry Error logging StatusPage StatusPage Status page