11 #include <beast/fangs/modules/FANGSStudyModule.h>
12 #include <beast/fangs/dataobjects/FANGSSimHit.h>
13 #include <beast/fangs/dataobjects/FANGSHit.h>
14 #include <framework/datastore/StoreArray.h>
15 #include <framework/gearbox/GearDir.h>
16 #include <framework/logging/Logger.h>
32 using namespace fangs;
46 setDescription(
"Study module for Fangs (BEAST)");
50 FANGSStudyModule::~FANGSStudyModule()
55 void FANGSStudyModule::defineHisto()
57 h_time =
new TH2F(
"h_time",
"Detector # vs. time", 20, 0., 20., 1000, 0., 750.);
59 h_timeWeighted =
new TH2F(
"h_timeWeigthed",
"Detector # vs. time weighted by the energy deposited", 20, 0., 20., 1000, 0., 750.);
60 h_timeWeighted->Sumw2();
61 h_timeThres =
new TH2F(
"h_timeThres",
"Detector # vs. time", 20, 0., 20., 750, 0., 750.);
63 h_timeWeightedThres =
new TH2F(
"h_timeWeigthedThres",
"Detector # vs. time weighted by the energy deposited", 20, 0., 20., 750, 0.,
65 h_timeWeightedThres->Sumw2();
66 h_edep =
new TH2F(
"h_edep",
"Time bin # vs. energy deposited", 20, 0., 20., 1000, 0., 10.);
68 h_edep1 =
new TH2F(
"h_edep1",
"Time bin # vs. energy deposited", 20, 0., 20., 1000, 0., 10.);
70 h_edep2 =
new TH2F(
"h_edep2",
"Time bin # vs. energy deposited", 20, 0., 20., 1000, 0., 10.);
72 h_edep3 =
new TH2F(
"h_edep3",
"Time bin # vs. energy deposited", 20, 0., 20., 1000, 0., 10.);
75 h_edepThres =
new TH2F(
"h_edepThres",
"Time bin # vs. energy deposited", 20, 0., 20., 1000, 0., 10.);
77 h_edepThres1 =
new TH2F(
"h_edepThres1",
"Time bin # vs. energy deposited", 20, 0., 20., 1000, 0., 10.);
78 h_edepThres1->Sumw2();
79 h_edepThres2 =
new TH2F(
"h_edepThres2",
"Time bin # vs. energy deposited", 20, 0., 20., 1000, 0., 10.);
80 h_edepThres2->Sumw2();
81 h_edepThres3 =
new TH2F(
"h_edepThres3",
"Time bin # vs. energy deposited", 20, 0., 20., 1000, 0., 10.);
82 h_edepThres3->Sumw2();
83 for (
int i = 0; i < 3; i++) {
84 h_zvedep[i] =
new TH1F(TString::Format(
"h_zvedep_%d", i) ,
"edep [MeV] vs. z [cm]", 2000, -25., 25.);
87 h_xvzvedep[i] =
new TH2F(TString::Format(
"h_xvzvedep_%d", i) ,
"edep [MeV] vs. z [cm]", 2000, -25., 25., 2000, -25., 25.);
88 h_xvzvedep[i]->Sumw2();
90 h_yvzvedep[i] =
new TH2F(TString::Format(
"h_yvzvedep_%d", i) ,
"edep [MeV] vs. z [cm]", 2000, -25., 25., 2000, -25., 25.);
91 h_yvzvedep[i]->Sumw2();
93 h_rvzvedep[i] =
new TH2F(TString::Format(
"h_rvzvedep_%d", i) ,
"edep [MeV] vs. z [cm]", 2000, 0., 25., 2000, -25., 25.);
94 h_rvzvedep[i]->Sumw2();
96 h_xvyvedep[i] =
new TH2F(TString::Format(
"h_xvyvedep_%d", i) ,
"edep [MeV] vs. y [cm]", 2000, -25., 25., 2000, -25., 25.);
97 h_xvyvedep[i]->Sumw2();
99 h_zvedepW[i] =
new TH1F(TString::Format(
"h_zvedepW_%d", i) ,
"edep [MeV] vs. z [cm]", 2000, -25., 25.);
100 h_zvedepW[i]->Sumw2();
102 h_xvzvedepW[i] =
new TH2F(TString::Format(
"h_xvzvedepW_%d", i) ,
"edep [MeV] vs. x vs. z [cm]", 2000, -25., 25., 2000, -25., 25.);
103 h_xvzvedepW[i]->Sumw2();
105 h_yvzvedepW[i] =
new TH2F(TString::Format(
"h_yvzvedepW_%d", i) ,
"edep [MeV] vs. y vs. z [cm]", 2000, -25., 25., 2000, -25., 25.);
106 h_yvzvedepW[i]->Sumw2();
108 h_xvyvedepW[i] =
new TH2F(TString::Format(
"h_xvyvedepW_%d", i) ,
"edep [MeV] vs. x vs. y [cm]", 2000, -25., 25., 2000, -25., 25.);
109 h_xvyvedepW[i]->Sumw2();
111 h_rvzvedepW[i] =
new TH2F(TString::Format(
"h_rvzvedepW_%d", i) ,
"edep [MeV] vs. z [cm]", 2000, 0., 25., 2000, -25., 25.);
112 h_rvzvedepW[i]->Sumw2();
115 h_zvedepT[i] =
new TH1F(TString::Format(
"h_zvedepT_%d", i) ,
"edep [MeV] vs. z [cm]", 2000, -25., 25.);
116 h_zvedepT[i]->Sumw2();
118 h_xvzvedepT[i] =
new TH2F(TString::Format(
"h_xvzvedepT_%d", i) ,
"edep [MeV] vs. z [cm]", 2000, -25., 25., 2000, -25., 25.);
119 h_xvzvedepT[i]->Sumw2();
121 h_yvzvedepT[i] =
new TH2F(TString::Format(
"h_yvzvedepT_%d", i) ,
"edep [MeV] vs. z [cm]", 2000, -25., 25., 2000, -25., 25.);
122 h_yvzvedepT[i]->Sumw2();
124 h_rvzvedepT[i] =
new TH2F(TString::Format(
"h_rvzvedepT_%d", i) ,
"edep [MeV] vs. z [cm]", 2000, 0., 25., 2000, -25., 25.);
125 h_rvzvedepT[i]->Sumw2();
127 h_xvyvedepT[i] =
new TH2F(TString::Format(
"h_xvyvedepT_%d", i) ,
"edep [MeV] vs. y [cm]", 2000, -25., 25., 2000, -25., 25.);
128 h_xvyvedepT[i]->Sumw2();
130 h_zvedepWT[i] =
new TH1F(TString::Format(
"h_zvedepWT_%d", i) ,
"edep [MeV] vs. z [cm]", 2000, -25., 25.);
131 h_zvedepWT[i]->Sumw2();
133 h_xvzvedepWT[i] =
new TH2F(TString::Format(
"h_xvzvedepWT_%d", i) ,
"edep [MeV] vs. x vs. z [cm]", 2000, -25., 25., 2000, -25., 25.);
134 h_xvzvedepWT[i]->Sumw2();
136 h_yvzvedepWT[i] =
new TH2F(TString::Format(
"h_yvzvedepWT_%d", i) ,
"edep [MeV] vs. y vs. z [cm]", 2000, -25., 25., 2000, -25., 25.);
137 h_yvzvedepWT[i]->Sumw2();
139 h_xvyvedepWT[i] =
new TH2F(TString::Format(
"h_xvyvedepWT_%d", i) ,
"edep [MeV] vs. x vs. y [cm]", 2000, -25., 25., 2000, -25., 25.);
140 h_xvyvedepWT[i]->Sumw2();
142 h_rvzvedepWT[i] =
new TH2F(TString::Format(
"h_rvzvedepWT_%d", i) ,
"edep [MeV] vs. z [cm]", 2000, 0., 25., 2000, -25., 25.);
143 h_rvzvedepWT[i]->Sumw2();
145 h_Edep =
new TH2F(
"h_Edep",
"det # # vs. energy deposited", 20, 0., 20., 1000, 0., 10.);
146 h_pxNb =
new TH2F(
"h_pxNb",
"det # # vs. nb pixel", 20, 0., 20., 1000, 0., 1000.);
147 for (
int i = 0; i < 15; i++) {
148 h_cvr[i] =
new TH2F(TString::Format(
"cvr_%d", i) ,
" col v. row", 80, 0., 80., 336, 0., 336.);
153 void FANGSStudyModule::initialize()
155 B2INFO(
"FANGSStudyModule: Initialize");
164 fctQ_Calib1 =
new TF1(
"fctQ_Calib1",
"[0]*([1]*x-[2])/([3]-x)", 0., 15.);
165 fctQ_Calib1->SetParameters(m_TOTQ1, m_TOTC1, m_TOTA1 * m_TOTB1, m_TOTA1);
167 fctQ_Calib2 =
new TF1(
"fctQ_Calib2",
"[0]*([1]*x-[2])/([3]-x)", 0., 15.);
168 fctQ_Calib2->SetParameters(m_TOTQ2, m_TOTC2, m_TOTA2 * m_TOTB2, m_TOTA2);
171 void FANGSStudyModule::beginRun()
175 void FANGSStudyModule::event()
195 if (olddetNb != detNb) {
197 h_Edep->Fill(detNb, esum);
198 h_pxNb->Fill(detNb, ipix);
202 for (
int j = 0; j < maxSIZE; j++) {
210 x[ipix] = col * (2. * m_ChipColumnX / (float)m_ChipColumnNb) - m_ChipColumnX;
211 y[ipix] = row * (2. * m_ChipRowY / (float)m_ChipRowNb) - m_ChipRowY;
212 z[ipix] = (m_PixelTimeBin / 2. + m_PixelTimeBin * bcid) * m_v_sensor;
213 if (tot < 3) e[ipix] = fctQ_Calib1->Eval(tot) * m_Workfct * 1e-3;
214 else e[ipix] = fctQ_Calib2->Eval(tot) * m_Workfct * 1e-3;
216 h_cvr[detNb]->Fill(col, row);
224 for (
int i = 0; i < nSimHits; i++) {
229 double timeBin = aHit->
getTime();
233 double r = sqrt(position.X() * position.X() + position.Y() * position.Y());
234 int detNB = (lad - 1) * 5 + sen - 1;
237 h_time->Fill(detNB, timeBin);
238 h_edep->Fill(detNB, adep * 1e3);
239 if (fabs(pdg) == 11)h_edep1->Fill(detNB, adep * 1e3);
240 if (pdg == 22)h_edep2->Fill(detNB, adep * 1e3);
241 if (pdg != 22 && fabs(pdg) != 11)h_edep3->Fill(detNB, adep * 1e3);
242 if (adep > 50.*1e-6) {
243 h_timeThres->Fill(detNB, timeBin);
244 h_edepThres->Fill(detNB, adep * 1e3);
245 if (fabs(pdg) == 11)h_edepThres1->Fill(detNB, adep * 1e3);
246 if (pdg == 22)h_edepThres2->Fill(detNB, adep * 1e3);
247 if (pdg != 22 && fabs(pdg) != 11)h_edepThres3->Fill(detNB, adep * 1e3);
249 h_zvedep[lad - 1]->Fill(position.Z());
250 h_xvzvedep[lad - 1]->Fill(position.X(), position.Z());
251 h_yvzvedep[lad - 1]->Fill(position.Y(), position.Z());
252 h_xvyvedep[lad - 1]->Fill(position.X(), position.Y());
253 h_rvzvedep[lad - 1]->Fill(r, position.Z());
254 h_zvedepW[lad - 1]->Fill(position.Z(), adep * 1e3);
255 h_xvzvedepW[lad - 1]->Fill(position.X(), position.Z(), adep * 1e3);
256 h_yvzvedepW[lad - 1]->Fill(position.Y(), position.Z(), adep * 1e3);
257 h_xvyvedepW[lad - 1]->Fill(position.X(), position.Y(), adep * 1e3);
258 h_rvzvedepW[lad - 1]->Fill(r, position.Z(), adep * 1e3);
259 if (adep > 50.*1e-6) {
260 h_zvedepT[lad - 1]->Fill(position.Z());
261 h_xvzvedepT[lad - 1]->Fill(position.X(), position.Z());
262 h_yvzvedepT[lad - 1]->Fill(position.Y(), position.Z());
263 h_xvyvedepT[lad - 1]->Fill(position.X(), position.Y());
264 h_rvzvedepT[lad - 1]->Fill(r, position.Z());
265 h_zvedepWT[lad - 1]->Fill(position.Z(), adep * 1e3);
266 h_xvzvedepWT[lad - 1]->Fill(position.X(), position.Z(), adep * 1e3);
267 h_yvzvedepWT[lad - 1]->Fill(position.Y(), position.Z(), adep * 1e3);
268 h_xvyvedepWT[lad - 1]->Fill(position.X(), position.Y(), adep * 1e3);
269 h_rvzvedepWT[lad - 1]->Fill(r, position.Z(), adep * 1e3);
276 void FANGSStudyModule::getXMLData()
278 GearDir content =
GearDir(
"/Detector/DetectorComponent[@name=\"FANGS\"]/Content/");
280 m_PixelThreshold = content.getInt(
"PixelThreshold");
281 m_PixelThresholdRMS = content.getInt(
"PixelThresholdRMS");
282 m_PixelTimeBinNb = content.getInt(
"PixelTimeBinNb");
283 m_PixelTimeBin = content.getDouble(
"PixelTimeBin");
284 m_ChipColumnNb = content.getInt(
"ChipColumnNb");
285 m_ChipRowNb = content.getInt(
"ChipRowNb");
286 m_ChipColumnX = content.getDouble(
"ChipColumnX");
287 m_ChipRowY = content.getDouble(
"ChipRowY");
288 m_TOTA1 = content.getDouble(
"TOTA1");
289 m_TOTB1 = content.getDouble(
"TOTB1");
290 m_TOTC1 = content.getDouble(
"TOTC1");
291 m_TOTQ1 = content.getDouble(
"TOTQ1");
292 m_TOTA2 = content.getDouble(
"TOTA2");
293 m_TOTB2 = content.getDouble(
"TOTB2");
294 m_TOTC2 = content.getDouble(
"TOTC2");
295 m_TOTQ2 = content.getDouble(
"TOTQ2");
296 m_v_sensor = content.getDouble(
"v_sensor");
297 m_sensor_width = content.getDouble(
"sensor_width");
298 m_Workfct = content.getDouble(
"Workfct");
302 void FANGSStudyModule::endRun()
309 void FANGSStudyModule::terminate()