コード例 #1
0
ファイル: communication.py プロジェクト: shihchun/pylayers
class TX():
    """
       TX process ( not used for now)
        Each agent use the TX process for querying LDP/information/message passing data
        to other agent
    """
    def __init__(self,**args):
        defaults={'sim':None,
                  'net': Network(),
                  #'gcom': Gcom(),
                  'gcom': [], # Temporary
                  'ID': 0,
                  'dec':{},
                  'devt': {},
                  'lcst': []
                  }
##       initialize attributes

        for key, value in defaults.items():
            if key in args:
                setattr(self, key, args[key])
            else:
                setattr(self, key, value)
                args[key]=value

        self.args = args
        self.gcom = self.args['gcom']


        if sys.version_info.major==2:
            self.cmdrq =SimEvent('RQ'+str(self.ID),sim=self.sim) # command request
        else:
            pass
            # Python3 implementation not done

        try:
            self.PN = self.net.node[self.ID]['PN']
        except:
            self.PN = Network()

#        self.create_evt()

#        self.c_init()

        if sys.version_info.major==2:
            Process.__init__(self,name='Tx'+str(self.ID),sim=self.sim)
        else:
            pass
            #Process.__init__(self,env,generator)
            # Python3 implementation not done

        Cf = ConfigParser.ConfigParser(inline_comment_prefixes=(';',),comment_prefixes=('#',';'))
        Cf.read(pyu.getlong('agent.ini','ini'))
        for s in Cf.sections():
            try:
                d= dict(Cf.items(s))
                if d['id']==self.ID:
                    self.refreshTOA=eval(d['refreshtoa'])
                    break
            except:
                pass


    def run(self):
        while True:
            self.levt=[]
            for d in self.dcond.keys():
                if self.c_interpret(self.dcond[d]):
                    self.levt.append(self.dcste[c])
            print('Tx ', self.ID,' @',self.sim.now())
            yield hold, self, self.refresh


    def create_evt(self):
        """
        Create simpy events from communication gaph

        The available reception event for the given id are pickup into the
        communication graph to fill self.devt.

        Examples
        --------

        >>> from pylayers.network.communication import *
        >>> T = TX()
        >>> T.create_evt()
        """
        for e in self.PN.edges(self.ID,keys=True):
            self.devt[e]=self.gcom.devt[e]



#    def request_TOA(self):
#        """
#        Request TOA


#        Every self.refreshTOA time interval, send a devent signal to nodes
#        in visibility torefresh the TOA information

