Belle II Software  release-06-02-00
TeeggInputModule.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 <generators/modules/teegginput/TeeggInputModule.h>
10 
11 #include <framework/datastore/StoreArray.h>
12 
13 using namespace std;
14 using namespace Belle2;
15 
16 //-----------------------------------------------------------------
17 // Register the Module
18 //-----------------------------------------------------------------
19 REG_MODULE(TeeggInput)
20 
21 //-----------------------------------------------------------------
22 // Implementation
23 //-----------------------------------------------------------------
24 
25 TeeggInputModule::TeeggInputModule() : Module(), m_initial(BeamParameters::c_smearVertex)
26 {
27  //Set module properties
28  setDescription("Generates events with TEEGG.");
29 
30  //Parameter definition
31  addParam("VACPOL", m_sVACPOL, "Vacuum polarization: off, nsk (Novosibirsk) or hlmnt (Teubner et al., default)",
32  std::string("hlmnt"));
33  addParam("CMSEnergy", m_cmsEnergy, "CMS energy [GeV] (default: take from xml)", 0.0);
34  addParam("TEVETO", m_TEVETO, "Maximum theta of e+ in final state (in deg)", 0.1);
35  addParam("TEMIN", m_TEMIN, "Minimum angle between the e- and -z axis (EGAMMA conf. only) (in deg)", 20.0);
36  addParam("TGMIN", m_TGMIN, "Minimum angle between the gamma and -z axis (in deg)", 20.0);
37  addParam("TGVETO", m_TGVETO, "Maximum angle between the gamma and -z axis(ETRON conf. only) (in deg)", 0.05);
38  addParam("EEMIN", m_EEMIN, "Minimum energy of the e- (EGAMMA and ETRON conf.) (in GeV)", 2.0);
39  addParam("EGMIN", m_EGMIN, "Minimum energy of the gamma (EGAMMA and GAMMA conf.) (in GeV)", 2.0);
40  addParam("PEGMIN", m_PEGMIN, "Minimum phi sep of e-gamma (EGAMMA config with hard rad. corr.) (in deg)", 0.0);
41  addParam("EEVETO", m_EEVETO, "Minimum energy to veto (GAMMA config with hard rad. corr.) (in GeV)", 0.0);
42  addParam("EGVETO", m_EGVETO, "Minimum energy to veto (ETRON/GAMMA config with hard rad. corr.) (in GeV)", 0.0);
43  addParam("PHVETO", m_PHVETO, "Minimum phi sep to veto (ETRON/GAMMA config with hard rad. corr. (in deg)", 0.0);
44  addParam("CUTOFF", m_CUTOFF, "Cutoff energy for radiative corrections (in CM frame) (in GeV)", 0.250);
45  addParam("EPS", m_EPS, "Param. epsilon_s (smaller val. increases sampling of k_s^pbc)", 0.01);
46  addParam("FRAPHI", m_FRAPHI, "Fraction of time phi_ks is generated with peak(hard rad corr)", 0.0);
47  addParam("EPSPHI", m_EPSPHI, "Param. epsilon_phi ('cutoff' of the phi_ks peak)", 1.0e-4);
48  addParam("WGHT1M", m_WGHT1M, "Maximum weight for generation of QP0, cos(theta QP)", 1.001);
49  addParam("WGHTMX", m_WGHTMX, "Maximum weight for the trial events", 1.000);
50  addParam("RADCOR", m_sRADCOR, "Specifies radiative correction (NONE, SOFT or HARD)", std::string("NONE"));
51  addParam("CONFIG", m_sCONFIG, "Specifies the event configuration (EGAMMA, GAMMA, GAMMAE or ETRON)", std::string("EGAMMA"));
52  addParam("MATRIX", m_sMATRIX, "Specifies which eeg matrix element (BK, BKM2, TCHAN or EPA)", std::string("BKM2"));
53  addParam("MTRXGG", m_sMTRXGG, "Specifies which eegg matrix element (EPADC, BEEGG or MEEGG)", std::string("EPADC"));
54  addParam("UNWEIGHTED", m_UNWGHT, "If true then generate unweighted events", 1);
55 }
56 
57 TeeggInputModule::~TeeggInputModule()
58 {
59 
60 }
61 
62 
63 void TeeggInputModule::initialize()
64 {
65  //Initialize MCParticle collection.
66  StoreArray<MCParticle> mcparticle;
67  mcparticle.registerInDataStore();
68 
69  //Initialize initial particle for beam parameters.
70  m_initial.initialize();
71 
72  // Initialize ExtraInfo (holds vaccum polarization corrections)
73  m_generator.initExtraInfo();
74 
75 }
76 
77 
78 void TeeggInputModule::event()
79 {
80 
81  // Check if the BeamParameters have changed (if they do, abort the job! otherwise cross section calculation will be a nightmare.)
82  if (m_beamParams.hasChanged()) {
83  if (!m_initialized) {
84  initializeGenerator();
85  } else {
86  B2FATAL("TeeggInputModule::event(): BeamParameters have changed within a job, this is not supported for TEEGG!");
87  }
88  }
89 
90  m_mcGraph.clear();
91 
92  // initial particle from beam parameters
93  const MCInitialParticles& initial = m_initial.generate();
94 
95  // true boost
96  TLorentzRotation boost = initial.getCMSToLab();
97 
98  // vertex
99  TVector3 vertex = initial.getVertex();
100 
101  m_generator.generateEvent(m_mcGraph, vertex, boost);
102  m_mcGraph.generateList("", MCParticleGraph::c_setDecayInfo | MCParticleGraph::c_checkCyclic);
103 }
104 
105 
106 void TeeggInputModule::terminate()
107 {
108  m_generator.term();
109 }
110 
111 void TeeggInputModule::initializeGenerator()
112 {
113  const BeamParameters& nominal = m_initial.getBeamParameters();
114  m_cmsEnergy = nominal.getMass();
115 
116  m_generator.setCMSEnergy(m_cmsEnergy);
117  m_generator.setVACPOL(m_sVACPOL);
118  m_generator.setTEVETO(m_TEVETO);
119  m_generator.setTEMIN(m_TEMIN);
120  m_generator.setTGMIN(m_TGMIN);
121  m_generator.setTGVETO(m_TGVETO);
122  m_generator.setEEMIN(m_EEMIN);
123  m_generator.setEGMIN(m_EGMIN);
124  m_generator.setPEGMIN(m_PEGMIN);
125  m_generator.setEEVETO(m_EEVETO);
126  m_generator.setEGVETO(m_EGVETO);
127  m_generator.setPHVETO(m_PHVETO);
128  m_generator.setCUTOFF(m_CUTOFF);
129  m_generator.setEPS(m_EPS);
130  m_generator.setFRAPHI(m_FRAPHI);
131  m_generator.setEPSPHI(m_EPSPHI);
132  m_generator.setWGHT1M(m_WGHT1M);
133  m_generator.setWGHTMX(m_WGHTMX);
134  m_generator.setRADCOR(m_sRADCOR);
135  m_generator.setCONFIG(m_sCONFIG);
136  m_generator.setMATRIX(m_sMATRIX);
137  m_generator.setMTRXGG(m_sMTRXGG);
138  m_generator.setUNWGHT(m_UNWGHT);
139 
140  m_generator.init();
141 
142  m_initialized = true;
143 
144 }
145 
This class contains the nominal beam parameters and the parameters used for smearing of the primary v...
This class contains the initial state for the given event.
const TLorentzRotation & getCMSToLab() const
Return the LorentzRotation to convert from CMS to lab frame.
const TVector3 & getVertex() const
Get the position of the collision.
Base class for Modules.
Definition: Module.h:72
bool registerInDataStore(DataStore::EStoreFlags storeFlags=DataStore::c_WriteOut)
Register the object/array in the DataStore.
The TEEGG Generator module.vectorToPair.
#define REG_MODULE(moduleName)
Register the given module (without 'Module' suffix) with the framework.
Definition: Module.h:650
Abstract base class for different kinds of events.