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')
74mufiDet.SetConfPar(
"MuFilter/DsAttenuationLength",350 * u.cm)
75mufiDet.SetConfPar(
"MuFilter/DsTAttenuationLength",700 * u.cm)
76mufiDet.SetConfPar(
"MuFilter/VandUpAttenuationLength",999 * u.cm)
77mufiDet.SetConfPar(
"MuFilter/DsSiPMcalibrationS",25.*1000.)
78mufiDet.SetConfPar(
"MuFilter/VandUpSiPMcalibration",25.*1000.);
79mufiDet.SetConfPar(
"MuFilter/VandUpSiPMcalibrationS",25.*1000.);
80mufiDet.SetConfPar(
"MuFilter/VandUpPropSpeed",12.5*u.cm/u.nanosecond);
81mufiDet.SetConfPar(
"MuFilter/DsPropSpeed",14.3*u.cm/u.nanosecond);
82scifiDet.SetConfPar(
"Scifi/nphe_min",options.ts)
83scifiDet.SetConfPar(
"Scifi/nphe_max",options.ss)
84scifiDet.SetConfPar(
"Scifi/timeResol",150.*u.picosecond)
85scifiDet.SetConfPar(
"MuFilter/timeResol",150.*u.picosecond)
87if scifiDet.GetConfParF(
"Scifi/signalSpeed")==0:
88 scifiDet.SetConfPar(
"Scifi/signalSpeed", 15*u.cm/u.nanosecond)
92if options.FairTask_digi:
93 run = ROOT.FairRunAna()
94 ioman = ROOT.FairRootManager.Instance()
95 ioman.RegisterInputObject(
'Scifi', snd_geo.modules[
'Scifi'])
96 ioman.RegisterInputObject(
'MuFilter', snd_geo.modules[
'MuFilter'])
98 run.SetEventHeaderPersistence(
False)
101 fileSource = ROOT.FairFileSource(options.inputFile)
102 run.SetSource(fileSource)
104 outfile = ROOT.FairRootFileSink(outFile.replace(
'.root',
'CPP.root'))
108 inRootFile = ROOT.TFile.Open(options.inputFile)
109 inTree = inRootFile.Get(
'cbmsim')
110 nEventsInFile = inTree.GetEntries()
111 nEvents = min(nEventsInFile, options.nEvents)
113 rtdb = run.GetRuntimeDb()
114 DigiTask = ROOT.DigiTaskSND()
115 DigiTask.withScifiClusters(makeClusterScifi)
116 DigiTask.set_copy_emulsion_points(options.copy_emulsion_points)
117 run.AddTask(DigiTask)
119 run.Run(firstEvent, nEvents)
123 if options.copy_emulsion_points:
124 print(
"ERROR: copying of emulsion points only configurable when using DigiTask")
129 nEvents = min(Sndlhc.sTree.GetEntries(),options.nEvents)
131 for iEvent
in range(firstEvent, nEvents):
132 if iEvent % 50000 == 0
or options.debug:
133 print(
'event ', iEvent, nEvents - firstEvent)
134 Sndlhc.iEvent = iEvent
135 rc = Sndlhc.sTree.GetEvent(iEvent)
138 Sndlhc.clusterScifi()
146rtime = timer.RealTime()
147ctime = timer.CpuTime()
149print(
"Real time ",rtime,
" s, CPU time ",ctime,
"s")
150if options.FairTask_digi:
151 atexit.register(pyExit)
configure(darkphoton=None)