KAHIBARO
Discord Login Register

15.4. Data Calibration

Calibration constants

In many real experiments the raw numbers recorded by detectors are not yet expressed in meaningful physical units. An ADC channel value, a time-to-digital count, or a pixel intensity must be converted to quantities such as energy, time, or position. This conversion is called calibration, and the numerical factors you determine to perform it are the calibration constants.

In a ROOT-based analysis, calibration constants are typically obtained from special calibration runs, test pulses, or well known reference signals. For example, a scintillator coupled to a photomultiplier tube might be exposed to gamma rays of known energies, or a time detector might be illuminated with a pulser that has a precise repetition period. From these reference data, you extract a relationship between the raw measurement and the physical quantity.

It is useful to distinguish between different types of calibration constants. A common minimal set consists of an offset and a gain factor. The offset describes the value your detector reports when the true quantity is zero. The gain describes how much the detector response changes when the true quantity increases by one unit. For some detectors you also need non-linear terms or separate constants for different regions or channels.

In ROOT, calibration constants often appear as C++ variables, configuration parameters read from text files, or stored objects in a ROOT file. A typical workflow is to determine the constants once in a dedicated calibration macro, write them to a file, then read that file in all later analysis steps. This ensures that all your histograms, fits, and derived quantities use a consistent calibration.

When dealing with many channels, for example in a multi-strip detector or a calorimeter with many cells, you usually have a separate set of calibration constants per channel. This can be stored in arrays, std::vector objects, or even in a TTree or TTree friend. ROOT provides enough flexibility to apply channel-specific calibrations efficiently in event loops or RDataFrame expressions.

Calibration constants also have uncertainties. These uncertainties propagate into the final physics results. While a full treatment of uncertainty propagation belongs to statistical analysis, you should already keep in mind that poorly determined calibration constants can dominate the total error budget. Refining calibration, checking stability over time, and comparing different calibration methods are important quality checks in real data analysis.

A basic linear calibration from a raw value $x_{\text{raw}}$ to a calibrated value $x_{\text{cal}}$ uses two constants:
$$x_{\text{cal}} = a \, x_{\text{raw}} + b$$
Here $a$ is the gain (slope) and $b$ is the offset (intercept). These constants must be determined from calibration data and then applied consistently to all measurements.

Linear calibration

The simplest and most widely used calibration model assumes a linear relationship between the raw detector output and the physical quantity of interest. Under this assumption, the detector behaves like an ideal ruler: equal steps in the true quantity produce equal steps in the recorded value. In ROOT, linear calibration is very convenient to implement, because you can work directly with simple formulas, TF1 functions, and straight-line fits.

Suppose you perform a calibration run and obtain several pairs of values $(x_{\text{raw}}, x_{\text{true}})$, where $x_{\text{true}}$ is a known reference. You want to find $a$ and $b$ such that $x_{\text{true}} \approx a x_{\text{raw}} + b$. To do this in ROOT, you can create a TGraph with the raw value on one axis and the known true value on the other, then fit it with a linear function. For example, a TF1 defined with the expression "[0]*x + [1]" has parameter [0] as the slope and [1] as the intercept. After fitting, you read these parameters and use them as your calibration constants.

Alternatively, when your calibration information appears as identifiable peaks in a histogram, you may proceed in two steps. First, fit each peak with an appropriate function, often a Gaussian, to extract its peak position in raw units. Second, match each raw peak position to the known physical value and again fit a straight line through the set of points. This is very common in spectroscopic calibration tasks.

The linear model itself is simple to apply in analysis code. Once the slope and intercept are known, you can define a new variable in a ROOT macro or RDataFrame expression that computes $x_{\text{cal}}$ event by event. In traditional event loops, this often appears as a per-entry calculation inside the loop, followed by filling histograms with the calibrated quantity instead of the raw one. In RDataFrame, you can use Define to create a calibrated column that is then used for histograms or further processing.

Despite its simplicity, linear calibration requires careful validation. You should check that the residuals $x_{\text{true}} - x_{\text{cal}}$ are small and show no systematic structure across the calibration range. If you see significant curvature, or if different regions of the detector behave differently, a purely linear model might be insufficient. In that case, you may need piecewise linear calibration or higher-order polynomial terms, which go beyond the strict linear assumption.

In many practical situations, the detector response is approximately linear over the range of interest, so a straight-line calibration is entirely adequate. For beginners, focusing on a robust linear calibration is an excellent starting point for turning real experimental data into physically meaningful quantities.

The key rule for linear calibration in ROOT is:

  1. Determine $a$ and $b$ from calibration data, usually by fitting.
  2. Apply $x_{\text{cal}} = a x_{\text{raw}} + b$ to every event.
  3. Use $x_{\text{cal}}$ in all physics histograms and fits, not the raw $x_{\text{raw}}$.
    Skipping the third step, and accidentally mixing calibrated and uncalibrated values, is a common and serious analysis mistake.

Energy calibration

Energy calibration is a specific and very common application of the general calibration idea. Many detectors, such as scintillators, semiconductor detectors, calorimeters, and HPGe crystals, measure signals that are proportional to the energy deposited by particles or photons. However, the raw quantity is often an ADC channel or integrated charge, not energy in keV or MeV. To interpret your spectra physically, you must convert channel numbers to energy through an energy calibration.

A typical energy calibration uses well known lines from radioactive sources. For example, you might record a gamma spectrum from a source with prominent peaks at known energies. In the raw histogram, each peak appears at some channel value. By fitting these peaks, you obtain their centroids in channel units. Each centroid then forms a calibration point that links a raw channel to a precise energy. Once you have several such points, you can fit a linear function $E = a C + b$ where $E$ is the energy and $C$ is the channel number.

ROOT provides all the necessary tools to implement this procedure. You can use TH1 histograms to hold the raw spectrum, TF1 functions to fit the peaks, and TGraph or direct TF1 fitting to determine the global calibration. After you have found the slope and offset of the energy calibration, you can either convert the axis of an existing histogram or, more commonly in real analyses, recompute and refill histograms using energy instead of channel in event-based processing.

In practice, energy calibration may depend on detector channel, time, or operating conditions. For multi-channel systems, each channel gets its own pair of energy calibration constants, stored for example in arrays indexed by channel number. During event loops or in RDataFrame, you take the channel-specific calibration constants and apply them to each event entry. ROOT handles large numbers of channels easily, so it is mainly up to you to organize the constants clearly and apply them consistently.

An energy calibration is only useful if you know its quality. After applying the calibration, you should check that the known lines in a validation spectrum appear at the correct energies, and that any residual shifts are within acceptable limits. For more precise work you might include non-linear terms in the calibration function, but for many beginners' experiments a simple linear calibration is appropriate over the region of interest.

Once the energy calibration is established, it becomes central to later analysis steps such as peak identification, energy resolution studies, and determination of physical quantities like Q-values or excitation energies. All subsequent physics results drawn from spectra are meaningful only because the association between channel and energy has been calibrated and verified.

For a linear energy calibration the central formula is:
$$E = a \, C + b$$
where $C$ is the measured channel number, $E$ is the calibrated energy, $a$ is the energy per channel, and $b$ is the energy offset. Always perform physics interpretations, such as identifying lines or computing Q-values, using $E$, not the raw channel $C$.

Views: 11

Comments

Please login to add a comment.

Don't have an account? Register now!