コード例 #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
ファイル: 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 []