diff --git a/distribsForHNLandBG_byEvent.py b/distribsForHNLandBG_byEvent.py index fa7562e..37d3655 100755 --- a/distribsForHNLandBG_byEvent.py +++ b/distribsForHNLandBG_byEvent.py @@ -106,7 +106,8 @@ nu = fnu.Get('t') nu_geo = tools.searchForNodes3_xyz_dict(datafolder + '/nuBgGeo/geofile_full.10.0.Genie-TGeant4.root')#neutrino77.root') -fdp = r.TFile(datafolder + '/../HNLasDP/ShipAna_newGen.root') +#fdp = r.TFile(datafolder + '/../HNLasDP/ShipAna_newGen.root') +fdp = r.TFile(datafolder + '/../HNLasDP/ShipAna_newGen_betterTracks.root') dp = fdp.Get('t') dp_geo = tools.searchForNodes3_xyz_dict(datafolder + '/../HNLasDP/geofile_full.10.0.Pythia8-TGeant4.root') @@ -596,6 +597,14 @@ cut = " Sum$(%sIP0 < %s) &&"%(noB, th)+" Sum$(numberOfHitLSSegments == 0) && Sum$(strawVetoAny%s==0) && Sum$(upstreamVetoAny%s==0) && Sum$(RPCany%s==0) "%(opt, opt, opt) string = "Event not vetoed" return cut, string + def notVetoedNoRPC(self, th, noB=None, opt=None): + if not noB: + noB = self.noB + if not opt: + opt = self.opt + cut = " Sum$(%sIP0 < %s) &&"%(noB, th)+" Sum$(numberOfHitLSSegments == 0) && Sum$(strawVetoAny%s==0) && Sum$(upstreamVetoAny%s==0) "%(opt, opt) + string = "Event not vetoed (no RPC)" + return cut, string def daughtersP(self, th, noB=None): if not noB: noB = self.noB @@ -616,67 +625,193 @@ tc.nu = True zmin = geo['Veto_5']['z']['pos']+geo['Veto_5']['z']['dim'] zmax = geo['Tr1_1']['z']['pos']-geo['Tr1_1']['z']['dim'] - if (study == 'pimu') or (study == 'fakedp'): + if (study == 'pimu') or (study == 'fakedp') or (study == 'nu'): cuts = [ tc.recoed()[0], tc.notVetoed(1000.)[0], tc.redChi2(5.)[0], tc.ndf(25)[0], tc.fiducial(zmin, zmax, 250., 500.)[0], tc.goodtracks()[0], tc.ecal()[0], tc.muon1(1)[0], tc.muon2(1)[0], tc.doca(30.)[0], tc.ip(250.)[0] ] cutnames = [ tc.recoed()[1], tc.notVetoed(1000.)[1], tc.redChi2(5.)[1], tc.ndf(25)[1], tc.fiducial(zmin, zmax, 250., 500.)[1], tc.goodtracks()[1], tc.ecal()[1], tc.muon1(1)[1], tc.muon2(1)[1], tc.doca(30.)[1], tc.ip(250.)[1] ] - if answers: + if answers == 1: # answering to referees questions - cuts = [ tc.recoed()[0], - tc.fiducial(zmin, zmax, 250., 500.)[0], tc.goodtracks()[0], tc.notVetoed(1000.)[0], - tc.daughtersP(1.5)[0], tc.redChi2(5.)[0], tc.ndf(25)[0], tc.doca(1.)[0], tc.ip(10.)[0], - tc.ecal()[0], tc.muon1(1)[0], tc.muon2(1)[0] ] - cutnames = [ tc.recoed()[1], - tc.fiducial(zmin, zmax, 250., 500.)[1], tc.goodtracks()[1], tc.notVetoed(1000.)[1], - tc.daughtersP(1.5)[1], tc.redChi2(5.)[1], tc.ndf(25)[1], tc.doca(1.)[1], tc.ip(10.)[1], - tc.ecal()[1], tc.muon1(1)[1], tc.muon2(1)[1] ] - if answers == 2: - # answering to referees questions (NO VETO) - cuts = [ tc.recoed()[0], - tc.fiducial(zmin, zmax, 250., 500.)[0], tc.goodtracks()[0], - tc.daughtersP(1.5)[0], tc.redChi2(5.)[0], tc.ndf(25)[0], tc.doca(1.)[0], tc.ip(10.)[0], - tc.ecal()[0], tc.muon1(1)[0], tc.muon2(1)[0] ] - cutnames = [ tc.recoed()[1], - tc.fiducial(zmin, zmax, 250., 500.)[1], tc.goodtracks()[1], - tc.daughtersP(1.5)[1], tc.redChi2(5.)[1], tc.ndf(25)[1], tc.doca(1.)[1], tc.ip(10.)[1], - tc.ecal()[1], tc.muon1(1)[1], tc.muon2(1)[1] ] + cuts = [ tc.recoed()[0], tc.nRecoed(1)[0], + tc.fiducial(zmin + 20., zmax - 20., 249., 499.)[0], tc.goodtracks()[0], + tc.ndf(25)[0], tc.doca(1.)[0], tc.redChi2(5.)[0], tc.daughtersP(1.)[0], tc.ip(10.)[0], + tc.notVetoed(1000.)[0], tc.muon1(1)[0], tc.muon2(1)[0] ] + cutnames = [ tc.recoed()[1], tc.nRecoed(1)[1], + tc.fiducial(zmin + 20., zmax - 20., 249., 499.)[1], tc.goodtracks()[1], + tc.ndf(25)[1], tc.doca(1.)[1], tc.redChi2(5.)[1], tc.daughtersP(1.)[1], tc.ip(10.)[1], + tc.notVetoed(1000.)[1], tc.muon1(1)[1], tc.muon2(1)[1] ] + elif answers == 2: + # answering to referees questions (NO RPC VETO) + cuts = [ tc.recoed()[0], tc.nRecoed(1)[0], + tc.fiducial(zmin + 20., zmax - 20., 249., 499.)[0], tc.goodtracks()[0], + tc.ndf(25)[0], tc.doca(1.)[0], tc.redChi2(5.)[0], tc.daughtersP(1.)[0], tc.ip(10.)[0], + tc.notVetoedNoRPC(1000.)[0], tc.muon1(1)[0], tc.muon2(1)[0] ] + cutnames = [ tc.recoed()[1], tc.nRecoed(1)[1], + tc.fiducial(zmin + 20., zmax - 20., 249., 499.)[1], tc.goodtracks()[1], + tc.ndf(25)[1], tc.doca(1.)[1], tc.redChi2(5.)[1], tc.daughtersP(1.)[1], tc.ip(10.)[1], + tc.notVetoedNoRPC(1000.)[1], tc.muon1(1)[1], tc.muon2(1)[1] ] + elif answers == 3: + # answering to referees questions (IP < 2.5 m) + cuts = [ tc.recoed()[0], tc.nRecoed(1)[0], + tc.fiducial(zmin + 20., zmax - 20., 249., 499.)[0], tc.goodtracks()[0], + tc.ndf(25)[0], tc.doca(1.)[0], tc.redChi2(5.)[0], tc.daughtersP(1.)[0], tc.ip(250.)[0], + tc.notVetoed(1000.)[0], tc.muon1(1)[0], tc.muon2(1)[0] ] + cutnames = [ tc.recoed()[1], tc.nRecoed(1)[1], + tc.fiducial(zmin + 20., zmax - 20., 249., 499.)[1], tc.goodtracks()[1], + tc.ndf(25)[1], tc.doca(1.)[1], tc.redChi2(5.)[1], tc.daughtersP(1.)[1], tc.ip(250.)[1], + tc.notVetoed(1000.)[1], tc.muon1(1)[1], tc.muon2(1)[1] ] + elif answers == 4: + # answering to referees questions (IP < 2.5 m) (NO RPC VETO) + cuts = [ tc.recoed()[0], tc.nRecoed(1)[0], + tc.fiducial(zmin + 20., zmax - 20., 249., 499.)[0], tc.goodtracks()[0], + tc.ndf(25)[0], tc.doca(1.)[0], tc.redChi2(5.)[0], tc.daughtersP(1.)[0], tc.ip(250.)[0], + tc.notVetoedNoRPC(1000.)[0], tc.muon1(1)[0], tc.muon2(1)[0] ] + cutnames = [ tc.recoed()[1], tc.nRecoed(1)[1], + tc.fiducial(zmin + 20., zmax - 20., 249., 499.)[1], tc.goodtracks()[1], + tc.ndf(25)[1], tc.doca(1.)[1], tc.redChi2(5.)[1], tc.daughtersP(1.)[1], tc.ip(250.)[1], + tc.notVetoedNoRPC(1000.)[1], tc.muon1(1)[1], tc.muon2(1)[1] ] - elif (study == 'nu'): - cuts = [ tc.recoed()[0], tc.notVetoed(1000.)[0], tc.redChi2(5.)[0], tc.ndf(25)[0], tc.fiducial(zmin, zmax, 250., 500.)[0], tc.goodtracks()[0], - tc.ecal()[0], tc.muon1(1)[0], tc.muon2(1)[0], tc.doca(30.)[0], tc.ip(250.)[0] ] - cutnames = [ tc.recoed()[1], tc.notVetoed(1000.)[1], tc.redChi2(5.)[1], tc.ndf(25)[1], tc.fiducial(zmin, zmax, 250., 500.)[1], tc.goodtracks()[1], - tc.ecal()[1], tc.muon1(1)[1], tc.muon2(1)[1], tc.doca(30.)[1], tc.ip(250.)[1] ] - if answers: - # answering to referees questions - cuts = [ tc.recoed()[0], - tc.fiducial(zmin, zmax, 250., 500.)[0], tc.goodtracks()[0], tc.notVetoed(1000.)[0], - tc.daughtersP(1.5)[0], tc.redChi2(5.)[0], tc.ndf(25)[0], tc.doca(1.)[0], tc.ip(10.)[0], - tc.ecal()[0], tc.muon1(1)[0], tc.muon2(1)[0] ] - cutnames = [ tc.recoed()[1], - tc.fiducial(zmin, zmax, 250., 500.)[1], tc.goodtracks()[1], tc.notVetoed(1000.)[1], - tc.daughtersP(1.5)[1], tc.redChi2(5.)[1], tc.ndf(25)[1], tc.doca(1.)[1], tc.ip(10.)[1], - tc.ecal()[1], tc.muon1(1)[1], tc.muon2(1)[1] ] - if answers == 2: - # answering to referees questions (NO VETO) - cuts = [ tc.recoed()[0], - tc.fiducial(zmin, zmax, 250., 500.)[0], tc.goodtracks()[0], - tc.daughtersP(1.5)[0], tc.redChi2(5.)[0], tc.ndf(25)[0], tc.doca(1.)[0], tc.ip(10.)[0], - tc.ecal()[0], tc.muon1(1)[0], tc.muon2(1)[0] ] - cutnames = [ tc.recoed()[1], - tc.fiducial(zmin, zmax, 250., 500.)[1], tc.goodtracks()[1], - tc.daughtersP(1.5)[1], tc.redChi2(5.)[1], tc.ndf(25)[1], tc.doca(1.)[1], tc.ip(10.)[1], - tc.ecal()[1], tc.muon1(1)[1], tc.muon2(1)[1] ] + #elif (study == 'nu'): + # cuts = [ tc.recoed()[0], tc.notVetoed(1000.)[0], tc.redChi2(5.)[0], tc.ndf(25)[0], tc.fiducial(zmin, zmax, 250., 500.)[0], tc.goodtracks()[0], + # tc.ecal()[0], tc.muon1(1)[0], tc.muon2(1)[0], tc.doca(30.)[0], tc.ip(250.)[0] ] + # cutnames = [ tc.recoed()[1], tc.notVetoed(1000.)[1], tc.redChi2(5.)[1], tc.ndf(25)[1], tc.fiducial(zmin, zmax, 250., 500.)[1], tc.goodtracks()[1], + # tc.ecal()[1], tc.muon1(1)[1], tc.muon2(1)[1], tc.doca(30.)[1], tc.ip(250.)[1] ] + # if answers == 1: + # # answering to referees questions + # cuts = [ tc.recoed()[0], + # tc.fiducial(zmin + 20., zmax - 20., 249., 499.)[0], tc.goodtracks()[0], + # tc.ndf(25)[0], tc.doca(1.)[0], tc.redChi2(5.)[0], tc.daughtersP(1.5)[0], tc.ip(10.)[0], + # tc.notVetoed(1000.)[0], tc.nRecoed(1)[0] ] + # cutnames = [ tc.recoed()[1], + # tc.fiducial(zmin + 20., zmax - 20., 249., 499.)[1], tc.goodtracks()[1], + # tc.ndf(25)[1], tc.doca(1.)[1], tc.redChi2(5.)[1], tc.daughtersP(1.5)[1], tc.ip(10.)[1], + # tc.notVetoed(1000.)[1], tc.nRecoed(1)[1] ] + # elif answers == 2: + # # answering to referees questions (NO RPC VETO) + # cuts = [ tc.recoed()[0], + # tc.fiducial(zmin + 20., zmax - 20., 249., 499.)[0], tc.goodtracks()[0], + # tc.ndf(25)[0], tc.doca(1.)[0], tc.redChi2(5.)[0], tc.daughtersP(1.5)[0], tc.ip(10.)[0], + # tc.notVetoedNoRPC(1000.)[0], tc.nRecoed(1)[0] ] + # cutnames = [ tc.recoed()[1], + # tc.fiducial(zmin + 20., zmax - 20., 249., 499.)[1], tc.goodtracks()[1], + # tc.ndf(25)[1], tc.doca(1.)[1], tc.redChi2(5.)[1], tc.daughtersP(1.5)[1], tc.ip(10.)[1], + # tc.notVetoedNoRPC(1000.)[1], tc.nRecoed(1)[1] ] + # elif answers == 3: + # # answering to referees questions (IP < 2.5 m) + # cuts = [ tc.recoed()[0], + # tc.fiducial(zmin + 20., zmax - 20., 249., 499.)[0], tc.goodtracks()[0], + # tc.ndf(25)[0], tc.doca(1.)[0], tc.redChi2(5.)[0], tc.daughtersP(1.5)[0], tc.ip(250.)[0], + # tc.notVetoed(1000.)[0], tc.nRecoed(1)[0] ] + # cutnames = [ tc.recoed()[1], + # tc.fiducial(zmin + 20., zmax - 20., 249., 499.)[1], tc.goodtracks()[1], + # tc.ndf(25)[1], tc.doca(1.)[1], tc.redChi2(5.)[1], tc.daughtersP(1.5)[1], tc.ip(250.)[1], + # tc.notVetoed(1000.)[1], tc.nRecoed(1)[1] ] + # elif answers == 4: + # # answering to referees questions (IP < 2.5 m) (NO RPC VETO) + # cuts = [ tc.recoed()[0], + # tc.fiducial(zmin + 20., zmax - 20., 249., 499.)[0], tc.goodtracks()[0], + # tc.ndf(25)[0], tc.doca(1.)[0], tc.redChi2(5.)[0], tc.daughtersP(1.5)[0], tc.ip(250.)[0], + # tc.notVetoedNoRPC(1000.)[0], tc.nRecoed(1)[0] ] + # cutnames = [ tc.recoed()[1], + # tc.fiducial(zmin + 20., zmax - 20., 249., 499.)[1], tc.goodtracks()[1], + # tc.ndf(25)[1], tc.doca(1.)[1], tc.redChi2(5.)[1], tc.daughtersP(1.5)[1], tc.ip(250.)[1], + # tc.notVetoedNoRPC(1000.)[1], tc.nRecoed(1)[1] ] + + elif (study == 'mumunu'): cuts = [ tc.recoed()[0], tc.notVetoed(1000.)[0], tc.redChi2(5.)[0], tc.ndf(25)[0], tc.fiducial(zmin, zmax, 250., 500.)[0], tc.goodtracks()[0], tc.muon1(2)[0], tc.muon2(2)[0], tc.doca(30.)[0], tc.ip(250.)[0] ] cutnames = [ tc.recoed()[1], tc.notVetoed(1000.)[1], tc.redChi2(5.)[1], tc.ndf(25)[1], tc.fiducial(zmin, zmax, 250., 500.)[1], tc.goodtracks()[1], tc.muon1(2)[1], tc.muon2(2)[1], tc.doca(30.)[1], tc.ip(250.)[1] ] + if answers == 1: + # answering to referees questions + cuts = [ tc.recoed()[0], tc.nRecoed(1)[0], + tc.fiducial(zmin + 20., zmax - 20., 249., 499.)[0], tc.goodtracks()[0], + tc.ndf(25)[0], tc.doca(1.)[0], tc.redChi2(5.)[0], tc.daughtersP(1.)[0], tc.ip(250.)[0], + tc.notVetoed(1000.)[0], tc.muon1(2)[0], tc.muon2(2)[0] ] + cutnames = [ tc.recoed()[1], tc.nRecoed(1)[1], + tc.fiducial(zmin + 20., zmax - 20., 249., 499.)[1], tc.goodtracks()[1], + tc.ndf(25)[1], tc.doca(1.)[1], tc.redChi2(5.)[1], tc.daughtersP(1.)[1], tc.ip(250.)[1], + tc.notVetoed(1000.)[1], tc.muon1(2)[1], tc.muon2(2)[1] ] + elif answers == 2: + # answering to referees questions (NO RPC VETO) + cuts = [ tc.recoed()[0], tc.nRecoed(1)[0], + tc.fiducial(zmin + 20., zmax - 20., 249., 499.)[0], tc.goodtracks()[0], + tc.ndf(25)[0], tc.doca(1.)[0], tc.redChi2(5.)[0], tc.daughtersP(1.)[0], tc.ip(250.)[0], + tc.notVetoedNoRPC(1000.)[0], tc.muon1(2)[0], tc.muon2(2)[0] ] + cutnames = [ tc.recoed()[1], tc.nRecoed(1)[1], + tc.fiducial(zmin + 20., zmax - 20., 249., 499.)[1], tc.goodtracks()[1], + tc.ndf(25)[1], tc.doca(1.)[1], tc.redChi2(5.)[1], tc.daughtersP(1.)[1], tc.ip(250.)[1], + tc.notVetoedNoRPC(1000.)[1], tc.muon1(2)[1], tc.muon2(2)[1] ] + elif answers == 3: + # answering to referees questions (IP < 2.5 m) + cuts = [ tc.recoed()[0], tc.nRecoed(1)[0], + tc.fiducial(zmin + 20., zmax - 20., 249., 499.)[0], tc.goodtracks()[0], + tc.ndf(25)[0], tc.doca(1.)[0], tc.redChi2(5.)[0], tc.daughtersP(1.)[0], tc.ip(250.)[0], + tc.notVetoed(1000.)[0], tc.muon1(2)[0], tc.muon2(2)[0] ] + cutnames = [ tc.recoed()[1], tc.nRecoed(1)[1], + tc.fiducial(zmin + 20., zmax - 20., 249., 499.)[1], tc.goodtracks()[1], + tc.ndf(25)[1], tc.doca(1.)[1], tc.redChi2(5.)[1], tc.daughtersP(1.)[1], tc.ip(250.)[1], + tc.notVetoed(1000.)[1], tc.muon1(2)[1], tc.muon2(2)[1] ] + elif answers == 4: + # answering to referees questions (IP < 2.5 m) (NO RPC VETO) + cuts = [ tc.recoed()[0], tc.nRecoed(1)[0], + tc.fiducial(zmin + 20., zmax - 20., 249., 499.)[0], tc.goodtracks()[0], + tc.ndf(25)[0], tc.doca(1.)[0], tc.redChi2(5.)[0], tc.daughtersP(1.)[0], tc.ip(250.)[0], + tc.notVetoedNoRPC(1000.)[0], tc.muon1(2)[0], tc.muon2(2)[0] ] + cutnames = [ tc.recoed()[1], tc.nRecoed(1)[1], + tc.fiducial(zmin + 20., zmax - 20., 249., 499.)[1], tc.goodtracks()[1], + tc.ndf(25)[1], tc.doca(1.)[1], tc.redChi2(5.)[1], tc.daughtersP(1.)[1], tc.ip(250.)[1], + tc.notVetoedNoRPC(1000.)[1], tc.muon1(2)[1], tc.muon2(2)[1] ] + elif (study == 'tiny'): cuts = [ tc.recoed()[0], tc.notVetoed(1000.)[0], tc.redChi2(5.)[0], tc.ndf(25)[0], tc.fiducial(zmin, zmax, 250., 500.)[0], tc.goodtracks()[0], tc.ecal()[0], tc.doca(30.)[0], tc.ip(250.)[0] ] cutnames = [ tc.recoed()[1], tc.notVetoed(1000.)[1], tc.redChi2(5.)[1], tc.ndf(25)[1], tc.fiducial(zmin, zmax, 250., 500.)[1], tc.goodtracks()[1], tc.ecal()[1], tc.doca(30.)[1], tc.ip(250.)[1] ] + + if answers == 1: + # answering to referees questions + cuts = [ tc.recoed()[0], tc.nRecoed(1)[0], + tc.fiducial(zmin + 20., zmax - 20., 249., 499.)[0], tc.goodtracks()[0], + tc.ndf(25)[0], tc.doca(1.)[0], tc.redChi2(5.)[0], tc.daughtersP(1.)[0], tc.ip(250.)[0], + tc.notVetoed(1000.)[0], ] + cutnames = [ tc.recoed()[1], tc.nRecoed(1)[1], + tc.fiducial(zmin + 20., zmax - 20., 249., 499.)[1], tc.goodtracks()[1], + tc.ndf(25)[1], tc.doca(1.)[1], tc.redChi2(5.)[1], tc.daughtersP(1.)[1], tc.ip(250.)[1], + tc.notVetoed(1000.)[1], ] + elif answers == 2: + # answering to referees questions (NO RPC VETO) + cuts = [ tc.recoed()[0], tc.nRecoed(1)[0], + tc.fiducial(zmin + 20., zmax - 20., 249., 499.)[0], tc.goodtracks()[0], + tc.ndf(25)[0], tc.doca(1.)[0], tc.redChi2(5.)[0], tc.daughtersP(1.)[0], tc.ip(250.)[0], + tc.notVetoedNoRPC(1000.)[0], ] + cutnames = [ tc.recoed()[1], tc.nRecoed(1)[1], + tc.fiducial(zmin + 20., zmax - 20., 249., 499.)[1], tc.goodtracks()[1], + tc.ndf(25)[1], tc.doca(1.)[1], tc.redChi2(5.)[1], tc.daughtersP(1.)[1], tc.ip(250.)[1], + tc.notVetoedNoRPC(1000.)[1], ] + elif answers == 3: + # answering to referees questions (IP < 2.5 m) + cuts = [ tc.recoed()[0], tc.nRecoed(1)[0], + tc.fiducial(zmin + 20., zmax - 20., 249., 499.)[0], tc.goodtracks()[0], + tc.ndf(25)[0], tc.doca(1.)[0], tc.redChi2(5.)[0], tc.daughtersP(1.)[0], tc.ip(250.)[0], + tc.notVetoed(1000.)[0], ] + cutnames = [ tc.recoed()[1], tc.nRecoed(1)[1], + tc.fiducial(zmin + 20., zmax - 20., 249., 499.)[1], tc.goodtracks()[1], + tc.ndf(25)[1], tc.doca(1.)[1], tc.redChi2(5.)[1], tc.daughtersP(1.)[1], tc.ip(250.)[1], + tc.notVetoed(1000.)[1], ] + elif answers == 4: + # answering to referees questions (IP < 2.5 m) (NO RPC VETO) + cuts = [ tc.recoed()[0], tc.nRecoed(1)[0], + tc.fiducial(zmin + 20., zmax - 20., 249., 499.)[0], tc.goodtracks()[0], + tc.ndf(25)[0], tc.doca(1.)[0], tc.redChi2(5.)[0], tc.daughtersP(1.)[0], tc.ip(250.)[0], + tc.notVetoedNoRPC(1000.)[0], ] + cutnames = [ tc.recoed()[1], tc.nRecoed(1)[1], + tc.fiducial(zmin + 20., zmax - 20., 249., 499.)[1], tc.goodtracks()[1], + tc.ndf(25)[1], tc.doca(1.)[1], tc.redChi2(5.)[1], tc.daughtersP(1.)[1], tc.ip(250.)[1], + tc.notVetoedNoRPC(1000.)[1], ] + + # if not cutnames: # cutnames = [ "converged", "not vetoed", "chi2/n<5", "ndf>15", "z", "ellipse", "good tracks", "ecal", "muon1", "muon2", "doca<30", "IP<250" ] # cutStrings = [ "Track fit converged", @@ -721,7 +856,7 @@ def tableWithDraw(answers=False): results = {} - for study in ['nu', 'pimu', 'mumunu', 'tiny', 'fakedp']: + for study in ['nu', 'pimu', 'fakedp']: # ['nu', 'pimu', 'mumunu', 'tiny', 'fakedp']: results[study] = {} numbers, numbersWithWeights, cuts = countWithDraw(study, answers) results[study]['numbers'] = numbers