Belle II Software  release-05-02-19
TRGECLQAMModule.cc
1 
2 //---------------------------------------------------------------
3 // $Id$
4 //---------------------------------------------------------------
5 // Filename : TRGECLQAMModule.cc
6 // Section : TRG ECL
7 // Owner : HanEol Cho
8 // Email : hecho@hep.hanyang.ac.kr & insoo.lee@belle2.org
9 //---------------------------------------------------------------
10 // Description : Quality Assurance Monitor Module for TRG ECL
11 // Check data quality run by run
12 //
13 // Checking variables
14 // - ECLTRG Total Energy peak and width
15 // - ECLTRG Caltiming peak and width
16 // - ECLTRG Cluster Energy peak and width
17 // - Low Hit TC (Less than 0.1 x Average ) in Forward, Backward endcap and Barrel
18 //
19 //
20 //---------------------------------------------------------------
21 // 1.00 : 2018/11/29 : First version
22 // 2.00 : 2019/08/08 : Second version
23 //---------------------------------------------------------------
24 //framework headers
25 #include <framework/datastore/StoreObjPtr.h>
26 #include <framework/datastore/StoreArray.h>
27 #include <framework/dataobjects/EventMetaData.h>
28 //trg package headers
29 
30 #include <trg/ecl/modules/trgeclQAM/TRGECLQAMModule.h>
31 
32 #include <string.h>
33 #include <fstream>
34 #include <TFile.h>
35 #include <TString.h>
36 
37 #include <TAxis.h>
38 #include <TTree.h>
39 
40 #include <RooRealVar.h>
41 #include <RooDataHist.h>
42 #include <RooGaussian.h>
43 #include <RooAddModel.h>
44 #include <RooPlot.h>
45 #include <RooArgList.h>
46 #include <RooNovosibirsk.h>
47 
48 using namespace std;
49 
50 namespace Belle2 {
55  //
56  //
57 
59  REG_MODULE(TRGECLQAM);
60  //
61  //
62  //
63  string
64  TRGECLQAMModule::version() const
65  {
66  return string("TRGECLQAMModule 1.00");
67  }
68  //
69  //
70  //
71  TRGECLQAMModule::TRGECLQAMModule()
72  : Module::Module(),
73  m_nevent(1), m_outputfile("")
74  {
75 
76  string desc = "TRGECLQAMModule(" + version() + ")";
77  setDescription(desc);
79 
80  addParam("outputFileName", m_outputfile, "TRGECL QAM file", m_outputfile);
81 
82  m_nRun = 0;
83  m_nevent = 1;
84 
85  //Problem TC Check
86  m_FWD = 0;
87  m_BAR = 0;
88  m_BWD = 0;
89  m_ALL = 0;
90  memset(TCID, 0, sizeof(TCID));
91 
92 
93  //Total Energy
94 
95  m_etot = 0;
96  m_etot_mean = 0;
97  m_etot_error = 0;
98  m_etot_sigma = 0;
99 
100  // std::vector<int> etot;
101  etot.clear();
102 
103  //Caltime
104 
105  m_caltime_mean = 0;
106  m_caltime_error = 0;
107  m_caltime_sigma = 0;
108  caltime.clear();
109 
110  //Cluster E
111 
112  clusterE = 0;
113  cluster.clear();
114 
115  B2DEBUG(100, "TRGECLQAMModule ... created");
116  }
117  //
118  //
119  //
121  {
122 
123  B2DEBUG(100, "TRGECLQAMModule ... destructed ");
124  }
125  //
126  //
127  //
128  void
130  {
131 
132  B2DEBUG(100, "TRGECLQAMModule::initialize ... options");
133 
134 
135  m_TRGECLUnpackerStore.registerInDataStore();
136  m_TRGECLUnpackerEvtStore.registerInDataStore();
137 
138  m_TRGSummary.registerInDataStore();
139  // EvtMeta.registterInDataStore();
140 
141 
142  }
143  //
144  //
145  //
146  void
148  {
149 
150  B2DEBUG(200, "TRGECLQAMModule ... beginRun called ");
151 
152  }
153  //
154  //
155  //
156  void
158  {
159 
160  B2DEBUG(200, "TRGECLFAMMoudle ... event called");
161 
162 
163 
164  //QAM ECL Hit Map
165 
166  // StoreArray<TRGECLUnpackerStore> m_TRGECLUnpackerStore;
167  for (int ii = 0; ii < m_TRGECLUnpackerStore.getEntries(); ii++) {
168  TRGECLUnpackerStore* m_TRGECLUnpacker = m_TRGECLUnpackerStore[ii];
169 
170 
171  int TCId = (m_TRGECLUnpacker->getTCId());
172  int HitEnergy = (m_TRGECLUnpacker->getTCEnergy());
173 
174  m_etot += HitEnergy;
175  if (TCId < 1 || TCId > 576 || HitEnergy == 0) {continue;}
176  TCID[TCId - 1]++;
177  int Caltime = m_TRGECLUnpacker->getTCCALTime();
178  if (Caltime != 0) {
179  caltime.push_back(Caltime);
180  }
181  }
182 
183  etot.push_back(m_etot);
184 
185  m_etot = 0;
186 
187  //Unpacker EvtStore
188  //for ( int ii = 0; ii < m_TRGECLUnpackerSumStore.getEntries(); ii++){
189  TRGECLUnpackerEvtStore* m_TRGECLUnpackerEvt = m_TRGECLUnpackerEvtStore[0];
190 
191  if (m_TRGECLUnpackerEvt->get3DBhabhaS() == 1) {
192  //Cluster Energy 2D Check
193  const int* clE = m_TRGECLUnpackerEvt->getCLEnergy();
194 
195  int clER[6] = {0};
196 
197  for (int i = 0; i < 6; i++) {
198  clER[i] = clE[i];
199  }
200 
201  sort(clER, clER + 6);
202 
203  clusterE = clER[5] + clER[4]; // Ecl1+Ecl2
204  cluster.push_back(clusterE);
205  }
206 
208  m_nRun = bevt->getRun();
209  m_nevent++;
210 
211  }
212  //
213  //
214  //
215  void
217  {
218 
219  double mean_FWD = 0;
220  double mean_BAR = 0;
221  double mean_BWD = 0;
222 
223  //QAM TC Hit Map Check
224  for (int TCId = 1; TCId < 577; TCId++) {
225  if (TCId < 81) { //Forward Endcap
226  mean_FWD += TCID[TCId - 1];
227  } else if (TCId > 80 && TCId < 513) { //Barrel
228  mean_BAR += TCID[TCId - 1];
229  } else if (TCId > 512) { //Backward Endcap
230  mean_BWD += TCID[TCId - 1];
231  }
232  }
233  mean_FWD /= 80;
234  mean_BAR /= (512 - 80);
235  mean_BWD /= (576 - 512);
236 
237  for (int TCId = 1; TCId < 577; TCId++) {
238  if (TCId < 81) { //Forward Endcap
239  if (TCID[TCId - 1] < mean_FWD * 0.1)m_FWD++;
240  } else if (TCId > 80 && TCId < 513) { //Barrel
241  if (TCID[TCId - 1] < mean_BAR * 0.1)m_BAR++;
242  } else if (TCId > 512) { //Backward Endcap
243  if (TCID[TCId - 1] < mean_BWD * 0.1)m_BWD++;
244  }
245  }
246 
247  m_ALL = m_FWD + m_BAR + m_BWD;
248  const int etot_size = etot.size();
249  for (int i = 0; i < etot_size; i++) {
250  h_etot->Fill(etot[i]);
251  }
252  //Caluate E_total peak and width
253 
254  RooRealVar* E_tot = new RooRealVar("E_tot", "E_tot", 0, 4000);
255  RooDataHist* data_E_tot = new RooDataHist("data_E_tot", "dataset with E_tot", *E_tot, h_etot);
256  RooRealVar* mean_check = new RooRealVar("mean_check", "Mean for checking", 2000, 1000, 3000);
257  RooRealVar* sigma_check = new RooRealVar("sigma_check", "Sigma for checking", 100, 0, 300);
258  RooGaussian* gauss_check = new RooGaussian("gauss_check", "Gaussian for checking", *E_tot, *mean_check, *sigma_check);
259  gauss_check->fitTo(*data_E_tot);
260  double mean_ch = mean_check->getVal();
261 
262  RooRealVar* mean_E_tot = new RooRealVar("mean_E_tot", "Mean of Gaussian", mean_ch, mean_ch - 200, mean_ch + 200);
263  // RooRealVar sigma_E_tot("sigma_E_tot","Width of Gaussian", 10, 0, 50);
264 
265  RooRealVar* sigma1_E_tot = new RooRealVar("sigma1_E_tot", "Width of Gaussian", 30, 0, 60);
266  RooGaussian* gauss1_E_tot = new RooGaussian("gauss1_E_tot", "gauss(x,mean,sigma)", *E_tot, *mean_E_tot, *sigma1_E_tot);
267  RooRealVar* sigma2_E_tot = new RooRealVar("sigma2_E_tot", "Width of Gaussian", 100, 30, 250);
268  RooGaussian* gauss2_E_tot = new RooGaussian("gauss2_E_tot", "gauss(x,mean,sigma)", *E_tot, *mean_E_tot, *sigma2_E_tot);
269 
270  RooRealVar* frac_core_E_tot = new RooRealVar("frac_core", "core fraction", 0.85, 0.0, 1.0);
271  RooAddModel* gaussm_E_tot = new RooAddModel("gaussm", "core+tail gauss", RooArgList(*gauss1_E_tot, *gauss2_E_tot),
272  RooArgList(*frac_core_E_tot));
273 
274  // RooGaussian gauss_E_tot("gauss_E_tot","gauss(x,mean,sigma)",E_tot,mean_E_tot,sigma_E_tot);
275 
276  gaussm_E_tot->fitTo(*data_E_tot, RooFit::Range(mean_ch - 300, mean_ch + 300));
277  //RooPlot* xframe_E_tot = E_tot->frame();
278  RooPlot* xframe_E_tot = E_tot->frame(RooFit::Title("energy_tot"));
279  //data_E_tot->plotOn(xframe_E_tot);
280  data_E_tot->plotOn(xframe_E_tot, RooFit::MarkerStyle(7));
281  // gauss_E_tot->plotOn(xframe_E_tot);
282  gaussm_E_tot->plotOn(xframe_E_tot, RooFit::Name("Cal_energy"), RooFit::LineColor(2));
283  double v_m_E_tot = mean_E_tot->getVal();
284  double e_m_E_tot = mean_E_tot->getError();
285 
286  double v1_s1_E_tot = sigma1_E_tot->getVal();
287  // double e1_s1_E_tot = sigma1_E_tot->getError();
288  double v2_s1_E_tot = sigma2_E_tot->getVal();
289  // double e2_s1_E_tot = sigma2_E_tot->getError();
290 
291  double frac_E_tot = frac_core_E_tot->getVal();
292  double v_s1_E_tot = v1_s1_E_tot * (frac_E_tot) + v2_s1_E_tot * (1 - frac_E_tot);
293 
294 
295 
296  for (long unsigned int ii = 0; ii < caltime.size(); ii++) {
297  h_caltime->Fill(caltime[ii]);
298  }
299 
300 
301  //Calculate Caltime peak and width
302  RooRealVar T_c("T_c", "T_c", -100, 100);
303  RooDataHist data_T_c("data_T_c", "dataset with T_c", T_c, h_caltime);
304 
305  RooRealVar mean_T_c("mean_T_c", "Mean of Gaussian", 0, -100, 100);
306  RooRealVar sigma1_T_c("sigma1_T_c", "Width of Gaussian", 10, 0, 50);
307  RooGaussian gauss1_T_c("gauss1_T_c", "gauss(x,mean,sigma)", T_c, mean_T_c, sigma1_T_c);
308  RooRealVar sigma2_T_c("sigma2_T_c", "Width of Gaussian", 30, 10, 100);
309  RooGaussian gauss2_T_c("gauss2_T_c", "gauss(x,mean,sigma)", T_c, mean_T_c, sigma2_T_c);
310 
311  RooRealVar frac_core_T_c("frac_core", "core fraction", 0.85, 0.0, 1.0);
312  RooAddModel gaussm_T_c("gaussm", "core+tail gauss", RooArgList(gauss1_T_c, gauss2_T_c), RooArgList(frac_core_T_c));
313 
314  gaussm_T_c.fitTo(data_T_c, RooFit::Range(-45, 45));
315  RooPlot* xframe_T_c = T_c.frame(RooFit::Title("Caltime"));
316  data_T_c.plotOn(xframe_T_c, RooFit::MarkerStyle(7));
317  gaussm_T_c.plotOn(xframe_T_c, RooFit::Name("Caltime"), RooFit::LineColor(2));
318  gaussm_T_c.plotOn(xframe_T_c, RooFit::Components("gauss1_T_c"), RooFit::LineColor(kGreen));
319  gaussm_T_c.plotOn(xframe_T_c, RooFit::Components("gauss2_T_c"), RooFit::LineColor(kMagenta));
320 
321  xframe_T_c->GetXaxis()->SetTitle("Caltime[ns]");
322  xframe_T_c->GetYaxis()->SetTitle("Entries");
323 
324  double v_m_T_c = mean_T_c.getVal();
325  double e_m_T_c = mean_T_c.getError();
326 
327  double v1_s1_T_c = sigma1_T_c.getVal();
328  // double e1_s1_T_c = sigma1_T_c.getError();
329  double v2_s1_T_c = sigma2_T_c.getVal();
330  // double e2_s1_T_c = sigma2_T_c.getError();
331 
332  double frac_T_c = frac_core_T_c.getVal();
333  double v_s1_T_c = v1_s1_T_c * (frac_T_c) + v2_s1_T_c * (1 - frac_T_c);
334 
335 
336 
337  //Cluster E sum for Bhabha skim
338  const int cluster_size = cluster.size();
339  for (int ii = 0; ii < cluster_size; ii++) {
340  h_clusterE->Fill(cluster[ii]);
341  }
342 
343  RooRealVar x("x", "esum", 0, 4000);
344  RooDataHist dh("dh", "ecltrg", x, h_clusterE);
345 
346  RooRealVar mean("mean", "mean", 2000, 1000, 2500);
347  RooRealVar sigma("sigma", "sigma", 150 , 0, 300);
348  RooRealVar tail("tail", "tail", 0.45, 0, 1);
349  RooNovosibirsk novo("novo", "", x, mean, sigma, tail);
350  novo.fitTo(dh, RooFit::Extended(0), RooFit::Range(1500, 2200));
351 
352 
353  double clusterE_vm, clusterE_em, clusterE_vs;
354 
355  clusterE_vm = mean.getVal();
356  clusterE_em = mean.getError();
357  clusterE_vs = sigma.getVal();
358 
359 
360  TString outputfile = m_outputfile;
361  TFile file(outputfile, "RECREATE");
362  TTree* tree = new TTree("tree", "tree");
363  int nevent;
364  double FWD;
365  double BAR;
366  double BWD;
367  double ALL;
368 
369  nevent = m_nevent;
370  FWD = m_FWD;
371  BAR = m_BAR;
372  BWD = m_BWD;
373  ALL = m_ALL;
374 
375  m_etot_mean = v_m_E_tot;
376  m_etot_error = e_m_E_tot;
377  m_etot_sigma = v_s1_E_tot;
378 
379  m_caltime_mean = v_m_T_c;
380  m_caltime_error = e_m_T_c;
381  m_caltime_sigma = v_s1_T_c;
382 
383  tree->Branch("m_nRun", &m_nRun, "m_nRun/I");
384  tree->Branch("m_nevent", &nevent, "m_nevent/I");
385  tree->Branch("m_FWD", &FWD, "m_FWD/D");
386  tree->Branch("m_BAR", &BAR, "m_BAR/D");
387  tree->Branch("m_BWD", &BWD, "m_BWD/D");
388  tree->Branch("m_ALL", &ALL, "m_ALL/D");
389  tree->Branch("m_etot_mean", &m_etot_mean, "m_etot_mean/D");
390  tree->Branch("m_etot_error", &m_etot_error, "m_etot_error/D");
391  tree->Branch("m_etot_sigma", &m_etot_sigma, "m_etot_sigma/D");
392  tree->Branch("m_caltime_mean", &m_caltime_mean, "m_caltime_mean/D");
393  tree->Branch("m_caltime_error", &m_caltime_error, "m_caltime_error/D");
394  tree->Branch("m_caltime_sigma", &m_caltime_sigma, "m_caltime_sigma/D");
395  tree->Branch("m_clusterE_mean", &clusterE_vm, "m_clusterE_mean/D");
396  tree->Branch("m_clusterE_error", &clusterE_em, "m_clusterE_error/D");
397  tree->Branch("m_clusterE_sigma", &clusterE_vs, "m_clusterE_sigma/D");
398 
399  tree->Fill();
400  tree->Write();
401  file.Close();
402 
403 
404 
405  B2INFO("ECL Trigger QAM result "
406  << LogVar("Run Number", m_nRun)
407  << LogVar("Total Event", nevent)
408  << LogVar("The # of Low Hit TC in Forward Endcap", FWD)
409  << LogVar("The # of Low Hit TC in Barrel", BAR)
410  << LogVar("The # of Low Hit TC in Backward Endcap", BWD)
411  << LogVar("Total Energy Peak", m_etot_mean)
412  << LogVar("Total Energy Peak width", m_etot_sigma)
413  << LogVar("Caltime Peak", m_caltime_mean)
414  << LogVar("Caltime Peak width", m_caltime_sigma)
415  << LogVar("Cluster Energy Peak", clusterE_vm)
416  << LogVar("Cluster Energy Peak width", clusterE_vs));
417 
418 
419  B2DEBUG(100, "TRGECLQAMModule ... endRun called ");
420 
421  }
422  //
423  //
424  //
426  {
427  B2DEBUG(100, "TRGECLQAMModule ... terminate called ");
428 
429  }
430  //
431  //
432  //
434 } // namespace Belle2
Belle2::TRGECLQAMModule::m_BWD
double m_BWD
BWD problem TC.
Definition: TRGECLQAMModule.h:65
Belle2::TRGECLQAMModule::m_TRGECLUnpackerEvtStore
StoreArray< TRGECLUnpackerEvtStore > m_TRGECLUnpackerEvtStore
ECL Trigger Unpacker Event output.
Definition: TRGECLQAMModule.h:111
Belle2::TRGECLQAMModule::clusterE
int clusterE
Cluster Energy.
Definition: TRGECLQAMModule.h:104
Belle2::TRGECLUnpackerStore
Example Detector.
Definition: TRGECLUnpackerStore.h:25
Belle2::TRGECLQAMModule::m_etot
int m_etot
Total Energy.
Definition: TRGECLQAMModule.h:79
Belle2::TRGECLUnpackerStore::getTCEnergy
int getTCEnergy() const
The method to get deposited energy.
Definition: TRGECLUnpackerStore.h:95
Belle2::Module::setDescription
void setDescription(const std::string &description)
Sets the description of the module.
Definition: Module.cc:216
Belle2::TRGECLQAMModule::m_nevent
int m_nevent
The # of Events.
Definition: TRGECLQAMModule.h:57
REG_MODULE
#define REG_MODULE(moduleName)
Register the given module (without 'Module' suffix) with the framework.
Definition: Module.h:652
Belle2::Module::c_ParallelProcessingCertified
@ c_ParallelProcessingCertified
This module can be run in parallel processing mode safely (All I/O must be done through the data stor...
Definition: Module.h:82
Belle2::TRGECLQAMModule::m_caltime_sigma
double m_caltime_sigma
Caltime sigma.
Definition: TRGECLQAMModule.h:96
Belle2::TRGECLQAMModule::TCID
int TCID[576]
Hit TCID.
Definition: TRGECLQAMModule.h:70
Belle2::TRGECLUnpackerStore::getTCId
int getTCId() const
The method to get cell id.
Definition: TRGECLUnpackerStore.h:80
Belle2::TRGECLQAMModule::m_etot_mean
double m_etot_mean
Total Energy mean.
Definition: TRGECLQAMModule.h:81
Belle2::TRGECLQAMModule::m_BAR
double m_BAR
Barrel problem TC.
Definition: TRGECLQAMModule.h:63
Belle2::TRGECLQAMModule::m_outputfile
std::string m_outputfile
Output Root File Name.
Definition: TRGECLQAMModule.h:73
Belle2::TRGECLQAMModule::h_caltime
TH1F * h_caltime
Caltime Histogram.
Definition: TRGECLQAMModule.h:90
Belle2::TRGECLQAMModule::m_FWD
Double_t m_FWD
FWD problem TC.
Definition: TRGECLQAMModule.h:61
Belle2::TRGECLQAMModule::etot
std::vector< int > etot
tcenergy check
Definition: TRGECLQAMModule.h:87
Belle2::Module
Base class for Modules.
Definition: Module.h:74
Belle2::TRGECLUnpackerEvtStore::get3DBhabhaS
int get3DBhabhaS() const
The method to get 3D Bhabha selection bit.
Definition: TRGECLUnpackerEvtStore.h:331
Belle2::Module::setPropertyFlags
void setPropertyFlags(unsigned int propertyFlags)
Sets the flags for the module properties.
Definition: Module.cc:210
Belle2::TRGECLQAMModule::m_TRGSummary
StoreObjPtr< TRGSummary > m_TRGSummary
Trigger Summary.
Definition: TRGECLQAMModule.h:113
Belle2::TRGECLQAMModule::m_caltime_error
double m_caltime_error
Caltime error.
Definition: TRGECLQAMModule.h:94
Belle2::TRGECLQAMModule::caltime
std::vector< int > caltime
Caltime check.
Definition: TRGECLQAMModule.h:98
Belle2::TRGECLQAMModule::initialize
virtual void initialize() override
initialize
Definition: TRGECLQAMModule.cc:129
Belle2::TRGECLQAMModule::cluster
std::vector< int > cluster
Cluster Energy Vector.
Definition: TRGECLQAMModule.h:106
Belle2::TRGECLQAMModule::terminate
virtual void terminate() override
terminate
Definition: TRGECLQAMModule.cc:425
Belle2
Abstract base class for different kinds of events.
Definition: MillepedeAlgorithm.h:19
Belle2::StoreObjPtr
Type-safe access to single objects in the data store.
Definition: ParticleList.h:33
LogVar
Class to store variables with their name which were sent to the logging service.
Definition: LogVariableStream.h:24
Belle2::TRGECLQAMModule::m_caltime_mean
double m_caltime_mean
Caltime mean.
Definition: TRGECLQAMModule.h:92
Belle2::TRGECLQAMModule::endRun
virtual void endRun() override
End Run.
Definition: TRGECLQAMModule.cc:216
Belle2::TRGECLUnpackerEvtStore
Example Detector.
Definition: TRGECLUnpackerEvtStore.h:25
Belle2::TRGECLQAMModule::m_TRGECLUnpackerStore
StoreArray< TRGECLUnpackerStore > m_TRGECLUnpackerStore
ECL Trigger Unpacker TC output.
Definition: TRGECLQAMModule.h:109
Belle2::Module::addParam
void addParam(const std::string &name, T &paramVariable, const std::string &description, const T &defaultValue)
Adds a new parameter to the module.
Definition: Module.h:562
Belle2::TRGECLQAMModule::m_etot_sigma
double m_etot_sigma
Total Energy sigma.
Definition: TRGECLQAMModule.h:85
Belle2::TRGECLQAMModule::~TRGECLQAMModule
virtual ~TRGECLQAMModule()
Destrunctor.
Definition: TRGECLQAMModule.cc:120
Belle2::TRGECLUnpackerEvtStore::getCLEnergy
const int * getCLEnergy() const
The mothod to get Cluster energy.
Definition: TRGECLUnpackerEvtStore.h:310
Belle2::TRGECLQAMModule::beginRun
virtual void beginRun() override
begin Run
Definition: TRGECLQAMModule.cc:147
Belle2::TRGECLUnpackerStore::getTCCALTime
int getTCCALTime() const
The method to get cal timing.
Definition: TRGECLUnpackerStore.h:86
Belle2::TRGECLQAMModule::h_etot
TH1F * h_etot
Total Energy Histogram.
Definition: TRGECLQAMModule.h:77
Belle2::TRGECLQAMModule::m_etot_error
double m_etot_error
Total Energy error.
Definition: TRGECLQAMModule.h:83
Belle2::TRGECLQAMModule::version
std::string version() const
version
Definition: TRGECLQAMModule.cc:64
Belle2::TRGECLQAMModule::m_nRun
int m_nRun
The run #.
Definition: TRGECLQAMModule.h:55
Belle2::TRGECLQAMModule::m_ALL
double m_ALL
Total proble TC.
Definition: TRGECLQAMModule.h:67
Belle2::TRGECLQAMModule::h_clusterE
TH1F * h_clusterE
Cluster Energy Histogram.
Definition: TRGECLQAMModule.h:102
Belle2::TRGECLQAMModule::event
virtual void event() override
Event.
Definition: TRGECLQAMModule.cc:157