BmnRoot 26.10.0-18-g4e3414f9
Software framework of the BM@N experiment
Loading...
Searching...
No Matches
BmnZdcDigitizer.cxx
Go to the documentation of this file.
1/*
2 * File: BmnZdcDigitizer.cxx
3 * Author: Petr Alekseev
4 *
5 * Created on 29.05.2020, 18:00
6 */
7
8#include "BmnZdcDigitizer.h"
9
10#include "BmnZdcPoint.h"
11#include "FairLogger.h"
12#include "FairRootManager.h"
13
14#include <FairRun.h>
15#include <FairRunSim.h>
16
22
24
26{
27
28 FairRootManager* ioman = FairRootManager::Instance();
29 fArrayOfZdcPoints = (TClonesArray*)ioman->GetObject("ZdcPoint");
30 if (fArrayOfZdcPoints == nullptr) {
31 LOG(error) << "BmnZdcDigitizer::Init() branch 'ZdcPoint' not found! Task will be deactivated";
32 SetActive(kFALSE);
33 return kERROR;
34 }
35
36 fArrayOfZdcDigits = new TClonesArray("BmnZDCDigit");
37 ioman->Register("ZdcDigit", "Zdc", fArrayOfZdcDigits, kTRUE);
38
39 LoadMap("ZDC_map_period_5.txt");
40
41 Info(__func__, "ZDC digitizer ready");
42 return kSUCCESS;
43}
44
46{
47 if (!IsActive())
48 return;
49
50 // Reset arrays
51 fArrayOfZdcDigits->Delete();
52 for (Int_t i = 0; i < 106; i++) {
53 fModules[i].SetAmp(0.);
54 }
55
56 // Collect points
57 Int_t N = fArrayOfZdcPoints->GetEntries();
58 for (Int_t i = 0; i < N; i++) {
60
61 Int_t ch = p->GetCopyMother();
62 if (ch < 106) {
63 fModules[ch].SetAmp(fModules[ch].GetAmp() + p->GetEnergyLoss());
64 } else {
65 Error(__func__, "ZDC module %d ignored", ch);
66 }
67 }
68
69 // Store digits
70 for (Int_t i = 1; i < 105; i++) {
71 Double_t amp = fModules[i].GetAmp() * fScale;
72
73 if (amp == 0.)
74 continue;
75 if (i < 69) {
76 if (amp < fLargeModThreshold)
77 continue;
78 } else {
79 if (amp < fSmallModThreshold)
80 continue;
81 }
82
83 BmnZDCDigit* p = new ((*fArrayOfZdcDigits)[fArrayOfZdcDigits->GetEntriesFast()]) BmnZDCDigit();
84 *p = fModules[i];
85 p->SetAmp(amp);
86 }
87
88 if (fModules[105].GetAmp() > 0) {
89 BmnZDCDigit* p = new ((*fArrayOfZdcDigits)[fArrayOfZdcDigits->GetEntriesFast()]) BmnZDCDigit();
90 p->SetChannel(111);
91 p->SetAmp(fModules[105].GetAmp());
92 }
93}
94
95void BmnZdcDigitizer::LoadMap(const char* fileName)
96{
97 ifstream in;
98
99 TString path = getenv("VMCWORKDIR");
100 path += "/input/";
101 path += fileName;
102 in.open(path.Data());
103 if (!in.is_open()) {
104 Fatal(__func__, "Loading ZDC Map from file: %s - file open error!\n", fileName);
105 return;
106 }
107 Info(__func__, "Loading ZDC Map from file: %s\n", fileName);
108
109 TString dummy;
110 in >> dummy >> dummy >> dummy >> dummy >> dummy >> dummy >> dummy >> dummy >> dummy >> dummy;
111
112 // int ixmin = -1, ixmax = -1, iymin = -1, iymax = -1;
113 // int xmin = 10000., xmax = -10000., ymin = 10000., ymax = -10000.;
114 while (!in.eof()) {
115 int id, chan, front_chan, size, ix, iy, used;
116 float x, y;
117 in >> std::hex >> id >> std::dec >> chan >> front_chan >> size >> ix >> iy >> x >> y >> used;
118 if (!in.good())
119 break;
120 // printf("%0x %d %d %d %d %d %f %f\n",id,chan,front_chan,size,ix,iy,x,y);
121 if (front_chan > 0 && front_chan < 105) {
122 fModules[front_chan].SetChannel(front_chan);
123 fModules[front_chan].SetSize(size);
124 fModules[front_chan].SetIX(ix);
125 fModules[front_chan].SetIY(iy);
126 fModules[front_chan].SetX(x);
127 fModules[front_chan].SetY(y);
128 }
129 }
130 in.close();
131}
int i
Definition P4_F32vec4.h:22
int Int_t
constexpr Bool_t kFALSE
double Double_t
constexpr Bool_t kTRUE
const char Option_t
void Info(const char *location, const char *msgfmt,...)
void Error(const char *location, const char *msgfmt,...)
void Fatal(const char *location, const char *msgfmt,...)
void SetChannel(UShort_t ch)
void SetAmp(Float_t amp)
virtual InitStatus Init()
TClonesArray * fArrayOfZdcDigits
BmnZDCDigit fModules[106]
virtual void Exec(Option_t *opt)
TClonesArray * fArrayOfZdcPoints
Double_t fLargeModThreshold
virtual ~BmnZdcDigitizer()
Double_t fSmallModThreshold
void LoadMap(const char *fileName)
Short_t GetCopyMother() const
Definition BmnZdcPoint.h:58