SND@LHC Software
Loading...
Searching...
No Matches
MufluxDigi.MufluxDigi Class Reference

Public Member Functions

 __init__ (self, fout)
 
 digitize (self)
 
 digitizeMuonTagger (self, fake_clustering=False)
 
 digitizeMufluxSpectrometer (self)
 
 finish (self)
 

Public Attributes

 iEvent
 
 fn
 
 sTree
 
 header
 
 eventHeader
 
 digiMufluxSpectrometer
 
 digiMufluxSpectrometerBranch
 
 digiLateMufluxSpectrometer
 
 digiLateMufluxSpectrometerBranch
 
 digiMuonTagger
 
 digiMuonTaggerBranch
 
 PDG
 
 v_drift
 
 sigma_spatial
 
 viewangle
 
 gMan
 

Detailed Description

Definition at line 52 of file MufluxDigi.py.

Constructor & Destructor Documentation

◆ __init__()

MufluxDigi.MufluxDigi.__init__ (   self,
  fout 
)

Definition at line 54 of file MufluxDigi.py.

54 def __init__(self,fout):
55
56 self.iEvent = 0
57
58 outdir=os.getcwd()
59 outfile=outdir+"/"+fout
60 self.fn = ROOT.TFile(fout,'update')
61 self.sTree = self.fn.cbmsim
62
63 # event header
64 self.header = ROOT.FairEventHeader()
65 self.eventHeader = self.sTree.Branch("ShipEventHeader",self.header,32000,1)
66 self.digiMufluxSpectrometer = ROOT.TClonesArray("MufluxSpectrometerHit")
67 self.digiMufluxSpectrometerBranch = self.sTree.Branch("Digi_MufluxSpectrometerHits",self.digiMufluxSpectrometer,32000,1)
68 self.digiLateMufluxSpectrometer = ROOT.TClonesArray("MufluxSpectrometerHit")
69 self.digiLateMufluxSpectrometerBranch = self.sTree.Branch("Digi_LateMufluxSpectrometerHits",self.digiMufluxSpectrometer,32000,1)
70 #muon taggger
71 if self.sTree.GetBranch("MuonTaggerPoint"):
72 self.digiMuonTagger = ROOT.TClonesArray("MuonTaggerHit")
73 self.digiMuonTaggerBranch = self.sTree.Branch("Digi_MuonTaggerHits", self.digiMuonTagger, 32000, 1)
74 # setup random number generator
75 ROOT.gRandom.SetSeed()
76 self.PDG = ROOT.TDatabasePDG.Instance()
77 # for the digitizing and reconstruction step
78 self.v_drift = global_variables.ShipGeo['MufluxSpectrometer']['v_drift']
79 self.sigma_spatial = global_variables.ShipGeo['MufluxSpectrometer']['sigma_spatial']
80 self.viewangle = global_variables.ShipGeo['MufluxSpectrometer']['ViewvAngle']
81
82 self.gMan = ROOT.gGeoManager
83

Member Function Documentation

◆ digitize()

MufluxDigi.MufluxDigi.digitize (   self)

Definition at line 84 of file MufluxDigi.py.

84 def digitize(self):
85
86 self.sTree.t0 = ROOT.gRandom.Rndm()*1*u.microsecond
87 self.header.SetEventTime( self.sTree.t0 )
88 self.header.SetRunId( self.sTree.MCEventHeader.GetRunID() )
89 self.header.SetMCEntryNumber( self.sTree.MCEventHeader.GetEventID() ) # counts from 1
90 self.eventHeader.Fill()
91 self.digiMufluxSpectrometer.Delete()
92 self.digiLateMufluxSpectrometer.Delete()
93 self.digitizeMufluxSpectrometer()
94 self.digiMufluxSpectrometerBranch.Fill()
95 self.digiLateMufluxSpectrometerBranch.Fill()
96 self.digiMuonTagger.Delete() # produces a lot of warnings, rpc station 0
97 self.digitizeMuonTagger()
98 self.digiMuonTaggerBranch.Fill()
99

