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