#        """
#        self.create_evt()
#        while 1:
#            if self.sim.verbose:
#                print('request TOA', self.ID)
#            for wstd in self.PN.SubNet.keys():
#                for n in self.PN.SubNet[wstd].edge[self.ID].keys():
#                    # check nodes in visibility
#                    if self.net.edge[self.ID][n][wstd]['vis']:
#                        key='(\''+self.ID+'\', \''+n+'\', \''+wstd+'\')'
#                        self.devt[eval(key)].signal()
#            yield hold, self, self.refreshTOA
##                    devt[]
##                [self.PN.edge[self.ID][n][wstd].update(
##                {'TOA':self.net.edge[self.ID][n][wstd]['TOA'],'tTOA':self.sim.now()})
##                for n in self.PN.SubNet[wstd].edge[self.ID].keys() if self.net.edge[self.ID][n][wstd]['vis']]
##            print('refresh TOA node', self.ID, ' @',self.sim.now())



    def interpret_dec(self):
        """ interpret decision rule from self.dec
        """

        # n dict{wstd:np.array([node ids])}
        n={}
        # loop on wstd
        for wstd in self.dec['wstd']:
            try:
            # get all nodes connecteed to self.ID on subnetwork wstd
                n[wstd]=np.array(self.PN.SubNet[wstd].edges())[:,1]

                # initialize remained nodes to True
                rn = [True]*len(n[wstd])
                # loop on condition
                for r in self.dec['rule']:

                    if r == 'always':
                        pass

                # mettre boolean dans variable pour condition a plus d41 regle
                    if 'rssth' in r:
                        # rssth<100
                        rntmp = np.array(nx.get_edge_attributes(self.PN.SubNet[wstd],'Pr').values())
                        if len(r.split('<')) > 1:
                            rn = rn and ( rntmp  < eval(r.split('<')[1]) )
                        elif len(r.split('>')) > 1:
                            rn = rn and ( rntmp  > eval(r.split('>')[1]) )

    #                elif 'distance' in r :
    #                    # distance < 10
    #                    rntmp = np.array(nx.get_edge_attributes(self.net.SubNet[wstd],'d').values())
    #                    if len(r.split('<')) > 1:
    #                        rn = rn and ( rntmp  < eval(r.split('<')[1]) )
    #                    elif len(r.split('>')) > 1:
    #                        rn = rn and ( rntmp  > eval(r.split('<')[1]) )

                n[wstd][np.where(rn)]

            except:
                n[wstd]=np.array(())

        # retrun only node id which are compliant with rules
        return (n)


    def request(self):
        """ request a transmission initiated by localization
        """
        self.dec = self.gcom.dec[self.ID]
        self.create_evt()
        while 1:
            # wait request localization from localization layer
            yield waitevent,self,self.cmdrq
            if self.sim.verbose:
                print("communication requested by node ",self.ID)

            # n = nodes compliant with the rules given in communication.py
            #     and in self.gcom.dec[self.ID]
            rn = self.interpret_dec()


            # send a signal (a.k.a. request transmission) to nodes in n
            for wstd in rn.keys():
                for n in rn[wstd]:
                    # check if nodes in visibility
                    if self.net.edge[self.ID][n][wstd]['vis']:
                        key='(\''+self.ID+'\', \''+n+'\', \''+wstd+'\')'
                        # WARNING : PLEASE LEAVE THE 2 FOLLOWING LINES
                        # this is not a bad copy paste. It is required
                        # to force signalization ( probably a SimPy bug)
                        self.devt[eval(key)].signal()
                        self.devt[eval(key)].signal()
コード例 #2
0
ファイル: communication.py プロジェクト: mlaaraie/pylayers
class TX(Process):
    """
       TX process ( not used for now)
        Each agent use the TX process for querying LDP/information/message passing data
        to other agent
    """
    def __init__(self, **args):
        defaults = {
            'sim': None,
            'net': Network(),
            'gcom': Gcom(),
            'ID': 0,
            'dcond': {},
            'devt': {},
            'lcst': []
        }
        ##       initialize attributes
        for key, value in defaults.items():
            if args.has_key(key):

                setattr(self, key, args[key])
            else:
                setattr(self, key, value)
                args[key] = value
        self.args = args
        try:
            self.PN = self.net.node[self.ID]['PN']
        except:
            self.PN = Network()

        self.create_evt()

        #        self.c_init()
        Process.__init__(self, name='Tx' + str(self.ID), sim=self.sim)
        Cf = ConfigParser.ConfigParser()
        Cf.read(pyu.getlong('agent.ini', 'ini'))
        for s in Cf.sections():
            try:
                d = dict(Cf.items(s))
                if d['id'] == self.ID:
                    self.refreshTOA = eval(d['refreshtoa'])
                    break
            except:
                pass

    def run(self):
        while True:
            self.levt = []
            for d in self.dcond.keys():
                if self.c_interpret(self.dcond[d]):
                    self.levt.append(self.dcste[c])
            print 'Tx ', self.ID, ' @', self.sim.now()
            yield hold, self, self.refresh

    def create_evt(self):
        """
        Create simpy events from communication gaph

        The available reception event for the given id are pickup into the
        communication graph to fill self.devt.

        Examples
        --------

        >>> from pylayers.network.communication import *
        >>> T = TX()
        >>> T.create_evt()
        """
        for e in self.PN.edges(self.ID, keys=True):
            self.devt[e] = self.gcom.devt[e]

    def request_TOA(self):
        """
        Request TOA


        Every self.refreshTOA time interval, send a devent signal to nodes 
        in visibility torefresh the TOA information

        """
        self.create_evt()
        while 1:
            if self.sim.verbose:
                print 'request TOA', self.ID
            for rat in self.PN.SubNet.keys():
                for n in self.PN.SubNet[rat].edge[self.ID].keys():
                    # check nodes in visibility
                    if self.net.edge[self.ID][n][rat]['vis']:
                        key = '(\'' + self.ID + '\', \'' + n + '\', \'' + rat + '\')'
                        self.devt[eval(key)].signal()
            yield hold, self, self.refreshTOA
