916 log = logging.getLogger(
"FCALDistEtaShowerLib::truncate()")
918 for eta,etabin
in self.
library.items():
919 for dist,distbin
in etabin.items():
920 log.info(
"Number of showers in %s %s is %d",str(eta),str(dist),len(distbin))
921 for storedShower
in distbin :
922 showers += [(eta, dist, storedShower)]
923 log.info(
"total number of showers: %d", len(showers))
925 log.info(
"will not remove from eta-dist bins with less then %d showers", nShowersMin)
926 if len(showers) <= truncate :
927 log.warning(
"Size of the library is already less: %d < %d",truncate,len(showers))
929 from random
import randint
930 while (len(showers) > truncate) :
931 rand = randint(0,len(showers)-1)
932 if len(self.
library[showers[rand][0]][showers[rand][1]]) < nShowersMin:
934 self.
library[showers[rand][0]][showers[rand][1]].remove(showers[rand][2])
1003 log = logging.getLogger(
"FCALDistEtaShowerLib::readFromFile()")
1004 from ROOT
import TFile
1006 tfile = TFile(filename)
1008 ver = int(tfile.Get(
"version").GetVal())
1010 print (
"Not an FCALDistEtaEnergyLib: Broken file")
1015 print (
"Not an FCALDistEtaEnergyLib")
1018 meta = tfile.Get(
"meta")
1019 libr = tfile.Get(
"library")
1024 self.
release=str(event.release)
1026 self.
geant=str(event.geantVersion)
1027 self.
phys=str(event.physicsList)
1028 self.
comment=str(event.comment)
1034 log.debug(
"dector: %s", str(event.detector))
1035 log.debug(
"particle: %s", str(event.particle))
1036 log.debug(
"release: %s", str(event.release))
1037 log.debug(
"geometry: %s", str(event.geometry))
1038 log.debug(
"geant ver: %s", str(event.geantVersion))
1039 log.debug(
"physList: %s", str(event.physicsList))
1040 log.debug(
"comment: %s", str(event.comment))
1043 log.debug(
"-------")
1044 log.debug(
"x=%f, y=%f, z=%f, e=%f",event.x,event.y,event.z,event.e)
1045 log.debug(
"beginnnig ev loop. lastShower: %s",str(lastShower))
1046 log.debug(
"beginnnig ev loop. state: %s",str(state))
1049 log.debug(
"in state=-1")
1056 log.debug(
"in state=0")
1057 log.debug(
"x=distsInCurEta, y=curEta")
1059 distsInCurEta = event.x
1060 curEta = round(event.y,4)
1062 if (distsInCurEta > 0) :
1065 log.debug(
"in state=1")
1066 log.debug(
"x=showersInCurDist, y=curDist")
1068 showersInCurDist = event.x
1069 curDist = round(event.y,4)
1070 self.
library[curEta][curDist] = []
1072 if (distsInCurEta == 0) :
1074 if (showersInCurDist > 0) :
1082 log.debug(
"in state=2")
1083 log.debug(
"x=hitsInCurShower, y=curShower.rSize, z=curShower.zSize, e=curShower.genEnergy")
1085 hitsInCurShower = event.x
1089 showersInCurDist -= 1
1090 if (showersInCurDist == 0) :
1093 curShower.egen = genEnergy
1094 curShower.rsize = rSize
1095 curShower.zsize = zSize
1097 if (hitsInCurShower > 0) :
1100 log.debug(
"Appending shower to lib pos %s %s",curEta,curDist)
1102 self.
library[curEta][curDist].append(curShower)
1112 log.debug(
"in state=3")
1113 log.debug(
"x=hit.x, y=hit.y, z=hit.z, e=hit.e")
1120 hit.time = event.time
1121 curShower.shower.append(hit)
1122 hitsInCurShower -= 1
1123 if (hitsInCurShower == 0) :
1124 log.debug(
"Appending shower+hit to lib pos %s %s",curEta,curDist)
1126 self.
library[curEta][curDist].append(curShower)
1137 log.debug(
"ending ev loop. lastShower: %s", lastShower)
1138 log.debug(
"ending ev loop. state %s", state)
1139 if log.root.level == logging.DEBUG:
1140 input(
"Continue? Press Enter.")
1144 print (
"FILE CORRUPTED!!")
1148 from ROOT
import TFile,TTree,TParameter
1149 from ROOT
import gROOT, addressof
1151 "struct MyMetaStruct {\
1152 Char_t detector[40];\
1153 Char_t release[40];\
1154 Char_t geometry[40];\
1157 Char_t comment[400];\
1160 from ROOT
import MyMetaStruct
1169 from ROOT
import MyStruct
1171 tfile = TFile(filename,
"RECREATE")
1173 ver = TParameter(int)(
"version",5)
1174 ver.Write(
"version")
1179 mmstruct = MyMetaStruct()
1181 mmstruct.detector =
"%s" % (str(self.
detector))
1182 mmstruct.particle = int(self.
particle)
1183 mmstruct.release =
"%s" % (str(self.
release))
1184 mmstruct.geometry =
"%s" % (str(self.
geometry))
1185 mmstruct.geant =
"%s" % (str(self.
geant))
1186 mmstruct.phys =
"%s" % (str(self.
phys))
1187 mmstruct.comment =
"%s" % (str(self.
comment))
1189 meta.Branch(
"detector",addressof(mmstruct,
"detector"),
"detector/C")
1190 meta.Branch(
"particle",addressof(mmstruct,
"particle"),
"particle/I")
1191 meta.Branch(
"release",addressof(mmstruct,
"release"),
"release/C")
1192 meta.Branch(
"geometry",addressof(mmstruct,
"geometry"),
"geometry/C")
1193 meta.Branch(
"geantVersion",addressof(mmstruct,
"geant"),
"geantVersion/C")
1194 meta.Branch(
"physicsList",addressof(mmstruct,
"phys"),
"physicsList/C")
1195 meta.Branch(
"comment",addressof(mmstruct,
"comment"),
"physicsList/C")
1199 mstruct = MyStruct()
1201 libr.Branch(
"x",addressof(mstruct,
"x"),
"x/F")
1202 libr.Branch(
"y",addressof(mstruct,
"y"),
"y/F")
1203 libr.Branch(
"z",addressof(mstruct,
"z"),
"z/F")
1204 libr.Branch(
"e",addressof(mstruct,
"e"),
"e/F")
1205 libr.Branch(
"time",addressof(mstruct,
"time"),
"time/F")
1207 etas = sorted(self.
library.keys())
1211 mstruct.z = self.
step
1217 dists = sorted(self.
library[eta].keys())
1218 mstruct.x = len(self.
library[eta])
1225 mstruct.x = len(self.
library[eta][dist])
1231 self.
library[eta][dist].
sort(key=
lambda x: x.egen)
1232 for storedShower
in self.
library[eta][dist] :
1233 mstruct.x = len(storedShower.shower)
1234 mstruct.y = storedShower.rsize
1235 mstruct.z = storedShower.zsize
1236 mstruct.e = storedShower.egen
1239 for hit
in storedShower.shower:
1244 mstruct.time = hit.time
1247 libr.Write(
"library")
1250 print (
"VERSION: FCALDistEtaEnergyLib",
"PARTICLE:",self.
particle,
"DETECTOR:",self.
detector)
1254 ebins = [1,2,3,4,5,10,20,50,100,200,500,1000]
1255 etas = sorted(self.
library.keys())
1256 print (
"Number of etabins:",str(len(etas)))
1258 for etabin
in self.
library.values():
1259 for distbin
in etabin.values():
1260 fstot +=len(distbin)
1261 print (
"Number of showers:",str(fstot))
1262 print (
"-"*(13+len(ebins)*8))
1263 infostr =
"|dists|ebins|"
1265 infostr += (
"<%d" %ebin).rjust(7)
1268 print (
"-"*(13+len(ebins)*8))
1270 dists = sorted(self.
library[eta].keys())
1271 for distlow,disthigh
in zip(dists,(dists[1:] + [4.5])) :
1282 for shower
in self.
library[eta][distlow] :
1283 if (shower.egen <= ebin)
and (shower.egen > prevebin) :
1285 egenshow = shower.egen
1287 for hit
in shower.shower :
1289 erec[ebin] += erecshow
1290 egen[ebin] += egenshow
1291 hits[ebin] += len(shower.shower)
1292 if (count[ebin] > 0) :
1293 hits[ebin] /= count[ebin]
1296 infostr+= str(eta).rjust(10)
1299 infostr2+= str(round(distlow,5)).rjust(7)
1302 infostr3+= str(round(disthigh,3)).rjust(8)
1305 infostr+= str(count[ebin]).rjust(7)
1306 if (egen[ebin] > 0) :
1307 infostr2+= (
"%.2f" %(hits[ebin])).rjust(7)
1308 infostr3+= (
"%.5f" %(erec[ebin]/egen[ebin])).rjust(7)
1310 infostr2+= (
"%.2f" %(hits[ebin])).rjust(7)
1311 infostr3+=
"0.0".rjust(7)
1318 print (
"-"*(12+len(ebins)*8))
1320 from ROOT
import TH3F
1321 from math
import sqrt,copysign,log10
1322 hits = TH3F(
"HITS",
"Hits Distrib",50,1,1000,101,-300,300,100,0,500)
1323 containmentZ = TH3F(
"CONTZ",
"ContZ Distrib",50,1,1000,101,-300,300,100,0,500)
1324 containmentR = TH3F(
"CONTR",
"ContR Distrib",50,1,1000,101,-300,300,100,0,500)
1326 etas = sorted(self.
library.keys())
1328 dists = sorted(self.
library[eta].keys())
1329 for distlow,disthigh
in zip(dists,(dists[1:] + [4.5])) :
1330 for storedShower
in self.
library[eta][distlow] :
1331 containmentR.Fill(log10(storedShower.egen)*333,storedShower.rsize,storedShower.zsize,10)
1332 containmentR.Fill(log10(storedShower.egen)*333,-storedShower.rsize,storedShower.zsize,10)
1333 containmentZ.Fill(log10(storedShower.egen)*333,0,storedShower.zsize,10)
1334 for hit
in storedShower.shower :
1335 hits.Fill(log10(storedShower.egen)*333,copysign(sqrt(hit.x*hit.x + hit.y*hit.y),hit.x),hit.z)
1337 return hits,containmentZ,containmentR