30 const string& bgHistName)
72 TFile* oldFile = gFile;
73 TDirectory* oldDir = gDirectory;
76 fH.resize(files.size());
77 for (
size_t iF = 0; iF <
fH.size(); iF++) {
79 TFile* file =
new TFile(files[iF].c_str());
80 fH[iF]->fHM.ReadFromFile(file);
81 int nofEventsSig = (int)
fH[iF]->H1(
"hEventNumber")->GetEntries();
83 LOG(info) <<
"Signal:" <<
fHMean.fSignalNames[iF] <<
" nofEvents:" << nofEventsSig << endl;
85 LOG(info) <<
"Nof simulated Events = " <<
fNofSimEv;
86 LOG(info) <<
"Nof FastSim Events per Job = " <<
fNofFastSimEv / 1e6 <<
" Mio" << endl;
89 LOG(warn) <<
"LmvmFastSim::DoFastSim: 'fNofFastSimEv' is smaller than 'fMixingDepth'. No histograms for mixed "
90 "events will be filled.";
93 if (files.size() == 1)
95 else if (files.size() > 1)
98 LOG(fatal) <<
"LmvmFastSim::DoFastSim(): 'vector<string> files' has no content!";
99 LOG(info) <<
"Pluto mode: '" <<
fPlutoMode <<
"'";
106 fHMean.FillH1(
"hfs_nofJobs", 0.5);
110 vector<LmvmDataFastSim> C_Plus, C_Minus;
111 vector<LmvmDataFastSim> C_PlusEl, C_MinusEl;
112 vector<LmvmDataFastSim> C_PlusU, C_MinusU;
113 vector<LmvmDataFastSim> C_PlusUEl, C_MinusUEl;
114 vector<LmvmDataFastSim> C_PlusMix, C_MinusMix;
117 vector<LmvmDataFastSim> P_Plus, P_Minus;
118 vector<LmvmDataFastSim> P_PlusEl, P_MinusEl;
119 vector<LmvmDataFastSim> P_PlusMix, P_MinusMix;
122 LOG(info) <<
"Generating Fast Simulation Background ...";
127 for (
int iCat = 0; iCat <
fNofCats; iCat++) {
133 if (iN % (
int) 1e6 == 0) LOG(info) <<
"Category '" <<
fCatNames[iCat] <<
"': iN = " << iN / 1e6 <<
" Mio ...";
134 if (iCat == 0)
fHMean.FillH1(
"hfs_EventNumber", 0.5);
151 for (
int iPluto = 0; iPluto <
fNofPlutos; iPluto++) {
153 for (
const string charge : {
"plus",
"minus"}) {
154 string hMultNameCorr =
"hfsc_multCorr_pluto_" +
fPlutoNames[iPluto] +
"_" + charge +
"_" +
fCatNames[iCat];
155 string hMomName =
"hfsc_mom_pluto_" +
fPlutoNames[iPluto] +
"_" + charge +
"_" +
fCatNames[iCat];
156 string hMultNameRndm =
"hfsc_multRndm_pluto_" +
fPlutoNames[iPluto] +
"_" + charge +
"_" +
fCatNames[iCat];
157 string hMomNameRndm =
"hfsc_momRndm_pluto_" +
fPlutoNames[iPluto] +
"_" + charge +
"_" +
fCatNames[iCat];
158 int mult = (int)
fHMean.H1(hMultNameCorr)->GetRandom();
159 fHMean.H1(hMultNameRndm)->Fill(mult);
160 if (mult < 1)
continue;
161 for (
int iMult = 1; iMult <= mult; iMult++) {
162 double fastsimMom[3] = {0.};
163 fH[iPluto]->fHM.HnSparse(hMomName)->GetRandom(fastsimMom);
164 fHMean.fHM.HnSparse(hMomNameRndm)->Fill(fastsimMom);
165 int iEvent = (
fPlutoMode ==
"one") ? iN - iPluto : iN;
167 if (charge ==
"plus") {
168 C_Plus.push_back(mom);
169 C_PlusMix.push_back(mom);
171 P_Plus.push_back(mom);
172 P_PlusMix.push_back(mom);
175 C_PlusEl.push_back(mom);
179 else if (charge ==
"minus") {
180 C_Minus.push_back(mom);
181 C_MinusMix.push_back(mom);
183 P_Minus.push_back(mom);
184 P_MinusMix.push_back(mom);
187 C_MinusEl.push_back(mom);
198 string hMultName =
"hfsc_mult_urqmd_urqmd_" + charge +
"_" +
fCatNames[iCat];
199 string hMomName =
"hfsc_mom_urqmd_urqmd_" + charge +
"_" +
fCatNames[iCat];
200 string hMultNameRndm =
"hfsc_multRndm_urqmd_urqmd_" + charge +
"_" +
fCatNames[iCat];
201 string hMomNameRndm =
"hfsc_momRndm_urqmd_urqmd_" + charge +
"_" +
fCatNames[iCat];
202 int mult = (int)
fHMean.H1(hMultName)->GetRandom();
203 fHMean.H1(hMultNameRndm)->Fill(mult);
204 if (mult < 1)
continue;
205 for (
int iMult = 1; iMult <= mult; iMult++) {
206 double fastsimMom[3] = {0.};
207 fHMean.fHM.HnSparse(hMomName)->GetRandom(fastsimMom);
208 fHMean.fHM.HnSparse(hMomNameRndm)->Fill(fastsimMom);
209 LmvmDataFastSim mom(fastsimMom[0], fastsimMom[1], fastsimMom[2], iN,
"");
210 if (charge ==
"plus") {
211 C_Plus.push_back(mom);
212 C_PlusMix.push_back(mom);
213 C_PlusU.push_back(mom);
215 else if (charge ==
"minus") {
216 C_Minus.push_back(mom);
217 C_MinusMix.push_back(mom);
218 C_MinusU.push_back(mom);
220 else if (charge ==
"plusEl") {
221 C_PlusEl.push_back(mom);
222 C_PlusUEl.push_back(mom);
224 else if (charge ==
"minusEl") {
225 C_MinusEl.push_back(mom);
226 C_MinusUEl.push_back(mom);
250 for (
const string charge : {
"plus",
"minus"}) {
251 string hMultName =
"hfsp_mult_urqmd_" + ptcl +
"_" + charge +
"_" +
fCatNames[iCat];
252 string hMultNameRndm =
"hfsp_multRndm_urqmd_" + ptcl +
"_" + charge +
"_" +
fCatNames[iCat];
253 string hMomName =
"hfsp_mom_urqmd_" + ptcl +
"_" + charge +
"_" +
fCatNames[iCat];
254 string hMomNameRndm =
"hfsp_momRndm_urqmd_" + ptcl +
"_" + charge +
"_" +
fCatNames[iCat];
258 fHMean.H1(hMultNameRndm)->Fill(mult);
259 if (mult < 1)
continue;
260 for (
int iMult = 1; iMult <= mult; iMult++) {
261 double fastsimMom[3] = {0.};
262 fHMean.fHM.HnSparse(hMomName)->GetRandom(fastsimMom);
263 fHMean.fHM.HnSparse(hMomNameRndm)->Fill(fastsimMom);
264 LmvmDataFastSim mom(fastsimMom[0], fastsimMom[1], fastsimMom[2], iN,
"");
265 if (charge ==
"plus") {
266 P_Plus.push_back(mom);
267 P_PlusMix.push_back(mom);
269 else if (charge ==
"minus") {
270 P_Minus.push_back(mom);
271 P_MinusMix.push_back(mom);
273 if (ptcl.find(
"El") != string::npos) {
274 if (charge ==
"plus")
275 P_PlusEl.push_back(mom);
276 else if (charge ==
"minus")
277 P_MinusEl.push_back(mom);
299 fHMean.fHM.ScaleByPattern(
"hfs.*_Minv.*", 1. / bW);
301 LOG(info) <<
"[DONE]." << endl;
305 LOG(info) <<
"Real time " << timer.RealTime() <<
" s, CPU time " << timer.CpuTime() <<
" s";
306 LOG(info) <<
"Time per event (average): " << 1e6 * timer.RealTime() / (
fNofFastSimEv *
fNofCats) <<
" mus";
308 static ProcInfo_t info;
309 const float toMB = 1.f / 1024.f;
310 gSystem->GetProcInfo(&info);
311 fHMean.FillH1(
"hfs_memory_res", info.fMemResident * toMB);
312 fHMean.FillH1(
"hfs_memory_vir", info.fMemVirtual * toMB);
322 CheckMemory(
"Memory after deleting fH[] elements");
492 fHMean.CreateH1(
"hfs_EventNumber",
"",
"", 1, 0, 1.);
493 fHMean.CreateH1(
"hfs_nofJobs",
"",
"", 1, 0, 1.);
498 LOG(info) <<
"LmvmFastSim::CreateHistos(): fBgHistName = " <<
fBgHistName;
499 for (
int iCat = 0; iCat <
fNofCats; iCat++) {
520 TH1D* hcBgEl =
fHMean.CreateHByClone<TH1D>(
532 TH1D* hpBgPM =
fHMean.CreateHByClone<TH1D>(
553 for (
int iCat = 0; iCat <
fNofCats; iCat++) {
554 string hNameMult =
"hfsc_mult_urqmd_urqmd_" + charge +
"_" +
fCatNames[iCat];
555 string hNameMom =
"hfsc_mom_urqmd_urqmd_" + charge +
"_" +
fCatNames[iCat];
556 string hNameMultRndm =
"hfsc_multRndm_urqmd_urqmd_" + charge +
"_" +
fCatNames[iCat];
557 string hNameMomRndm =
"hfsc_momRndm_urqmd_urqmd_" + charge +
"_" +
fCatNames[iCat];
564 TH1D* hMultRndm =
fHMean.CreateHByClone<TH1D>(hNameMult, hNameMultRndm);
565 THnSparseD* hMomRndm =
fHMean.CreateHByClone<THnSparseD>(hNameMom, hNameMomRndm);
573 for (
const string charge : {
"plus",
"minus"}) {
574 for (
int iCat = 0; iCat <
fNofCats; iCat++) {
575 string hNameMult =
"hfsp_mult_urqmd_" + ptcl +
"_" + charge +
"_" +
fCatNames[iCat];
576 string hNameMom =
"hfsp_mom_urqmd_" + ptcl +
"_" + charge +
"_" +
fCatNames[iCat];
577 string hNameMultRndm =
"hfsp_multRndm_urqmd_" + ptcl +
"_" + charge +
"_" +
fCatNames[iCat];
578 string hNameMomRndm =
"hfsp_momRndm_urqmd_" + ptcl +
"_" + charge +
"_" +
fCatNames[iCat];
585 TH1D* hMultRndm =
fHMean.CreateHByClone<TH1D>(hNameMult, hNameMultRndm);
586 THnSparseD* hMomRndm =
fHMean.CreateHByClone<THnSparseD>(hNameMom, hNameMomRndm);
595 for (
int iPluto = 0; iPluto <
fNofPlutos; iPluto++) {
596 int nofEventsSig = (int)
fH[iPluto]->H1(
"hEventNumber")->GetEntries();
597 for (
const string charge : {
"plus",
"minus"}) {
598 for (
int iCat = 0; iCat <
fNofCats; iCat++) {
601 string hNameMult =
"hfsc_mult_pluto_" +
fPlutoNames[iPluto] +
"_" + charge +
"_" +
fCatNames[iCat];
602 string hNameMultCorr =
"hfsc_multCorr_pluto_" +
fPlutoNames[iPluto] +
"_" + charge +
"_" +
fCatNames[iCat];
603 string hNameMultRndm =
"hfsc_multRndm_pluto_" +
fPlutoNames[iPluto] +
"_" + charge +
"_" +
fCatNames[iCat];
605 fHMean.fHM.Add(hNameMult, (TH1D*)
fH[iPluto]->H1Clone(hNameMult));
607 TH1D* hMultRndm =
fH[iPluto]->H1Clone(hNameMult);
609 hMultRndm->SetNameTitle(hNameMultRndm.c_str(), hNameMultRndm.c_str());
610 fHMean.fHM.Add(hNameMultRndm, hMultRndm);
614 TH1D* hMultCorr =
fH[iPluto]->H1Clone(hNameMult);
615 hMultCorr->SetNameTitle(hNameMultCorr.c_str(), hNameMultCorr.c_str());
616 double c1 = hMultCorr->GetBinContent(2);
617 double c0 = nofEventsSig - c1;
618 hMultCorr->SetBinContent(1, c0);
619 fHMean.fHM.Add(hNameMultCorr, hMultCorr);
622 string hNameMom =
"hfsc_mom_pluto_" +
fPlutoNames[iPluto] +
"_" + charge +
"_" +
fCatNames[iCat];
623 string hNameMomRndm =
"hfsc_momRndm_pluto_" +
fPlutoNames[iPluto] +
"_" + charge +
"_" +
fCatNames[iCat];
625 THnSparseD* hMomRndm = (THnSparseD*)
fH[iPluto]->fHM.GetObject(hNameMom)->Clone();
626 hMomRndm->SetNameTitle(hNameMomRndm.c_str(), hNameMomRndm.c_str());
628 fHMean.fHM.Add(hNameMomRndm, hMomRndm);
634 fHMean.CreateH1(
"hfs_time",
"Time per Event [#mus]",
"a.u.", 100, 0., 100.);
637 fHMean.CreateH1(
"hfs_memory_vir",
"Memory [MB]",
"a.u.", 100, 0., 6000.);
638 fHMean.CreateH1(
"hfs_memory_res",
"Memory [MB]",
"a.u.", 100, 0., 6000.);