コード例 #3
0
ファイル: communication.py プロジェクト: mlaaraie/pylayers
class RX(Process):
    """
    RX process

    Each agent has a RX process to receive information asynchronously.

    Attributes
    ----------
    sim : SimPy.SimulationRT()
    ID : string
        id of the agent
    net : pylayers.network.network()
    gcom : pylayers.network.communication()
        a graph a communication
    devt : dictionary
        dictionnary of event
    refreshRSS : float
        time interval where RSS are refreshed
    refreshTOA : float
        time interval where TOA are refresh (if agent.comm_mode =='syncho')
    mp : bool
        message passing [Not yet implemented]
    """
    def __init__(self, **args):
        defaults = {
            'sim': None,
            'ID': '1',
            'net': Network(),
            'gcom': Gcom(),
            'devt': {},
            'refreshRSS': 0.3,
            'refreshTOA': 0.3,
            'mp': False
        }
        ##       initialize attributes
        for key, value in defaults.items():
            if args.has_key(key):

                setattr(self, key, args[key])
            else:
                setattr(self, key, value)
                args[key] = value
        self.args = args
        try:
            self.PN = self.net.node[self.ID]['PN']
        except:
            self.PN = Network()
        self.create_evt()

        Process.__init__(self, name='Rx-' + str(self.ID), sim=self.sim)

        Cf = ConfigParser.ConfigParser()
        Cf.read(pyu.getlong('agent.ini', 'ini'))
        for s in Cf.sections():
            try:
                d = dict(Cf.items(s))
                if d['id'] == self.ID:
                    self.refreshRSS = eval(d['refreshrss'])
                    self.refreshTOA = eval(d['refreshtoa'])
                    break

            except:
                pass

    def swap_lt(self, lt):
        """
        For a list of tuple if the first element is self.ID,
        it is swapped with the second element
   
        
        Examples
        --------

        >>> from pylayers.network.communication import *
        >>> R = RX()
        >>> R.ID
        '1'
        >>> lt= [('1','0','tuple1'),('10','5','tuple2')]
        >>> R.swap_lt(lt) # only first tuple is swapped because R.ID='1'
        [('0', '1', 'tuple1'), ('10', '5', 'tuple2')]

        """
        lto = []
        for t in lt:
            if t[0] == self.ID:
                lto.append((t[1], t[0], t[2]))
            else:
                lto.append((t[0], t[1], t[2]))
        return lto

    def create_evt(self):
        """
        Create simpy events from communication gaph

        The available reception event for the given id are pickup into the
        communication graph to fill self.devt.

        Examples
        --------

        >>> from pylayers.network.communication import *
        >>> R = RX()
        >>> R.create_evt()

        """
        rPNe = self.swap_lt(self.PN.edges(keys=True))
        for e in rPNe:
            self.devt[e] = self.gcom.devt[e]
        if self.mp:
            for e in rPNe:
                self.devt[e] = self.gcom.devt[e + str(mp)]

    def refresh_RSS(self):
        """
            Refresh RSS process

            The RSS values on the edges of the Personnal Network of node self.ID 
            are refreshed every self.refreshRSS
        """
        self.create_evt()
        while 1:
            for rat in self.PN.SubNet.keys():

                # 2 approach to determine visibility
                ##  1) test visibility during the refresh
                #                [self.PN.edge[self.ID][n][rat].update(
                #                {'Pr':self.net.edge[self.ID][n][rat]['Pr'],
                #                'tPr':self.sim.now(),
                #                'vis':self.net.edge[self.ID][n][rat]['Pr'][0]>self.net.node[self.ID]['sens'][rat]})
                #                for n in self.PN.SubNet[rat].edge[self.ID].keys()]

                #  2) copy the visibility information from network layer
                [
                    self.PN.edge[self.ID][n][rat].update({
                        'Pr':
                        self.net.edge[self.ID][n][rat]['Pr'],
                        'tPr':
                        self.sim.now(),
                        'vis':
                        self.net.edge[self.ID][n][rat]['vis']
                    }) for n in self.PN.SubNet[rat].edge[self.ID].keys()
                ]

            if self.sim.verbose:
                print 'refresh RSS node', self.ID, ' @', self.sim.now()

            yield hold, self, self.refreshRSS

    def refresh_TOA(self):
        """
            Refresh TOA process

            The TOA values on the edges of the Personnal Network of node self.ID
            are refreshed every self.refreshTOA
        """
        self.create_evt()

        while 1:
            for rat in self.PN.SubNet.keys():

                # 2 approaches :
                ## 1) that commented code allow refresh TOA only when visibility
                #                [self.PN.edge[self.ID][n][rat].update(
                #                {'TOA':self.net.edge[self.ID][n][rat]['TOA'],'tTOA':self.sim.now()})
                #                for n in self.PN.SubNet[rat].edge[self.ID].keys() if self.net.edge[self.ID][n][rat]['vis']]

                # 2 refresj TOa whatever visibility or not
                [
                    self.PN.edge[self.ID][n][rat].update({
                        'TOA':
                        self.net.edge[self.ID][n][rat]['TOA'],
                        'tTOA':
                        self.sim.now()
                    }) for n in self.PN.SubNet[rat].edge[self.ID].keys()
                ]

            if self.sim.verbose:
                print 'refresh TOA node', self.ID, ' @', self.sim.now()

            yield hold, self, self.refreshTOA

    def wait_TOArq(self):
        """
            Wait TOA request

            The self.ID node wait a TOA request from another node of its Personal network.
            Once the request is received, self.ID reply to the requester node 
            and fill the PN edge with the measured TOA.
        """
        self.create_evt()
        while 1:
            yield waitevent, self, self.devt.values()
            for evt in self.devt.values():
                if evt.occurred:
                    # evt.name[0] = requester
                    # evt.name[1] = requested ( = self.ID)
                    # evt.name[2] = rat
                    # update personal network TOA value
                    self.PN.edge[evt.name[1]][evt.name[0]][evt.name[2]].update(
                        {
                            'TOA':
                            self.net.edge[evt.name[1]][evt.name[0]][
                                evt.name[2]]['TOA'],
                            'tTOA':
                            self.sim.now()
                        })
                    if self.sim.verbose:
                        print 'TOA requested by', evt.name[0], 'to', evt.name[
                            1], 'has been updated'
                    break
