SND@LHC Software
Loading...
Searching...
No Matches
ShipReco.py
Go to the documentation of this file.
1#!/usr/bin/env python
2from __future__ import print_function
3from __future__ import division
4from argparse import ArgumentParser
5
6withHists = True
7pidProton = False # if true, take truth, if False fake with pion mass
8
9import resource
11 # Getting virtual memory size
12 pid = os.getpid()
13 with open(os.path.join("/proc", str(pid), "status")) as f:
14 lines = f.readlines()
15 _vmsize = [l for l in lines if l.startswith("VmSize")][0]
16 vmsize = int(_vmsize.split()[1])
17 #Getting physical memory size
18 pmsize = resource.getrusage(resource.RUSAGE_SELF).ru_maxrss
19 print("memory: virtuell = %5.2F MB physical = %5.2F MB"%(vmsize/1.0E3,pmsize/1.0E3))
20
21import ROOT,os,sys
22import global_variables
23import rootUtils as ut
24import shipunit as u
25import shipRoot_conf
26
28
29parser = ArgumentParser()
30
31parser.add_argument("-f", "--inputFile", dest="inputFile", help="Input file", required=True)
32parser.add_argument("-n", "--nEvents", dest="nEvents", help="Number of events to reconstruct", required=False, default=999999,type=int)
33parser.add_argument("-g", "--geoFile", dest="geoFile", help="ROOT geofile", required=True)
34parser.add_argument("--noVertexing", dest="noVertexing", help="switch off vertexing", required=False, action="store_true")
35parser.add_argument("--noStrawSmearing", dest="withNoStrawSmearing", help="no smearing of distance to wire, default on", required=False, action="store_true")
36parser.add_argument("--withT0", dest="withT0", help="simulate arbitrary T0 and correct for it", required=False, action="store_true")
37parser.add_argument("--ecalDebugDraw", dest="EcalDebugDraw", help="switch in debog for ECAL", required=False, action="store_true")
38parser.add_argument("--saveDisk", dest="saveDisk", help="if set, will remove input file, only rec file kept", required=False, action="store_true")
39parser.add_argument("-i", "--firstEvent",dest="firstEvent", help="First event of input file to use", required=False, default=0,type=int)
40parser.add_argument("--realPR", dest="realPR", help="Option for pattern recognition without MC truth. \n\
41 FH : Hough transform.\n\
42 AR : Artificial retina.\n\
43 TemplateMatching : Tracks are searched for based on the template: track seed + hits within a window around the seed."\
44 , required=False, choices=['FH','AR','TemplateMatching'], default='')
45parser.add_argument("-dy", dest="dy", help="Max height of tank", required=False, default=None,type=int)
46parser.add_argument("--Debug", dest="Debug", help="Switch on debugging", required=False, action="store_true")
47
48options = parser.parse_args()
49vertexing = not options.noVertexing
50
51if options.EcalDebugDraw: ROOT.gSystem.Load("libASImage")
52
53# need to figure out which geometry was used, only needed if no geo file
54if not options.dy:
55 # try to extract from input file name
56 tmp = options.inputFile.split('.')
57 try:
58 dy = float( tmp[1]+'.'+tmp[2] )
59 except:
60 dy = None
61
62print('configured to process ', options.nEvents, ' events from ', options.inputFile,
63 ' starting with event ', options.firstEvent, ' with option Yheight = ' ,dy,
64 ' with vertexing', vertexing, ' and real pattern reco ', options.realPR)
65if not options.inputFile.find('_rec.root') < 0:
66 outFile = options.inputFile
67 options.inputFile = outFile.replace('_rec.root','.root')
68else:
69 outFile = options.inputFile.replace('.root','_rec.root')
70# outfile should be in local directory
71 tmp = outFile.split('/')
72 outFile = tmp[len(tmp)-1]
73 if options.inputFile[:7]=="root://" : os.system('xrdcp '+options.inputFile+' '+outFile)
74 elif options.saveDisk: os.system('mv '+options.inputFile+' '+outFile)
75 else : os.system('cp '+options.inputFile+' '+outFile)
76
77if not options.geoFile:
78 tmp = options.inputFile.replace('ship.','geofile_full.')
79 options.geoFile = tmp.replace('_rec','')
80
81fgeo = ROOT.TFile.Open(options.geoFile)
82geoMat = ROOT.genfit.TGeoMaterialInterface() # if only called in ShipDigiReco -> crash, reason unknown
83
84from ShipGeoConfig import ConfigRegistry
85from rootpyPickler import Unpickler
86#load Shipgeo dictionary
87upkl = Unpickler(fgeo)
88ShipGeo = upkl.load('ShipGeo')
89ecalGeoFile = ShipGeo.ecal.File
90
91h={}
92log={}
93if withHists:
94 ut.bookHist(h,'distu','distance to wire',100,0.,5.)
95 ut.bookHist(h,'distv','distance to wire',100,0.,5.)
96 ut.bookHist(h,'disty','distance to wire',100,0.,5.)
97 ut.bookHist(h,'nmeas','nr measuerements',100,0.,50.)
98 ut.bookHist(h,'chi2','Chi2/DOF',100,0.,20.)
99
100import shipDet_conf
101run = ROOT.FairRunSim()
102run.SetName("TGeant4") # Transport engine
103run.SetOutputFile(ROOT.TMemFile('output', 'recreate')) # Output file
104run.SetUserConfig("g4Config_basic.C") # geant4 transport not used, only needed for creating VMC field
105rtdb = run.GetRuntimeDb()
106# -----Create geometry----------------------------------------------
107modules = shipDet_conf.configure(run,ShipGeo)
108# run.Init()
109fgeo.FAIRGeom
110import geomGeant4
111
112if hasattr(ShipGeo.Bfield,"fieldMap"):
113 fieldMaker = geomGeant4.addVMCFields(ShipGeo, '', True,withVirtualMC = False)
114
115# make global variables
116global_variables.debug = options.Debug
117global_variables.fieldMaker = fieldMaker
118global_variables.pidProton = pidProton
119global_variables.withT0 = options.withT0
120global_variables.realPR = options.realPR
121global_variables.vertexing = vertexing
122global_variables.ecalGeoFile = ecalGeoFile
123global_variables.ShipGeo = ShipGeo
124global_variables.modules = modules
125global_variables.EcalDebugDraw = options.EcalDebugDraw
126global_variables.withNoStrawSmearing = options.withNoStrawSmearing
127global_variables.h = h
128global_variables.log = log
129global_variables.iEvent = 0
130
131# import reco tasks
132import shipDigiReco
133
134SHiP = shipDigiReco.ShipDigiReco(outFile,fgeo)
135options.nEvents = min(SHiP.sTree.GetEntries(),options.nEvents)
136# main loop
137for global_variables.iEvent in range(options.firstEvent, options.nEvents):
138 if global_variables.iEvent % 1000 == 0 or global_variables.debug:
139 print('event ', global_variables.iEvent)
140 rc = SHiP.sTree.GetEvent(global_variables.iEvent)
141 SHiP.digitize()
142 SHiP.reconstruct()
143 # memory monitoring
144 # mem_monitor()
145# end loop over events
146SHiP.finish()
mem_monitor()
Definition ShipReco.py:10
addVMCFields(shipGeo, controlFile='', verbose=False, withVirtualMC=True)
configure(run, ship_geo)
configure(darkphoton=None)