def fillDict(self, coeffarr,toDict,denominator,index,picknames,notState=False):
     state=0
    # print "coeffarr is :"
     #print coeffarr
     #find transfer function
     for  element in coeffarr:
         #print element
         if(element!=0 and (state!=index or notState)):
             numerator=[element]
             varName=picknames[state]
             tf=pmv_tf.pmv_tf(numerator,denominator,varName)
             toDict[varName]=tf
             #print toDict
         state+=1
    def getStateVar(self,rowNumber,var_name): 
        Erow=self.E[rowNumber]
        print "EEEROW"
        print Erow
        Arow=self.A[rowNumber]
        Brow=self.B[rowNumber]
        Frow=self.F[rowNumber]
        index=self.state_names.index(var_name)
        
        name=var_name
        typ=type_params.state
        
        derPart=Erow[index]
        denominator=np.array([])
        if(derPart==0):
            denominator=np.array([-Arow[index]])
        else:
            denominator=np.array([derPart,-Arow[index]])
            
        print "hoho"
        state_dict={}
        #find all numerators for states, and input the common denominator
        i=0;
        while(i<len(self.state_names)):
            if i!=index:
                derPart=Erow[i]
                numerator=np.array([])
                if(derPart==0):
                    numerator=np.array([Arow[i]])
                else:
                    numerator=np.array([-derPart,Arow[i]])

                tf=pmv_tf.pmv_tf(numerator,denominator,self.state_names[i])
                if(Erow[i]!=0 or Arow[i]!=0):
                    state_dict[self.state_names[i]]=tf
            i+=1;
        #self.fillDict(coeffarr,state_dict,denominator,index,self.state_names)
        #do the same for inputs
        print "states"
        input_dict={}
        i=0;
        print "working with inputs "+name
        print Brow
        while(i<len(self.input_names)):
            numerator=np.array([Brow[i]])
            print "numeartor is " +str(numerator) +" and " +str(Brow[i]!=0)
            tf=pmv_tf.pmv_tf(numerator,denominator,self.input_names[i])
            if(Brow[i]!=0):
                print "adding to dict"
                input_dict[self.input_names[i]]=tf
            i+=1;
        
        #self.fillDict(coeffarr, input_dict, denominator, index,self.input_names,True)
        print "mothers"
        
        disturbance_dict={}
        i=0;
        while(i<len(self.algebraic_names)):
            numerator=np.array([Frow[i]])
            tf=pmv_tf.pmv_tf(numerator,denominator,self.algebraic_names[i])
            if(Frow[i]!=0):
                disturbance_dict[self.algebraic_names[i]]=tf
            i+=1;
            
        
    
        
        toReturn=pmv_variable.pmv_variable(name,typ,state_dict,disturbance_dict,input_dict)
        #set working points
        toReturn.workingPoint=str(self.matrix_dict.get("x0")[index])
        return toReturn