コード例 #4
0
ファイル: communication.py プロジェクト: Dialloalha/pylayers
class TX(Process):
    """
       TX process ( not used for now)
        Each agent use the TX process for querying LDP/information/message passing data
        to other agent
    """
    def __init__(self,**args):
        defaults={'sim':None,
                  'net': Network(),
                  'gcom': Gcom(),
                  'ID': 0,
                  'dec':{},
                  'devt': {},
                  'lcst': []
                  }
##       initialize attributes
        for key, value in defaults.items():
            if args.has_key(key):

                setattr(self, key, args[key])
            else:
                setattr(self, key, value)
                args[key]=value
        self.args=args
        self.gcom=self.args['gcom']


        self.cmdrq=SimEvent('RQ'+str(self.ID),sim=self.sim) # command request

        try:
            self.PN=self.net.node[self.ID]['PN']
        except:
            self.PN=Network()

#        self.create_evt()

#        self.c_init()
        Process.__init__(self,name='Tx'+str(self.ID),sim=self.sim)
        Cf = ConfigParser.ConfigParser()
        Cf.read(pyu.getlong('agent.ini','ini'))
        for s in Cf.sections():
            try:
                d= dict(Cf.items(s))
                if d['id']==self.ID:
                    self.refreshTOA=eval(d['refreshtoa'])
                    break
            except:
                pass


    def run(self):
        while True:
            self.levt=[]
            for d in self.dcond.keys():
                if self.c_interpret(self.dcond[d]):
                    self.levt.append(self.dcste[c])
            print 'Tx ', self.ID,' @',self.sim.now()
            yield hold, self, self.refresh


    def create_evt(self):
        """
        Create simpy events from communication gaph

        The available reception event for the given id are pickup into the
        communication graph to fill self.devt.

        Examples
        --------

        >>> from pylayers.network.communication import *
        >>> T = TX()
        >>> T.create_evt()
        """
        for e in self.PN.edges(self.ID,keys=True):
            self.devt[e]=self.gcom.devt[e]



