def complete(self, text, args, begidx, endidx): # cut ( part ... ) > = 100 and ... [ ] # 0 1 2 3 # Getting back arguments nargs = len(args) if not text: nargs += 1 # Safe : impossible case if nargs <= 1: return [] # first agument elif nargs == 2: output = ['('] output.extend(ObservableType.get_cutlist1(self.main.mode)) return self.finalize_complete(text, output) elif nargs > 2: if args[1] != '(' and not (args[1] in ObservableType.get_cutlist1( self.main.mode)): return [] # counting number of () and [] nbracket1 = 0 nbracket2 = 0 endArguments = -1 for i in range(len(args)): if args[i] == "(": nbracket1 += 1 if args[i] == ")": nbracket1 -= 1 if nbracket1 == 0: endArguments = i if args[i] == "[": nbracket2 += 1 if args[i] == "]": nbracket2 -= 1 # User is writting particle combination if nbracket1 > 0 and endArguments == -1: # PTrank if nbracket2 > 0: return [] # List of multiparticles output = (self.main.multiparticles.GetNames()) if nargs >= 4: output.append(')') output.append('or') return self.finalize_complete(text, output) # determine position of conditions if args[1] != '(': endArguments = 1 else: endArguments += 1 # observable with particle if nargs == endArguments + 1: output = ObservableType.get_cutlist2(self.main.mode) return self.finalize_complete(text, output) # observable with particle if nargs == endArguments + 2: output = ['<=', '<', '>', '>=', '=', '!='] return self.finalize_complete(text, output) if nargs == endArguments + 3: return [] # observable with particle if nargs == endArguments + 4: output = ['and', 'or', '['] return self.finalize_complete(text, output) # options mode if nbracket1 == 0 and nbracket2 == 1: output = Cut.userShortcuts.keys() output.append("]") return self.finalize_complete(text, output) # loop over arguments case = 1 for i in range(endArguments, nargs - 1): if case == 1: output = ObservableType.get_cutlist2(self.main.mode) if not (args[i] in output): return [] elif case == 2: output = ['<=', '<', '>', '>=', '=', '!='] if not (args[i] in output): return [] elif case == 3: try: tmp = float(args[i]) except: return [] elif case == 4: output = ['and', 'or'] if not (args[i] in output): return [] # increment index if case == 4: case = 1 else: case += 1
def decodeConditions(self, args2): conditions = ConditionBlock() current = conditions nparameter = 0 observable1 = 0 observable2 = 0 operator = 0 value = 0. for item in args: # Opening bracket # if item=="(": # if nparameter!=0: # logging.getLogger('MA5').error("problem with an opening bracket") # return None # block=ConditionBlock() # block.mother=current # current.Add(block,0) # current=block # elif item==")": # if nparameter==3: # logging.getLogger('MA5').error("problem with a closing bracket") # return None # current=current.mother # Observable if nparameter == 0: obs = self.extract_observable(item) if obs == None: return None if not ObservableType.isCuttable(obs[1]): logging.getLogger('MA5').error("a cut applied to the observable '"+\ item+"' is not possible") return None observable1 = obs[0] observable2 = obs[1] nparameter = 1 # Operator elif nparameter == 1: operator = self.extract_operator(item) if operator == OperatorType.UNKNOWN: return None nparameter = 2 # Threshold value elif nparameter == 2: try: value = float(item) except: logging.getLogger('MA5').error("the threshold '"+item+\ "' is not a float value.") return None nparameter = 3 # Connector elif nparameter == 3: if item == "or": connector = ConnectorType.OR elif item == "and": connector = ConnectorType.AND else: logging.getLogger('MA5').error( "'" + item + "' is not a valid connector") return None nparameter = 0 block = ConditionType(observable1, observable2, operator, value) current.Add(block, connector) if nparameter == 3: block = ConditionType(observable1, observable2, operator, value) current.Add(block, ConnectorType.UNKNOWN) return conditions
def complete(self,text,args,begidx,endidx): # cut ( part ... ) > = 100 and ... [ ] # 0 1 2 3 # Getting back arguments nargs=len(args) if not text: nargs += 1 # Safe : impossible case if nargs<=1: return [] # first agument elif nargs==2: output=['('] output.extend(ObservableType.get_cutlist1(self.main.mode)) return self.finalize_complete(text,output) elif nargs>2: if args[1]!='(' and not (args[1] in ObservableType.get_cutlist1(self.main.mode)): return [] # counting number of () and [] nbracket1=0 nbracket2=0 endArguments=-1 for i in range(len(args)): if args[i]=="(": nbracket1+=1 if args[i]==")": nbracket1-=1 if nbracket1==0: endArguments=i if args[i]=="[": nbracket2+=1 if args[i]=="]": nbracket2-=1 # User is writting particle combination if nbracket1>0 and endArguments==-1: # PTrank if nbracket2>0: return [] # List of multiparticles output=(self.main.multiparticles.GetNames()) if nargs>=4: output.append(')') output.append('or') return self.finalize_complete(text,output) # determine position of conditions if args[1]!='(': endArguments=1 else: endArguments+=1 # observable with particle if nargs==endArguments+1: output=ObservableType.get_cutlist2(self.main.mode) return self.finalize_complete(text,output) # observable with particle if nargs==endArguments+2: output=['<=','<','>','>=','=','!='] return self.finalize_complete(text,output) if nargs==endArguments+3: return [] # observable with particle if nargs==endArguments+4: output=['and','or','['] return self.finalize_complete(text,output) # options mode if nbracket1==0 and nbracket2==1: output=Cut.userShortcuts.keys() output.append("]") return self.finalize_complete(text,output) # loop over arguments case=1 for i in range(endArguments,nargs-1): if case==1: output=ObservableType.get_cutlist2(self.main.mode) if not (args[i] in output): return [] elif case==2: output=['<=','<','>','>=','=','!='] if not (args[i] in output): return [] elif case==3: try: tmp=float(args[i]) except: return [] elif case==4: output=['and','or'] if not (args[i] in output): return [] # increment index if case==4: case=1 else: case+=1 # suggest if case==1: output=ObservableType.get_cutlist2(self.main.mode) return self.finalize_complete(text,output) elif case==2: output=['<=','<','>','>=','=','!='] return self.finalize_complete(text,output) elif case==3: return [] elif case==4: output=['and','or','['] return self.finalize_complete(text,output) return []
return [] elif case == 3: try: tmp = float(args[i]) except: return [] elif case == 4: output = ['and', 'or'] if not (args[i] in output): return [] # increment index if case == 4: case = 1 else: case += 1 # suggest if case == 1: output = ObservableType.get_cutlist2(self.main.mode) return self.finalize_complete(text, output) elif case == 2: output = ['<=', '<', '>', '>=', '=', '!='] return self.finalize_complete(text, output) elif case == 3: return [] elif case == 4: output = ['and', 'or', '['] return self.finalize_complete(text, output) return []
def decodeConditions(self,args2): conditions=ConditionBlock() current=conditions nparameter=0 observable1=0 observable2=0 operator=0 value=0. for item in args: # Opening bracket # if item=="(": # if nparameter!=0: # logging.error("problem with an opening bracket") # return None # block=ConditionBlock() # block.mother=current # current.Add(block,0) # current=block # elif item==")": # if nparameter==3: # logging.error("problem with a closing bracket") # return None # current=current.mother # Observable if nparameter==0: obs=self.extract_observable(item) if obs==None: return None if not ObservableType.isCuttable(obs[1]): logging.error("a cut applied to the observable '"+\ item+"' is not possible") return None observable1=obs[0] observable2=obs[1] nparameter=1 # Operator elif nparameter==1: operator=self.extract_operator(item) if operator==OperatorType.UNKNOWN: return None nparameter=2 # Threshold value elif nparameter==2: try: value=float(item) except: logging.error("the threshold '"+item+\ "' is not a float value.") return None nparameter=3 # Connector elif nparameter==3: if item=="or": connector=ConnectorType.OR elif item=="and": connector=ConnectorType.AND else: logging.error("'"+item+"' is not a valid connector") return None nparameter=0 block=ConditionType(observable1,observable2,operator,value) current.Add(block,connector) if nparameter==3: block=ConditionType(observable1,observable2,operator,value) current.Add(block,ConnectorType.UNKNOWN) return conditions