CbmRoot
Loading...
Searching...
No Matches
SimSource.cxx
Go to the documentation of this file.
1/* Copyright (C) 2025 Jagiellonian University, Krakow
2 SPDX-License-Identifier: GPL-3.0-only
3 Authors: Bartosz Sobol [committer] */
4
5#include "SimSource.h"
6
7#include <fmt/format.h>
8
9SimSource::SimSource(const std::string& locator)
10{
11 fFile = std::unique_ptr<TFile>(TFile::Open(locator.c_str()));
12 if (fFile == nullptr || fFile->IsZombie()) {
13 throw std::runtime_error(fmt::format("[SimSource] Error opening file: {}", locator));
14 }
15
16 fTree = std::unique_ptr<TTree>((TTree*) fFile->Get("cbmsim"));
17 if (fTree == nullptr) {
18 throw std::runtime_error(fmt::format("[SimSource] Error getting cbmsim tree: {}", locator));
19 }
20
21 fEntries = fTree->GetEntriesFast();
22
23 fTree->SetBranchAddress(CbmBmonDigi::GetBranchName(), &fBmonDigis);
24 fTree->SetBranchAddress(CbmStsDigi::GetBranchName(), &fStsDigis);
25 fTree->SetBranchAddress(CbmFsdDigi::GetBranchName(), &fFsdDigis);
26 fTree->SetBranchAddress(CbmMvdDigi::GetBranchName(), &fMvdDigis);
27 fTree->SetBranchAddress(CbmTrdDigi::GetBranchName(), &fTrdDigis);
28 fTree->SetBranchAddress(CbmTofDigi::GetBranchName(), &fTofDigis);
29 fTree->SetBranchAddress(CbmRichDigi::GetBranchName(), &fRichDigis);
30}
31
33{
34 if (fBmonDigis) delete fBmonDigis;
35 if (fStsDigis) delete fStsDigis;
36 if (fFsdDigis) delete fFsdDigis;
37 if (fMvdDigis) delete fMvdDigis;
38 if (fTrdDigis) delete fTrdDigis;
39 if (fTofDigis) delete fTofDigis;
40 if (fRichDigis) delete fRichDigis;
41}
42
43bool SimSource::eos() const { return fCurrent >= fEntries; }
44
45fles::StorableTimeslice* SimSource::do_get()
46{
47 if (eos()) {
48 return nullptr;
49 }
50
51 fTsBuilder.init(1, fCurrent);
52 fTree->GetEntry(fCurrent);
53
54 fMvdRawDigis.clear();
55 fMvdRawDigis.reserve(fMvdDigis->size());
56 std::transform(fMvdDigis->cbegin(), fMvdDigis->cend(), std::back_inserter(fMvdRawDigis),
58
59 fTsBuilder.addDigisToTs(*fBmonDigis, fles::Subsystem::BMON);
60 fTsBuilder.addDigisToTs(*fStsDigis, fles::Subsystem::STS);
61 fTsBuilder.addDigisToTs(*fFsdDigis, fles::Subsystem::FSD);
62 fTsBuilder.addDigisToTs(fMvdRawDigis, fles::Subsystem::MVD);
63 fTsBuilder.addDigisToTs(*fTrdDigis, fles::Subsystem::TRD);
64 fTsBuilder.addDigisToTs(*fTofDigis, fles::Subsystem::TOF);
65 fTsBuilder.addDigisToTs(*fRichDigis, fles::Subsystem::RICH);
66
67 ++fCurrent;
68 return fTsBuilder.getRelease();
69}
static const char * GetBranchName()
Get the desired name of the branch for this objects in the cbm output tree (static)
Definition CbmBmonDigi.h:64
static const char * GetBranchName()
Get the desired name of the branch for this obj in the cbm output tree (static)
Definition CbmFsdDigi.h:86
static CbmMvdRawDigi ConvertToRawDigi(const CbmMvdDigi &rhs)
static const char * GetBranchName()
Definition CbmMvdDigi.h:70
static const char * GetBranchName()
Get the desired name of the branch for this obj in the cbm output tree (static)
Definition CbmRichDigi.h:48
static const char * GetBranchName()
Get the desired name of the branch for this obj in the cbm output tree (static)
Definition CbmStsDigi.h:87
static const char * GetBranchName()
Get the desired name of the branch for this obj in the cbm output tree (static)
Definition CbmTofDigi.h:119
static const char * GetBranchName()
Get the desired name of the branch for this obj in the cbm output tree (static)
Definition CbmTrdDigi.h:149
std::unique_ptr< TFile > fFile
Definition SimSource.h:36
std::size_t fCurrent
Definition SimSource.h:49
SimSource(const std::string &locator)
Definition SimSource.cxx:9
std::unique_ptr< TTree > fTree
Definition SimSource.h:37
std::vector< CbmBmonDigi > * fBmonDigis
Definition SimSource.h:39
std::vector< CbmMvdRawDigi > fMvdRawDigis
Definition SimSource.h:47
std::vector< CbmTofDigi > * fTofDigis
Definition SimSource.h:44
std::vector< CbmStsDigi > * fStsDigis
Definition SimSource.h:40
TimeslicedDigiBuilder fTsBuilder
Definition SimSource.h:52
std::vector< CbmFsdDigi > * fFsdDigis
Definition SimSource.h:41
std::vector< CbmMvdDigi > * fMvdDigis
Definition SimSource.h:42
~SimSource() override
Definition SimSource.cxx:32
fles::StorableTimeslice * do_get() override
Definition SimSource.cxx:45
std::vector< CbmRichDigi > * fRichDigis
Definition SimSource.h:45
bool eos() const override
Definition SimSource.cxx:43
std::size_t fEntries
Definition SimSource.h:50
std::vector< CbmTrdDigi > * fTrdDigis
Definition SimSource.h:43