9 os.system(
'kill '+str(os.getpid()))
15 with open(os.path.join(
"/proc", str(pid),
"status"))
as f:
17 _vmsize = [l
for l
in lines
if l.startswith(
"VmSize")][0]
18 vmsize =
int(_vmsize.split()[1])
20 pmsize = resource.getrusage(resource.RUSAGE_SELF).ru_maxrss
21 print(
"memory: virtuell = %5.2F MB physical = %5.2F MB"%(vmsize/1.0E3,pmsize/1.0E3))
29from argparse
import ArgumentParser
30parser = ArgumentParser()
31parser.add_argument(
"-f",
"--inputFile", dest=
"inputFile", help=
"single input file", required=
True)
32parser.add_argument(
"-g",
"--geoFile", dest=
"geoFile", help=
"geofile", required=
True)
33parser.add_argument(
"-n",
"--nEvents", dest=
"nEvents", type=int, help=
"number of events to process", default=100000)
34parser.add_argument(
"-ts",
"--thresholdScifi", dest=
"ts", type=float, help=
"threshold energy for Scifi [p.e.]", default=3.5)
35parser.add_argument(
"-ss",
"--saturationScifi", dest=
"ss", type=float, help=
"saturation energy for Scifi [p.e.]", default=104.)
36parser.add_argument(
"-tML",
"--thresholdMufiL", dest=
"tml", type=float, help=
"threshold energy for Mufi large [p.e.]", default=0.0)
37parser.add_argument(
"-tMS",
"--thresholdMufiS", dest=
"tms", type=float, help=
"threshold energy for Mufi small [p.e.]", default=0.0)
38parser.add_argument(
"-no-cls",
"--noClusterScifi", action=
'store_true', help=
"do not make Scifi clusters")
39parser.add_argument(
"-cpp",
"--digiCPP", action=
'store_true', dest=
"FairTask_digi", help=
"perform digitization using DigiTaskSND")
40parser.add_argument(
"-d",
"--Debug", dest=
"debug", help=
"debug", default=
False)
41parser.add_argument(
"--copy-emulsion-points", action=
'store_true', help=
"Copy emulsion points from input file (potentially large file size!).")
43options = parser.parse_args()
45makeClusterScifi =
not options.noClusterScifi
47timer = ROOT.TStopwatch()
51tmp = options.inputFile.split(
'/')
52outFile = tmp[len(tmp)-1].replace(
'.root',
'_dig.root')
53if options.inputFile.find(
'/eos')==0:
54 if options.FairTask_digi:
55 options.inputFile = os.environ[
'EOSSHIP']+options.inputFile
57 os.system(
'xrdcp '+os.environ[
'EOSSHIP']+options.inputFile+
' '+outFile)
59 if not options.FairTask_digi:
60 os.system(
'cp '+options.inputFile+
' '+outFile)
63import shipLHC_conf
as sndDet_conf
65if options.geoFile.find(
'/eos')==0:
66 options.geoFile = os.environ[
'EOSSHIP']+options.geoFile
71lsOfGlobals = ROOT.gROOT.GetListOfGlobals()
72scifiDet = lsOfGlobals.FindObject(
'Scifi')
73mufiDet = lsOfGlobals.FindObject(
'MuFilter')
74scifiDet.SetConfPar(
"Scifi/nphe_min",options.ts)
75scifiDet.SetConfPar(
"Scifi/nphe_max",options.ss)
84if scifiDet.GetConfParF(
"Scifi/signalSpeed")==0:
85 scifiDet.SetConfPar(
"Scifi/signalSpeed", 15*u.cm/u.nanosecond)
88if mufiDet.GetConfParF(
"MuFilter/VTAttenuationLength")==0:
89 mufiDet.SetConfPar(
"MuFilter/VTAttenuationLength",999*u.cm)
92if mufiDet.GetConfParF(
"MuFilter/VandUpAttenuationLength")==999*u.cm:
96if mufiDet.GetConfParF(
"MuFilter/DsAttenuationLength")==0
or\
97 mufiDet.GetConfParF(
"MuFilter/VandUpPropSpeed")==0 :
98 mufiDet.SetConfPar(
"MuFilter/DsAttenuationLength",230*u.cm)
99 mufiDet.SetConfPar(
"MuFilter/DsTAttenuationLength",700*u.cm)
100 mufiDet.SetConfPar(
"MuFilter/VandUpAttenuationLength",210*u.cm)
101 mufiDet.SetConfPar(
"MuFilter/VTAttenuationLength",999*u.cm)
102 mufiDet.SetConfPar(
"MuFilter/DsSiPMcalibration",25.*1000.)
104 mufiDet.SetConfPar(
"MuFilter/VandUpSiPMcalibrationL",50.*1000.)
106 mufiDet.SetConfPar(
"MuFilter/VandUpSiPMcalibrationS",0.)
107 mufiDet.SetConfPar(
"MuFilter/VandUpPropSpeed",13.6*u.cm/u.nanosecond);
108 mufiDet.SetConfPar(
"MuFilter/DsPropSpeed",15.1*u.cm/u.nanosecond);
109 scifiDet.SetConfPar(
"Scifi/timeResol",150.*u.picosecond)
110 mufiDet.SetConfPar(
"MuFilter/timeResol",150.*u.picosecond)
114 print(
"WARNING: Simulation file preceding the production cut change! Consider regenerating from scratch!")
118if options.FairTask_digi:
119 run = ROOT.FairRunAna()
120 ioman = ROOT.FairRootManager.Instance()
121 ioman.RegisterInputObject(
'Scifi', snd_geo.modules[
'Scifi'])
122 ioman.RegisterInputObject(
'MuFilter', snd_geo.modules[
'MuFilter'])
124 run.SetEventHeaderPersistence(
False)
127 fileSource = ROOT.FairFileSource(options.inputFile)
128 run.SetSource(fileSource)
130 outfile = ROOT.FairRootFileSink(outFile.replace(
'.root',
'CPP.root'))
134 inRootFile = ROOT.TFile.Open(options.inputFile)
135 inTree = inRootFile.Get(
'cbmsim')
136 nEventsInFile = inTree.GetEntries()
137 nEvents = min(nEventsInFile, options.nEvents)
139 rtdb = run.GetRuntimeDb()
140 DigiTask = ROOT.DigiTaskSND()
141 DigiTask.withScifiClusters(makeClusterScifi)
142 DigiTask.set_copy_emulsion_points(options.copy_emulsion_points)
143 run.AddTask(DigiTask)
145 run.Run(firstEvent, nEvents)
149 if options.copy_emulsion_points:
150 print(
"ERROR: copying of emulsion points only configurable when using DigiTask")
155 nEvents = min(Sndlhc.sTree.GetEntries(),options.nEvents)
157 for iEvent
in range(firstEvent, nEvents):
158 if iEvent % 50000 == 0
or options.debug:
159 print(
'event ', iEvent, nEvents - firstEvent)
160 Sndlhc.iEvent = iEvent
161 rc = Sndlhc.sTree.GetEvent(iEvent)
164 Sndlhc.clusterScifi()
172rtime = timer.RealTime()
173ctime = timer.CpuTime()
175print(
"Real time ",rtime,
" s, CPU time ",ctime,
"s")
configure(darkphoton=None)