#    def request_TOA(self):
#        """
#        Request TOA


#        Every self.refreshTOA time interval, send a devent signal to nodes
#        in visibility torefresh the TOA information

#        """
#        self.create_evt()
#        while 1:
#            if self.sim.verbose:
#                print 'request TOA', self.ID
#            for wstd in self.PN.SubNet.keys():
#                for n in self.PN.SubNet[wstd].edge[self.ID].keys():
#                    # check nodes in visibility
#                    if self.net.edge[self.ID][n][wstd]['vis']:
#                        key='(\''+self.ID+'\', \''+n+'\', \''+wstd+'\')'
#                        self.devt[eval(key)].signal()
#            yield hold, self, self.refreshTOA
##                    devt[]
##                [self.PN.edge[self.ID][n][wstd].update(
##                {'TOA':self.net.edge[self.ID][n][wstd]['TOA'],'tTOA':self.sim.now()})
##                for n in self.PN.SubNet[wstd].edge[self.ID].keys() if self.net.edge[self.ID][n][wstd]['vis']]
##            print 'refresh TOA node', self.ID, ' @',self.sim.now()



    def interpret_dec(self):
        """ interpret decision rule from self.dec
        """

        # n dict{wstd:np.array([node ids])}
        n={}
        # loop on wstd
        for wstd in self.dec['wstd']:
            try:
            # get all nodes connecteed to self.ID on subnetwork wstd
                n[wstd]=np.array(self.PN.SubNet[wstd].edges())[:,1]

                # initialize remained nodes to True
                rn = [True]*len(n[wstd])
                # loop on condition
                for r in self.dec['rule']:

                    if r == 'always':
                        pass

                # mettre boolean dans variable pour condition a plus d41 regle
                    if 'rssth' in r:
                        # rssth<100
                        rntmp = np.array(nx.get_edge_attributes(self.PN.SubNet[wstd],'Pr').values())
                        if len(r.split('<')) > 1:
                            rn = rn and ( rntmp  < eval(r.split('<')[1]) )
                        elif len(r.split('>')) > 1:
                            rn = rn and ( rntmp  > eval(r.split('>')[1]) )

    #                elif 'distance' in r :
    #                    # distance < 10
    #                    rntmp = np.array(nx.get_edge_attributes(self.net.SubNet[wstd],'d').values())
    #                    if len(r.split('<')) > 1:
    #                        rn = rn and ( rntmp  < eval(r.split('<')[1]) )
    #                    elif len(r.split('>')) > 1:
    #                        rn = rn and ( rntmp  > eval(r.split('<')[1]) )

                n[wstd][np.where(rn)]

            except:
                n[wstd]=np.array(())

        # retrun only node id which are compliant with rules
        return (n)


    def request(self):
        """ request a transmission commanded by localizaiton
        """
        self.dec = self.gcom.dec[self.ID]
        self.create_evt()
        while 1:
            # wait request localization from localization layer
            yield waitevent,self,self.cmdrq
            if self.sim.verbose:
                print "communication requested by node ",self.ID

            # n = nodes compliant with the rules given in communication.py
            #     and in self.gcom.dec[self.ID]
            rn = self.interpret_dec()


            # send a signal (a.k.a. request transmission) to nodes in n
            for wstd in rn.keys():
                for n in rn[wstd]:
                    # check if nodes in visibility
                    if self.net.edge[self.ID][n][wstd]['vis']:
                        key='(\''+self.ID+'\', \''+n+'\', \''+wstd+'\')'
                        # WARNING : PLEASE LEAVE THE 2 FOLLOWING LINES
                        # this is not a bad copy paste. It is required
                        # to force signalization ( probably a SimPy bug)
                        self.devt[eval(key)].signal()
                        self.devt[eval(key)].signal()
コード例 #5
0
ファイル: communication.py プロジェクト: mlaaraie/pylayers
class TX(Process):
    """
       TX process ( not used for now)
        Each agent use the TX process for querying LDP/information/message passing data
        to other agent
    """
    def __init__(self,**args):
        defaults={'sim':None,
                  'net': Network(),
                  'gcom': Gcom(),
                  'ID': 0,
                  'dcond':{},
                  'devt': {},
                  'lcst': []
                  }
