9 #include <trg/ecl/modules/trgeclDQM/TRGECLDQMModule.h>
10 #include <trg/ecl/TrgEclMapping.h>
11 #include <trg/ecl/TrgEclCluster.h>
12 #include <trg/ecl/TrgEclDataBase.h>
14 #include <framework/datastore/StoreArray.h>
16 #include <TDirectory.h>
52 TDirectory* oldDir = gDirectory;
53 TDirectory* dirDQM = (TDirectory*)gDirectory->Get(
"TRG");
55 dirDQM = oldDir->mkdir(
"TRG");
59 h_TCId =
new TH1D(
"h_TCId",
"[TRGECL] Hit TC ID", 578, 0, 578);
60 h_TCthetaId =
new TH1D(
"h_TCthetaId",
"[TRGECL] Hit TC #theta ID", 19, 0, 19);
61 h_TCphiId_FWD =
new TH1D(
"h_TCphiId_FWD",
"[TRGECL] Hit TC #phi ID in FWD", 34, 0, 34);
62 h_TCphiId_BR =
new TH1D(
"h_TCphiId_BR",
"[TRGECL] Hit TC #phi ID in BR", 38, 0, 38);
63 h_TCphiId_BWD =
new TH1D(
"h_TCphiId_BWD",
"[TRGECL] Hit TC #phi ID in BWD", 34, 0, 34);
64 h_TotalEnergy =
new TH1D(
"h_TotalEnergy",
"[TRGECL] Total TC Energy (ADC)", 100, 0, 3000);
65 h_TCEnergy =
new TH1D(
"h_TCEnergy",
"[TRGECL] TC Energy (ADC)", 100, 0, 1500);
66 h_Narrow_TotalEnergy =
new TH1D(
"h_Narrow_TotalEnergy",
"[TRGECL] Total TC Energy (ADC)", 100, 0, 500);
67 h_Narrow_TCEnergy =
new TH1D(
"h_Narrow_TCEnergy",
"[TRGECL] TC Energy (ADC)", 100, 0, 100);
68 h_n_TChit_event =
new TH1D(
"h_n_TChit_event",
"[TRGECL] N(TC) ", 50, 0, 50);
69 h_n_TChit_clean =
new TH1D(
"h_n_TChit_clean",
"[TRGECL] N(TC) (Injection BG Clean)", 300, 0, 300);
70 h_n_TChit_injHER =
new TH1D(
"h_n_TChit_injHER",
"[TRGECL] N(TC) (HER Injection BG)", 300, 0, 300);
71 h_n_TChit_injLER =
new TH1D(
"h_n_TChit_injLER",
"[TRGECL] N(TC) (LER Injection BG)", 300, 0, 300);
72 h_nTChit_injtime =
new TH2D(
"h_nTChit_injtime",
"[TRGECL] N(TC) vs. Time since injection", 201, 0, 200, 100, 0, 50);
74 h_n_TChit_clean_2clk =
new TH1D(
"h_n_TChit_clean_2clk",
"[TRGECL] N(TC_2clk) (Injection BG Clean)", 300, 0, 300);
75 h_n_TChit_injHER_2clk =
new TH1D(
"h_n_TChit_injHER_2clk",
"[TRGECL] N(TC_2clk) (HER Injection BG)", 300, 0, 300);
76 h_n_TChit_injLER_2clk =
new TH1D(
"h_n_TChit_injLER_2clk",
"[TRGECL] N(TC_2clk) (LER Injection BG)", 300, 0, 300);
77 h_nTChit_injtime_2clk =
new TH2D(
"h_nTChit_injtime_2clk",
"[TRGECL] N(TC_2clk) vs. Time since injection", 201, 0, 200, 100, 0, 50);
78 h_Cluster =
new TH1D(
"h_Cluster",
"[TRGECL] N(Cluster) ", 20, 0, 20);
79 h_TCTiming =
new TH1D(
"h_TCTiming",
"[TRGECL] TC Timing (ns)", 100, 3010, 3210);
80 h_TRGTiming =
new TH1D(
"h_TRGTiming",
"[TRGECL] TRG Timing (ns)", 100, 3010, 3210);
81 h_Cal_TCTiming =
new TH1D(
"h_Cal_TCTiming",
"[TRGECL] Cal TC Timing (ns)", 100, -400, 400);
82 h_Cal_TRGTiming =
new TH1D(
"h_Cal_TRGTiming",
"[TRGECL] TRG Timing (ns)", 100, -400, 400);
83 h_ECL_TriggerBit =
new TH1D(
"h_ECL_TriggerBit",
"[TRGECL] ECL Trigger Bit", 29, 0, 29);
84 h_Cluster_Energy_Sum =
new TH1D(
"h_Cluster_Energy_Sum",
"[TRGECL] Energy Sum of 2 Clusters (ADC)", 300, 0, 3000);
90 const char* label[44] = {
"Hit",
"Timing Source(FWD)",
"Timing Source(BR)",
"Timing Source(BWD)",
"physics Trigger",
"2D Bhabha Veto",
"3D Bhabha veto",
"3D Bhabha Selection",
"E Low",
"E High",
"E LOM",
"Cluster Overflow",
"Low multi bit 0",
"Low multi bit 1",
"Low multi bit 2",
"Low multi bit 3",
"Low multi bit 4",
"Low multi bit 5",
"Low multi bit 6",
"Low multi bit 7",
"Low multi bit 8",
"Low multi bit 9",
"Low multi bit 10",
"Low multi bit 11",
"Low multi bit 12",
"Low multi bit 13",
"mumu bit",
"prescale bit",
"ECL burst bit",
"2D Bhabha bit 1",
"2D Bhabha bit 2",
"2D Bhabha bit 3",
"2D Bhabha bit 4",
"2D Bhabha bit 5",
"2D Bhabha bit 6",
"2D Bhabha bit 7",
"2D Bhabha bit 8",
"2D Bhabha bit 9",
"2D Bhabha bit 10",
"2D Bhabha bit 11",
"2D Bhabha bit 12",
"2D Bhabha bit 13",
"2D Bhabha bit 14"};
93 for (
int j = 0; j < 29; j++) {
140 double HitRevoFam = 0;
141 double HitRevoTrg = 0;
142 double HitFineTiming = 0;
143 double HitRevoEvtTiming = 0;
144 double HitCalTiming = 0;
150 HitFineTiming = aTRGECLUnpackerEvtStore -> getEvtTime();
151 HitRevoTrg = aTRGECLUnpackerEvtStore -> getL1Revo();
152 HitRevoEvtTiming = aTRGECLUnpackerEvtStore -> getEvtRevo();
153 CheckSum = aTRGECLUnpackerEvtStore -> getEvtExist() ;
161 if (CheckSum == 0) {
return;}
167 int TCID = (aTRGECLUnpackerStore->
getTCId());
168 int hit_win = aTRGECLUnpackerStore -> getHitWin();
169 HitEnergy = aTRGECLUnpackerStore -> getTCEnergy();
170 HitTiming = aTRGECLUnpackerStore ->
getTCTime();
172 if (TCID < 1 || TCID > 576 || HitEnergy == 0) {
continue;}
173 if (!(hit_win == 3 || hit_win == 4)) {
continue;}
175 HitRevoFam = aTRGECLUnpackerStore-> getRevoFAM() ;
177 TCId.push_back(TCID);
186 if (
TCId.size() == 0) {
return;}
213 std::vector<int> trgbit ;
214 trgbit.resize(44, 0);
221 b1type = aTRGECLUnpackerSumStore -> getBhabhaType();
222 b2v = aTRGECLUnpackerSumStore -> get3DBhabhaV();
223 b2s = aTRGECLUnpackerSumStore -> get3DBhabhaS() ;
224 etot = aTRGECLUnpackerSumStore -> getEtotType();
225 clover = aTRGECLUnpackerSumStore -> getICNOver();
226 vlm = aTRGECLUnpackerSumStore -> getLowMulti();
227 mu = aTRGECLUnpackerSumStore -> getMumu();
228 pre = aTRGECLUnpackerSumStore -> getPrescale();
229 eclburst = aTRGECLUnpackerSumStore -> getECLBST();
233 trgbit[1] = tsource & 0x1;
234 trgbit[2] = (tsource >> 1) & 0x1;
235 trgbit[3] = (tsource >> 2) & 0x1;
240 trgbit[8] = etot & 0x1;
241 trgbit[9] = (etot >> 1) & 0x1;
242 trgbit[10] = (etot >> 2) & 0x1;
245 for (
int j = 0; j < 14; j++) {
246 trgbit[12 + j] = (vlm >> j) & 0x1;
251 trgbit[28] = eclburst;
253 trgbit[29] = b1type & 0x1;
254 trgbit[30] = (b1type >> 1) & 0x1;
255 trgbit[31] = (b1type >> 2) & 0x1;
256 trgbit[32] = (b1type >> 3) & 0x1;
257 trgbit[33] = (b1type >> 4) & 0x1;
258 trgbit[34] = (b1type >> 5) & 0x1;
259 trgbit[35] = (b1type >> 6) & 0x1;
260 trgbit[36] = (b1type >> 7) & 0x1;
261 trgbit[37] = (b1type >> 8) & 0x1;
262 trgbit[38] = (b1type >> 9) & 0x1;
263 trgbit[39] = (b1type >> 10) & 0x1;
264 trgbit[40] = (b1type >> 11) & 0x1;
265 trgbit[41] = (b1type >> 12) & 0x1;
266 trgbit[42] = (b1type >> 13) & 0x1;
267 trgbit[43] = (b1type >> 14) & 0x1;
272 for (
int j = 0; j < 29; j++) {
287 std::vector<double> ClusterTiming;
288 std::vector<double> ClusterEnergy;
289 std::vector<int> MaxTCId;
290 ClusterTiming.clear();
291 ClusterEnergy.clear();
298 double clustertiming = aTRGECLCluster -> getTimeAve();
299 ClusterTiming.push_back(clustertiming);
300 ClusterEnergy.push_back(clusterenergy);
301 MaxTCId.push_back(maxTCId);
305 std::vector<double> maxClusterEnergy;
306 std::vector<double> maxClusterTiming;
307 std::vector<int> maxCenterTCId;
308 maxClusterTiming.clear();
309 maxClusterEnergy.clear();
310 maxCenterTCId.clear();
312 maxClusterEnergy.resize(2, 0.0);
313 maxClusterTiming.resize(2, 0.0);
314 maxCenterTCId.resize(2, 0.0);
315 const int cl_size = ClusterEnergy.size();
316 for (
int icl = 0; icl < cl_size; icl++) {
317 if (maxClusterEnergy[0] < ClusterEnergy[icl]) {
318 maxClusterEnergy[0] = ClusterEnergy[icl];
319 maxClusterTiming[0] = ClusterTiming[icl];
320 maxCenterTCId[0] = MaxTCId[icl];
321 }
else if (maxClusterEnergy[1] < ClusterEnergy[icl]) {
322 maxClusterEnergy[1] = ClusterEnergy[icl];
323 maxClusterTiming[1] = ClusterTiming[icl];
324 maxCenterTCId[1] = MaxTCId[icl];
331 std::vector<double> _3DBhabhaThreshold;
332 _3DBhabhaThreshold = {30, 45};
335 bool BtoBFlag =
false;
336 bool BhabhaFlag =
false;
339 int energy1 = 15 & lut1;
340 int energy2 = 15 & lut2;
343 int phi1 = 511 & lut1;
344 int phi2 = 511 & lut2;
349 int dphi = abs(phi1 - phi2);
350 if (dphi > 180) {dphi = 360 - dphi;}
351 int thetaSum = theta1 + theta2;
352 if (dphi > 160 && thetaSum > 165 && thetaSum < 190) {BtoBFlag =
true;}
354 if ((maxClusterEnergy[0] * 0.1) > _3DBhabhaThreshold[0] * energy1
355 && (maxClusterEnergy[1] * 0.1) > _3DBhabhaThreshold[0] * (energy2)
356 && ((maxClusterEnergy[0] * 0.1) > _3DBhabhaThreshold[1] * energy1
357 || (maxClusterEnergy[1] * 0.1) > _3DBhabhaThreshold[1] * (energy2))) {
358 if (BtoBFlag) {BhabhaFlag =
true;}
367 const int NofTCHit =
TCId.size();
369 int NofTCHitPerClk[8] = {0};
370 double totalEnergy = 0;
373 double caltrgtiming = 0;
377 diff =
m_trgTime->getTimeSinceLastInjectionInMicroSeconds() / 1000.;
380 for (
int ihit = 0; ihit < NofTCHit ; ihit ++) {
384 if (a->getTCThetaIdFromTCId(
TCId[ihit]) < 4) {
386 }
else if (a->getTCThetaIdFromTCId(
TCId[ihit]) > 3 && a->getTCThetaIdFromTCId(
TCId[ihit]) < 16) {
403 double timing = 8 * HitRevoTrg - (128 *
RevoFAM[ihit] +
TCTiming[ihit]);
404 if (timing < 0) {timing = timing + 10240;}
409 const double revotime_in_us = 5.120 /
m_hwclkdb->getAcceleratorRF();
411 double running_in_us, diff_in_us;
413 diff_in_us = diff * 1000.;
414 quotient = diff_in_us / revotime_in_us;
415 running_in_us = diff_in_us - quotient * revotime_in_us;
417 bool cond_clean, cond_injHER, cond_injLER;
419 cond_clean = (6 < running_in_us && running_in_us < 8) && (50 < diff && diff < 70);
421 cond_injHER = isHER && ((diff < 0.5) || ((diff < 20) && (2 < running_in_us && running_in_us < 3)));
422 cond_injLER = !isHER && ((diff < 0.5) || ((diff < 20) && (1 < running_in_us && running_in_us < 2)));
429 }
else if (cond_injHER) {
431 }
else if (cond_injLER) {
435 const int grouping_num = 2;
436 for (
int iclk = 0; iclk < 8 - (grouping_num - 1); iclk++) {
438 for (
int igrp = 0; igrp < grouping_num; igrp++)
439 group_tcnum += NofTCHitPerClk[iclk + igrp];
446 }
else if (cond_injHER) {
448 }
else if (cond_injLER) {
453 double trgtiming = 8 * HitRevoTrg - (128 * HitRevoEvtTiming + HitFineTiming);
455 if (trgtiming < 0) {trgtiming = trgtiming + 10240;}
HistoModule.h is supposed to be used instead of Module.h for the modules with histogram definitions t...
void setDescription(const std::string &description)
Sets the description of the module.
void setPropertyFlags(unsigned int propertyFlags)
Sets the flags for the module properties.
@ c_ParallelProcessingCertified
This module can be run in parallel processing mode safely (All I/O must be done through the data stor...
double getEnergyDep() const
The method to get deposited energy.
int getMaxTCId() const
The method to get the Maximum(center) TC id.
TH1 * h_n_TChit_clean
N of TC Hit / event vs. time since injection.
std::vector< double > TCEnergy
Hit TC Energy.
TH1 * h_n_TChit_clean_2clk
N of TC Hit / event vs. time since injection per two ETM clocks.
TH1 * h_TCId
TCId histogram.
TH1 * h_TCphiId_BWD
TCphiId histogram.
TH1 * h_Narrow_TotalEnergy
Total Energy on narrow range.
TH1 * h_TotalEnergy
Total Energy.
TH1 * h_n_TChit_event_2clk
N of TC Hit / event per two ETM clocks.
TH1 * h_Cluster
N of Cluster / event.
virtual void initialize() override
initialize
StoreArray< TRGECLUnpackerStore > trgeclHitArray
Trg ECL Unpakcer TC output.
virtual void event() override
Event.
TH1 * h_Cal_TRGTiming
Event Timing / event.
TRGECLDQMModule()
Costructor.
TH1 * h_n_TChit_injHER
N of TC Hit / events in the injection BG clean region vs. time since injection.
TH1 * h_Narrow_TCEnergy
TC Energy histogram on narrow range.
virtual void endRun() override
End Run.
DBObjPtr< HardwareClockSettings > m_hwclkdb
DB pointerto access the hardware clock information.
TH1 * h_Cluster_Energy_Sum
Energy sum of 2 Top energetic clusters when 3D bhabnha bit on.
virtual void terminate() override
terminate
virtual ~TRGECLDQMModule()
Destrunctor.
std::vector< int > TCHitWin
Hit TCHitWin.
TH1 * h_TCphiId_FWD
TCphiId histogram.
TH1 * h_TRGTiming
Event Timing / event.
TH2 * h_nTChit_injtime
N of TC Hit / events in the LER injection BG region vs. time since injection.
TH1 * h_ECL_TriggerBit
ECL Trigger Bit.
std::vector< double > TCTiming
Hit TC Timing.
TH1 * h_n_TChit_injLER_2clk
N of TC Hit / events in the HER injection BG region vs. time since injection per two ETM clocks.
TH1 * h_n_TChit_injHER_2clk
N of TC Hit / events in the injection BG clean region vs. time since injection per two ETM clocks.
StoreArray< TRGECLUnpackerEvtStore > trgeclEvtArray
Trg ECL Unpakcer Event output.
TH1 * h_TCthetaId
TCthetaId histogram.
virtual void beginRun() override
begin Run
StoreArray< TRGECLUnpackerSumStore > trgeclSumArray
Trg Ecl Unpacker Summary output.
TH1 * h_TCphiId_BR
TCphiId histogram.
TH2 * h_nTChit_injtime_2clk
N of TC Hit / events in the LER injection BG region vs. time since injection per two ETM clocks.
TH1 * h_Cal_TCTiming
TC Timing / event.
TH1 * h_TCEnergy
TC Energy.
std::vector< double > FineTiming
Event Timing.
std::vector< double > RevoTrg
GDL Revolution Clk.
TH1 * h_TCTiming
TC Timing / event.
TH1 * h_n_TChit_event
N of TC Hit / event.
std::vector< double > RevoFAM
FAM Revolution Clk.
TH1 * h_n_TChit_injLER
N of TC Hit / events in the HER injection BG region vs. time since injection.
StoreArray< TRGECLCluster > trgeclCluster
Trg ECL Cluster output.
StoreObjPtr< EventLevelTriggerTimeInfo > m_trgTime
Array to access the FTSW information.
std::vector< int > TCId
Hit TCId.
virtual void defineHisto() override
Define Histogram.
int getTCCALTime() const
The method to get cal timing.
int getTCId() const
The method to get cell id.
int getTCTime() const
The method to get hit average time.
int get2DBhabha() const
The mothod to get 2D Bhabha bit.
int getPhysics() const
The mothod to get Physics bit.
int getTimeType() const
The mothod to get Timing Type.
A Class of ECL Trigger clustering
void setICN(const std::vector< int > &)
set ICN for each part(Fw,Br,Bw)
int getNofCluster()
0 : center , 1; upper , 2: right , 3: lower , 4: lower right
int Get3DBhabhaLUT(int)
TC CM Phi
REG_MODULE(arichBtest)
Register the Module.
Abstract base class for different kinds of events.