def METHOD_NAME(self,Power,Power_Meter,Laser_Shutter,Steps=10,Tolerance=1.):
    Bounds=[0,1]
    Laser_Shutter.close_shutter()
    Laser_Shutter.set_mode(1)
    def Take_Reading():
        Laser_Shutter.open_shutter()
        Output=[]
        Fail=0
        while len(Output)<20:
            try:
                Output.append(Power_Meter.read)
                Fail=0
            except:
                Fail+=1
            if Fail==10:
                raise Exception('Restart power meter')
        Laser_Shutter.close_shutter()
        return np.median(Output)*1000000
    x=[0.,1]
    y=[]
    for i in x:
        self.Power(i)   
        y.append( Take_Reading())         
        time.sleep(1 )
    if y[0]>Power or  y[1]<Power:
        print( 'Out of Range!')
        return
    for i in range(2):
        Bound=np.mean(x)
        self.Power(Bound)   
        Reading=Take_Reading()
        if Reading>Power:
            x[1]=Bound
            y[1]=Reading
        else:
            x[0]=Bound
            y[0]=Reading
        time.sleep(1)
    Step=0
    Error=np.inf
    while Step<Steps or Error>Tolerance:
        Step+=1
        print('Error:',str(round(Error,2)),'uW')
        if x[1]!=x[0]:
            m=old_div((y[1]-y[0]),(x[1]-x[0]))
            c=y[0]-(m*x[0])
            Guess=old_div((Power-c),m)
            self.Power(Guess)
            Reading=Take_Reading()
            Error=np.abs(Reading-Power)
            if Power<Reading:
                y[1]=Reading
                x[1]=Guess
            else:
                y[0]=Reading
                x[0]=Guess
            time.sleep(1)
        else:
            Step=np.inf 
            Error=0
    if x[1]!=x[0]:
        m=old_div((y[1]-y[0]),(x[1]-x[0]))
        c=y[0]-(m*x[0])
        Guess=old_div((Power-c),m)
    else:
        Guess=x[0]
    self.Power(Guess)
    Reading=Take_Reading()
    return Guess,Reading