◆ digitizeMufluxSpectrometer()

MufluxDigi.MufluxDigi.digitizeMufluxSpectrometer (   self)

Definition at line 180 of file MufluxDigi.py.

180 def digitizeMufluxSpectrometer(self):
181
182 # digitize FairSHiP MC hits
183 index = 0
184 hitsPerDetId = {}
185
186 for aMCPoint in self.sTree.MufluxSpectrometerPoint:
187 aHit = ROOT.MufluxSpectrometerHit(aMCPoint,self.sTree.t0)
188 aHit.setValid()
189 if index>0 and self.digiMufluxSpectrometer.GetSize() == index: self.digiMufluxSpectrometer.Expand(index+1000)
190 self.digiMufluxSpectrometer[index]=aHit
191 detID = aHit.GetDetectorID()
192 if detID in hitsPerDetId:
193 if self.digiMufluxSpectrometer[hitsPerDetId[detID]].tdc() > aHit.tdc():
194 # second hit with smaller tdc
195 self.digiMufluxSpectrometer[hitsPerDetId[detID]].setInvalid()
196 hitsPerDetId[detID] = index
197 else:
198 hitsPerDetId[detID] = index
199 if aMCPoint.GetDetectorID() in deadChannelsForMC: aHit.setInvalid()
200 station = int(aMCPoint.GetDetectorID()//10000000)
201 if ROOT.gRandom.Rndm() < ineffiency[station]: aHit.setInvalid()
202 index+=1
203

◆ digitizeMuonTagger()

MufluxDigi.MufluxDigi.digitizeMuonTagger (   self,
  fake_clustering = False 
)

Definition at line 100 of file MufluxDigi.py.

100 def digitizeMuonTagger(self, fake_clustering=False):
101
102 station = 0
103 strip = 0
104 nav = ROOT.gGeoManager.GetCurrentNavigator()
105 DetectorID = set() # set of detector ids - already deduplicated
106 for MuonTaggerHit in self.sTree.MuonTaggerPoint:
107 # getting rpc nodes, name and matrix
108 detID = MuonTaggerHit.GetDetectorID()
109 s = str(detID//10000)
110 nav.cd('/VMuonBox_1/VSensitive'+s+'_'+s)
111 # translation from top to MuonBox_1
112 point = array('d', [
113 MuonTaggerHit.GetX(),
114 MuonTaggerHit.GetY(),
115 MuonTaggerHit.GetZ(), 1])
116 # translation to local frame
117 point_local = array('d', [0, 0, 0, 1])
118 nav.MasterToLocal(point, point_local)
119
120 xcoord = point_local[0]
121 ycoord = point_local[1]
122
123 # identify individual rpcs
124 station = detID//10000
125 if station not in range(1, 6): # limiting the range of rpcs
126 print("WARNING: Invalid RPC number, something's wrong with the geometry ",station)
127
128 # calculate strip
129 # x gives vertical direction
130 direction = 1
131 strip = StripX(xcoord)
132 if not strip:
133 continue
134 # sampling number of strips around the exact strip for emulating clustering
135 detectorid = station*10000 + direction*1000 + strip
136 DetectorID.add(detectorid)
137 if fake_clustering:
138 s = ROOT.gRandom.Poisson(2)
139 if ROOT.gRandom.Rndm() < 0.5: strip = strip - int(s/2)
140 else: strip = strip + int(s/2)
141 for i in range(0, s):
142 detectorid = station*10000 + direction*1000 + strip + i
143 DetectorID.add(detectorid)
144
145 # y gives horizontal direction
146 direction = 0
147 strip = StripY(ycoord)
148 if not strip:
149 continue
150 # sampling number of strips around the exact strip for emulating clustering
151 detectorid = station*10000 + direction*1000 + strip
152 DetectorID.add(detectorid)
153 if fake_clustering:
154 s = ROOT.gRandom.Poisson(2)
155 if ROOT.gRandom.Rndm() < 0.5: strip = strip - int(s/2)
156 else: strip = strip + int(s/2)
157 for i in range(0, s):
158 detectorid = station*10000 + direction*1000 + strip + i
159 DetectorID.add(detectorid)
160
161 self.digiMuonTagger.Expand(len(DetectorID))
162 for index, detID in enumerate(DetectorID):
163 hit = ROOT.MuonTaggerHit(detID, 0)
164 self.digiMuonTagger[index] = hit
165
166 if fake_clustering:
167 # cluster size loop - plotting the cluster size distribution
168 cluster_size = list()
169 DetectorID_list = list(DetectorID) # turn set into list to allow indexing
170 DetectorID_list.sort() # sorting the list
171 if len(DetectorID_list) > 1:
172 clusters = [[DetectorID_list[0]]]
173 for x in DetectorID_list[1:]:
174 if abs(x - clusters[-1][-1]) <= 1:
175 clusters[-1].append(x)
176 else:
177 clusters.append([x])
178 cluster_size = [len(x) for x in clusters]
179
set(INCLUDE_DIRECTORIES ${SYSTEM_INCLUDE_DIRECTORIES} ${VMC_INCLUDE_DIRS} ${CMAKE_SOURCE_DIR}/shipdata ${CMAKE_SOURCE_DIR}/shipLHC ${CMAKE_SOURCE_DIR}/analysis/cuts ${CMAKE_SOURCE_DIR}/analysis/tools ${FMT_INCLUDE_DIR}) include_directories($
Definition CMakeLists.txt:1

◆ finish()

MufluxDigi.MufluxDigi.finish (   self)

Definition at line 204 of file MufluxDigi.py.

204 def finish(self):
205 print('finished writing tree')
206 self.sTree.Write()

Member Data Documentation

◆ digiLateMufluxSpectrometer

MufluxDigi.MufluxDigi.digiLateMufluxSpectrometer

Definition at line 68 of file MufluxDigi.py.

◆ digiLateMufluxSpectrometerBranch

MufluxDigi.MufluxDigi.digiLateMufluxSpectrometerBranch

Definition at line 69 of file MufluxDigi.py.

◆ digiMufluxSpectrometer

MufluxDigi.MufluxDigi.digiMufluxSpectrometer

Definition at line 66 of file MufluxDigi.py.

◆ digiMufluxSpectrometerBranch

MufluxDigi.MufluxDigi.digiMufluxSpectrometerBranch

Definition at line 67 of file MufluxDigi.py.

◆ digiMuonTagger

MufluxDigi.MufluxDigi.digiMuonTagger

Definition at line 72 of file MufluxDigi.py.

◆ digiMuonTaggerBranch

MufluxDigi.MufluxDigi.digiMuonTaggerBranch

Definition at line 73 of file MufluxDigi.py.

◆ eventHeader

MufluxDigi.MufluxDigi.eventHeader

Definition at line 65 of file MufluxDigi.py.

◆ fn

MufluxDigi.MufluxDigi.fn

Definition at line 60 of file MufluxDigi.py.

◆ gMan

MufluxDigi.MufluxDigi.gMan

Definition at line 82 of file MufluxDigi.py.

◆ header

MufluxDigi.MufluxDigi.header

Definition at line 64 of file MufluxDigi.py.

◆ iEvent

MufluxDigi.MufluxDigi.iEvent

Definition at line 56 of file MufluxDigi.py.

◆ PDG

MufluxDigi.MufluxDigi.PDG

Definition at line 76 of file MufluxDigi.py.

◆ sigma_spatial

MufluxDigi.MufluxDigi.sigma_spatial

Definition at line 79 of file MufluxDigi.py.

◆ sTree

MufluxDigi.MufluxDigi.sTree

Definition at line 61 of file MufluxDigi.py.

◆ v_drift

MufluxDigi.MufluxDigi.v_drift

Definition at line 78 of file MufluxDigi.py.

◆ viewangle

MufluxDigi.MufluxDigi.viewangle

Definition at line 80 of file MufluxDigi.py.


The documentation for this class was generated from the following file: