def readFromRootFile(self,filename,TupleMeanStd, weighter): #the first part is standard, no changes needed from preprocessing import MeanNormApply, MeanNormZeroPad, MeanNormZeroPadParticles, ZeroPadParticles import numpy import ROOT fileTimeOut(filename,120) #give eos 2 minutes to recover rfile = ROOT.TFile(filename) tree = rfile.Get("deepntuplizer/tree") self.nsamples=tree.GetEntries() #the definition of what to do with the branches # those are the global branches (jet pt etc) # they should be just glued to each other in one vector # and zero padded (and mean subtracted and normalised) #x_global = MeanNormZeroPad(filename,TupleMeanStd, # [self.branches[0]], # [self.branchcutoffs[0]],self.nsamples) # the second part (the pf candidates) should be treated particle wise # an array with (njets, nparticles, nproperties) is created x_glb = ZeroPadParticles(filename,TupleMeanStd, self.branches[0], self.branchcutoffs[0],self.nsamples) x_db = ZeroPadParticles(filename,TupleMeanStd, self.branches[1], self.branchcutoffs[1],self.nsamples) x_cpf = ZeroPadParticles(filename,TupleMeanStd, self.branches[2], self.branchcutoffs[2],self.nsamples) x_sv = ZeroPadParticles(filename,TupleMeanStd, self.branches[3], self.branchcutoffs[3],self.nsamples) # now, some jets are removed to avoid pt and eta biases Tuple = self.readTreeFromRootToTuple(filename) #if self.remove: # jets are removed until the shapes in eta and pt are the same as # the truth class 'fj_isNonBB' notremoves=weighter.createNotRemoveIndices(Tuple) #undef=Tuple[self.undefTruth] #notremoves-=undef if self.weight: weights=weighter.getJetWeights(Tuple) elif self.remove: weights=notremoves else: print('neither remove nor weight') weights=numpy.empty(self.nsamples) weights.fill(1.) # create all collections: #truthtuple = Tuple[self.truthclasses] alltruth=self.reduceTruth(Tuple) undef=numpy.sum(alltruth,axis=1) weights=weights[undef > 0] x_glb=x_glb[undef > 0] x_db=x_db[undef > 0] x_sv=x_sv[undef > 0] x_cpf=x_cpf[undef > 0] alltruth=alltruth[undef > 0] if self.remove: notremoves=notremoves[undef > 0] # remove the entries to get same jet shapes if self.remove: print('remove') weights=weights[notremoves > 0] x_glb=x_glb[notremoves > 0] x_db=x_db[notremoves > 0] x_sv=x_sv[notremoves > 0] x_cpf=x_cpf[notremoves > 0] alltruth=alltruth[notremoves > 0] #newnsamp=x_global.shape[0] newnsamp=x_glb.shape[0] print('reduced content to ', int(float(newnsamp)/float(self.nsamples)*100),'%') self.nsamples = newnsamp # fill everything self.w=[weights] self.x=[x_db,x_cpf,x_sv] self.z=[x_glb] self.y=[alltruth]
def readFromRootFile(self,filename,TupleMeanStd, weighter): #the first part is standard, no changes needed from preprocessing import MeanNormApply, MeanNormZeroPad, MeanNormZeroPadParticles, ZeroPadParticles import numpy import ROOT fileTimeOut(filename,120) #give eos 2 minutes to recover rfile = ROOT.TFile(filename) tree = rfile.Get("deepntuplizer/tree") self.nsamples=tree.GetEntries() x_glb = ZeroPadParticles(filename,TupleMeanStd, self.branches[0], self.branchcutoffs[0],self.nsamples) x_db = MeanNormZeroPadParticles(filename,TupleMeanStd, self.branches[1], self.branchcutoffs[1],self.nsamples) # now, some jets are removed to avoid pt and eta biases Tuple = self.readTreeFromRootToTuple(filename) #if self.remove: # jets are removed until the shapes in eta and pt are the same as # the truth class 'fj_isNonBB' notremoves=weighter.createNotRemoveIndices(Tuple) if self.weight: weights=weighter.getJetWeights(Tuple) elif self.remove: weights=notremoves else: print('neither remove nor weight') weights=numpy.empty(self.nsamples) weights.fill(1.) # create all collections: #truthtuple = Tuple[self.truthclasses] alltruth=self.reduceTruth(Tuple) undef=numpy.sum(alltruth,axis=1) weights=weights[undef > 0] x_glb=x_glb[undef > 0] x_db=x_db[undef > 0] alltruth=alltruth[undef > 0] notremoves=notremoves[undef > 0] undef=Tuple['fj_isNonCC'] * Tuple['sample_isQCD'] * Tuple['fj_isQCD'] + Tuple['fj_isCC'] * Tuple['fj_isH'] # remove the entries to get same jet shapes if self.remove: print('remove') weights=weights[notremoves > 0] x_glb=x_glb[notremoves > 0] x_db=x_db[notremoves > 0] alltruth=alltruth[notremoves > 0] newnsamp=x_glb.shape[0] print('reduced content to ', int(float(newnsamp)/float(self.nsamples)*100),'%') self.nsamples = newnsamp # fill everything self.w=[weights] self.x=[x_db] self.z=[x_glb] self.y=[alltruth]