Esempio n. 1
0
    def _load_lifestage(self):
        """ Loads details from XML into class """

        # Load name
        if "name" in self.xml_node.attrib.keys():
            self.name = self.xml_node.attrib["name"]
        else:
            raise Exception("Can't find name of lifestage")

        # Load whether population based or not
        if "populationBased" in self.xml_node.attrib.keys():
            if self.xml_node.attrib["populationBased"].upper().find("TRUE") != -1:
                self.populationBased = True

        # Load and construct event objects
        event_nodes = self.xml_node.xpath("event")
        for e_node in event_nodes:
            e = Event(e_node)
            self.events.append(e)

        # Load the initial distribution maps
        init_map_nodes = self.xml_node.xpath('initialDistribution')
        for i_node in init_map_nodes:
            r_id = i_node.attrib["region"]
            # stupid way of ignoring comments
            for i in i_node.iter(tag=lxml.etree.Element):
                if i == i_node:
                    continue
                m_node = i
                break
            self.initial_maps[r_id] = GrassMap(m_node)

        # Init phenology bins
        self.init_phenology_bins()
Esempio n. 2
0
    def _generate_mask(self, interval, r_id):
        """
        Actually generates a mask for a given interval and region (r_id)
        """
        # Get GRASS interface instance
        g = grass.get_g()
        # Generate a random map name
        mapname = g.generate_map_name("mask")

        if r_id in self.bins.keys():
            bins = self.bins[r_id]
        elif "__default" in self.bin.keys():
            bins = self.bins["__default"]
        else:
            self.log.error(
                "Could not find any phenology bins for generating mask")

        # Find what bin the interval lies within
        for d_range, mean in bins.items():
            if interval >= d_range[0] and interval <= d_range[1]:
                g.mapcalc(mapname, "if(%s>=%f,if(%s<=%f,1,0),0)" % (self.p_map_names[
                          r_id], d_range[0], self.p_map_names[r_id], d_range[1]))
                grassmap_mask = GrassMap(mapname)
                grassmap_mask.temporary = True
                return grassmap_mask

        self.log.debug(
            "No appropriate interval range found for interval %d" % interval)
Esempio n. 3
0
 def init_from_xml(self):
     if self.node.tag == "mfilter":
         self.area = Event(self.node)
     else:
         # If it's not an mfilter it must be a map
         self.area = GrassMap(self.node)