[GRASS-dev] Optimizing a script

Greetings

I have created a script to detect clouds/shadows (i.landsat.acca- Great work Jorge), grow of these pixels and then identify an area that is common to all bands (7).And at the end, turn these pixels into NULL. Above this paragraph I placed a part of this code. My problem is that, for regular satellite images it's a very slow process. How can I optimize it? any suggestion?
Thanks

def cloud_detection(output_t,output_thermal_t,landsatsensor):
     #Create temporary map for cloud and shadows
     tempC= "myscript.tmpcloud"
     #Create temporary map for valid areas
     tempV= "myscript.tmpvalid"
     #Create temporary file
     tempB= "myscript.tmpB"

#Due to a shift between it will be necessary to identify a valid area for all bands
     try:
         grass.mapcalc("$tempV= if(($B1>=0 && $B7>=0 && $B3>=0 && $B4>=0 && $B5>=0 && $B7>=0 && $B6>=0),1,null())",tempV=tempV,B1=output_t[0],B2=output_t[1],B3=output_t[2],B4=output_t[3],B5=output_t[4],B7=output_t[4],B6=output_thermal_t)
     except:
         grass.fatal(_("ERROR"))

#Apply i.landsat.acca module according to landsat sensor type
     if landsatsensor == '5TM':
        p=grass.run_command("i.landsat.acca", band_prefix="B", output=tempC, flags="52s")
     elif landsatsensor == '7ETM':
        p=grass.run_command("i.landsat.acca", band_prefix="B", output=tempC,flags="2s")
  #Apply r.grow to detected clouds and shadows
     p=grass.run_command("r.grow", input=tempC, output=tempC, overwrite=True, radius=3, old=1, new=1, metric="euclidean")

     p=grass.run_command("r.null", map=tempC, null=0)
     p=grass.run_command("r.null", map=tempV, null=0)

  #Cross bands (output_t) with r.grow ou*tput and Valid area
     for i in output_t:
         try:
             grass.mapcalc("$output= $input",output=tempB, input=i)
         except:
             grass.fatal(_("ERROR"))
         try:
             grass.mapcalc("$output= if(($valid==1 && $cloud!=1),$input,null())",output=i, input=tempB, valid=tempV,cloud=tempC)
         except:
             grass.fatal(_("ERROR"))

  #Eliminate temporary raster

On Sat, Oct 30, 2010 at 1:06 AM, <antonio.rocha@deimos.com.pt> wrote:

Greetings

I have created a script to detect clouds/shadows (i.landsat.acca- Great work
Jorge), grow of these pixels and then identify an area that is common to all
bands (7).And at the end, turn these pixels into NULL. Above this paragraph
I placed a part of this code. My problem is that, for regular satellite
images it's a very slow process. How can I optimize it? any suggestion?

You will need to find out where it is slow (profiling). Maybe
as simple debug just add datetime output every here and there to
see in which step it spends much time?

Markus

PS: Random link, perhaps helpful, too:
http://wiki.python.org/moin/PythonSpeed/PerformanceTips