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