#!/usr/bin/python import sys import math import string import pickle import MCListAddOn def change_prod(request): prod = request.get('production') decay = request.get('decay') description = request.get('description') if decay is None or decay=='unknown': decay=description reqk = request.get('requestid') #print " ehehehehehe : request is " , reqk if MCListAddOn.MClist_AddOn.has_key(str(reqk)): request['xsec'] = MCListAddOn.MClist_AddOn[reqk]['xsec'] request['dxsec'] = MCListAddOn. MClist_AddOn[reqk]['dxsec'] request['production'] = MCListAddOn.MClist_AddOn[reqk]['prod'] request['decay'] = MCListAddOn.MClist_AddOn[reqk]['decay'] if MCListAddOn.MClist_AddOn[reqk].has_key('generator'): request['generator'] = MCListAddOn.MClist_AddOn[reqk]['generator'] if MCListAddOn.MClist_AddOn[reqk].has_key('ref'): request['reference'] = MCListAddOn.MClist_AddOn[reqk]['ref'] return request['production'] if prod is None or prod == 'unknown': return 'unknown' if prod.find('c+z')==0: return prod.replace('c+z','gam-z+c') if prod.find('b+z')==0: return prod.replace('b+z','gam-z+b') if prod.find('t-tbar')==0: return prod.replace('t-tbar','singletop') if prod == 'hl_2w': return 'hl' if prod=='hl_2w pythia': return 'hl pythia' if prod == 'z pythia': return 'gam-z pythia' if prod == 'z': return 'gam-z' if prod.find('z+0')==0 or prod.find('z+1')==0 or prod.find('z+2')==0 or prod.find('z+3')==0 or prod.find('z+4')==0 or prod.find('z+5')==0: return prod.replace('z+','gam-z+') if decay.find('Single electron')>=0: prod='Single electrons' if decay.find('Single central electron')>=0: prod='Single cental electrons' if decay.find('Single pion')>=0: prod='Single pions' if decay.find('Single central pion')>=0: prod='Single central pions' if decay.find('Single photon')>=0: prod='Single photons' if decay.find('Single central photon')>=0: prod='Single central photons' if decay.find('Single neutrino')>=0: prod='Single neutrinos' if decay.find('Single central neutrino')>=0: prod='Single central neutrinos' if len(prod)>50: prod=prod[0:50] return prod def change_decay(request): prod = request.get('production') decay = request.get('decay') description = request.get('description') if decay is None or decay=='unknown': return description[0:50] if len(decay)>50: decay=decay[0:50] if prod.find('hl_2w')>=0 and decay.find('2l+2nu')>=0: decay='2w_2l+2nu_sm.n' ## remove cteq6l1 to shorten if decay.find('cteq6l1-')>=0: decay = decay.replace('cteq6l1-','') new_decay = decay ## sam v7: complete the name if request.get('generator').find('alpgen') >=0: ## print request decay_begin=decay.split('.')[0]+'.' decay_end =decay.split('.')[1] new_decay=decay_begin if request.has_key('m34-min') and request['m34-min'] != 'NA': new_decay+="m%d-" % int(request.get('m34-min')) if request.has_key('m34-max') and request['m34-max'] != 'NA': new_decay+="%d-" % int(request.get('m34-max')) ## top convention: .mMTOP ## sam v7: easy if prod.find('t+t')>=0: if request.has_key('topmass') and request['topmass']!='not_found' \ and request['topmass']!='unknown': ## sam v7 : easy new_decay+="m%3.0f-"%float(request['topmass']) elif decay_end[0]!='m': ## sam v5: more complex. mXXX is already there is m=175 new_decay+='m175-' if request.has_key('lpbin') and not request['lpbin'] is None: lp=request.get('lpbin')[0:4] if not decay_end.find(lp) >=0: new_decay+=request.get('lpbin')[0:4] new_decay+='-' if request.has_key('pdf_set') and request['pdf_set'].find("CTEQ6L1")<0: new_decay+=request['pdf_set'] new_decay+='-' if request.has_key('iq') and int(request['iq'])!=1: new_decay+="iq%d-" % int(request['iq']) new_decay+=decay_end if request.get('generator').find('alpgen') < 0 and request.get('generator').find('pythia') >=0 and \ prod.find('gam-z') >= 0: decay_begin= decay.split('.')[0]+'.' if description.find('5-15') >= 0: decay_begin=decay_begin+'m5-15' elif description.find('15-60') >= 0: decay_begin=decay_begin+'m15-60' elif description.find('60-130') >= 0: decay_begin=decay_begin+'m60-130' elif description.find('130-250') >= 0: decay_begin=decay_begin+'m130-250' elif description.find('250-500') >= 0: decay_begin=decay_begin+'m250-500' else: decay_begin=decay_begin+'m500' new_decay = decay_begin return new_decay ##################################### ######### p17 filter ##################################### def filterReqId_p17(request): rec_v=request.get('rec_version') gen_v=request.get('gen_version') pXX_v=rec_v.split('.')[0] if pXX_v!='p17': return 'bad' prod=change_prod( request ) keepRequest=0 ### first deal with CompHep single top if gen_v.find('unknown')>=0: description=request.get('description') if description.find('comphep')>=0 or description.find('CompHep')>=0: ## this is a single top or a manual request anyway keepRequest=1 if int(request['requestid']) > 95000: keepRequest=1 if gen_v.split('.')[0]=='p20' or gen_v=='p17.09.08': keepRequest=1 elif gen_v=='p17.09.07' or gen_v=='p17.09.06': keepRequest=1 if request.get('generator')=='alpgenpythia': if prod.find('z+2b')>=0 or prod.find('z+2c')>=0 or \ prod.find('w+2b')>=0 or prod.find('w+2c')>=0 or \ prod.find('2b+')>=0 or prod.find('2c+')>=0 or \ prod.find('4b+')>=0 or prod.find('4c+')>=0: keepRequest=0 elif gen_v=='p17.09.01' and request['generator']=='pythia': if prod.find('b+b')>=0 or prod.find('c+c')>=0: keepRequest=1 if keepRequest==1: return 'good' return 'bad' ##################################### ######### p17 tighter filter ##################################### def filterReqId_p17tight(request): rec_v=request.get('rec_version') gen_v=request.get('gen_version') pXX_v=rec_v.split('.')[0] if pXX_v!='p17': return 'bad' prod=change_prod( request ) keepRequest=0 if gen_v.split('.')[0]=='p20' or gen_v=='p17.09.08': keepRequest=1 elif gen_v=='p17.09.07' or gen_v=='p17.09.06': keepRequest=1 if request.get('generator')=='alpgenpythia': if prod.find('z+2b')>=0 or prod.find('z+2c')>=0 or \ prod.find('w+2b')>=0 or prod.find('w+2c')>=0 or \ prod.find('2b+')>=0 or prod.find('2c+')>=0 or \ prod.find('4b+')>=0 or prod.find('4c+')>=0: keepRequest=0 elif gen_v=='p17.09.01' and request['generator']=='pythia': if prod.find('b+b')>=0 or prod.find('c+c')>=0: keepRequest=1 if prod.find('gam+jets')>=0 and \ decay=='incl_n.n': keepRequest=1 if keepRequest==1: return 'good' return 'bad' ##################################### ######### p20 filter ##################################### def filterReqId_p20(request): rec_v=request.get('rec_version') gen_v=request.get('gen_version') pXX_v=rec_v.split('.')[0] if pXX_v!='p20': return 'bad' gene = request.get('generator') if gene == 'alpgenpythia' and \ int( request['requestid'] ) < 66600: return 'bad' prod = change_prod(request) if gene =='alpgenpythia' and \ prod.find('w+1c+nlp') >= 0: return 'bad' if gene.find('herwig') >=0: if gen_v == 'p20.09.03': return 'bad' ### bug in CFT in p20.14.00 if rec_v == 'p20.14.00': return 'bad' ### remove bad zb overlay files if request.has_key('minb_dataset') and \ request['minb_dataset'] is not None and \ request['minb_dataset'] != "unknown": return filterBadZBoverlay( request['minb_dataset'] ) return 'good' ##################################### ######### filter out bad zb overlay ##################################### def filterBadZBoverlay( zb_sample ): if zb_sample.find('p20_09_02')>=0 or \ zb_sample.find('p20.09.02')>=0 or \ zb_sample.find('p20_08_01')>=0 or \ zb_sample.find('p20.08.01')>=0 or \ zb_sample.find("temp_heidi_zb_runs237kto241k")>=0: return 'bad' return 'good' ##################################### ######### all filter ##################################### def filterReqId_Dzero(request): rec_v=request.get('rec_version') pXX_v=rec_v.split('.')[0] if pXX_v=='p20': return filterReqId_p20(request) elif pXX_v=='p17': return filterReqId_p17(request) return 'bad'