|
BmnRoot 26.10.0-18-g4e3414f9
Software framework of the BM@N experiment
|
Reference guide to the reconstructed data of the BM@N experiment for physics analysis
The DST (Data Summary Tape) is the main output of the BmnRoot reconstruction and the input of physics analyses in the BM@N experiment. This document describes the DST format: the layout of the ROOT file, every branch of the event tree, the stored data classes and their fields, the links between the stored objects, and the differences between DSTs of simulated and experimental events.
The DST format is common for simulated and experimental data: both are produced by the same reconstruction macro, written into the same tree and stored with the same classes. A few branches exist in only one type of DST: Monte Carlo information is stored only for simulated events, and beam tracks only for experimental ones. Some fields are also filled differently. Appendix A gives a short overview of all objects of a DST file with their main methods, Appendix C summarises all differences, and Appendix D lists the fields that are currently not filled or need care.
The description corresponds to the BmnRoot dev branch as of October 2026.
The DST is the end point of two processing chains that share the reconstruction step:
| Stage | Simulated data | Experimental data |
|---|---|---|
| Input | Output of an event generator: the particles produced in the collision with their momenta | Raw data files written by the BM@N data acquisition system |
| First step | run_sim_bmn.C: macro simulates passing of the generated particles through the BM@N setup with Geant4 transport package, producing Monte Carlo tracks, their points and detector responses (digits) | run_raw_bmn.C macro converts the raw data to the ROOT format and decodes to digits |
| Intermediate file | Simulation file: MC tracks, MC points, digits | Digit file |
| Reconstruction | run_reco_bmn.C macro reconstructs event data: hits, tracks, vertices, particle identification information, data of the forward detectors, centrality information | run_reco_bmn.C – the same macro with the similar output format |
| Output | DST file with the reconstructed data of the simulated events | DST file with the reconstructed data of the experimental events |
run_reco_bmn.C recognises the type of its input file automatically (BmnFunctionSet::isSimulationFile). For experimental data the geometry is loaded from the Geometry Database, and the magnetic field scale, beam, target and run times are taken from the Condition Database (UniConDa). For simulated data this information comes from the metadata of the input simulation file.
Every DST branch is produced by a task of run_reco_bmn.C. The table lists the tasks for run periods ≥ 8 in the order in which they are executed in run_reco_bmn.C. Availability: Both – simulated and experimental DSTs, Sim – simulated only, Exp – experimental only.
| Task (class) | DST branch(es) | Content | Avail. |
|---|---|---|---|
| BmnFillTrigInfoDst | BmnTrigInfo. | Trigger and beam counter information | Both |
| BmnSiBTHitMaker | BmnSiBTHit | Hits in the Silicon Beam Tracker upstream of the target | Exp |
| BmnVSPHitMaker | BmnVSPHit, BmnVSPUpper/LowerCluster | Vertex Silicon Plane hits and clusters | Both |
| BmnSiliconHitMaker | BmnSiliconHit, BmnSiliconUpper/LowerCluster | Forward Silicon Detector hits and clusters | Both |
| BmnGemStripHitMaker | BmnGemStripHit, BmnGemUpper/LowerCluster | GEM hits and clusters | Both |
| BmnCSCHitMaker | BmnCSCHit, BmnCSCUpper/LowerCluster | Cathode Strip Chamber hits and clusters | Both |
| BmnTof1HitProducer | BmnTof400Hit, BmnTof700Hit | TOF-400 and TOF-700 hits | Both |
| BmnFHCalReconstructor | FHCalEvent | Forward Hadron Calorimeter | Both |
| BmnScWallReconstructor | ScWallEvent | Scintillation Wall | Both |
| BmnHodoReconstructor | HodoEvent | Forward (fragment) Hodoscope | Both |
| BmnNdetReconstructor | NdetEvent; NdetSurfacePoint (Sim) | Neutron Detector | Both |
| BmnToCbmHitConverter | StsHit | VSP, Silicon and GEM hits prepared for tracking | Both |
| BmnStsVectorFinderV9, BmnStsMatchTracks | StsVector; StsTrackMatch (Sim) | Inner tracks (VSP + Silicon + GEM) and their MC matching | Both |
| BmnBeamTracking | BmnBeamTrack | Beam ion tracks in the SiBT | Exp |
| CbmFindPrimaryVertex (CbmPVFinderKF) | PrimaryVertex. | Primary vertex, CBM KF finder | Both |
| BmnKFPrimaryVertexFinder | MpdVertex. | Primary vertex, default for global tracks | Both |
| BmnCombineVertexFinder | CombineVertex | Vertices combined with the beam track | Exp |
| BmnGlobalTracking | BmnGlobalTrack | Global tracks with TOF and Neutron Detector matching | Both |
| BmnMatchRecoToMC | BmnGlobalTrackMatch | Matching of global tracks to MC tracks | Sim |
| BmnDedx | fields of BmnGlobalTrack | dE/dx and charge estimate (period 8 only) | Both |
| CentralityClusterizer | EventCentrality | Centrality class | Both |
| BmnFillDstTask | DstEventHeader., DstRunHeader; BmnMCInfo. (Sim) | Event and run headers, MC event information and MC tracks | Both |
Note: If the reconstruction is run with the L1Tracking option instead of the default VectorFinder, the inner tracks are stored in the branch StsTrack instead of StsVector (same class CbmStsTrack). For experimental data of period 8 the pile-up classifier BmnEventSelector also runs and can add the branch BmnBC1hitInfo.. Run periods ≤ 7 use a different chain (MWPC, DCH, ZDC) that is not covered here.
Besides the event tree, a DST file contains run-level objects written once per file:
| Key | Class | Content | Avail. |
|---|---|---|---|
| bmndata | TTree | Event tree: one entry per reconstructed event (Section 2.2) | Both |
| DstRunHeader | DstRunHeader | Run information: period, run, beam, target, energy, field (Section 3.1) | Both |
| FairGeoParSet | FairGeoParSet | Full geometry (TGeoManager) used in the reconstruction; the description holds the geometry tag | Both |
| run ID | FairRtdbRun | Runtime database bookkeeping; the key name is the run ID (period number for MC) | Both |
| FileHeader | FairFileHeader | FairRoot file header | Both |
| BranchList, TimeBasedBranchList | TList | FairRoot bookkeeping: names of all branches known during the reconstruction, including input branches that are not stored in the DST | Both |
| bmnroot | TFolder | FairRoot folder structure: which branch belongs to which detector folder | Both |
| FairBaseParSet | FairBaseParSet | Simulation run parameters: beam energy, description “beam;target” | Sim |
| BmnFieldPar | BmnFieldPar | Magnetic field parameters of the simulation | Sim |
| FairGeoPassivePar | FairGeoPassivePar | Passive geometry parameters of the simulation | Sim |
Note: A file can contain several cycles of the tree key (for example bmndata;2 and bmndata;3). ROOT automatically uses the latest cycle when the tree is read by name.
The table lists all branches of bmndata with the class of the object (for TClonesArray branches, the class of the elements), the FairRoot folder and the availability.
| Branch | Class | Folder | Content | Avail. |
|---|---|---|---|---|
| DstEventHeader. | DstEventHeader | EvtHeader | Event header | Both |
| BmnTrigInfo. | BmnTrigInfoDst | TRIGGER | Trigger, beam counters, T0 | Both |
| BmnVSPHit | BmnVSPHit | VSP | Vertex Silicon Plane hits | Both |
| BmnVSPUpperCluster, BmnVSPLowerCluster | StripCluster | VSP | VSP strip clusters | Both |
| BmnSiliconHit | BmnSiliconHit | SILICON | Forward Silicon Detector hits | Both |
| BmnSiliconUpperCluster, BmnSiliconLowerCluster | StripCluster | SILICON | Silicon strip clusters | Both |
| BmnGemStripHit | BmnGemStripHit | GEM | GEM hits | Both |
| BmnGemUpperCluster, BmnGemLowerCluster | StripCluster | GEM | GEM strip clusters | Both |
| BmnCSCHit | BmnCSCHit | CSC | Cathode Strip Chamber hits | Both |
| BmnCSCUpperCluster, BmnCSCLowerCluster | StripCluster | CSC | CSC strip clusters | Both |
| BmnTof400Hit | BmnTofHit | TOF400 | TOF-400 hits | Both |
| BmnTof700Hit | BmnTofHit | TOF700 | TOF-700 hits | Both |
| StsHit | CbmStsHit | STSHIT | Tracking hits (VSP + Silicon + GEM) | Both |
| StsVector | CbmStsTrack | STS | Inner tracks | Both |
| PrimaryVertex. | CbmVertex | Global | Primary vertex (CBM KF finder) | Both |
| MpdVertex. | CbmVertex | Global | Primary vertex (default for global tracks) | Both |
| BmnGlobalTrack | BmnGlobalTrack | GLOBAL | Global tracks | Both |
| EventCentrality | BmnEventCentrality | – | Centrality class | Both |
| FHCalEvent | BmnFHCalEvent | – | FHCal modules | Both |
| HodoEvent | BmnHodoEvent | – | Forward Hodoscope: strips | Both |
| NdetEvent | BmnNdetEvent | – | Neutron Detector cells | Both |
| ScWallEvent | BmnScWallEvent | – | ScWall: 174 cells | Both |
| BmnSiBTHit | BmnSiBTHit | SiBT | Silicon Beam Tracker hits | Exp |
| BmnBeamTrack | BmnTrack | BEAM | Beam tracks (SiBT) | Exp |
| CombineVertex | CbmVertex | VERTEX | Vertices combined with the beam track | Exp |
| NdetSurfacePoint | BmnNdetSurfacePoint | NDET | MC points on the Neutron Detector surfaces | Sim |
| StsTrackMatch | CbmTrackMatch | STS | MC matching of inner tracks | Sim |
| BmnGlobalTrackMatch | BmnTrackMatch | GLOBAL | MC matching of global tracks | Sim |
| BmnMCInfo. | BmnMCInfoDst | MC | MC event information and MC tracks | Sim |
Tip: Hits and clusters make up most of the data volume of a DST (Appendix E). Analyses that need only tracks, vertices and forward detectors read much faster if the hit and cluster branches are not read (Section 9.3).
The objects of an event are connected through integer indices. The most important links are:
| From | Accessor | To | Avail. |
|---|---|---|---|
| BmnGlobalTrack | GetGemTrackIndex() | StsVector: the inner track of the global track | Both |
| BmnGlobalTrack | GetTof1HitIndex(), GetTof2HitIndex(); per particle hypothesis GetTof1HitIndex(type), GetTof2HitIndex(type) | BmnTof400Hit, BmnTof700Hit | Both |
| StsVector (CbmStsTrack) | GetStsHitIndex(i), i < GetNStsHits() | StsHit | Both |
| StsHit (CbmStsHit) | fDigiF % 1000000, fDigiB % 1000000 | Lower and upper cluster of the hit in Bmn<Det>LowerCluster / Bmn<Det>UpperCluster, detector given by GetSystemId() (Section 6.4) | Both |
| Strip hits (BmnHit) | GetUpperClusterIndex(), GetLowerClusterIndex() | Bmn<Det>UpperCluster, Bmn<Det>LowerCluster of the same detector | Both |
| MpdVertex. | GetTrackInds() (member trkID) | StsVector: tracks used in the vertex fit | Both |
| StsHit | −GetRefIndex() − 1 | Original hit in BmnVSPHit / BmnSiliconHit / BmnGemStripHit (by GetSystemId()) | Exp |
| BmnBeamTrack | GetHitIndex(i), i < GetNHits() | BmnSiBTHit | Exp |
| BmnGlobalTrackMatch[i] | same index i | BmnGlobalTrack[i] | Sim |
| StsTrackMatch[i] | same index i | StsVector[i] | Sim |
| StsVector | GetTrkID() | BmnMCInfo. MC track array | Sim |
| CbmMCTrack | GetMotherId() | Mother MC track in the same array (−1 for primary particles) | Sim |
DstRunHeader is written once per file by BmnFillDstTask. For experimental data it is filled from the Condition Database, for simulated data from the metadata of the input simulation file.
| Getter (member) | Type | Description | Sim / Exp |
|---|---|---|---|
| GetPeriodId() (fPeriodNumber) | UInt_t | Run period (session) number, e.g. 9 | Both |
| GetRunId() (fRunNumber) | UInt_t | Run number | Both; Sim: 0 |
| GetBeam() | TString | Beam particle, e.g. “Xe”; empty string – not defined | Both |
| GetBeamA(), GetBeamZ() | Int_t | Mass number and charge of the beam ion (−1 – unknown) | Both |
| GetBeamEnergy() | Float_t | Beam energy per nucleon [GeV], e.g. 3.0 | Both; Sim: from the generator file name |
| GetTarget() | TString | Target, e.g. “Sn”, “CsI (2%)”, “Empty”; empty string – not defined | Both |
| GetTargetA(), GetTargetZ() | Int_t | Target A and Z. A = 0 – empty target; Z = 0 – compound target (A is then the sum of the atomic weights, e.g. 260 for CsI) or empty target; −1 – not defined | Both |
| GetFieldType() | Int_t | Magnetic field type: 0 – constant field, 1 – field map | Both |
| GetFieldScale() | Double_t | Scale factor of the field map (−1 for a constant field). Exp: magnet voltage from the database divided by the map voltage, with an energy-dependent correction | Both |
| GetFieldName() | TString | Field map file; for a constant field the string “xmin:xmax:ymin:ymax:zmin:zmax:Bx:By:Bz” | Both |
| GetStartTime(), GetFinishTime() | TTimeStamp | Start and end of the run from the Condition Database. The database stores local (Moscow) time; the values are put into TTimeStamp as if they were UTC | Exp; Sim: time of the DST production, not meaningful |
The geometry used in the reconstruction is stored in the container FairGeoParSet. Its description holds the geometry tag of the Geometry Database (e.g. run9_26.09.0). When the DST is processed with FairRunAna (for example, in run_ana_bmn.C), the geometry is loaded automatically as gGeoManager during fRunAna->Init(), so the detector volumes and materials are available in the analysis tasks, e.g. for track extrapolation. Only if FairRunAna is not used, for example when the DST file is read directly, the geometry can be taken from the container itself, which is seldom needed:
Simulated DSTs also contain FairBaseParSet, whose beam momentum field holds the beam energy per nucleon and whose description holds “beam;target” (e.g. “Xe;Sn”). This is where DstRunHeader takes the beam and target of simulated data from.
The event header (DstEventHeader, derived from FairEventHeader) is filled by BmnFillDstTask: from the MC event header for simulated data and from the digit event header (BmnEventHeader) for experimental data.
| Getter (member) | Type | Description | Sim / Exp |
|---|---|---|---|
| GetRunId() (fRunId) | UInt_t | Exp: run number. Sim: run ID of the simulation | Both |
| GetEventId() (fEventId) | UInt_t | Exp: event number from the DAQ; unique within a run, not consecutive in the DST. Sim: MC event number, starting from 1 | Both |
| GetPeriodId() (fPeriodId) | UInt_t | Run period. Exp: from the digit event header; Sim: from the simulation file | Both |
| GetEventTime() (fEventTime) | Double_t | Exp: absolute (astronomical) time of the event in UTC as UNIX time: seconds since 1970-01-01, equal to GetEventTimeTS().AsDouble(). At present dates the double value resolves about 0.24 µs. Sim: MC event time of the generator, not an absolute time (0 if the generator does not set it) | Both |
| GetEventTimeTS() (fEventTimeTS) | TTimeStamp | Exp: the same moment as GetEventTime() as a time stamp in UTC with nanosecond precision: GetSec(), GetNanoSec(). Sim: the MC event time converted to a time stamp (1970-01-01 00:00:00 for time 0) | Both |
| GetTriggerType() (fTriggerType) | BmnTriggerType | Trigger type: kBMNBEAM = 6, kBMNMINBIAS = 1. Currently not filled: always 1. Use the trigger input signals of BmnTrigInfo. for trigger selection | Both (not filled) |
| GetZ2in(), GetZ2out(), GetADCin(), GetADCout(), GetZin() | Double_t, Short_t | Beam ion charge squared (Z²) and ADC signals before (BC1, BC2) and after (BC3, BC4) the target. Computed only when the T0 and BC1–BC4 TQDC digit branches exist in the input; otherwise −100 | Exp (older runs) |
| GetADC1() … GetADC4() | Double_t | Single beam counter amplitudes for 2D charge cuts; same conditions as above, −100 otherwise | Exp (older runs) |
| GetB() (fB) | Double_t | Impact parameter [fm] from the generator | Sim; Exp: 0 |
| GetMCEntryNumber(), GetInputFileId() | Int_t | FairRoot bookkeeping: entry number of the source event in the simulation file; input file index | Sim; Exp: 0 |
| GetZ1() … GetZ4() | Double_t | Reserved (charge from single counters), not used | – |
BmnTrigInfoDst collects trigger-related information of the event: trigger input signals, amplitudes of the beam counters and of the fragment detector, the T0 start time, and the corresponding digits. In simulated DSTs only the Barrel Detector digits and the Fragment Detector MC points are available.
| Getter (member) | Type | Description | Sim / Exp |
|---|---|---|---|
| GetBDMult(), GetSiMDMult() | UInt_t | Number of fired channels of the Barrel Detector (BD) and of the Silicon Multiplicity Detector (SiMD); 0 if the corresponding digit branch is absent in the input | Both; SiMD: Exp |
| GetFDDigits() | TClonesArray* | Exp: BmnTrigWaveDigit of the FD. Sim: BmnFDPoint (MC points in the FD) | Both |
| GetBDDigits() | TClonesArray* of BmnTrigDigit | Barrel Detector digits | Both |
| GetInputSignalsAR(), IsTriggerBitTrueAR(bit) | UInt_t | Bit mask of the trigger input signals after reduction (prescaling) | Exp; Sim: 0 |
| GetInputSignalsBR(), IsTriggerBitTrueBR(bit) | UInt_t | Bit mask of the trigger input signals before reduction | Exp; Sim: 0 |
| GetInputSignalsVector() | vector<uint32_t> | Trigger input signal words as delivered by the trigger system | Exp; Sim: empty |
| GetT0_time(), GetT0_amp() | Float_t | Start time T0 [ns, TDC time scale] and its amplitude, reconstructed from the BC1 top and bottom waveforms with slewing correction; the start time of the TOF measurement. Available since Run 9 | Exp (Run 9+); Sim: 0 |
| GetVCAmp() | Float_t | Peak amplitude of the veto counter (VC) | Exp |
| GetBC0Amp(), GetBC1Amp(), GetBC2Amp(), GetBC1Integral() | Float_t | Peak amplitudes of the beam counters BC0, BC1, BC2 and the integral of the BC1 signal [ADC counts] | Exp |
| GetFDAmp() | Float_t | Peak amplitude of the Fragment Detector (FD) | Exp |
| GetBC0Digits(), GetBC1Digits(), GetBC2Digits() | TClonesArray* of BmnTrigWaveDigit | Waveform digits of the beam counters | Exp |
Classes of the trigger digits:
| Class | Fields |
|---|---|
| BmnTrigWaveDigit | fMod channel; fNsmpl number of samples; fValue waveform samples (GetValue()); fTime time; fTdcTimes TDC times (TdcVector()); fTrigTimestamp, fAdcTimestamp time stamps; GetPeak(), GetIntegral() |
| BmnTrigDigit | fMod channel (40 channels for BD); fTime time [ns]; fAmp amplitude; fTimestamp |
| BmnFDPoint | FairMCPoint (track index, position, momentum, time, energy loss) plus exit position and momentum, fCharge, fPdgId, fIsPrimary, fLightYield, fTimeIn, fTimeOut, fLengthtrack |
BmnEventCentrality holds the centrality classification of the event made by CentralityClusterizer. The event is classified in the plane (FHCal total energy, Forward Hodoscope total signal) using two-dimensional probability density functions of 7 clusters. Every cluster gets a probability, and the class is the most probable cluster. If the event lies outside all distributions, the class is the cluster with the nearest centroid, and the probability is set to 0.
| Getter | Type | Description |
|---|---|---|
| GetClass() | int | Index (0–6) of the most probable cluster, method FHCalHodo |
| GetProbability() | float | Probability of that cluster (0 if assigned by the nearest centroid) |
| GetSoftCentrality() | vector<float> | Probabilities of all clusters (7 values) |
| GetClass(method), GetProbability(method), GetSoftCentrality(method) | The same for a given method; BmnCentralityClass::Method::FHCalHodo is the only method |
Caution: The cluster index is a label of the calibration, not an ordered centrality percentile. The classes are meaningful only if the calibration file set in run_reco_bmn.C was obtained for the analysed collision system and beam energy.
All track classes store the track state as FairTrackParam objects at two points: GetParamFirst() and GetParamLast().
| Getter (member) | Description |
|---|---|
| GetX(), GetY(), GetZ() | Position of the track state [cm] |
| GetTx(), GetTy() | Slopes tx = dx/dz = px/pz, ty = dy/dz = py/pz |
| GetQp() (fQp) | Charge over momentum q/p [(GeV/c)⁻¹]; the sign is the charge sign |
| GetCovariance(i, j), CovMatrix(...) (fCovMatrix[15]) | 5 × 5 covariance matrix of (x, y, tx, ty, q/p); the 15 elements of the upper triangle are stored row by row: a[0,0..4], a[1,1..4], a[2,2..4], a[3,3..4], a[4,4] |
Momentum components follow from the track parameters:
Note: The track fit assumes unit charge: for a particle with charge |Z| > 1 the value 1/|q/p| is the rigidity p/|Z|, and the momentum is |Z|/|q/p|. The inner track fit uses the pion mass hypothesis for material effects (CbmStsTrack::GetPidHypo() = 211).
Global tracks are the main objects for physics analysis. BmnGlobalTracking creates one global track for every inner track of StsVector with at least 4 hits and then matches the tracks to the TOF-400 and TOF-700 hits and to the cells of the Neutron Detector. Global tracks are created only if the vertex MpdVertex. was reconstructed with at least 2 tracks; otherwise the event has no global tracks.
| Getter (member) | Type | Description | Sim / Exp |
|---|---|---|---|
| GetParamFirst() | FairTrackParam* | Track parameters at the z of MpdVertex. | Both |
| GetParamLast() | FairTrackParam* | Track parameters at the last hit of the inner track | Both |
| GetP() | Double_t | 1 / (q/p) of ParamFirst: signed momentum (rigidity for |Z| > 1) | Both |
| GetPx(), GetPy(), GetPz(), GetPt(), GetTheta(), GetPhi(), GetEta() | Float_t | Kinematics computed from ParamFirst; θ and φ in rad, η is the pseudorapidity | Both |
| GetNHits() (fNhits) | Int_t | Number of inner track hits plus one for each TOF detector in which the track was paired with a hit, also if the pair was not accepted (Appendix D) | Both |
| GetChi2(), GetNDF() | Float_t, Int_t | χ² and NDF of the inner track fit | Both |
| GetLength() (fLength) | Float_t | Track length from the target plane to ParamLast [cm] | Both |
| GetGemTrackIndex(), GetInnerTrackIndex() (fInnerTrack) | Int_t | Index of the inner track in StsVector | Both |
| GetTof1HitIndex(), GetTof2HitIndex() | Int_t | Index of the matched hit in BmnTof400Hit / BmnTof700Hit for kCommon, −1 if none | Both |
| GetTof1HitIndex(type), GetTof2HitIndex(type) (fTof400Hit, fTof700Hit) | Int_t | The same for the particle hypothesis type: kCommon = 0, kPion = 1, kProton = 2, kDeutron = 3, kTriton = 4 | Both |
| GetMass2(tof), GetMass2(tof, type) (fMass2Tof400, fMass2Tof700) | Float_t | m² [GeV²/c⁴] from the TOF-400 (tof = 1) or the TOF-700 (tof = 2) for kCommon or the given hypothesis; −1000 if no hit is matched. See the caution in Section 6.5 for experimental data | Both |
| GetResX(tof), GetResY(tof), GetResX(tof, type), GetResY(tof, type) | Float_t | Residuals track − hit in x and y at the TOF hit, after the corrections of the period [cm]; −1000 if no hit is matched | Both |
| GetParticleName(type) | TString | Name of the hypothesis: Common, pi, p, d, t | Both |
| GetDCAInVertex() (fDCAInVertex) | Float_t | Distance in the xy plane between ParamFirst and MpdVertex. at the vertex z [cm] | Both |
| GetChi2InVertex() (fChi2InVertex) | Float_t | χ² of the track–vertex compatibility (Kalman update of ParamFirst with MpdVertex. as a measurement) | Both |
| GetNdetCellId() (fNDetCellId) | Int_t | Index of the matched cell in the cell array of NdetEvent (GetCells()). Undefined value if no cell is matched (Appendix D) | Both |
| GetDedx(), GetQ() (fDedx, fQ) | Float_t, Short_t | dE/dx (truncated mean of calibrated cluster signals in the GEM and Silicon detectors) and charge estimate (1 or 2). Filled only for period 8 (BmnDedx); 0 otherwise | Both (period 8) |
| GetScWallCellId(), GetScWallSignal() | Int_t, Float_t | Matched ScWall cell and its signal. Not filled: the ScWall matching is switched off (−1 and −1000) | – |
| GetRefIndex() | Int_t | Always −1, kept for compatibility. The matched MC track is given by the inner track: StsVector[GetGemTrackIndex()]->GetTrkID() (Section 8.2) | – |
| GetFlag(), GetB(), GetHitIndex(i) | Not filled for global tracks (−1, 0, empty hit list) | – |
Tip: Primary track selection: take the inner track StsVector[track->GetGemTrackIndex()] and require FromVertex(), i.e. the track was used in the fit of MpdVertex.. Cuts on GetDCAInVertex(), GetChi2InVertex() and the number of hits can be added.
StsVector contains the tracks found by the vector finder in the inner tracker: the Vertex Silicon Plane, the Forward Silicon Detector and the GEM stations. The hits of these tracks are in StsHit (Section 6.4).
| Getter (member) | Type | Description | Sim / Exp |
|---|---|---|---|
| GetNStsHits(), GetStsHitIndex(i) (fStsHits) | Int_t | Number of hits and their indices in StsHit, ordered along z | Both |
| GetParamFirst(), GetParamLast() | FairTrackParam* | Track parameters at the first and the last hit | Both |
| GetChi2(), GetNDF() | Double_t, Int_t | χ² and NDF of the Kalman filter fit | Both |
| GetFlag(), FromVertex() | Int_t | Bit 2 (value 2) is set if the track was used in the fit of MpdVertex.; FromVertex() returns GetFlag() & 2 | Both |
| GetPidHypo() | Int_t | Mass hypothesis of the fit (211, pion) | Both |
| GetB() (fB) | Double_t | Response of the BDT (TMVA) classifier used by the track finder to reject fake tracks (set to 1 when the classifier is not applied). The header comment “impact parameter” is outdated | Both |
| GetPt(), GetEta() | Double_t | Transverse momentum and pseudorapidity from ParamFirst | Both |
| GetTrkID() (ststrk) | int | Sim: index of the matched MC track (−1 if not matched). Exp: undefined value | Sim |
| fMvdHits, fnEv, fHitsArr | Not used (empty) | – |
The DST contains several estimates of the primary vertex, all stored as CbmVertex objects:
| Branch | Algorithm | Remarks | Avail. |
|---|---|---|---|
| MpdVertex. | BmnKFPrimaryVertexFinder: pre-estimate from histograms of extrapolated tracks, then an iterative Kalman fit with a χ² cut; StsVector tracks with ≥ 4 hits and χ² < 12.25·NDF | Default vertex of the global tracks. The indices of the used tracks are in GetTrackInds(), and these tracks are flagged in StsVector. GetUniqueID() holds the number of peaks found in the z distribution of the extrapolated tracks: 0 – no clear peak, 1 – single peak, 2 – an additional peak (possible second interaction or interaction outside the target) | Both |
| PrimaryVertex. | CbmFindPrimaryVertex with CbmPVFinderKF (CBM KF vertex fit); same track selection | GetTrackInds() is empty. If no track is accepted, the vertex has GetNTracks() = 0 and a covariance of 100 cm² | Both |
| CombineVertex | BmnCombineVertexFinder: array of 2 vertices, [0] from PrimaryVertex., [1] from MpdVertex., combined with the first beam track of BmnBeamTrack | x and y are the weighted mean of the vertex and the beam track extrapolated to the vertex z (weights from the variances). z, χ² and the covariance are copied from the input vertex; NTracks = input + 1, NDF = 2·NTracks. Without a beam track the entries are copies of the input vertices | Exp |
Fields of CbmVertex:
| Getter (member) | Type | Description |
|---|---|---|
| GetX(), GetY(), GetZ(), Position(TVector3&) | Double_t | Vertex position [cm] |
| GetChi2(), GetNDF() | Double_t, Int_t | χ² and number of degrees of freedom of the vertex fit (NDF = 2·NTracks) |
| GetNTracks() | Int_t | Number of tracks used in the fit. Check it: 0 means that the fit failed |
| GetCovariance(i, j), CovMatrix(TMatrixFSym&) (fCovMatrix[6]) | Double_t | 3 × 3 covariance matrix of (x, y, z); stored as a[0,0], a[0,1], a[0,2], a[1,1], a[1,2], a[2,2] |
| GetTrackInds() (trkID) | vector<Int_t> | Indices of the used tracks in StsVector (MpdVertex. only) |
In experimental DSTs BmnBeamTracking reconstructs the beam ions in the three stations of the Silicon Beam Tracker upstream of the target. Track candidates are combinations of one hit per station with signals above 200 in both strip layers; up to 10 candidates are fitted with a Kalman filter (forward and backward pass). The beam momentum is not measured: q/p is fixed.
| Getter (member) | Description |
|---|---|
| GetNHits(), GetHitIndex(i) | 3 hits, indices in BmnSiBTHit |
| GetParamFirst() | Track parameters at the first SiBT station |
| GetParamLast() | Track parameters propagated to z = 0 (target) |
| GetB() | Distance of the track from the beam axis (x = y = 0) at z = 0 [cm] |
| GetChi2() | Sum of the χ² of the forward and backward Kalman filter passes |
| GetQp() of the parameters | Fixed value, not a measurement |
| GetFlag(), GetNDF(), GetLength() | Not filled |
The DST keeps the hits of all tracking detectors and the strip clusters, so that detector studies, calibrations and track refits can be done on the DST level. The strip detectors (SiBT, VSP, Silicon, GEM, CSC) have two strip layers (“lower” and “upper”); a hit is the crossing of a lower-layer and an upper-layer cluster.
All hit classes of the tracking detectors derive from BmnHit (itself derived from FairHit).
| Getter (member) | Description | Sim / Exp |
|---|---|---|
| GetX(), GetY(), GetZ() | Hit position in the global coordinate system [cm] | Both |
| GetDx(), GetDy(), GetDz() | Position errors [cm] | Both |
| GetCovXY() | Covariance of x and y [cm²] | Both |
| GetStation(), GetModule() | Station and module of the hit within the detector, starting from 0 | Both |
| GetUpperClusterIndex(), GetLowerClusterIndex() | Strip detectors: indices of the upper and lower clusters in Bmn<Det>UpperCluster / Bmn<Det>LowerCluster. TOF: see Section 6.5 | Both |
| GetRefIndex() | Sim: index of the MC point that produced the hit (the MC points are not stored in the DST), −1 if there is none. Exp: −1 (TOF: see Section 6.5) | Both |
| GetDigitNumberMatch() | BmnMatch with two links to the central strips of the lower and upper clusters | Both |
| IsPseudo() | Pseudo hit reconstructed from a cluster in one layer only | Both |
| IsUsed(), GetLength(), GetResX(), GetResY() | TOF hits: paired with a global track in the TOF matching and the track length from the target to the hit [cm]; the residuals are not filled (Section 6.5). SiBT hits: residuals to the beam track. Otherwise: false, −1, −1000 | Both |
| GetTimeStamp() | TOF hits: time of flight [ns] (Section 6.5). Strip hits: −1 (not used) | Both |
| GetDetectorID(), GetDetId() | TOF hits: volume UID and DetectorId (Section 6.5). Strip hits: not filled (0) | Both |
| GetType() (fType) | Strip hits. Sim: 1 – hit matched to an MC point, 0 – fake (combinatorial) hit. Exp: −1 (undefined) | Sim |
| GetNLinks(), GetLink(i) | FairLinks to MC truth. Strip hits: links to the contributing MC points (index = MC point index, weight = contribution). TOF hits: type 1 – MC point, type 2 – MC track index, type 4 – detector UID. Exp: no links | Sim |
| GetFlag() | Not used (true for all hits) | – |
| Branch | Class | Detector | Avail. |
|---|---|---|---|
| BmnVSPHit | BmnVSPHit | Vertex Silicon Plane | Both |
| BmnSiliconHit | BmnSiliconHit | Forward Silicon Detector (FSD) | Both |
| BmnGemStripHit | BmnGemStripHit | GEM tracker | Both |
| BmnCSCHit | BmnCSCHit | Cathode Strip Chambers | Both |
| BmnSiBTHit | BmnSiBTHit | Silicon Beam Tracker, upstream of the target | Exp |
Station and module numbers start from 0. The number of stations and modules is defined by the detector configuration of the run period.
The strip hit classes provide getters for the characteristics of the lower and upper strip layers:
| Getter (member) | Description | Source |
|---|---|---|
| GetStripPositionInLowerLayer(), GetStripPositionInUpperLayer() | Cluster positions in the two layers [strip units] | SiBT: stored in the hit; VSP, Silicon, GEM, CSC: clusters |
| GetStripTotalSignalInLowerLayer(), GetStripTotalSignalInUpperLayer() | Total cluster signals in the two layers | SiBT: stored in the hit; VSP, Silicon, GEM, CSC: clusters |
| GetClusterSizeInLowerLayer(), GetClusterSizeInUpperLayer() | Number of strips in the clusters | SiBT: stored in the hit; VSP, Silicon, GEM, CSC: clusters |
| GetSignalDiff() (fNormSignalDiff) | Normalised signal difference of the two layers (GEM, CSC, SiBT) | Not filled |
| GetEnergyLoss() (fELoss), GetPdg() | Energy loss; PDG code (VSP, Silicon) | Not filled |
Note: VSP, Silicon, GEM and CSC hits do not store the layer characteristics: the getters take them from the clusters of the hit (GetLowerClusterIndex(), GetUpperClusterIndex()) in the branches Bmn<Det>LowerCluster and Bmn<Det>UpperCluster of the current event (Section 6.3); the strip position is the mean position of the cluster. The clusters are obtained via FairRootManager, so these getters work in FairRoot tasks, e.g. in run_ana_bmn.C (Section 9.2). When the DST tree is read directly (Section 9.3), they return the default values 0, 0 and −1: read the cluster branches in this case. For a pseudo hit (one-layer hit) the upper-layer getters return the default values.
The branches Bmn<Det>UpperCluster and Bmn<Det>LowerCluster (for VSP, Silicon, GEM and CSC) contain all reconstructed strip clusters, including clusters that are not part of any hit. Upper clusters have type 1, lower clusters type 0. The fields of StripCluster are public members:
| Member (getter) | Description |
|---|---|
| Station (GetStation()), Module (GetModule()) | Station and module of the cluster, starting from 0 |
| fType (GetType()) | 0 – lower layer, 1 – upper layer |
| MeanPosition | Cluster position after fitting [strip units] |
| OriginPosition, PositionResidual | Position of the central strip and residual from it |
| TotalSignal | Sum of the strip signals [ADC counts]; the basis of the dE/dx measurement |
| Width (GetWidth()) | Number of strips in the cluster |
| Strips, Signals | vector<Int_t> strip numbers and vector<Double_t> strip signals |
| Error (GetError()) | Position error |
| IsCorrect | Not used (false) |
Before the track finding, BmnToCbmHitConverter converts the VSP, Silicon and GEM hits into CbmStsHit objects with a common station numbering (pseudo hits are excluded). The hit coordinates are modified during the conversion:
Therefore the StsHit coordinates differ from those of the original BmnVSPHit, BmnSiliconHit and BmnGemStripHit. The StsHit coordinates are the ones used in the track fit.
| Getter (member) | Description | Sim / Exp |
|---|---|---|
| GetX(), GetY(), GetZ(), GetDx(), GetDy() | Corrected position and fixed errors [cm] | Both |
| GetSystemId() | Detector: kVSP = 8, kGEM = 2, kSILICON = 12 (bits 24–27 of fDetectorID) | Both |
| GetStationNr() | Tracking station, starting from 1 (bits 16–23): Run 9 – VSP 1, Silicon 2–5, GEM 6–13; without VSP (Run 8) – Silicon 1–4, GEM 5–11 | Both |
| GetSectorNr() | GEM: 2·module + 1 + layer/2; Silicon and VSP: module + 1 (bits 4–15). GetSensorNr() is always 1 | Both |
| fDigiF, fDigiB (public) | Index of the lower (F) and upper (B) cluster plus a detector offset: GEM 0 / 1 000 000, Silicon 2 000 000 / 3 000 000, VSP 4 000 000 / 5 000 000. Cluster index = value % 1 000 000 | Both |
| GetSignalDiv() | Cluster signal asymmetry (Q_upper − Q_lower) / (Q_upper + Q_lower) | Both |
| GetTimeStamp() | Not a time: cluster width asymmetry (N_upper − N_lower) / (N_upper + N_lower) | Both |
| GetStrip(0), GetStrip(1) | Mean positions of the lower and upper clusters [strip units] | Both |
| GetRefIndex() | Sim: MC point index. Exp: −(index of the original hit) − 1, i.e. original index = −GetRefIndex() − 1 in the hit branch given by GetSystemId() | Both |
| GetNLinks(), GetLink(i) | MC links copied from the original hit | Sim |
| GetStatLayer(), GetPosSensorX/Y(), GetCovXY() | Not used (0) | – |
BmnTof400Hit and BmnTof700Hit contain BmnTofHit objects (derived from BmnHit without additional members). A hit is reconstructed in a strip of a multigap resistive plate chamber from the signals at both strip ends; the position is the crossing point along the strip.
| Getter (member) | Description | Sim / Exp |
|---|---|---|
| GetX(), GetY(), GetZ() | Hit position [cm]; Exp: errors σx = 0.5 cm, σy = 0.36 cm | Both |
| GetTimeStamp() | Time of flight [ns]. Exp: hit time minus the T0 time (Run 9: BmnTrigInfo. T0) with calibration and slewing corrections. Sim: MC time since the event start, smeared | Both |
| GetModule(), GetStation() | Chamber (plane) number and strip number, both starting from 0 | Both |
| GetDetectorID() | Volume UID: (plane + 1) << 8 | (strip + 1); decode with BmnTOF1Point::GetModule(uid) and BmnTOF1Point::GetStrip(uid) | Both |
| GetDetId() | kTOF1 (3) for TOF-400, kTOF701 (6) for TOF-700 | Both |
| IsUsed(), GetLength() | Paired with a global track in the TOF matching, also if the pair was not accepted (Section 5.2); track length from the target to the hit [cm], −1 if the hit was not paired | Both |
| GetRefIndex() | Sim: MC point index. Exp: packed indices of the digits at the two strip ends | Both |
| GetUpperClusterIndex(), GetLowerClusterIndex() | Exp: indices of the left-end and right-end digits (the digits are not stored). Sim: undefined | Exp |
| GetLink(i) | Type 1 – MC point, type 2 – MC track index, type 4 – volume UID | Sim |
| GetResX(), GetResY() | Not filled (−1000): the residuals of the matching are stored in the global track (BmnGlobalTrack::GetResX(tof), GetResY(tof)) | – |
Caution: In experimental DSTs the time of flight, and therefore β and m² of the global tracks, depend on the TOF time calibration (T0, slewing and strip corrections) applied in the reconstruction. A part of the hits can have times outside the physical range, e.g. negative ones. Check the time of flight distribution of the production before using β or m².
The forward detectors are stored as single event objects: one object per event with all modules, cells or strips of the detector.
| Getter | Description |
|---|---|
| BmnFHCalEvent::GetTotalEnergy() | Total energy deposited in the Forward Hadron Calorimeter [MIP] |
| BmnFHCalEvent::GetTotalModules() | Number of modules |
| BmnFHCalEvent::GetModule(id) | Module BmnFHCalModule with id = 1 … GetTotalModules() |
| BmnFHCalModule::GetModuleId(), GetEnergy() | Module number and module energy [MIP] |
| BmnFHCalModule::GetNsections(), GetSectionEnergy(sec) | Number of longitudinal sections and section energy, sec = 1 … N |
| BmnFHCalModule::GetX(), GetY(), GetZ() | Module centre in the global coordinate system [cm] |
| Getter | Description |
|---|---|
| BmnScWallEvent::GetCell(id) | Cell BmnScWallCell with id = 1 … 174; all 174 cells are always stored |
| BmnScWallCell::GetCellId() | Cell number |
| BmnScWallCell::GetSignal() | Signal in the cell, calibrated in units of Z² of the crossing particle; 0 – no signal |
| BmnScWallCell::GetX(), GetY(), GetZ() | Cell centre [cm] |
| Getter | Description |
|---|---|
| BmnHodoEvent::GetTotalSignal() | Sum of the strip signals in units of Z² (the Xe beam peak corresponds to 54² ≈ 2916); input of the centrality classification |
| BmnHodoEvent::GetTotalSignalIntegral() | Sum of the strip signal integrals |
| BmnHodoEvent::GetPileUpStatus() | BmnHodoStrip::PileUp: No (0), Resolved (1), Unresolved (2); the maximum over the strips |
| BmnHodoEvent::GetStrips(), GetStrip(id) | TClonesArray of BmnHodoStrip, one entry per strip; in experimental data additional read-out channels can appear as entries with other identifiers |
| BmnHodoStrip::GetStripId(), GetSignal(), GetIntegral(), GetPileUpStatus() | Strip number, signal, integral, pile-up status |
| BmnHodoStrip::GetX(), GetY(), GetZ() | Strip position [cm] |
| BmnHodoStrip::GetDigits() | Not stored in the DST (empty) |
| Getter | Description |
|---|---|
| BmnNdetEvent::GetCells(), GetTotalCells() | TClonesArray of fired cells BmnNdetCell and their number |
| BmnNdetEvent::GetCell(address), GetCell(arm, row, column, layer) | Cell by address or by indices |
| BmnNdetCell::GetAddress() | Packed cell address; decode with GetArmId(), GetRowId(), GetColumnId(), GetLayerId() |
| BmnNdetCell::GetSignal(), GetTime() | Cell signal and time [ns] |
| BmnNdetCell::GetX(), GetY(), GetZ() | Cell position [cm] |
BmnMCInfoDst keeps the generator-level information of the event and all MC tracks of the simulation stack. The MC points of the detectors are not stored in the DST.
| Getter (member) | Description |
|---|---|
| GetB() | Impact parameter [fm] |
| GetX(), GetY(), GetZ() | Generated primary vertex [cm] |
| GetRotX(), GetRotY() | Rotation around the x and y axes (beam tilt) [rad] |
| GetRotZ() | Rotation around the z axis (reaction plane angle) [rad] |
| GetMCTracks() | TClonesArray of CbmMCTrack: primary particles and secondaries stored by the simulation. The order is the same as in the simulation file, so MC track indices of the matching objects point into this array |
Fields of CbmMCTrack:
| Getter (member) | Description |
|---|---|
| GetPdgCode() | PDG code; nuclei have codes 100ZZZAAAI (e.g. 1000010020 for the deuteron) |
| GetMotherId() | Index of the mother track in the same array; −1 for primary particles |
| GetPx(), GetPy(), GetPz(), GetMomentum(TVector3&) | Momentum at the start vertex [GeV/c] |
| GetStartX(), GetStartY(), GetStartZ(), GetStartT() | Start vertex [cm] and time [ns] |
| GetP(), GetPt(), GetRapidity(), GetEnergy(), GetMass() | Derived kinematics; the mass is taken from TDatabasePDG |
| Get4Momentum(TLorentzVector&) | Four-momentum |
| GetNPoints(DetectorId) | Number of MC points of the track in a detector (bit-packed member fNPoints) |
| GetPolar(i) | Polarisation components, i = 0, 1, 2 |
BmnMatchRecoToMC links every global track to the MC track that produced most of its hits:
| Object | Getter | Description |
|---|---|---|
| BmnGlobalTrackMatch[i] (BmnTrackMatch) | GetNofLinks(), GetLink(j) | All MC tracks contributing to the hits of global track i: BmnLink with GetIndex() = MC track index and GetWeight() = number of hits |
| GetMatchedLink() | Link with the largest weight | |
| GetNofTrueHits(), GetNofWrongHits(), GetTrueOverAllHitsRatio() | Number of hits from the matched MC track, other hits, and their ratio | |
| CbmStsTrack | GetTrkID() | Inner track StsVector[track->GetGemTrackIndex()] of a global track: index of the matched MC track if the true-hit ratio of the global track is ≥ 0.6, otherwise −1 |
| BmnGlobalTrack | GetRefIndex() | Always −1, kept for compatibility: use GetTrkID() of the inner track |
| StsTrackMatch[i] (CbmTrackMatch) | GetMCTrackId(), GetNofTrueHits(), GetNofWrongHits(), GetNofFakeHits(), GetNofMCTracks() | Matching of inner track i of StsVector done by BmnStsMatchTracks |
On the hit level, GetRefIndex() gives the MC point index, and the FairLinks point to the contributing MC points. For TOF hits the link of type 2 gives the MC track index directly (Section 6.1).
NdetSurfacePoint contains BmnNdetSurfacePoint objects: MC points of particles crossing the surfaces of the Neutron Detector, for efficiency studies. The class extends FairMCPoint (track index, position, momentum, time, track length, energy loss) with fPdg, fArmID, fPlaneID and fDirectionID.
There are two ways to analyse DST files. The recommended way is to implement every analysis as a FairRoot task and to run it with the analysis macro macro/run/run_ana_bmn.C (Section 9.2). Reading the DST tree directly in a ROOT macro (Section 9.3) is an alternative for quick checks and simple studies.
The DST classes are BmnRoot and FairRoot classes, so the BmnRoot environment must be loaded before CERN ROOT is started; the class dictionaries are then found automatically:
run_ana_bmn.C is the main macro for the physics analysis of simulated and experimental DSTs. It sets up FairRunAna with the DST as input and executes a list of analysis tasks for every event. The macro takes care of the common steps, so that a task contains only the analysis itself:
Arguments of the macro:
| Argument | Description |
|---|---|
| dstFileName | Input: DST file, text file with a list of DST files, or ROOT file with a TChain of DST files |
| anaFileName | Output file with the analysis results |
| nStartEvent | First event to process, starting from 0 |
| nEvents | Number of events to process; 0 – all events of the input after nStartEvent |
Each analysis is a class derived from FairTask with three main methods:
The analysis tasks are kept in the physics library of BmnRoot. The class BmnAnalysisTask (physics/BmnAnalysisTask.h and .cxx) is a template to start from, and BmnTwoParticleDecay (physics/decay) is an example of a complete analysis task. A new task is added to physics/CMakeLists.txt and physics/PhysicsLinkDef.h. The example below fills the transverse momentum spectrum of the primary global tracks (for brevity the methods are defined in the class body):
The task is created in the “Analysis Tasks” block of run_ana_bmn.C:
Tip: Several analyses can run in one pass over the data: add one task for each of them. The tasks are executed in the order in which they are added, so a task can use objects that a previous task registered with FairRootManager::Register().
For quick checks the DST tree can also be read directly in a ROOT macro. In this case the macro itself has to handle the input files and, if needed, the magnetic field and the geometry. The macro below works with simulated and experimental DSTs. It prints the run information and the vertex, and for the first tracks the charge, momentum, vertex association, TOF-400 information and, if available, the matched MC track.
As in the macro above, switch off the branches that are not needed before the event loop: the events are then read much faster. Most of the data volume is in the hit and cluster branches (Appendix E):
Member names can be used directly in TTree::Draw expressions:
The table lists all objects of a DST file with a short description and the main methods of their classes. The objects stored once per file come first, followed by the branches of the event tree bmndata, written as bmndata.<branch>. For TClonesArray branches the methods are those of the array elements, which are accessed with GetEntriesFast() and UncheckedAt(i). The notation GetX/Y/Z() stands for GetX(), GetY() and GetZ(). Objects marked Sim only or Exp only exist in one type of DST only; the details are given in Sections 2–8.
| Object in the DST file | Content | Main methods |
|---|---|---|
| File objects: FairRoot bookkeeping | ||
| bmnroot | FairRoot folder structure: which branch belongs to which detector folder (TFolder) | FindObjectAny(name), GetListOfFolders() |
| BranchList | Names of all branches known during the reconstruction, including input branches that are not stored in the DST (TList of TObjString) | GetEntries(), At(i)->GetName() |
| TimeBasedBranchList | FairRoot list of the time-based branches (TList), not used in BmnRoot | GetEntries() |
| File objects: parameter containers | ||
| BmnFieldPar | Sim only: magnetic field parameters of the simulation | GetType(), GetScale(), MapName(name), GetPositionX/Y/Z(), IsFieldOff() |
| FairBaseParSet | Sim only: simulation run parameters; the beam momentum field holds the beam energy per nucleon, the description holds “beam;target” | GetBeamMom(), getDescription(), GetRndSeed() |
| FairGeoParSet | Geometry of the reconstruction (TGeoManager); the description holds the geometry tag | GetGeometry(), getDescription(), GetGeoNodes() |
| FairGeoPassivePar | Sim only: passive geometry parameters of the simulation | GetGeoPassiveNodes(), GetGeoSensitiveNodes() |
| <run ID> | Runtime database bookkeeping (FairRtdbRun); the key name is the run ID (the period number for MC) | getRunId(), getParVersions() |
| File objects: headers | ||
| DstRunHeader | Run information: period, run, start and finish times, beam, target, beam energy, magnetic field (DstRunHeader) | GetPeriodId(), GetRunId(), GetStartTime(), GetFinishTime(), GetBeam(), GetBeamA(), GetBeamZ(), GetBeamEnergy(), GetTarget(), GetTargetA(), GetTargetZ(), GetFieldType(), GetFieldScale(), GetFieldName() |
| FileHeader | FairRoot file header (FairFileHeader) | GetRunId(), GetListOfTasks() |
| Event tree bmndata: event information | ||
| bmndata.BmnTrigInfo. | Trigger input signals, amplitudes of the beam counters and of the fragment detector, T0 start time, trigger digits (BmnTrigInfoDst) | GetInputSignalsAR(), GetInputSignalsBR(), IsTriggerBitTrueAR(bit), IsTriggerBitTrueBR(bit), GetInputSignalsVector(), GetT0_time(), GetT0_amp(), GetVCAmp(), GetBC0Amp(), GetBC1Amp(), GetBC1Integral(), GetBC2Amp(), GetFDAmp(), GetBDMult(), GetSiMDMult(), GetBC0Digits(), GetBC1Digits(), GetBC2Digits(), GetBDDigits(), GetFDDigits() |
| bmndata.DstEventHeader. | Event header: run and event numbers, period, event time, impact parameter (DstEventHeader) | GetRunId(), GetEventId(), GetPeriodId(), GetEventTime(), GetEventTimeTS(), GetB(), GetTriggerType(), GetZ2in(), GetZ2out(), GetADCin(), GetADCout() |
| bmndata.EventCentrality | Centrality class of the event from the FHCal energy and the Forward Hodoscope signal (BmnEventCentrality) | GetClass(), GetProbability(), GetSoftCentrality() |
| Event tree bmndata: strip clusters | ||
| bmndata.BmnCSCLowerCluster | Lower layer (|||) strip clusters of the CSC (TClonesArray of StripCluster) | GetStation(), GetModule(), GetType(), GetWidth(), GetError(); members MeanPosition, TotalSignal, Strips, Signals |
| bmndata.BmnCSCUpperCluster | Upper layer (\\\ or ///) strip clusters of the CSC (TClonesArray of StripCluster) | GetStation(), GetModule(), GetType(), GetWidth(), GetError(); members MeanPosition, TotalSignal, Strips, Signals |
| bmndata.BmnGemLowerCluster | Lower layer (|||) strip clusters of the GEM (TClonesArray of StripCluster) | GetStation(), GetModule(), GetType(), GetWidth(), GetError(); members MeanPosition, TotalSignal, Strips, Signals |
| bmndata.BmnGemUpperCluster | Upper layer (\\\ or ///) strip clusters of the GEM (TClonesArray of StripCluster) | GetStation(), GetModule(), GetType(), GetWidth(), GetError(); members MeanPosition, TotalSignal, Strips, Signals |
| bmndata.BmnSiliconLowerCluster | Lower layer (|||) strip clusters of the Silicon detector (TClonesArray of StripCluster) | GetStation(), GetModule(), GetType(), GetWidth(), GetError(); members MeanPosition, TotalSignal, Strips, Signals |
| bmndata.BmnSiliconUpperCluster | Upper layer (\\\ or ///) strip clusters of the Silicon detector (TClonesArray of StripCluster) | GetStation(), GetModule(), GetType(), GetWidth(), GetError(); members MeanPosition, TotalSignal, Strips, Signals |
| bmndata.BmnVSPLowerCluster | Lower layer (|||) strip clusters of the VSP (TClonesArray of StripCluster) | GetStation(), GetModule(), GetType(), GetWidth(), GetError(); members MeanPosition, TotalSignal, Strips, Signals |
| bmndata.BmnVSPUpperCluster | Upper layer (\\\ or ///) strip clusters of the VSP (TClonesArray of StripCluster) | GetStation(), GetModule(), GetType(), GetWidth(), GetError(); members MeanPosition, TotalSignal, Strips, Signals |
| Event tree bmndata: hits | ||
| bmndata.BmnCSCHit | Hits of the Cathode Strip Chambers (TClonesArray of BmnCSCHit) | GetX/Y/Z(), GetDx/Dy/Dz(), GetStation(), GetModule(), GetLowerClusterIndex(), GetUpperClusterIndex(), GetStripTotalSignalInLowerLayer(), GetStripTotalSignalInUpperLayer(), GetClusterSizeInLowerLayer(), GetClusterSizeInUpperLayer(), GetStripPositionInLowerLayer(), GetStripPositionInUpperLayer(), IsPseudo(), GetRefIndex() |
| bmndata.BmnGemStripHit | GEM hits (TClonesArray of BmnGemStripHit) | GetX/Y/Z(), GetDx/Dy/Dz(), GetStation(), GetModule(), GetLowerClusterIndex(), GetUpperClusterIndex(), GetStripTotalSignalInLowerLayer(), GetStripTotalSignalInUpperLayer(), GetClusterSizeInLowerLayer(), GetClusterSizeInUpperLayer(), GetStripPositionInLowerLayer(), GetStripPositionInUpperLayer(), IsPseudo(), GetRefIndex() |
| bmndata.BmnSiBTHit | Exp only: hits of the Silicon Beam Tracker upstream of the target (TClonesArray of BmnSiBTHit) | GetX/Y/Z(), GetDx/Dy/Dz(), GetStation(), GetModule(), GetLowerClusterIndex(), GetUpperClusterIndex(), GetStripTotalSignalInLowerLayer(), GetStripTotalSignalInUpperLayer(), GetClusterSizeInLowerLayer(), GetClusterSizeInUpperLayer(), GetStripPositionInLowerLayer(), GetStripPositionInUpperLayer(), IsPseudo(), GetRefIndex(), GetResX/Y() |
| bmndata.BmnSiliconHit | Hits of the Forward Silicon Detector (TClonesArray of BmnSiliconHit) | GetX/Y/Z(), GetDx/Dy/Dz(), GetStation(), GetModule(), GetLowerClusterIndex(), GetUpperClusterIndex(), GetStripTotalSignalInLowerLayer(), GetStripTotalSignalInUpperLayer(), GetClusterSizeInLowerLayer(), GetClusterSizeInUpperLayer(), GetStripPositionInLowerLayer(), GetStripPositionInUpperLayer(), IsPseudo(), GetRefIndex() |
| bmndata.BmnTof400Hit | TOF-400 hits (TClonesArray of BmnTofHit) | GetX/Y/Z(), GetTimeStamp() (time of flight), GetModule(), GetStation() (strip), GetDetectorID(), IsUsed(), GetLength(), GetResX/Y(), GetRefIndex() |
| bmndata.BmnTof700Hit | TOF-700 hits (TClonesArray of BmnTofHit) | GetX/Y/Z(), GetTimeStamp() (time of flight), GetModule(), GetStation() (strip), GetDetectorID(), IsUsed(), GetLength(), GetResX/Y(), GetRefIndex() |
| bmndata.BmnVSPHit | Hits of the Vertex Silicon Plane (TClonesArray of BmnVSPHit) | GetX/Y/Z(), GetDx/Dy/Dz(), GetStation(), GetModule(), GetLowerClusterIndex(), GetUpperClusterIndex(), GetStripTotalSignalInLowerLayer(), GetStripTotalSignalInUpperLayer(), GetClusterSizeInLowerLayer(), GetClusterSizeInUpperLayer(), GetStripPositionInLowerLayer(), GetStripPositionInUpperLayer(), IsPseudo(), GetRefIndex() |
| bmndata.StsHit | Tracking hits: VSP, Silicon and GEM hits with the corrected positions used in the track fit (TClonesArray of CbmStsHit) | GetX/Y/Z(), GetDx/Dy(), GetSystemId(), GetStationNr(), GetSectorNr(), GetSignalDiv(), GetStrip(side), GetRefIndex(); members fDigiF, fDigiB (cluster indices) |
| Event tree bmndata: tracks | ||
| bmndata.BmnBeamTrack | Exp only: beam ion tracks in the Silicon Beam Tracker (TClonesArray of BmnTrack) | GetNHits(), GetHitIndex(i), GetParamFirst(), GetParamLast(), GetChi2(), GetB() |
| bmndata.StsTrackMatch | Sim only: MC matching of the inner tracks (TClonesArray of CbmTrackMatch) | GetMCTrackId(), GetNofTrueHits(), GetNofWrongHits(), GetNofFakeHits(), GetNofMCTracks() |
| bmndata.StsVector | Inner tracks in the VSP, Silicon and GEM detectors (TClonesArray of CbmStsTrack) | GetNStsHits(), GetStsHitIndex(i), GetParamFirst(), GetParamLast(), GetChi2(), GetNDF(), GetFlag(), FromVertex(), GetB(), GetPt(), GetEta(), GetTrkID() |
| Event tree bmndata: vertices | ||
| bmndata.CombineVertex | Exp only: primary vertices combined with the beam track, [0] from PrimaryVertex., [1] from MpdVertex. (TClonesArray of CbmVertex) | GetX/Y/Z(), GetChi2(), GetNDF(), GetNTracks(), GetCovariance(i, j), GetTrackInds() |
| bmndata.MpdVertex. | Primary vertex, the reference vertex of the global tracks (CbmVertex) | GetX/Y/Z(), GetChi2(), GetNDF(), GetNTracks(), GetCovariance(i, j), GetTrackInds() |
| bmndata.PrimaryVertex. | Primary vertex of the CBM KF vertex finder (CbmVertex) | GetX/Y/Z(), GetChi2(), GetNDF(), GetNTracks(), GetCovariance(i, j), GetTrackInds() |
| Event tree bmndata: global tracks | ||
| bmndata.BmnGlobalTrack | Global tracks: inner tracks with matched TOF-400 and TOF-700 hits and m² for the common case and for particle hypotheses (TClonesArray of BmnGlobalTrack) | GetParamFirst(), GetParamLast(), GetP(), GetPx/Py/Pz(), GetPt(), GetEta(), GetTheta(), GetPhi(), GetGemTrackIndex(), GetTof1HitIndex(type), GetTof2HitIndex(type), GetMass2(tof, type), GetResX/Y(tof, type), GetDCAInVertex(), GetChi2InVertex(), GetNHits(), GetChi2(), GetNDF(), GetLength(), GetDedx(), GetQ() |
| bmndata.BmnGlobalTrackMatch | Sim only: MC matching of the global tracks (TClonesArray of BmnTrackMatch) | GetNofLinks(), GetLink(i), GetMatchedLink(), GetNofTrueHits(), GetNofWrongHits(), GetTrueOverAllHitsRatio() |
| Event tree bmndata: forward detectors | ||
| bmndata.FHCalEvent | Forward Hadron Calorimeter: total energy, modules and their sections (BmnFHCalEvent) | GetTotalEnergy(), GetTotalModules(), GetModule(id); module: GetModuleId(), GetEnergy(), GetNsections(), GetSectionEnergy(sec), GetX/Y/Z() |
| bmndata.HodoEvent | Forward Hodoscope: total signal in Z² units and strips (BmnHodoEvent) | GetTotalSignal(), GetTotalSignalIntegral(), GetPileUpStatus(), GetStrips(), GetStrip(id); strip: GetStripId(), GetSignal(), GetIntegral(), GetPileUpStatus(), GetX/Y/Z() |
| bmndata.NdetEvent | Neutron Detector: fired cells (BmnNdetEvent) | GetCells(), GetTotalCells(), GetCell(address); cell: GetAddress(), GetArmId(), GetRowId(), GetColumnId(), GetLayerId(), GetSignal(), GetTime(), GetX/Y/Z() |
| bmndata.ScWallEvent | Scintillation Wall: 174 cells with their signals (BmnScWallEvent) | GetCell(id); cell: GetCellId(), GetSignal(), GetX/Y/Z() |
| Event tree bmndata: Monte Carlo information | ||
| bmndata.BmnMCInfo. | Sim only: generator information of the event and MC tracks (BmnMCInfoDst) | GetB(), GetX/Y/Z(), GetRotX/Y/Z(), GetMCTracks(); MC track: GetPdgCode(), GetMotherId(), GetPx/Py/Pz(), GetP(), GetPt(), GetRapidity(), GetStartX/Y/Z/T(), GetNPoints(detector) |
| bmndata.NdetSurfacePoint | Sim only: MC points of particles crossing the Neutron Detector surfaces (TClonesArray of BmnNdetSurfacePoint) | GetTrackID(), GetX/Y/Z(), GetPx/Py/Pz(), GetTime(), GetPdg(), GetArmID(), GetPlaneID(), GetDirectionID() |
Values of the enumeration DetectorId (base/BmnDetectorList.h) used in hits and MC tracks:
| Value | Name | Detector | Value | Name | Detector |
|---|---|---|---|---|---|
| 0 | kREF | Reference plane | 14 | kSiMD | Silicon Multiplicity Detector |
| 1 | kBD | Barrel Detector | 15 | kSiBT | Silicon Beam Tracker |
| 2 | kGEM | GEM detectors | 16 | kSiProf | Silicon Beam Profilometer |
| 3 | kTOF1 | TOF-400 | 17 | kARMTRIG | SRC arm triggers |
| 4 | kDCH | Drift Chambers | 18 | kBC | Beam counters |
| 5 | kTOF | TOF-700 (old code) | 19 | kSCWALL | Scintillation Wall |
| 6 | kTOF701 | TOF-700 (since 2025) | 20 | kHODO | Forward Hodoscope |
| 7 | kZDC | Zero Degree Calorimeter | 21 | kFHCAL | Forward Hadron Calorimeter |
| 8 | kVSP | Vertex Silicon Plane | 22 | kNDET | Neutron Detector |
| 9 | kMWPC | MWPC | 23 | kHGND | Full-scale Neutron Detector |
| 10 | kECAL | Electromagnetic calorimeter | 24 | kSSD | – |
| 11 | kCSC | Cathode Strip Chambers | 25 | kVACWALL | Vacuum wall |
| 12 | kSILICON | Silicon detectors (FSD) | 26 | kMSC | MSC data |
| 13 | kFD | Fragment Detector |
The structure of the DST is the same; the table summarises what differs in availability or content.
| Item | Simulated DST | Experimental DST |
|---|---|---|
| BmnMCInfo., BmnGlobalTrackMatch, StsTrackMatch, NdetSurfacePoint | Present | Absent |
| BmnSiBTHit, BmnBeamTrack, CombineVertex | Absent (no beam tracking) | Present |
| Extra objects in the file | FairBaseParSet, BmnFieldPar, FairGeoPassivePar | – |
| DstRunHeader: run number, times | Run 0; times not meaningful | From the Condition Database |
| DstRunHeader: beam, target, energy | From the simulation metadata | From the Condition Database |
| DstEventHeader: run and event IDs | MC run ID, MC event number (from 1) | DAQ run and event numbers |
| DstEventHeader: event time | MC event time of the generator | Absolute time of the event (UTC) |
| DstEventHeader: impact parameter | From the generator | 0 |
| BmnTrigInfo. | BD digits and FD MC points only | Amplitudes, waveforms, trigger input signals, T0 |
| Hits: GetRefIndex(), links, GetType() | MC point index, MC links, true/fake flag | −1, no links, −1 |
| StsHit coordinates | MC corrections (y shift, smearing) | Alignment and Lorentz shift corrections |
| StsHit::GetRefIndex() | MC point index | −(original hit index) − 1 |
| CbmStsTrack::GetTrkID() | Matched MC track | Undefined – do not use |
| TOF hit time | Smeared MC time | Measured time relative to T0; depends on the TOF calibration |
The following fields exist in the format but are not filled in the current reconstruction, contain undefined values, or need special care.
| Field | Status | Recommendation |
|---|---|---|
| DstEventHeader::GetTriggerType() | Always 1 (default) | Use the trigger input signals of BmnTrigInfo. |
| DstEventHeader Z2in/Z2out/ADC fields | −100 when the BC digit branches are missing in the input | Use BmnTrigInfo. amplitudes |
| BmnGlobalTrack::GetRefIndex() | Always −1 | Use GetTrkID() of the inner track (simulated data only) |
| BmnGlobalTrack::GetDedx(), GetQ() | Filled only for period 8 | – |
| BmnGlobalTrack::GetNdetCellId() | Undefined value if no cell is matched: the member is not initialised in the constructor | Do not use; match with NdetEvent in the analysis if needed |
| BmnGlobalTrack::GetScWallCellId(), GetScWallSignal() | Not filled: the ScWall matching is switched off | Match with ScWallEvent in the analysis if needed |
| BmnGlobalTrack::GetNHits() | Includes one hit per TOF detector in which the track was paired with a hit, also if the pair was not accepted | Count the hits of the inner track and the matched TOF hits separately |
| TOF matching for particle hypotheses | Corrections and widths exist only for period 8; for other periods all hypotheses give the same result as kCommon | Use kCommon for periods other than 8 |
| BmnTofHit::IsUsed(), GetLength() | Set for all track–hit pairs of the TOF matching, also for the pairs that were not accepted | Take the matched hits from the indices of the global tracks |
| BmnTofHit::GetResX(), GetResY() | Not filled (−1000) | Use the residuals of the global track |
| BmnGlobalTrack::GetFlag(), GetB(), hit list | Not filled | Use the inner track in StsVector |
| CbmStsTrack::GetTrkID() | Undefined in experimental DSTs | Use only for simulated data |
| PrimaryVertex. track indices | Empty | Use MpdVertex. indices |
| CombineVertex χ² and covariance | Copied from the input vertex (not updated) | Use for x, y only |
| TOF β, m² in experimental DSTs | Depend on the TOF time calibration applied in the reconstruction | Check the TOF time distribution of the production |
| Layer getters of VSP, Silicon, GEM and CSC hits | Taken from the clusters via FairRootManager; default values when the DST tree is read directly | Use them in FairRoot tasks, or read the cluster branches |
| StsHit::GetTimeStamp() | Cluster width asymmetry, not a time | – |
| TOF hit cluster indices | Exp: digit indices; Sim: undefined | – |
| EventCentrality | One calibration file (set in run_reco_bmn.C) is used for all run periods | Use only with a calibration for the analysed system |
| DstRunHeader start and finish times | Moscow local time stored as UTC; not meaningful for MC | Take into account when comparing with event time stamps (UTC) |
The tables give the size of the DST branches per event as stored in the file, sorted by the size. The values are typical for the Run 9 setup (Xe + Sn at 3 AGeV); they depend on the collision system, the beam energy, the detector configuration and the running conditions.
| Branch | Size [kB/event] | Share |
|---|---|---|
| BmnMCInfo. | 39.0 | 21.0 % |
| StsHit | 35.2 | 19.0 % |
| BmnGemStripHit | 27.1 | 14.6 % |
| BmnGemLowerCluster | 17.0 | 9.2 % |
| BmnGemUpperCluster | 15.9 | 8.6 % |
| BmnSiliconHit | 6.5 | 3.5 % |
| BmnGlobalTrack | 6.4 | 3.4 % |
| StsVector | 6.1 | 3.3 % |
| BmnSiliconLowerCluster | 5.0 | 2.7 % |
| BmnSiliconUpperCluster | 4.9 | 2.6 % |
| BmnCSCUpperCluster | 3.8 | 2.0 % |
| BmnCSCLowerCluster | 3.7 | 2.0 % |
| BmnCSCHit | 3.2 | 1.7 % |
| FHCalEvent | 2.8 | 1.5 % |
| BmnVSPHit | 2.3 | 1.2 % |
| BmnVSPUpperCluster | 1.3 | 0.7 % |
| BmnTof700Hit | 1.3 | 0.7 % |
| BmnVSPLowerCluster | 1.2 | 0.7 % |
| BmnTof400Hit | 0.9 | 0.5 % |
| ScWallEvent | 0.7 | 0.4 % |
| BmnGlobalTrackMatch | 0.5 | 0.3 % |
| BmnTrigInfo. | 0.3 | 0.2 % |
| HodoEvent | 0.2 | 0.1 % |
| StsTrackMatch | 0.2 | 0.1 % |
| MpdVertex. | 0.1 | < 0.1 % |
| PrimaryVertex. | 0.1 | < 0.1 % |
| DstEventHeader. | < 0.1 | < 0.1 % |
| NdetSurfacePoint | < 0.1 | < 0.1 % |
| EventCentrality | < 0.1 | < 0.1 % |
| NdetEvent | < 0.1 | < 0.1 % |
| Total | 185.6 | 100 % |
| Branch | Size [kB/event] | Share |
|---|---|---|
| StsHit | 34.9 | 25.2 % |
| BmnGemStripHit | 20.5 | 14.8 % |
| BmnGemUpperCluster | 16.2 | 11.7 % |
| BmnGemLowerCluster | 15.7 | 11.4 % |
| BmnGlobalTrack | 7.3 | 5.3 % |
| StsVector | 7.1 | 5.1 % |
| BmnSiliconUpperCluster | 5.5 | 4.0 % |
| BmnSiliconLowerCluster | 5.1 | 3.7 % |
| BmnCSCUpperCluster | 4.8 | 3.5 % |
| BmnCSCLowerCluster | 4.6 | 3.3 % |
| BmnSiliconHit | 4.0 | 2.9 % |
| BmnCSCHit | 2.9 | 2.1 % |
| BmnTof700Hit | 2.0 | 1.4 % |
| BmnTrigInfo. | 1.6 | 1.2 % |
| BmnVSPHit | 1.2 | 0.9 % |
| ScWallEvent | 1.1 | 0.8 % |
| FHCalEvent | 0.9 | 0.6 % |
| BmnTof400Hit | 0.8 | 0.6 % |
| BmnVSPUpperCluster | 0.6 | 0.5 % |
| BmnVSPLowerCluster | 0.6 | 0.4 % |
| BmnSiBTHit | 0.3 | 0.2 % |
| BmnBeamTrack | 0.3 | 0.2 % |
| HodoEvent | 0.1 | 0.1 % |
| CombineVertex | 0.1 | 0.1 % |
| MpdVertex. | 0.1 | 0.1 % |
| PrimaryVertex. | 0.1 | < 0.1 % |
| DstEventHeader. | < 0.1 | < 0.1 % |
| EventCentrality | < 0.1 | < 0.1 % |
| NdetEvent | < 0.1 | < 0.1 % |
| Total | 138.4 | 100 % |