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()
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)
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)