Belle II Software  release-06-00-14
RunSRBgMC.py
1 #!/usr/bin/env python3
2 # -*- coding: utf-8 -*-
3 
4 
11 
12 import basf2 as b2
13 import sys
14 argvs = sys.argv
15 argc = len(argvs)
16 
17 print("The input HEPEvt files needed to run SR MC sim are located in @kekcc:~igal/src/beast/SR")
18 
19 if len(sys.argv) != 4:
20  print("Usage: requires 2 arguments")
21  print("Argument 1: (SynchRad_HER | SynchRad_LER | test)")
22  print("Argument 2: file number")
23  print("Argument 3: ROOT output directory path")
24  sys.exit(1)
25 
26 name = argvs[1]
27 num = argvs[2]
28 output_dir = argvs[3]
29 # Set realTime you want to use
30 # realTime = 1.0e4 # 10us for each file <-- time in ns
31 # realTime = 20 # 20ns for each file <-- time in ns - TEST
32 
33 outputfilename = output_dir + "/output_" + name + "_" + num + ".root"
34 
35 # tagname = SynchRad_HER for HER and SynchRad_LER for LER
36 tagname = name
37 
38 
44 
45 
46 # suppress messages and warnings during processing:
47 b2.set_log_level(b2.LogLevel.ERROR)
48 # set_log_level(LogLevel.DEBUG)
49 
50 # PHASE 2
51 # FileIn = "Ph2_dt_4_8HER21445M.HEPEvt" # data for HER Phase2 dt_4-8 6.6um -> 1.07 of bunch current 0.8A
52 #
53 # FileIn = "Ph2_dt_4_8LER35124M.HEPEvt" #data for LERPhase2 dt_4-8
54 # 6.6um -> 1.4 of bunch current 1.0A
55 
56 eventinfosetter = b2.register_module('EventInfoSetter')
57 hepevtreader = b2.register_module('HepevtInput')
58 # Ph2_dt_4_8HER21445M.HEPEvt
59 # Ph2_dt_4_8HER21445MK2M.HEPEvt
60 # Ph2_dt_4_8LER35124M.HEPEvt
61 # PHASE 2 -> HER 6148 repetitions = 1ROF = 20us | LER 3560 repet = 1ROF = 20us
62 if name == "SynchRad_HER":
63  realTime = 1.0e4 # 10us per file
64  # data for HER Phase2 dt_4-8 6.6um -> 1.07 of bunch current 0.8A
65  FileIn = "Ph2_dt_4_8HER21445M.HEPEvt"
66  # 2340 - 10us realTime Ph2_dt_4_8HER21445M.HEPEvt
67  hepevtreader.param('inputFileList', [FileIn] * 2340)
68 elif name == "SynchRad_LER":
69  realTime = 1.0e4 # 10us per file
70  # data for LERPhase2 dt_4-8 6.6um -> 1.4 of bunch current 1.0A
71  FileIn = "Ph2_dt_4_8LER35124M.HEPEvt"
72  # 2340 - 10us realTime Ph2_dt_4_8HER21445M.HEPEvt
73  hepevtreader.param('inputFileList', [FileIn] * 2340)
74 elif name == "test":
75  realTime = 20 # 20ns per file
76  # data HER KeV -> MeV,is used for test to be sure that code works or for
77  # cross-check.
78  FileIn = "Ph2_dt_4_8HER21445MK2M.HEPEvt"
79  # - for quick TEST 5 ->~ 20nsec
80  hepevtreader.param('inputFileList', [FileIn] * 5)
81  name = "ynchRad_HER"
82 # hepevtreader.param('inputFileList', [FileIn]*1780) # 1780 - 10us realTime for Ph2_dt_4_8LER35124M.HEPEvt
83 # hepevtreader.param('inputFileList', [FileIn] * 2340) # 2340 - 10us
84 # realTime Ph2_dt_4_8HER21445M.HEPEvt
85 
86 # Register
87 gearbox = b2.register_module('Gearbox')
88 geometry = b2.register_module('Geometry')
89 simulation = b2.register_module('FullSim')
90 tagSetter = b2.register_module('BeamBkgTagSetter')
91 progress = b2.register_module('Progress')
92 
93 # Setting the option for all non-hepevt reader modules:
94 # number of events in the list must be >= number of entries in input file
95 # times number of repetitions
96 eventinfosetter.param('evtNumList', [1000000000])
97 eventinfosetter.param('runList', [1]) # from run number 1
98 eventinfosetter.param('expList', [1]) # and experiment number 1
99 
100 # PHASE 2
101 gearbox.param('fileName', '/geometry/Beast2_phase2.xml')
102 # select component you need, but always keep 'MagneticField', 'BeamPipe', 'Cryostat','HeavyMetalShield' !
103 # geometry.param('components', ['MagneticField', 'BeamPipe', 'Cryostat', 'PXD', 'HeavyMetalShield',
104 # 'SVD', 'BEAMABORT', 'PLUME', 'FANGS', 'CLAWS', 'CDC',
105 # 'ARICH', 'TOP', 'COIL', 'ECL', 'BKLM', 'EKLM', 'HE3', ''])
106 #
107 geometry.set_log_level(b2.LogLevel.INFO)
108 
109 # simulation.param('PhysicsList', "QGSP_BERT_HP")
110 simulation.param('PhysicsList', "QGSP_BERT_EMV") # faster than QGSP_BERT_HP
111 # simulation.param('PhysicsList', "FTFP_BERT_EMV")
112 simulation.param('UICommandsAtIdle', ["/process/inactivate nKiller"])
113 simulation.param("StoreAllSecondaries", True)
114 # in MeV we need this for CDC EB neutron flux simulation
115 simulation.param("SecondariesEnergyCut", 0.000001)
116 
117 main = b2.create_path()
118 
119 main.add_module(eventinfosetter)
120 main.add_module(progress)
121 main.add_module(hepevtreader)
122 # print_params(hepevtreader)
123 main.add_module(gearbox)
124 main.add_module(geometry)
125 main.add_module(simulation)
126 
127 # set background tag in SimHits, leave main path if all SimHits are empty
128 tagSetter.param('backgroundType', tagname)
129 tagSetter.param('realTime', realTime)
130 main.add_module(tagSetter)
131 emptyPath = b2.create_path()
132 tagSetter.if_false(emptyPath)
133 b2.print_params(tagSetter)
134 
135 # output: SimHits only
136 rootoutput = b2.register_module('RootOutput')
137 rootoutput.param('outputFileName', outputfilename)
138 rootoutput.param('updateFileCatalog', False)
139 
140 # PHASE 2
141 # Select branches you need in output.
142 rootoutput.param('branchNames',
143  ["SVDSimHits",
144  "SVDTrueHits",
145  "SVDTrueHitsToSVDSimHits",
146  "PXDSimHits",
147  "MCParticleToPXDSimHits",
148  "CLAWSSimHits",
149  "ClawsHits",
150  "FANGSSimHits",
151  "FANGSHits",
152  "PlumeSimHits",
153  "BeamabortSimHits",
154  "BeamabortHits",
155  "PindiodeSimHits",
156  "PindiodeHits",
157  "QcsmonitorSimHits",
158  "QcsmonitorHits",
159  "He3tubeSimHits",
160  "He3tubeHits",
161  "MicrotpcSimHits",
162  "MicrotpcHits",
163  "SADMetaHits"])
164 MIP_to_PE = [12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12]
165 he3digi = b2.register_module('He3Digitizer')
166 he3digi.param('conversionFactor', 0.303132019)
167 he3digi.param('useMCParticles', False)
168 main.add_module(he3digi)
169 diadigi = b2.register_module('BeamDigitizer')
170 diadigi.param('WorkFunction', 13.25)
171 diadigi.param('FanoFactor', 0.382)
172 main.add_module(diadigi)
173 pindigi = b2.register_module('PinDigitizer')
174 pindigi.param('WorkFunction', 3.64)
175 pindigi.param('FanoFactor', 0.13)
176 main.add_module(pindigi)
177 clawsdigi = b2.register_module('ClawsDigitizer')
178 clawsdigi.param('ScintCell', 16)
179 clawsdigi.param('C_keV_to_MIP', 457.114)
180 clawsdigi.param('C_MIP_to_PE', MIP_to_PE)
181 clawsdigi.param('PEthres', 1.0)
182 main.add_module(clawsdigi)
183 qcssdigi = b2.register_module('QcsmonitorDigitizer')
184 qcssdigi.param('ScintCell', 40)
185 qcssdigi.param('C_keV_to_MIP', 1629.827)
186 qcssdigi.param('C_MIP_to_PE', 15.0)
187 qcssdigi.param('MIPthres', 0.5)
188 main.add_module(qcssdigi)
189 fangsdigi = b2.register_module('FANGSDigitizer')
190 main.add_module(fangsdigi)
191 tpcdigi = b2.register_module('TpcDigitizer')
192 main.add_module(tpcdigi)
193 
194 main.add_module(rootoutput)
195 
196 # Process events
197 b2.process(main)
198 
199 # Print call statistics
200 print(b2.statistics)