SND@LHC Software
Loading...
Searching...
No Matches
run_DTconv.py
Go to the documentation of this file.
1#!/usr/bin/env python
2import os
3import sys
4import resource
5from argparse import ArgumentParser
6
7import ROOT
8import shipRoot_conf
9
10# for the geometry
11import SndlhcGeo
12
13
15 # Getting virtual memory size
16 pid = os.getpid()
17 with open(os.path.join("/proc", str(pid), "status")) as f:
18 lines = f.readlines()
19 _vmsize = [line_i for line_i in lines if line_i.startswith("VmSize")][0]
20 vmsize = int(_vmsize.split()[1])
21 # Getting physical memory size
22 pmsize = resource.getrusage(resource.RUSAGE_SELF).ru_maxrss
23 print(
24 "memory: virtuell = %5.2F MB physical = %5.2F MB"
25 % (vmsize / 1.0e3, pmsize / 1.0e3)
26 )
27
28
29firstEvent = 0
30
32
33parser = ArgumentParser()
34parser.add_argument(
35 "-f", "--inputFile", dest="inputFile", help="single input file", required=True
36)
37parser.add_argument("-g", "--geoFile", dest="geoFile", help="geofile", required=True)
38parser.add_argument("-DT", "--miniDTdir", dest="MiniDTdirectory", help="Path for MiniDT raw trees directory", required=True)
39parser.add_argument(
40 "-n",
41 "--nEvents",
42 dest="nEvents",
43 type=int,
44 help="number of events to process",
45 default=1000000,
46)
47parser.add_argument("-d", "--Debug", dest="debug", help="debug", default=False)
48
49options = parser.parse_args()
50# -----Timer-------------
51timer = ROOT.TStopwatch()
52timer.Start()
53
54# outfile name
55tmp = options.inputFile.split("/")
56outFile = tmp[len(tmp) - 1].replace(".root", "_dig.root")
57runN = options.inputFile.split("/")[-2][4:]
58runN_MiniDT = options.MiniDTdirectory.split("/")[-1][11:]
59if runN != runN_MiniDT :
60 print(f"SND run number {runN} and MiniDT run number {runN_MiniDT} do NOT match. Abort")
61 sys.exit(1)
62
63# -----Create geometry----------------------------------------------
64snd_geo = SndlhcGeo.GeoInterface(options.geoFile)
65
66# if needed to read the detector geometry
67lsOfGlobals = ROOT.gROOT.GetListOfGlobals()
68DriftTubeDet = lsOfGlobals.FindObject('DriftTube')
69
70run = ROOT.FairRunAna()
71ioman = ROOT.FairRootManager.Instance()
72ioman.RegisterInputObject("DriftTube", snd_geo.modules["DriftTube"])
73# Set input
74fileSource = ROOT.FairFileSource(options.inputFile)
75run.SetSource(fileSource)
76# Set output
77outFile_sink = ROOT.FairRootFileSink(outFile)
78run.SetSink(outFile_sink)
79
80# Set number of events to process
81inRootFile = ROOT.TFile.Open(options.inputFile)
82inTree = inRootFile.Get("rawConv")
83nEventsInFile = inTree.GetEntries()
84nEvents = min(nEventsInFile, options.nEvents)
85
86rtdb = run.GetRuntimeDb()
87
88# converted SND
89ioman.RegisterInputObject("rawConv", inRootFile)
90
91# MiniDT data
92MiniDTfiles_ = os.listdir(options.MiniDTdirectory)
93MiniDTChain = ROOT.TChain("minidt_hits")
94
95MiniDTfiles = [file for file in MiniDTfiles_ if "hits" in file and "__" not in file]
96nMiniDTfiles = len(MiniDTfiles)
97
98MiniDTChain.Add(f"{options.MiniDTdirectory}/minidt_run_{runN}_hits.root")
99
100for i in range(1, nMiniDTfiles):
101 filename = f"{options.MiniDTdirectory}/minidt_run_{runN}_hits_{i}.root"
102 MiniDTChain.Add(filename)
103
104ioman.RegisterInputObject("MiniDTChain", MiniDTChain)
105
106run.SetEventHeaderPersistence(False)
107xrdb = ROOT.FairRuntimeDb.instance()
108xrdb.getContainer("FairBaseParSet").setStatic()
109xrdb.getContainer("FairGeoParSet").setStatic()
110
111ConvDriftTubeTask = ROOT.ConvDriftTubeRawData()
112run.AddTask(ConvDriftTubeTask)
113run.Init()
114run.Run(firstEvent, nEvents)
115
116timer.Stop()
117rtime = timer.RealTime()
118ctime = timer.CpuTime()
119print(" ")
120print("Real time ", rtime, " s, CPU time ", ctime, "s")
configure(darkphoton=None)