##       initialize attributes
        for key, value in defaults.items():
            if args.has_key(key):

                setattr(self, key, args[key])
            else:
                setattr(self, key, value)
                args[key]=value  
        self.args=args
        try:
            self.PN=self.net.node[self.ID]['PN']
        except:
            self.PN=Network()

        self.create_evt()

#        self.c_init()
        Process.__init__(self,name='Tx'+str(self.ID),sim=self.sim)
        Cf = ConfigParser.ConfigParser()
        Cf.read(pyu.getlong('agent.ini','ini'))
        for s in Cf.sections():
            try:
                d= dict(Cf.items(s))
                if d['id']==self.ID:
                    self.refreshTOA=eval(d['refreshtoa'])
                    break
            except:
                pass


    def run(self):
        while True:
            self.levt=[]
            for d in self.dcond.keys():
                if self.c_interpret(self.dcond[d]):
                    self.levt.append(self.dcste[c])
            print 'Tx ', self.ID,' @',self.sim.now()
            yield hold, self, self.refresh


    def create_evt(self):
        """
        Create simpy events from communication gaph

        The available reception event for the given id are pickup into the
        communication graph to fill self.devt.

        Examples
        --------

        >>> from pylayers.network.communication import *
        >>> T = TX()
        >>> T.create_evt()
        """
        for e in self.PN.edges(self.ID,keys=True):
            self.devt[e]=self.gcom.devt[e]


    def request_TOA(self):
        """
        Request TOA


        Every self.refreshTOA time interval, send a devent signal to nodes 
        in visibility torefresh the TOA information

        """
        self.create_evt()
        while 1:
            if self.sim.verbose:
                print 'request TOA', self.ID
            for rat in self.PN.SubNet.keys():
                for n in self.PN.SubNet[rat].edge[self.ID].keys():
                    # check nodes in visibility
                    if self.net.edge[self.ID][n][rat]['vis']:
                        key='(\''+self.ID+'\', \''+n+'\', \''+rat+'\')'
                        self.devt[eval(key)].signal()
            yield hold, self, self.refreshTOA
コード例 #6
0
ファイル: communication.py プロジェクト: mlaaraie/pylayers
class RX(Process):
    """
    RX process

    Each agent has a RX process to receive information asynchronously.

    Attributes
    ----------
    sim : SimPy.SimulationRT()
    ID : string
        id of the agent
    net : pylayers.network.network()
    gcom : pylayers.network.communication()
        a graph a communication
    devt : dictionary
        dictionnary of event
    refreshRSS : float
        time interval where RSS are refreshed
    refreshTOA : float
        time interval where TOA are refresh (if agent.comm_mode =='syncho')
    mp : bool
        message passing [Not yet implemented]
    """

    def __init__(self,**args):
        defaults={'sim':None,
                  'ID':'1',
                  'net':Network(),
                  'gcom': Gcom(),
                  'devt': {},
                  'refreshRSS':0.3,
                  'refreshTOA':0.3,
                  'mp':False
                  }
