Belle II Software  release-08-00-10
TRGGRLProjectsModule.cc
1 /**************************************************************************
2  * basf2 (Belle II Analysis Software Framework) *
3  * Author: The Belle II Collaboration *
4  * *
5  * See git log for contributors and copyright holders. *
6  * This file is licensed under LGPL-3.0, see LICENSE.md. *
7  **************************************************************************/
8 
9 #include <trg/grl/modules/trggrl/TRGGRLProjectsModule.h>
10 #include <trg/ecl/dataobjects/TRGECLCluster.h>
11 #include <trg/ecl/dataobjects/TRGECLTrg.h>
12 #include <trg/cdc/dataobjects/CDCTriggerTrack.h>
13 #include <trg/grl/dataobjects/TRGGRLMATCH.h>
14 #include <trg/grl/dataobjects/TRGGRLMATCHKLM.h>
15 #include <trg/klm/dataobjects/KLMTrgSummary.h>
16 #include <trg/grl/dataobjects/TRGGRLPHOTON.h>
17 #include <framework/dataobjects/BinnedEventT0.h>
18 #include <trg/ecl/TrgEclMapping.h>
19 #include <framework/datastore/StoreArray.h>
20 #include <ecl/geometry/ECLGeometryPar.h>
21 #include <analysis/utility/PCmsLabTransform.h>
22 #include <framework/logging/Logger.h>
23 #include <framework/database/DBObjPtr.h>
24 #include <mdst/dbobjects/TRGGDLDBInputBits.h>
25 
26 #include <TMath.h>
27 
28 #include <iostream>
29 #include <fstream>
30 
31 
32 using namespace std;
33 using namespace Belle2;
34 using namespace ECL;
35 
36 
37 //..ECL look up tables
38 std::vector<int> TCThetaID;
39 std::vector<float> TCPhiLab;
40 std::vector<float> TCcotThetaLab;
41 std::vector<float> TCPhiCOM;
42 std::vector<float> TCThetaCOM;
43 std::vector<float> TC1GeV;
44 
45 
46 //..Other
47 double radtodeg;
48 //int iEvent(0);
49 //int nInAcc=0;
50 
51 //..Trigger counters
52 //const int ntrig = 18;
53 //int trigbit[ntrig];
54 //int prescale[ntrig];
55 //int RawCount[ntrig];
56 //bool passBeforePrescale[ntrig];
57 //int pass2[ntrig][ntrig]={};
58 //int pass2Acc[ntrig][ntrig]={};
59 //std::vector<string> trigName;
60 
61 //int nUseful;
62 //std::vector<int> itUseful;
63 
64 //-----------------------------------------------------------------
65 // Register the Module
66 //-----------------------------------------------------------------
67 REG_MODULE(TRGGRLProjects);
68 
69 //-----------------------------------------------------------------
70 // Implementation
71 //-----------------------------------------------------------------
72 
73 TRGGRLProjectsModule::TRGGRLProjectsModule() : Module()
74 {
75  // Set module properties
76 
77  // string desc = "TRGGRLProjectsModule(" + version() + ")";
78  setDescription("TRGGRLProjectsModule");
80 
81  addParam("DebugLevel", _debugLevel, "TRGGRL debug level", _debugLevel);
82  addParam("ConfigFile",
84  "The filename of CDC trigger config file",
86  addParam("SimulationMode",
88  "TRGGRL simulation switch",
89  1);
90  addParam("FastSimulationMode",
92  "TRGGRL fast simulation mode",
94  addParam("FirmwareSimulationMode",
96  "TRGGRL firmware simulation mode",
98  addParam("2DfinderCollection", m_2DfinderCollectionName,
99  "Name of the StoreArray holding the tracks made by the 2D finder to be used as input.",
100  string("TRGCDC2DFinderTracks"));
101  addParam("3DfitterCollection", m_3DfitterCollectionName,
102  "Name of the StoreArray holding the tracks made by the 3D fitter to be used as input.",
103  string("TRGCDC3DFitterTracks"));
104  addParam("NNCollection", m_NNCollectionName,
105  "Name of the StoreArray holding the tracks made by the neural network (NN).",
106  string("TRGCDCNeuroTracks"));
107  addParam("2DmatchCollection", m_2DmatchCollectionName,
108  "Name of the StoreArray holding the macthed tracks and clusters made by the 2D fitter.",
109  string("TRG2DMatchTracks"));
110  addParam("PhimatchCollection", m_phimatch_tracklist, "the 2d tracklist with associated cluster", std::string("TRGPhiMatchTracks"));
111  addParam("KLMmatchCollection", m_klmmatch_tracklist, "the 2d tracklist with KLM", std::string("TRGKLMMatchTracks"));
112  addParam("KLMTrgSummaryCollection", m_KLMTrgSummaryName, "Name of the StoreObjPtr holding the information of KLM trigger",
113  std::string("KLMTrgSummary"));
114  addParam("3DmatchCollection", m_3DmatchCollectionName,
115  "Name of the StoreArray holding the matched 3D NN tracks and clusters made",
116  string("TRG3DMatchTracks"));
117  addParam("TrgGrlInformation", m_TrgGrlInformationName,
118  "Name of the StoreArray holding the information of tracks and clusters from cdc ecl klm.",
119  string("TRGGRLObjects"));
120  addParam("TRGECLClusters", m_TrgECLClusterName,
121  "Name of the StoreArray holding the information of trigger ecl clusters ",
122  string("TRGECLClusters"));
123  addParam("TRGECLTrgs", m_TrgECLTrgsName,
124  "Name of the StoreArray holding the information of ecl trigger",
125  string("TRGECLTrgs"));
126  addParam("GRLphotonCollection", m_grlphotonlist, "the isolated cluster list", std::string("TRGGRLPhotons"));
127  addParam("ECLClusterTimeWindow", m_eclClusterTimeWindow,
128  "The time window of the signal eclclusters",
129  100.0);
130  addParam("ClusEngThreshold", m_energythreshold, "The energy threshold of clusters", {0.1, 0.3, 1.0, 2.0});
131 }
132 
133 //-----------------------------------------------------------------------------------------
134 //-----------------------------------------------------------------------------------------
136 {
137  radtodeg = 180. / TMath::Pi();
138  //..Trigger ThetaID for each trigger cell. Could be replaced by getMaxThetaId() for newer MC
139  TrgEclMapping* eclMapping = new TrgEclMapping();
140  for (int tc = 1; tc <= 576; tc++) {
141  TCThetaID.push_back(eclMapping->getTCThetaIdFromTCId(tc));
142  }
143 
144  //-----------------------------------------------------------------------------------------
145  //..ECL look up tables
146  PCmsLabTransform boostrotate;
147  for (int tc = 1; tc <= 576; tc++) {
148 
149  //..Four vector of a 1 GeV lab photon at this TC
150  TVector3 CellPosition = eclMapping->getTCPosition(tc);
151  ROOT::Math::PxPyPzEVector CellLab;
152  CellLab.SetPx(CellPosition.Px() / CellPosition.Mag());
153  CellLab.SetPy(CellPosition.Py() / CellPosition.Mag());
154  CellLab.SetPz(CellPosition.Pz() / CellPosition.Mag());
155  CellLab.SetE(1.);
156 
157  //..cotan Theta and phi in lab
158  TCPhiLab.push_back(CellPosition.Phi()*radtodeg);
159  double tantheta = tan(CellPosition.Theta());
160  TCcotThetaLab.push_back(1. / tantheta);
161 
162  //..Corresponding 4 vector in the COM frame
163  ROOT::Math::PxPyPzEVector CellCOM = boostrotate.rotateLabToCms() * CellLab;
164  TCThetaCOM.push_back(CellCOM.Theta()*radtodeg);
165  TCPhiCOM.push_back(CellCOM.Phi()*radtodeg);
166 
167  //..Scale to give 1 GeV in the COM frame
168  TC1GeV.push_back(1. / CellCOM.E());
169  }
170 
171  //m_TRGGRLInfo.registerInDataStore(m_TrgGrlInformationName);
172  delete eclMapping;
173 }
174 
175 void
177 {
178  B2DEBUG(20, "TRGGDLModule ... beginRun called ");
179  //...GDL config. name...
180 }
181 //-----------------------------------------------------------------------------------------
182 //-----------------------------------------------------------------------------------------
184 {
185  //cout << "TRGGRLProjects event " << iEvent << endl;
186  //iEvent++;
187 
188  //---------------------------------------------------------------------
189  //..Read in the necessary arrays
190  StoreArray<TRGECLTrg> trgArray;
191  //StoreArray<MCParticle> MCParticleArray;
200  StoreObjPtr<BinnedEventT0> m_eventTime;
202  //trgInfo.create();
203  //---------------------------------------------------------------------
204  //..Use only clusters within 100 ns of event timing (from ECL).
205  int ntrgArray = trgArray.getEntries();
206  double EventTiming = -9999.;
207  if (ntrgArray > 0) {EventTiming = trgArray[0]->getEventTiming();}
208  std::vector<int> selTC;
209  std::vector<int> selTheta;
210  std::vector<float> selE;
211  for (int ic = 0; ic < eclTrgClusterArray.getEntries(); ic++) {
212  double tcT = abs(eclTrgClusterArray[ic]->getTimeAve() - EventTiming);
213  if (tcT < 100.) {
214  int TC = eclTrgClusterArray[ic]->getMaxTCId();
215  selTC.push_back(TC);
216  selTheta.push_back(TCThetaID[TC - 1]);
217  selE.push_back(eclTrgClusterArray[ic]->getEnergyDep());
218  }
219  }
220 
221  //---------------------------------------------------------------------
222  //..Trigger objects from CDC alone
223  // nTrk3D nTrkZ10 nTrkZ25
224  int nTrk2D = cdc2DTrkArray.getEntries();
225  int nTrk3D = cdc3DTrkArray.getEntries();
226  int nTrkZ10 = 0;
227  int nTrkZ25 = 0;
228  int nTrkZ35 = 0;
229  for (int itrk = 0; itrk < nTrk3D; itrk++) {
230  double z0 = cdc3DTrkArray[itrk]->getZ0();
231  if (abs(z0) < 10.) {nTrkZ10++;}
232  if (abs(z0) < 25.) {nTrkZ25++;}
233  if (abs(z0) < 35.) {nTrkZ35++;}
234  }
235  int nTrkNN = cdcNNTrkArray.getEntries();
236  int nTrkNNSTT = 0;
237  int nTrkNNSTT6 = 0;
238  int nTrkNNSTT5 = 0;
239  int nTrkNNSTT4 = 0;
240  int nTrkNN20 = 0;
241  int nTrkNN40 = 0;
242  for (int itrk = 0; itrk < nTrkNN; itrk++) {
243  double z0 = cdcNNTrkArray[itrk]->getZ0();
244 
245  double omega = 100 * cdcNNTrkArray[itrk]->getOmega();
246  int omega_bin = omega / 0.044;
247  omega = omega_bin * 0.044;
248 
249  double cottheta = cdcNNTrkArray[itrk]->getCotTheta();
250  double theta = 0;
251  if (cottheta != 0)theta = atan(1. / cottheta);
252  int theta_bin = theta / 0.098125;
253  theta = theta_bin * 0.098125;
254  int p = abs(10 * 0.3 * 1.5 / omega / sin(theta)); //0.1GeV unit
255 
256  double pt = cdcNNTrkArray[itrk]->getPt();
257  double p_abs = cdcNNTrkArray[itrk]->getPt() / sin(theta);
258  B2DEBUG(20, "NN momentum " << omega << " " << theta * 180 / 3.14 << " " << p * 0.1 << " " << p_abs << " " << pt);
259 
260  if (abs(z0) < 15. && p > 7) {nTrkNNSTT++;}
261  if (abs(z0) < 15. && p > 6) {nTrkNNSTT6++;}
262  if (abs(z0) < 15. && p > 5) {nTrkNNSTT5++;}
263  if (abs(z0) < 15. && p > 4) {nTrkNNSTT4++;}
264  if (abs(z0) < 20.) {nTrkNN20++;}
265  if (abs(z0) < 40.) {nTrkNN40++;}
266  }
267 
268  trgInfo->setN3Dfittertrk(nTrk3D);
269  trgInfo->setN3DfittertrkZ10(nTrkZ10);
270  trgInfo->setN3DfittertrkZ25(nTrkZ25);
271  trgInfo->setN3DfittertrkZ35(nTrkZ35);
272  trgInfo->setNNNtrk(nTrkNN);
273  trgInfo->setNNNtrkZ20(nTrkNN20);
274  trgInfo->setNNNtrkZ40(nTrkNN40);
275  trgInfo->setNNNtrkSTT(nTrkNNSTT);
276  //---------------------------------------------------------------------
277  //..Trigger objects using single ECL clusters
278  // nClust n300MeV n2GeV n2GeV414 n2GeV231516 n2GeV117 n1GeV415 n1GeV2316 n1GeV117
279  int nClust = selTC.size();
280  int n300MeV = 0;
281  int n2GeV = 0;
282  int n2GeV414 = 0;
283  int n2GeV231516 = 0;
284  int n2GeV117 = 0;
285  int n1GeV415 = 0;
286  int n1GeV2316 = 0;
287  int n1GeV117 = 0;
288  for (int ic = 0; ic < nClust; ic++) {
289  if (selE[ic] > 0.3) {n300MeV++;}
290  float thresh = TC1GeV[selTC[ic] - 1];
291  if (selE[ic] > (thresh + thresh)) {
292  n2GeV++;
293  if (selTheta[ic] >= 4 && selTheta[ic] <= 14) {n2GeV414++;}
294  if (selTheta[ic] == 2 || selTheta[ic] == 3 || selTheta[ic] == 15 || selTheta[ic] == 16) {n2GeV231516++;}
295  if (selTheta[ic] == 1 || selTheta[ic] == 17) {n2GeV117++;}
296  }
297  if (selE[ic] > thresh) {
298  if (selTheta[ic] >= 4 && selTheta[ic] <= 15) {n1GeV415++;}
299  if (selTheta[ic] == 2 || selTheta[ic] == 3 || selTheta[ic] == 16) {n1GeV2316++;}
300  if (selTheta[ic] == 1 || selTheta[ic] == 17) {n1GeV117++;}
301  }
302  }
303  trgInfo->setNcluster(nClust);
304  trgInfo->setNhigh300cluster(n300MeV);
305  trgInfo->setNhigh1GeVcluster415(n1GeV415);
306  trgInfo->setNhigh1GeVcluster2316(n1GeV2316);
307  trgInfo->setNhigh1GeVcluster117(n1GeV117);
308  trgInfo->setNhigh2GeVcluster(n2GeV);
309  trgInfo->setNhigh2GeVcluster414(n2GeV414);
310  trgInfo->setNhigh2GeVcluster231516(n2GeV231516);
311  trgInfo->setNhigh2GeVcluster117(n2GeV117);
312 
313  //---------------------------------------------------------------------
314  //..Trigger objects using back-to-back ECL clusters, plus Bhabha vetoes
315  // nPhiPairHigh nPhiPairLow n3DPair nECLBhabha nTrkBhabha
316  int nPhiPairHigh = 0;
317  int nPhiPairLow = 0;
318  int n3DPair = 0;
319  int nECLBhabha = 0;
320  int nTrkBhabha = 0;
321  for (int i0 = 0; i0 < nClust - 1; i0++) {
322  for (int i1 = i0 + 1; i1 < nClust; i1++) {
323 
324  //..back to back in phi
325  float dphi = abs(TCPhiCOM[selTC[i1] - 1] - TCPhiCOM[selTC[i0] - 1]);
326  if (dphi > 180.) {dphi = 360 - dphi;}
327  if (dphi > 170. && selE[i0] > 0.25 && selE[i1] > 0.25) {nPhiPairHigh++;}
328  if (dphi > 170. && (selE[i0] < 0.25 || selE[i1] < 0.25)) {nPhiPairLow++;}
329 
330  //..3D
331  float thetaSum = TCThetaCOM[selTC[i0] - 1] + TCThetaCOM[selTC[i1] - 1];
332  if (dphi > 160. && thetaSum > 160. && thetaSum < 200.) {n3DPair++;}
333 
334  //..ecl Bhabha
335  if (dphi > 160. && thetaSum > 165. && thetaSum < 190. && selE[i0] > 3.*TC1GeV[selTC[i0] - 1] && selE[i1] > 3.*TC1GeV[selTC[i1] - 1]
336  && (selE[i0] > 4.5 * TC1GeV[selTC[i0] - 1] || selE[i1] > 4.5 * TC1GeV[selTC[i1] - 1])) {
337  nECLBhabha++;
338 
339  //..Bhabha also using the CDC
340  bool c0matched = false;
341  bool c1matched = false;
342  for (int itrk = 0; itrk < nTrk3D; itrk++) {
343  double phiTrk = cdc3DTrkArray[itrk]->getPhi0() * radtodeg;
344  double ptTrk = cdc3DTrkArray[itrk]->getTransverseMomentum(1.5);
345  float dphi0 = abs(phiTrk - TCPhiLab[selTC[i0] - 1]);
346  if (dphi0 > 180.) {dphi0 = 360. - dphi0;}
347  float dphi1 = abs(phiTrk - TCPhiLab[selTC[i1] - 1]);
348  if (dphi1 > 180.) {dphi1 = 360. - dphi1;}
349  if (ptTrk > 1. && dphi0 < 15.) {c0matched = true;}
350  if (ptTrk > 1. && dphi1 < 15.) {c1matched = true;}
351  }
352  if (c0matched && c1matched) {nTrkBhabha++;}
353  }
354  }
355  }
356 
357  trgInfo->setBhabhaVeto(nTrkBhabha);
358  trgInfo->seteclBhabhaVeto(nECLBhabha);
359  trgInfo->setPairHigh(nPhiPairHigh);
360  trgInfo->setPairLow(nPhiPairLow);
361  trgInfo->set3DPair(n3DPair);
362 
363 
364  //---------------------------------------------------------------------
365  //..Trigger objects using 1 track and at least 1 cluster
366  // nSameHem1Trk nOppHem1Trk
367  int nSameHem1Trk = 0;
368  int nOppHem1Trk = 0;
369  if (nTrk3D == 1) {
370  double phiTrk = cdc3DTrkArray[0]->getPhi0() * radtodeg;
371  double cotTrk = cdc3DTrkArray[0]->getCotTheta();
372  for (int i0 = 0; i0 < nClust; i0++) {
373  float dphi = abs(phiTrk - TCPhiLab[selTC[i0] - 1]);
374  if (dphi > 180.) {dphi = 360. - dphi;}
375  float dCot = cotTrk - TCcotThetaLab[selTC[i0] - 1];
376  if (dphi > 80.) {nOppHem1Trk++;}
377  if (dphi < 80. && (dCot < -0.8 || dCot > 0.6)) {nSameHem1Trk++;}
378  }
379  }
380 
381  trgInfo->setNSameHem1Trk(nSameHem1Trk);
382  trgInfo->setNOppHem1Trk(nOppHem1Trk);
383 
384  //---------------------------------------------------------------------
385  //..Trk b2b
386  int Trk_b2b_1to3 = 0;
387  int Trk_b2b_1to5 = 0;
388  int Trk_b2b_1to7 = 0;
389  int Trk_b2b_1to9 = 0;
390  int Trk_open90 = 0;
391  int Trk_open30 = 0;
392  for (int itrk = 0; itrk < cdc2DTrkArray.getEntries(); itrk++) {
393 
394  int phi_i_itrk = (int)((cdc2DTrkArray[itrk]->getPhi0()) * (180 / M_PI) / 10);
395 
396  for (int jtrk = 0; jtrk < cdc2DTrkArray.getEntries(); jtrk++) {
397  if (itrk <= jtrk) continue;
398 
399  int phi_i_jtrk = (int)((cdc2DTrkArray[jtrk]->getPhi0()) * (180 / M_PI) / 10);
400  if (abs(phi_i_itrk - phi_i_jtrk) >= 17 && abs(phi_i_itrk - phi_i_jtrk) <= 19) {Trk_b2b_1to3 = 1;}
401  if (abs(phi_i_itrk - phi_i_jtrk) >= 16 && abs(phi_i_itrk - phi_i_jtrk) <= 20) {Trk_b2b_1to5 = 1;}
402  if (abs(phi_i_itrk - phi_i_jtrk) >= 15 && abs(phi_i_itrk - phi_i_jtrk) <= 21) {Trk_b2b_1to7 = 1;}
403  if (abs(phi_i_itrk - phi_i_jtrk) >= 14 && abs(phi_i_itrk - phi_i_jtrk) <= 22) {Trk_b2b_1to9 = 1;}
404  if (abs(phi_i_itrk - phi_i_jtrk) >= 9 && abs(phi_i_itrk - phi_i_jtrk) <= 27) {Trk_open90 = 1;}
405  if (abs(phi_i_itrk - phi_i_jtrk) >= 3 && abs(phi_i_itrk - phi_i_jtrk) <= 33) {Trk_open30 = 1;}
406  }
407  }
408  trgInfo->setTrk_b2b_1to3(Trk_b2b_1to3);
409  trgInfo->setTrk_b2b_1to5(Trk_b2b_1to5);
410  trgInfo->setTrk_b2b_1to7(Trk_b2b_1to7);
411  trgInfo->setTrk_b2b_1to9(Trk_b2b_1to9);
412  trgInfo->setTrk_open90(Trk_open90);
413  trgInfo->setTrk_open30(Trk_open30);
414 
415  //---------------------------------------------------------------------
416  //..cluster b2b
417  int cluster_b2b_1to3 = 0;
418  int cluster_b2b_1to5 = 0;
419  int cluster_b2b_1to7 = 0;
420  int cluster_b2b_1to9 = 0;
421  for (int iclu = 0; iclu < eclTrgClusterArray.getEntries(); iclu++) {
422 
423  double x_iclu = eclTrgClusterArray[iclu]->getPositionX();
424  double y_iclu = eclTrgClusterArray[iclu]->getPositionY();
425 
426  int phi_iclu = 0;
427  if (x_iclu >= 0 && y_iclu >= 0) {phi_iclu = (int)(atan(y_iclu / x_iclu) * (180.0 / M_PI) / 10);}
428  else if (x_iclu < 0 && y_iclu >= 0) {phi_iclu = (int)((atan(y_iclu / x_iclu) * (180.0 / M_PI) + 180.0) / 10);}
429  else if (x_iclu < 0 && y_iclu < 0) {phi_iclu = (int)((atan(y_iclu / x_iclu) * (180.0 / M_PI) + 180.0) / 10);}
430  else if (x_iclu >= 0 && y_iclu < 0) {phi_iclu = (int)((atan(y_iclu / x_iclu) * (180.0 / M_PI) + 360.0) / 10);}
431 
432  for (int jclu = 0; jclu < eclTrgClusterArray.getEntries(); jclu++) {
433  if (iclu <= jclu) continue;
434 
435  double x_jclu = eclTrgClusterArray[jclu]->getPositionX();
436  double y_jclu = eclTrgClusterArray[jclu]->getPositionY();
437 
438  int phi_jclu = 0;
439  if (x_jclu >= 0 && y_jclu >= 0) {phi_jclu = (int)(atan(y_jclu / x_jclu) * (180.0 / M_PI) / 10);}
440  else if (x_jclu < 0 && y_jclu >= 0) {phi_jclu = (int)((atan(y_jclu / x_jclu) * (180.0 / M_PI) + 180.0) / 10);}
441  else if (x_jclu < 0 && y_jclu < 0) {phi_jclu = (int)((atan(y_jclu / x_jclu) * (180.0 / M_PI) + 180.0) / 10);}
442  else if (x_jclu >= 0 && y_jclu < 0) {phi_jclu = (int)((atan(y_jclu / x_jclu) * (180.0 / M_PI) + 360.0) / 10);}
443 
444  if (abs(phi_iclu - phi_jclu) >= 17 && abs(phi_iclu - phi_jclu) <= 19) {cluster_b2b_1to3 = 1;}
445  if (abs(phi_iclu - phi_jclu) >= 16 && abs(phi_iclu - phi_jclu) <= 20) {cluster_b2b_1to5 = 1;}
446  if (abs(phi_iclu - phi_jclu) >= 15 && abs(phi_iclu - phi_jclu) <= 21) {cluster_b2b_1to7 = 1;}
447  if (abs(phi_iclu - phi_jclu) >= 14 && abs(phi_iclu - phi_jclu) <= 22) {cluster_b2b_1to9 = 1;}
448  }
449  }
450  trgInfo->setcluster_b2b_1to3(cluster_b2b_1to3);
451  trgInfo->setcluster_b2b_1to5(cluster_b2b_1to5);
452  trgInfo->setcluster_b2b_1to7(cluster_b2b_1to7);
453  trgInfo->setcluster_b2b_1to9(cluster_b2b_1to9);
454 
455 
456  //---------------------------------------------------------------------
457  //..eed, fed
458 
459  int eed = 0, fed = 0;
460  if (cdc2DTrkArray.getEntries() == 2 && trackphimatch.getEntries() == 2 && cluster_b2b_1to5 == 1) {eed = 1;}
461  if (cdc2DTrkArray.getEntries() == 1 && trackphimatch.getEntries() == 1 && cluster_b2b_1to5 == 1) {fed = 1;}
462  trgInfo->seteed(eed);
463  trgInfo->setfed(fed);
464 
465  //---------------------------------------------------------------------
466  //..Track-cluster b2b
467  int Trkcluster_b2b_1to3 = 0;
468  int Trkcluster_b2b_1to5 = 0;
469  int Trkcluster_b2b_1to7 = 0;
470  int Trkcluster_b2b_1to9 = 0;
471  for (int itrk = 0; itrk < cdc2DTrkArray.getEntries(); itrk++) {
472  double _r = 1.0 / cdc2DTrkArray[itrk]->getOmega() ;
473  double _phi = cdc2DTrkArray[itrk]->getPhi0() ;
474  double phi_p = acos(126.0 / (2 * fabs(_r)));
475  int charge = 0;
476  if (_r > 0) {charge = 1;}
477  else if (_r < 0) {charge = -1;}
478  else {charge = 0;}
479 
480  double phi_CDC = 0.0;
481  if (charge == 1) {
482  phi_CDC = _phi + phi_p - 0.5 * M_PI;
483  } else if (charge == -1) {
484  phi_CDC = _phi - phi_p + 0.5 * M_PI;
485  } else {
486  phi_CDC = _phi;
487  }
488 
489  if (phi_CDC > 2 * M_PI) {phi_CDC = phi_CDC - 2 * M_PI;}
490  else if (phi_CDC < 0) {phi_CDC = phi_CDC + 2 * M_PI;}
491  int phi_itrk = (int)(phi_CDC * (180.0 / M_PI) / 10);
492 
493  for (int jclu = 0; jclu < eclTrgClusterArray.getEntries(); jclu++) {
494 
495  double x_jclu = eclTrgClusterArray[jclu]->getPositionX();
496  double y_jclu = eclTrgClusterArray[jclu]->getPositionY();
497 
498  int phi_jclu = 0;
499  if (x_jclu >= 0 && y_jclu >= 0) {phi_jclu = (int)(atan(y_jclu / x_jclu) * (180.0 / M_PI) / 10);}
500  else if (x_jclu < 0 && y_jclu >= 0) {phi_jclu = (int)((atan(y_jclu / x_jclu) * (180.0 / M_PI) + 180.0) / 10);}
501  else if (x_jclu < 0 && y_jclu < 0) {phi_jclu = (int)((atan(y_jclu / x_jclu) * (180.0 / M_PI) + 180.0) / 10);}
502  else if (x_jclu >= 0 && y_jclu < 0) {phi_jclu = (int)((atan(y_jclu / x_jclu) * (180.0 / M_PI) + 360.0) / 10);}
503 
504  if (abs(phi_itrk - phi_jclu) >= 17 && abs(phi_itrk - phi_jclu) <= 19) {Trkcluster_b2b_1to3 = 1;}
505  if (abs(phi_itrk - phi_jclu) >= 16 && abs(phi_itrk - phi_jclu) <= 20) {Trkcluster_b2b_1to5 = 1;}
506  if (abs(phi_itrk - phi_jclu) >= 15 && abs(phi_itrk - phi_jclu) <= 21) {Trkcluster_b2b_1to7 = 1;}
507  if (abs(phi_itrk - phi_jclu) >= 14 && abs(phi_itrk - phi_jclu) <= 22) {Trkcluster_b2b_1to9 = 1;}
508  }
509  }
510 
511  trgInfo->setTrkcluster_b2b_1to3(Trkcluster_b2b_1to3);
512  trgInfo->setTrkcluster_b2b_1to5(Trkcluster_b2b_1to5);
513  trgInfo->setTrkcluster_b2b_1to7(Trkcluster_b2b_1to7);
514  trgInfo->setTrkcluster_b2b_1to9(Trkcluster_b2b_1to9);
515 
516  //---------------------------------------------------------------------
517  //..fp, eeb, fep
518 
519  int fp = 0;
520  if (cdc2DTrkArray.getEntries() == 1 && Trkcluster_b2b_1to5 == 1) {fp = 1;}
521  trgInfo->setfp(fp);
522 
523  int eeb = 0;
524  if (trackphimatch.getEntries() == 2 && Trk_b2b_1to5 == 1) {eeb = 1;}
525  trgInfo->seteeb(eeb);
526 
527  int fep = 0;
528  if (cdc2DTrkArray.getEntries() == 1 && trackphimatch.getEntries() == 1 && Trkcluster_b2b_1to5 == 1) {fep = 1;}
529  trgInfo->setfep(fep);
530 
531 
532  //---------------------------------------------------------------------
533  //..Get input bits from StoreArray<TRGECLTrg> trgArray
534  //..Bit order is hard-coded in trg/ecl/src/TrgEclMaster.cc
535 
536  int ECLtoGDL[4] = {0, 0, 0, 0};
537  if (ntrgArray > 0) {
538  ECLtoGDL[0] = trgArray[0]->getECLtoGDL(0);
539  ECLtoGDL[1] = trgArray[0]->getECLtoGDL(1);
540  ECLtoGDL[2] = trgArray[0]->getECLtoGDL(2);
541  ECLtoGDL[3] = trgArray[0]->getECLtoGDL(3);
542  }
543 
544  // elow: 47
545  bool elow = (ECLtoGDL[1] & (1 << (47 - 32 * 1))) != 0;
546  // ehigh: 48
547  bool ehigh = (ECLtoGDL[1] & (1 << (48 - 32 * 1))) != 0;
548  // elum: 49
549  bool elum = (ECLtoGDL[1] & (1 << (49 - 32 * 1))) != 0;
550  // ecl_bha: 19
551  bool ecl_bha = (ECLtoGDL[0] & (1 << (19 - 32 * 0))) != 0;
552  // bha_type0: 20
553  bool bha_type0 = (ECLtoGDL[0] & (1 << (20 - 32 * 0))) != 0;
554  // bha_type1: 21
555  bool bha_type1 = (ECLtoGDL[0] & (1 << (21 - 32 * 0))) != 0;
556  // bha_type2: 22
557  bool bha_type2 = (ECLtoGDL[0] & (1 << (22 - 32 * 0))) != 0;
558  // bha_type3: 23
559  bool bha_type3 = (ECLtoGDL[0] & (1 << (23 - 32 * 0))) != 0;
560  // bha_type4: 24
561  bool bha_type4 = (ECLtoGDL[0] & (1 << (24 - 32 * 0))) != 0;
562  // bha_type5: 25
563  bool bha_type5 = (ECLtoGDL[0] & (1 << (25 - 32 * 0))) != 0;
564  // bha_type6: 26
565  bool bha_type6 = (ECLtoGDL[0] & (1 << (26 - 32 * 0))) != 0;
566  // bha_type7: 27
567  bool bha_type7 = (ECLtoGDL[0] & (1 << (27 - 32 * 0))) != 0;
568  // bha_type8: 28
569  bool bha_type8 = (ECLtoGDL[0] & (1 << (28 - 32 * 0))) != 0;
570  // bha_type9: 29
571  bool bha_type9 = (ECLtoGDL[0] & (1 << (29 - 32 * 0))) != 0;
572  // bha_type10: 30
573  bool bha_type10 = (ECLtoGDL[0] & (1 << (30 - 32 * 0))) != 0;
574  // bha_type11: 31
575  bool bha_type11 = (ECLtoGDL[0] & (1u << (31 - 32 * 0))) != 0;
576  // bha_type12: 32
577  bool bha_type12 = (ECLtoGDL[1] & (1 << (32 - 32 * 1))) != 0;
578  // bha_type13: 33
579  bool bha_type13 = (ECLtoGDL[1] & (1 << (33 - 32 * 1))) != 0;
580 
581  bool nclst_0 = (eclTrgClusterArray.getEntries() & (1 << 0)) != 0;
582  bool nclst_1 = (eclTrgClusterArray.getEntries() & (1 << 1)) != 0;
583  bool nclst_2 = (eclTrgClusterArray.getEntries() & (1 << 2)) != 0;
584  bool nclst_3 = (eclTrgClusterArray.getEntries() & (1 << 3)) != 0;
585 
586  // ecl_bg_0: 57
587  bool ecl_bg_0 = (ECLtoGDL[1] & (1 << (57 - 32 * 1))) != 0;
588  // ecl_bg_1: 58
589  bool ecl_bg_1 = (ECLtoGDL[1] & (1 << (58 - 32 * 1))) != 0;
590  // ecl_bg_2: 59
591  bool ecl_bg_2 = (ECLtoGDL[1] & (1 << (59 - 32 * 1))) != 0;
592 
593  bool ecl_active = ntrgArray > 0;
594 
595  // ecl_timing_fwd: 15
596  bool ecl_timing_fwd = (ECLtoGDL[0] & (1 << (15 - 32 * 0))) != 0;
597  // ecl_timing_brl: 16
598  bool ecl_timing_brl = (ECLtoGDL[0] & (1 << (16 - 32 * 0))) != 0;
599  // ecl_timing_bwd: 17
600  bool ecl_timing_bwd = (ECLtoGDL[0] & (1 << (17 - 32 * 0))) != 0;
601  // ecl_phys: 18
602  bool ecl_phys = (ECLtoGDL[0] & (1 << (18 - 32 * 0))) != 0;
603  // ecl_oflo: 60
604  bool ecl_oflo = (ECLtoGDL[1] & (1 << (60 - 32 * 1))) != 0;
605  // ecl_3dbha: 61
606  bool ecl_3dbha = (ECLtoGDL[1] & (1 << (61 - 32 * 1))) != 0;
607  // ecl_lml_0: 62
608  bool ecl_lml_0 = (ECLtoGDL[1] & (1 << (62 - 32 * 1))) != 0;
609  // ecl_lml_1: 63
610  bool ecl_lml_1 = (ECLtoGDL[1] & (1u << (63 - 32 * 1))) != 0;
611  // ecl_lml_2: 64
612  bool ecl_lml_2 = (ECLtoGDL[2] & (1 << (64 - 32 * 2))) != 0;
613  // ecl_lml_3: 65
614  bool ecl_lml_3 = (ECLtoGDL[2] & (1 << (65 - 32 * 2))) != 0;
615  // ecl_lml_4: 66
616  bool ecl_lml_4 = (ECLtoGDL[2] & (1 << (66 - 32 * 2))) != 0;
617  // ecl_lml_5: 67
618  bool ecl_lml_5 = (ECLtoGDL[2] & (1 << (67 - 32 * 2))) != 0;
619  // ecl_lml_6: 68
620  bool ecl_lml_6 = (ECLtoGDL[2] & (1 << (68 - 32 * 2))) != 0;
621  // ecl_lml_7: 69
622  bool ecl_lml_7 = (ECLtoGDL[2] & (1 << (69 - 32 * 2))) != 0;
623  // ecl_lml_8: 70
624  bool ecl_lml_8 = (ECLtoGDL[2] & (1 << (70 - 32 * 2))) != 0;
625  // ecl_lml_9: 71
626  bool ecl_lml_9 = (ECLtoGDL[2] & (1 << (71 - 32 * 2))) != 0;
627  // ecl_lml_10: 72
628  bool ecl_lml_10 = (ECLtoGDL[2] & (1 << (72 - 32 * 2))) != 0;
629  // ecl_lml_11: 73
630  bool ecl_lml_11 = (ECLtoGDL[2] & (1 << (73 - 32 * 2))) != 0;
631  // ecl_lml_11: 78
632  bool ecl_lml_12 = (ECLtoGDL[2] & (1 << (78 - 32 * 2))) != 0;
633  // ecl_lml_11: 79
634  bool ecl_lml_13 = (ECLtoGDL[2] & (1 << (79 - 32 * 2))) != 0;
635  // ecl_mumu: 75
636  bool ecl_mumu = (ECLtoGDL[2] & (1 << (75 - 32 * 2))) != 0;
637  // ecl_bst: 77
638  bool ecl_bst = (ECLtoGDL[2] & (1 << (77 - 32 * 2))) != 0;
639  // ecl_pur: 74
640  bool ecl_bhapur = (ECLtoGDL[2] & (1 << (74 - 32 * 2))) != 0;
641  //3D Bhabha Veto Intrk: 86
642  bool bha_intrk = (ECLtoGDL[2] & (1 << (86 - 32 * 2))) != 0;
643  //3D Bhabha selection theta flag: 87-88
644  bool bha_theta_0 = (ECLtoGDL[2] & (1 << (87 - 32 * 2))) != 0;
645  bool bha_theta_1 = (ECLtoGDL[2] & (1 << (88 - 32 * 2))) != 0;
646  //ecltaub2b
647  bool ecltaub2b = (ECLtoGDL[2] & (1 << (89 - 32 * 2))) != 0;
648  bool ecltaub2b2 = (ECLtoGDL[2] & (1 << (93 - 32 * 2))) != 0;
649  bool ecltaub2b3 = (ECLtoGDL[2] & (1 << (94 - 32 * 2))) != 0;
650  // ehigh1-3
651  bool ehigh1 = (ECLtoGDL[2] & (1 << (90 - 32 * 2))) != 0;
652  bool ehigh2 = (ECLtoGDL[2] & (1 << (91 - 32 * 2))) != 0;
653  bool ehigh3 = (ECLtoGDL[2] & (1 << (92 - 32 * 2))) != 0;
654 
655  //---------------------------------------------------------------------
656  //..Other input bits
657 
658  bool cdc_active = false;
659  if (m_eventTime->hasBinnedEventT0(Const::CDC)) {
660  if (m_eventTime->getBinnedEventT0(Const::CDC) != 0) { cdc_active = true; }
661  }
662 
663  //KLM alone bits from klmtrg summary----------------------------------
664  int n_klm_barrel = klmtrgsummary->getBKLM_n_trg_sectors();
665  bool klm_hit = n_klm_barrel > 0;
666  bool klm_0 = (n_klm_barrel & (1 << 0)) != 0;
667  bool klm_1 = (n_klm_barrel & (1 << 1)) != 0;
668  bool klm_2 = (n_klm_barrel & (1 << 2)) != 0;
669  int n_eklm_barrel = klmtrgsummary->getEKLM_n_trg_sectors();
670  bool eklm_hit = n_eklm_barrel > 0;
671  bool eklm_0 = (n_eklm_barrel & (1 << 0)) != 0;
672  bool eklm_1 = (n_eklm_barrel & (1 << 1)) != 0;
673  bool eklm_2 = (n_eklm_barrel & (1 << 2)) != 0;
674  int klmb2b = klmtrgsummary->getBKLM_back_to_back_flag();
675  int eklmb2b = klmtrgsummary->getEKLM_back_to_back_flag();
676 
677  //KLM/CDC/ECL matching bits-------------------------------------------
678  bool cdcklm_0 = (trackKLMmatch.getEntries() == 1);
679  bool cdcklm_1 = (trackKLMmatch.getEntries() > 1);
680  bool cdcklm_2 = (trackKLMmatch.getEntries() == 3);
681  bool cdcklm_3 = (trackKLMmatch.getEntries() > 3);
682  int n_seklm = trgInfo->getNsklm();
683  //int n_seklm_fwd = trgInfo->getNsklm_fwd();
684  //int n_seklm_bwd = trgInfo->getNsklm_bwd();
685  int n_ieklm = trgInfo->getNiklm();
686  bool ecleklm = (trgInfo->getNeecleklm() > 0);
687 
688  bool cdcecl_0 = (trackphimatch.getEntries() == 1);
689  bool cdcecl_1 = (trackphimatch.getEntries() == 2);
690  bool cdcecl_2 = (trackphimatch.getEntries() == 3);
691  bool cdcecl_3 = (trackphimatch.getEntries() > 3);
692  bool trkbha1 = ecl_3dbha && (trackphimatch.getEntries() == 1);
693  bool trkbha2 = ecl_3dbha && (trackphimatch.getEntries() == 2);
694 
695 
696 
697  int n_c2gev = 0;
698  for (int i = 0; i < trackphimatch.getEntries(); i++) {
699  if (trackphimatch[i]->get_e() >= 2.0) {n_c2gev++;}
700  }
701 
702  bool c2gev_0 = (n_c2gev == 1);
703  bool c2gev_1 = (n_c2gev == 2);
704  bool c2gev_2 = (n_c2gev == 3);
705  bool c2gev_3 = (n_c2gev > 3);
706 
707  int N_clst1 = 0, N_clst2 = 0;
708  for (int i = 0 ; i < grlphoton.getEntries() ; i++) {
709  if (grlphoton[i]->get_e() > 1.0) { N_clst1++; }
710  if (grlphoton[i]->get_e() > 2.0) { N_clst2++; }
711  }
712 
713  bool nclst1_0 = (N_clst1 == 1);
714  bool nclst1_1 = (N_clst1 == 2);
715  bool nclst1_2 = (N_clst1 == 3);
716  bool nclst1_3 = (N_clst1 > 3);
717 
718  bool nclst2_0 = (N_clst2 == 1);
719  bool nclst2_1 = (N_clst2 == 2);
720  bool nclst2_2 = (N_clst2 == 3);
721  bool nclst2_3 = (N_clst2 > 3);
722 
723  int N_ST = trgInfo->getNshorttrk();
724  int N_ST_fwd = trgInfo->getNshorttrk_fwd();
725  int N_ST_bwd = trgInfo->getNshorttrk_bwd();
726  int s2s3 = trgInfo->gets2s3();
727  int s2s5 = trgInfo->gets2s5();
728  int s2so = trgInfo->gets2so();
729  int s2f3 = trgInfo->gets2f3();
730  int s2f5 = trgInfo->gets2f5();
731  int s2fo = trgInfo->gets2fo();
732  int s2f30 = trgInfo->gets2f30();
733  int s2s30 = trgInfo->gets2s30();
734  int bwdsb = trgInfo->getbwdsb();
735  int bwdnb = trgInfo->getbwdnb();
736  int fwdsb = trgInfo->getfwdsb();
737  int fwdnb = trgInfo->getfwdnb();
738  int brlfb = trgInfo->getbrlfb();
739  int brlnb = trgInfo->getbrlnb();
740  int N_IT = trgInfo->getNinnertrk();
741  int i2fo = trgInfo->geti2fo();
742  int i2io = trgInfo->geti2io();
743  int n_secl = trgInfo->getNsecl();
744  int n_iecl = trgInfo->getNiecl();
745 
746  bool ecltaunn = trgInfo->getTauNN();
747 
748  //std::cout << "klm " << klm_hit << " " << klm_0 << " " << klm_1 << " " << klm_2 << " " << klmb2b << std::endl;
749  //std::cout << "eklm " << eklm_hit << " " << eklm_0 << " " << eklm_1 << " " << eklm_2 << " " << eklmb2b << std::endl;
750  //std::cout << "2dklm " << nTrk2D << " " << cdcklm_0 << " " << cdcklm_1 << std::endl;
751  //std::cout << "sklm " << N_ST << " " << n_seklm << " " << n_seklm_fwd << " " << n_seklm_bwd << std::endl;
752  //std::cout << "tiklm " << N_IT << " " << n_ieklm << " " << trgInfo->getNiecl() << std::endl;
753  //std::cout << "eclklm " << trgInfo->getNeecleklm() << std::endl;
754 
755 
756  //---------------------------------------------------------------------
757  //..Filling InputBits
758  //..Naming is based on trg/gdl/dbobjects/log/
759 
760 
761  if (!m_InputBitsDB)B2INFO("no database of gdl input bits");
762 
763  int N_InputBits = m_InputBitsDB->getninbit();
764 
765  for (int i = 0; i < N_InputBits; i++) {
766  std::string bitname(m_InputBitsDB->getinbitname(i));
767 
768  bool bit = false;
769  if (bitname == "t3_0") {bit = nTrkZ35 == 1;}
770  else if (bitname == "t3_1") {bit = nTrkZ35 == 2;}
771  else if (bitname == "t3_2") {bit = nTrkZ35 == 3;}
772  else if (bitname == "t3_3") {bit = nTrkZ35 > 3;}
773  else if (bitname == "ty_0") {bit = nTrkNN20 == 1;}
774  else if (bitname == "ty_1") {bit = nTrkNN20 == 2;}
775  else if (bitname == "ty_2") {bit = nTrkNN20 == 3;}
776  else if (bitname == "ty_3") {bit = nTrkNN20 > 3;}
777  else if (bitname == "typ") {bit = nTrkNNSTT > 0;}
778  else if (bitname == "typ6") {bit = nTrkNNSTT6 > 0;}
779  else if (bitname == "typ5") {bit = nTrkNNSTT5 > 0;}
780  else if (bitname == "typ4") {bit = nTrkNNSTT4 > 0;}
781  else if (bitname == "t2_0") {bit = nTrk2D == 1;}
782  else if (bitname == "t2_1") {bit = nTrk2D == 2;}
783  else if (bitname == "t2_2") {bit = nTrk2D == 3;}
784  else if (bitname == "t2_3") {bit = nTrk2D > 3;}
785  else if (bitname == "ts_0") {bit = N_ST == 1;}
786  else if (bitname == "ts_1") {bit = N_ST == 2;}
787  else if (bitname == "ts_2") {bit = N_ST == 3;}
788  else if (bitname == "ts_3") {bit = N_ST > 3;}
789  else if (bitname == "fwd_s") {bit = N_ST_fwd > 0;}
790  else if (bitname == "bwd_s") {bit = N_ST_bwd > 0;}
791  else if (bitname == "cdc_open90") {bit = Trk_open90 == 1;}
792  else if (bitname == "f2f30") {bit = Trk_open30 == 1;}
793  else if (bitname == "cdc_active") {bit = cdc_active;}
794  else if (bitname == "cdc_b2b3") {bit = Trk_b2b_1to3;}
795  else if (bitname == "cdc_b2b5") {bit = Trk_b2b_1to5;}
796  else if (bitname == "cdc_b2b7") {bit = Trk_b2b_1to7;}
797  else if (bitname == "cdc_b2b9") {bit = Trk_b2b_1to9;}
798  else if (bitname == "s2s3") {bit = s2s3 > 0;}
799  else if (bitname == "s2s5") {bit = s2s5 > 0;}
800  else if (bitname == "s2so") {bit = s2so > 0;}
801  else if (bitname == "s2f3") {bit = s2f3 > 0;}
802  else if (bitname == "s2f5") {bit = s2f5 > 0;}
803  else if (bitname == "s2fo") {bit = s2fo > 0;}
804  else if (bitname == "s2f30") {bit = s2f30;}
805  else if (bitname == "s2s30") {bit = s2s30;}
806  else if (bitname == "bwdsb") {bit = bwdsb > 0;}
807  else if (bitname == "bwdnb") {bit = bwdnb > 0;}
808  else if (bitname == "fwdsb") {bit = fwdsb > 0;}
809  else if (bitname == "fwdnb") {bit = fwdnb > 0;}
810  else if (bitname == "brlfb1") {bit = brlfb == 1;}
811  else if (bitname == "brlfb2") {bit = brlfb == 2;}
812  else if (bitname == "brlnb1") {bit = brlnb == 1;}
813  else if (bitname == "brlnb2") {bit = brlnb == 2;}
814  else if (bitname == "seklm_0") {bit = n_seklm == 1;}
815  else if (bitname == "seklm_1") {bit = n_seklm > 1;}
816  else if (bitname == "ieklm") {bit = n_ieklm > 0;}
817  else if (bitname == "secl") {bit = n_secl > 0;}
818  else if (bitname == "iecl") {bit = n_iecl > 0;}
819  else if (bitname == "iecl_0") {bit = n_iecl == 1;}
820  else if (bitname == "iecl_1") {bit = n_iecl > 1;}
821  else if (bitname == "ti") {bit = N_IT > 0;}
822  else if (bitname == "i2fo") {bit = i2fo > 0;}
823  else if (bitname == "i2io") {bit = i2io > 0;}
824  else if (bitname == "ehigh") {bit = ehigh;}
825  else if (bitname == "elow") {bit = elow;}
826  else if (bitname == "elum") {bit = elum;}
827  else if (bitname == "ecl_bha") {bit = ecl_bha;}
828  else if (bitname == "bha_type_0") {bit = bha_type0;}
829  else if (bitname == "bha_type_1") {bit = bha_type1;}
830  else if (bitname == "bha_type_2") {bit = bha_type2;}
831  else if (bitname == "bha_type_3") {bit = bha_type3;}
832  else if (bitname == "bha_type_4") {bit = bha_type4;}
833  else if (bitname == "bha_type_5") {bit = bha_type5;}
834  else if (bitname == "bha_type_6") {bit = bha_type6;}
835  else if (bitname == "bha_type_7") {bit = bha_type7;}
836  else if (bitname == "bha_type_8") {bit = bha_type8;}
837  else if (bitname == "bha_type_9") {bit = bha_type9;}
838  else if (bitname == "bha_type_10") {bit = bha_type10;}
839  else if (bitname == "bha_type_11") {bit = bha_type11;}
840  else if (bitname == "bha_type_12") {bit = bha_type12;}
841  else if (bitname == "bha_type_13") {bit = bha_type13;}
842  else if (bitname == "clst_0") {bit = nclst_0;}
843  else if (bitname == "clst_1") {bit = nclst_1;}
844  else if (bitname == "clst_2") {bit = nclst_2;}
845  else if (bitname == "clst_3") {bit = nclst_3;}
846  else if (bitname == "ecl_bg_0") {bit = ecl_bg_0;}
847  else if (bitname == "ecl_bg_1") {bit = ecl_bg_1;}
848  else if (bitname == "ecl_bg_2") {bit = ecl_bg_2;}
849  else if (bitname == "ecl_active") {bit = ecl_active;}
850  else if (bitname == "ecl_timing_fwd") {bit = ecl_timing_fwd;}
851  else if (bitname == "ecl_timing_brl") {bit = ecl_timing_brl;}
852  else if (bitname == "ecl_timing_bwd") {bit = ecl_timing_bwd;}
853  else if (bitname == "ecl_phys") {bit = ecl_phys;}
854  else if (bitname == "ecl_oflo") {bit = ecl_oflo;}
855  else if (bitname == "ecl_3dbha") {bit = ecl_3dbha;}
856  else if (bitname == "bha_veto") {bit = ecl_3dbha;}
857  else if (bitname == "ecl_lml_0") {bit = ecl_lml_0;}
858  else if (bitname == "ecl_lml_1") {bit = ecl_lml_1;}
859  else if (bitname == "ecl_lml_2") {bit = ecl_lml_2;}
860  else if (bitname == "ecl_lml_3") {bit = ecl_lml_3;}
861  else if (bitname == "ecl_lml_4") {bit = ecl_lml_4;}
862  else if (bitname == "ecl_lml_5") {bit = ecl_lml_5;}
863  else if (bitname == "ecl_lml_6") {bit = ecl_lml_6;}
864  else if (bitname == "ecl_lml_7") {bit = ecl_lml_7;}
865  else if (bitname == "ecl_lml_8") {bit = ecl_lml_8;}
866  else if (bitname == "ecl_lml_9") {bit = ecl_lml_9;}
867  else if (bitname == "ecl_lml_10") {bit = ecl_lml_10;}
868  else if (bitname == "ecl_lml_11") {bit = ecl_lml_11;}
869  else if (bitname == "ecl_lml_12") {bit = ecl_lml_12;}
870  else if (bitname == "ecl_lml_13") {bit = ecl_lml_13;}
871  else if (bitname == "ecl_mumu") {bit = ecl_mumu;}
872  else if (bitname == "ecl_bst") {bit = ecl_bst;}
873  else if (bitname == "ecl_taub2b") {bit = ecltaub2b;}
874  else if (bitname == "ecl_taub2b2") {bit = ecltaub2b2;}
875  else if (bitname == "ecl_taub2b3") {bit = ecltaub2b3;}
876  else if (bitname == "ehigh1") {bit = ehigh1;}
877  else if (bitname == "ehigh2") {bit = ehigh2;}
878  else if (bitname == "ehigh3") {bit = ehigh3;}
879 
880  else if (bitname == "klm_hit") {bit = klm_hit;}
881  else if (bitname == "klm_0") {bit = klm_0;}
882  else if (bitname == "klm_1") {bit = klm_1;}
883  else if (bitname == "klm_2") {bit = klm_2;}
884  else if (bitname == "klmb2b") {bit = klmb2b;}
885  else if (bitname == "eklm_hit") {bit = eklm_hit;}
886  else if (bitname == "eklm_0") {bit = eklm_0;}
887  else if (bitname == "eklm_1") {bit = eklm_1;}
888  else if (bitname == "eklm_2") {bit = eklm_2;}
889  else if (bitname == "eklmb2b") {bit = eklmb2b;}
890  else if (bitname == "ecleklm") {bit = ecleklm;}
891  else if (bitname == "revo") {bit = false;}
892  else if (bitname == "her_kick") {bit = false;}
893  else if (bitname == "ler_kick") {bit = false;}
894  else if (bitname == "bha_delay") {bit = false;}
895  else if (bitname == "pseud_rand") {bit = false;}
896  else if (bitname == "plsin") {bit = false;}
897  else if (bitname == "poissonin") {bit = false;}
898  else if (bitname == "periodin") {bit = false;}
899  else if (bitname == "veto") {bit = false;}
900  else if (bitname == "samhem") {bit = nSameHem1Trk > 0;}
901  else if (bitname == "opohem") {bit = nOppHem1Trk > 0;}
902  else if (bitname == "n1gev_0") {bit = nclst1_0;}
903  else if (bitname == "n1gev_1") {bit = nclst1_1;}
904  else if (bitname == "n1gev_2") {bit = nclst1_2;}
905  else if (bitname == "n1gev_3") {bit = nclst1_3;}
906  else if (bitname == "n2gev_0") {bit = nclst2_0;}
907  else if (bitname == "n2gev_1") {bit = nclst2_1;}
908  else if (bitname == "n2gev_2") {bit = nclst2_2;}
909  else if (bitname == "n2gev_3") {bit = nclst2_3;}
910  else if (bitname == "cdcecl_0") {bit = cdcecl_0;}
911  else if (bitname == "cdcecl_1") {bit = cdcecl_1;}
912  else if (bitname == "cdcecl_2") {bit = cdcecl_2;}
913  else if (bitname == "cdcecl_3") {bit = cdcecl_3;}
914  else if (bitname == "c2gev_0") {bit = c2gev_0;}
915  else if (bitname == "c2gev_1") {bit = c2gev_1;}
916  else if (bitname == "c2gev_2") {bit = c2gev_2;}
917  else if (bitname == "c2gev_3") {bit = c2gev_3;}
918  else if (bitname == "cdcklm_0") {bit = cdcklm_0;}
919  else if (bitname == "cdcklm_1") {bit = cdcklm_1;}
920  else if (bitname == "cdcklm_2") {bit = cdcklm_2;}
921  else if (bitname == "cdcklm_3") {bit = cdcklm_3;}
922  else if (bitname == "d3") {bit = cluster_b2b_1to3 > 0;}
923  else if (bitname == "d5") {bit = cluster_b2b_1to5 > 0;}
924  else if (bitname == "d7") {bit = cluster_b2b_1to7 > 0;}
925  else if (bitname == "d9") {bit = cluster_b2b_1to9 > 0;}
926  else if (bitname == "p3") {bit = Trkcluster_b2b_1to3 > 0;}
927  else if (bitname == "p5") {bit = Trkcluster_b2b_1to5 > 0;}
928  else if (bitname == "p7") {bit = Trkcluster_b2b_1to7 > 0;}
929  else if (bitname == "p9") {bit = Trkcluster_b2b_1to9 > 0;}
930  else if (bitname == "trkfit") {bit = false;}
931  else if (bitname == "injv") {bit = false;}
932  else if (bitname == "nimin0") {bit = false;}
933  else if (bitname == "nimin1") {bit = false;}
934  else if (bitname == "track") {bit = nTrk2D > 0;}
935  else if (bitname == "bha_intrk") {bit = bha_intrk;}
936  else if (bitname == "bha_theta_0") {bit = bha_theta_0;}
937  else if (bitname == "bha_theta_1") {bit = bha_theta_1;}
938  else if (bitname == "ecl_bhapur") {bit = ecl_bhapur;}
939 
940  //GRL related bits, not perfect. To do: judge bhabha cluster or not correctly
941  else if (bitname == "trkbha1") {bit = trkbha1;}
942  else if (bitname == "trkbha2") {bit = trkbha2;}
943 
944  //GRL related bits, not ready
945  else if (bitname == "ta_0") {bit = false;}
946  else if (bitname == "ta_1") {bit = false;}
947  else if (bitname == "ta_2") {bit = false;}
948  else if (bitname == "ta_3") {bit = false;}
949  else if (bitname == "trkflt") {bit = false;}
950  else if (bitname == "tsf0b2b") {bit = false;}
951  else if (bitname == "tsf1b2b") {bit = false;}
952  else if (bitname == "tsf2b2b") {bit = false;}
953  else if (bitname == "grlgg1") {bit = false;}
954  else if (bitname == "grlgg2") {bit = false;}
955 
956  //KLM TOP ECL not ready
957  else if (bitname == "ecl_bhauni") {bit = false;}
958  else if (bitname == "cdctop_0") {bit = false;}
959  else if (bitname == "cdctop_1") {bit = false;}
960  else if (bitname == "cdctop_2") {bit = false;}
961  else if (bitname == "cdctop_3") {bit = false;}
962  else if (bitname == "top_0") {bit = false;}
963  else if (bitname == "top_1") {bit = false;}
964  else if (bitname == "top_2") {bit = false;}
965  else if (bitname == "top_bb") {bit = false;}
966  else if (bitname == "top_active") {bit = false;}
967 
968  //other trigger bits
969  else if (bitname == "itsfb2b") {bit = false;}
970  else if (bitname == "inp156") {bit = false;}
971  else if (bitname == "inp157") {bit = false;}
972  else if (bitname == "inp158") {bit = false;}
973  else if (bitname == "inp159") {bit = false;}
974 
975  //new tau bit
976  else if (bitname == "ecl_taunn") {bit = ecltaunn;}
977 
978  //DITTO: please don't change the WARNING message below.
979  //If you change it, please update the test trg_tsim_check_warnings.py accordingly.
980  else B2WARNING("Unknown bitname" << LogVar("bitname", bitname));
981 
982  trgInfo->setInputBits(i, bit);
983  }
984 
985 }
986 
987 void
989 {
990  B2DEBUG(20, "TRGGRLProjectsModule ... endRun called ");
991 }
992 
993 
994 
996 {
997 
998 }
999 
1000 
bool hasBinnedEventT0(const Const::EDetector detector) const
Check if one of the detectors in the given set has a binned t0 estimation.
int getBinnedEventT0(const Const::EDetector detector) const
Return the stored binned event t0 for the given detector or 0 if nothing stored.
Base class for Modules.
Definition: Module.h:72
void setDescription(const std::string &description)
Sets the description of the module.
Definition: Module.cc:214
void setPropertyFlags(unsigned int propertyFlags)
Sets the flags for the module properties.
Definition: Module.cc:208
@ 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:80
Class to hold Lorentz transformations from/to CMS and boost vector.
const ROOT::Math::LorentzRotation rotateLabToCms() const
Returns Lorentz transformation from Lab to CMS.
Accessor to arrays stored in the data store.
Definition: StoreArray.h:113
int getEntries() const
Get the number of objects in the array.
Definition: StoreArray.h:216
Type-safe access to single objects in the data store.
Definition: StoreObjPtr.h:96
std::string m_configFilename
Config. file name.
std::string m_KLMTrgSummaryName
Name of the collection of KLM TRG.
int m_fastSimulationMode
Switch for the fast simulation.
std::string m_TrgECLTrgsName
Name of the StoreArray holding the ecl trg result.
int m_simulationMode
Mode for TRGGRL simulation.
std::string m_2DmatchCollectionName
Name of the StoreArray holding the matched 2D tracks.
std::string m_3DfitterCollectionName
Name of the StoreArray holding the tracks made by the 3D fitter.
int _debugLevel
returns version of TRGGRLProjectsModule.
int m_firmwareSimulationMode
Switch for the firmware simulation. 0:do nothing, 1:do everything.
virtual void initialize() override
Initilizes TRGGRLProjectsModule.
std::string m_TrgECLClusterName
Name of the StoreArray holding the eclclusters.
std::string m_phimatch_tracklist
the matched 2d track list by phi matching
virtual void event() override
Called event by event.
virtual void endRun() override
Called when run ended.
virtual void terminate() override
Called when processing ended.
double m_eclClusterTimeWindow
ecl cluster time window to suppress beam induced background
virtual void beginRun() override
Called when new run started.
std::string m_2DfinderCollectionName
Name of the StoreArray holding the tracks made by the 2D finder.
DBObjPtr< TRGGDLDBInputBits > m_InputBitsDB
Data base of GDL input bits.
std::string m_NNCollectionName
Name of the StoreArray holding the tracks made by NN.
std::string m_klmmatch_tracklist
the matched 2d track list by KLM matching
std::string m_TrgGrlInformationName
Name of the StoreArray holding projects information from grl.
std::string m_grlphotonlist
Name of the StoreArray holding projects information from grlphoton.
std::vector< double > m_energythreshold
the collection of energy threshold used in the projects
std::string m_3DmatchCollectionName
Name of the StoreArray holding the matched 3D tracks.
A class of TC Mapping.
Definition: TrgEclMapping.h:26
int getTCThetaIdFromTCId(int)
get [TC Theta ID] from [TC ID]
TVector3 getTCPosition(int)
TC position (cm)
Class to store variables with their name which were sent to the logging service.
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:560
#define REG_MODULE(moduleName)
Register the given module (without 'Module' suffix) with the framework.
Definition: Module.h:650
double atan(double a)
atan for double
Definition: beamHelpers.h:34
double tan(double a)
tan for double
Definition: beamHelpers.h:31
Abstract base class for different kinds of events.