CbmRoot
Loading...
Searching...
No Matches
CbmMvdPileupManager.cxx
Go to the documentation of this file.
1/* Copyright (C) 2006-2021 GSI Helmholtzzentrum fuer Schwerionenforschung, Darmstadt
2 SPDX-License-Identifier: GPL-3.0-only
3 Authors: Volker Friese [committer], Florian Uhlig */
4
5// -------------------------------------------------------------------------
6// ----- CbmMvdPileupManager source file -----
7// ----- Created 08/11/06 by V. Friese -----
8// -------------------------------------------------------------------------
10
11#include <Logger.h> // for Logger, LOG
12
13#include <TClonesArray.h> // for TClonesArray
14#include <TDirectory.h> // for TDirectoryAtomicAdapter, gDirectory, TDire...
15#include <TFile.h> // for TFile, gFile
16#include <TMathBase.h> // for Min
17#include <TObjArray.h> // for TObjArray
18#include <TTree.h> // for TTree
19
20#include <iostream> // for operator<<, endl, basic_ostream, char_traits
21#include <memory> // for allocator
22
23using std::endl;
24
25// ----- Default constructor -------------------------------------------
26CbmMvdPileupManager::CbmMvdPileupManager() : TObject(), fBuffer(nullptr) {}
27// -------------------------------------------------------------------------
28
29
30// ----- Standard constructor ------------------------------------------
31CbmMvdPileupManager::CbmMvdPileupManager(TString fileName, TString branchName, Int_t nEvents)
32 : TObject()
33 , fBuffer(new TObjArray(nEvents))
34{
35 if (!FillBuffer(fileName, branchName, nEvents)) Fatal("CbmMvdPileupManager", "Error in filling buffer");
36}
37// -------------------------------------------------------------------------
38
39
40// ----- Destructor ----------------------------------------------------
46// -------------------------------------------------------------------------
47
48
49// ----- Public method GetEvent ----------------------------------------
50TClonesArray* CbmMvdPileupManager::GetEvent(Int_t iEvent)
51{
52
53 if (!fBuffer) Fatal("CbmMvdPileupManager::GetEvent", "No event buffer!");
54
55 if (iEvent > fBuffer->GetEntriesFast()) {
56 LOG(warning) << "CbmMvdPileupManager::GetEvent: Event " << iEvent << " not present in buffer! ";
57 LOG(warning) << " Returning nullptr pointer! ";
58 return nullptr;
59 }
60
61 TClonesArray* pArray = (TClonesArray*) fBuffer->At(iEvent);
62
63 if (!pArray) {
64 LOG(warning) << "CbmMvdPileupManager::GetEvent: Returning nullptr pointer!";
65 return nullptr;
66 }
67
68 return pArray;
69}
70// -------------------------------------------------------------------------
71
72
73// ----- Private method FillBuffer -------------------------------------
74Int_t CbmMvdPileupManager::FillBuffer(TString fileName, TString branchName, Int_t nEvents)
75{
76
77 if (!fBuffer) Fatal("Fill Buffer", "No event buffer!");
78
79 fBuffer->Delete();
80
81 TClonesArray* pointArray = nullptr;
82
84 TFile* oldFile = gFile;
85 TDirectory* oldDir = gDirectory;
86
87 TFile* bgfile = new TFile(fileName);
88 if (!bgfile) {
89 LOG(warning) << "CbmMvdPileupManager::FillBuffer: Background file " << fileName << " could noy be opened! "
90 << endl;
91 return 0;
92 }
93 LOG(info) << "CbmMvdPileupManager::FillBuffer: Opening file " << fileName;
94
95 TTree* bgtree = bgfile->Get<TTree>("cbmsim");
96 if (!bgtree) {
97 LOG(warning) << "CbmMvdPileupManager::FillBuffer: "
98 << "Could not find cbmsim tree in background file ";
99 return 0;
100 }
101
102 Int_t nEventsInFile = bgtree->GetEntries();
103 LOG(info) << "CbmMvdPileupManager::FillBuffer: " << nEventsInFile << " events in file";
104 Int_t nBuffer = TMath::Min(nEvents, nEventsInFile);
105 LOG(info) << "CbmMvdPileupManager::FillBuffer: Buffering " << nBuffer << " events";
106 if (nBuffer < 100)
107 LOG(warning) << "CbmMvdPileupManager::FillBuffer: "
108 << "Number of events may not be sufficient for appropriate "
109 << "presentation of background pattern!";
110
111 bgtree->SetBranchAddress(branchName, &pointArray);
112
113 for (Int_t iEvent = 0; iEvent < nBuffer; iEvent++) {
114 bgtree->GetEntry(iEvent);
115 fBuffer->AddAt(pointArray->Clone(), iEvent);
116 }
117
118 delete bgtree;
119 bgfile->Close();
120 delete bgfile;
121
123 gFile = oldFile;
124 gDirectory = oldDir;
125
126 return nBuffer;
127}
128// -------------------------------------------------------------------------
129
130
ClassImp(CbmConverterManager)
TClonesArray * GetEvent(Int_t iEvent)
Int_t FillBuffer(TString fileName, TString branchName, Int_t nEvents)