##       initialize attributes
        for key, value in defaults.items():
            if args.has_key(key):

                setattr(self, key, args[key])
            else:
                setattr(self, key, value)
                args[key]=value  
        self.args=args
        try:
            self.PN = self.net.node[self.ID]['PN']
        except:
            self.PN = Network()
        self.create_evt()

        Process.__init__(self,name='Rx-'+str(self.ID),sim=self.sim)

        Cf = ConfigParser.ConfigParser()
        Cf.read(pyu.getlong('agent.ini','ini'))
        for s in Cf.sections():
            try:
                d= dict(Cf.items(s))
                if d['id']==self.ID:
                    self.refreshRSS=eval(d['refreshrss'])
                    self.refreshTOA=eval(d['refreshtoa'])
                    break

            except:
                pass



    def swap_lt(self,lt):
        """
        For a list of tuple if the first element is self.ID,
        it is swapped with the second element
   
        
        Examples
        --------

        >>> from pylayers.network.communication import *
        >>> R = RX()
        >>> R.ID
        '1'
        >>> lt= [('1','0','tuple1'),('10','5','tuple2')]
        >>> R.swap_lt(lt) # only first tuple is swapped because R.ID='1'
        [('0', '1', 'tuple1'), ('10', '5', 'tuple2')]

        """
        lto=[]
        for t in lt :
            if t[0] == self.ID:
                lto.append((t[1],t[0],t[2]))
            else :
                lto.append((t[0],t[1],t[2]))
        return lto



    def create_evt(self):
        """
        Create simpy events from communication gaph

        The available reception event for the given id are pickup into the
        communication graph to fill self.devt.

        Examples
        --------

        >>> from pylayers.network.communication import *
        >>> R = RX()
        >>> R.create_evt()

        """
        rPNe = self.swap_lt(self.PN.edges(keys=True))
        for e in rPNe:
            self.devt[e]=self.gcom.devt[e]
        if self.mp :
            for e in rPNe:
                self.devt[e]=self.gcom.devt[e+str(mp)]


    def refresh_RSS(self):
        """
            Refresh RSS process

            The RSS values on the edges of the Personnal Network of node self.ID 
            are refreshed every self.refreshRSS
        """
        self.create_evt()
        while 1:
            for rat in self.PN.SubNet.keys():

            # 2 approach to determine visibility
            ##  1) test visibility during the refresh
#                [self.PN.edge[self.ID][n][rat].update(
#                {'Pr':self.net.edge[self.ID][n][rat]['Pr'],
#                'tPr':self.sim.now(),
#                'vis':self.net.edge[self.ID][n][rat]['Pr'][0]>self.net.node[self.ID]['sens'][rat]})
#                for n in self.PN.SubNet[rat].edge[self.ID].keys()]

            #  2) copy the visibility information from network layer
                [self.PN.edge[self.ID][n][rat].update(
                {'Pr':self.net.edge[self.ID][n][rat]['Pr'],'tPr':self.sim.now(),'vis':self.net.edge[self.ID][n][rat]['vis']})
                for n in self.PN.SubNet[rat].edge[self.ID].keys() ]

            if self.sim.verbose:
                print 'refresh RSS node', self.ID, ' @',self.sim.now()

            yield hold, self, self.refreshRSS


    def refresh_TOA(self):
        """
            Refresh TOA process

            The TOA values on the edges of the Personnal Network of node self.ID
            are refreshed every self.refreshTOA
        """
        self.create_evt()

        while 1:
            for rat in self.PN.SubNet.keys():

                # 2 approaches :
                ## 1) that commented code allow refresh TOA only when visibility
#                [self.PN.edge[self.ID][n][rat].update(
#                {'TOA':self.net.edge[self.ID][n][rat]['TOA'],'tTOA':self.sim.now()})
#                for n in self.PN.SubNet[rat].edge[self.ID].keys() if self.net.edge[self.ID][n][rat]['vis']]

                # 2 refresj TOa whatever visibility or not
                [self.PN.edge[self.ID][n][rat].update(
                {'TOA':self.net.edge[self.ID][n][rat]['TOA'],'tTOA':self.sim.now()})
                for n in self.PN.SubNet[rat].edge[self.ID].keys() ]

            if self.sim.verbose:
                print 'refresh TOA node', self.ID, ' @',self.sim.now()

            yield hold, self, self.refreshTOA


    def wait_TOArq(self):
        """
            Wait TOA request

            The self.ID node wait a TOA request from another node of its Personal network.
            Once the request is received, self.ID reply to the requester node 
            and fill the PN edge with the measured TOA.
        """
        self.create_evt()
        while 1:
            yield waitevent,self,self.devt.values()
            for evt in self.devt.values():
                if evt.occurred:
                    # evt.name[0] = requester
                    # evt.name[1] = requested ( = self.ID)
                    # evt.name[2] = rat
                    # update personal network TOA value
                    self.PN.edge[evt.name[1]][evt.name[0]][evt.name[2]].update(
                    {'TOA':self.net.edge[evt.name[1]][evt.name[0]][evt.name[2]]['TOA'],'tTOA':self.sim.now()})
                    if self.sim.verbose:
                        print 'TOA requested by',evt.name[0],'to',evt.name[1],'has been updated'
                    break