コード例 #1
0
    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
コード例 #2
0
    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
コード例 #3
0
ファイル: cmd_cut.py プロジェクト: cmstas/TopAFB7TeV
    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 []
コード例 #4
0
                    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 []
コード例 #5
0
ファイル: cmd_cut.py プロジェクト: cmstas/TopAFB7TeV
    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