#Original Function Location: /themis/lib/dav_lib/library/master_science.dvrc Source Code for Function: "load_master()" in "master_science.dvrc" (Beta)

master_science_version=1.00
#This file contains all functions pertaining to MASTER science

#In order to use load_master() you must also have gdal installed

#load_master - c.edwards 4/25/13


define load_master(geo,elev) {

  if($ARGC==0) {
    printf("Load a calibrated L1B master image as a Geo-Struct\n")
    printf("This includes adding GCPS to project the data at a later point\n\n")
    printf("$1=filename\n")
    printf("geo=project the image to a standard utm projection using GCPS (Default=0)\n")
    printf("elev=add elevation points to the GCPS (Default=0)\n\n")
    printf("c.edwards 4/28/13\n")
    return(null)
  }

  if(HasValue(elev)==0) elev=0
  if(HasValue(geo)==0) geo=0
  ancstruct=read_geo($1,subdata=10//11//12//13)

  out=read_geo($1,subdata=17)
  out.anc.scale=translate(atof(strsplit(read_geometa(ancstruct.anc.subdata.name[,17]).anc.metadata.scale_factor,",")),y,z)

  #scale the data with the slope and intercept
  out.data=float(out.data)
  out.data[where out.data!=0]=out.data*out.anc.scale
  out.data[where out.data<=0]=-32768
  out.ignore=-32768
  
  #extract eh lat/lon/elevation and zenith angles
  lat=remove_struct(ancstruct.data,"subdata10")
  lon=remove_struct(ancstruct.data,"subdata11")
  zenith=avg(remove_struct(ancstruct.data,"subdata13"),axis=y)
  if(elev!=0) {
    elev=remove_struct(ancstruct.data,"subdata12")
    out=add_gcps_geo(out,lon,lat,elev=elev,xsampling=4,ysampling=10)
  } else {
    elev=remove_struct(ancstruct.data,"subdata12")
    out=add_gcps_geo(out,lon,lat,xsampling=4,ysampling=10)
  }    
  
  clon=avg(lon,ignore=-32768)
  zone=CentralMeridian_to_UTMzone(clon)

  out.anc.a_srs="+proj=latlong"
  out.anc.suggested_proj=sprintf("+proj=utm +zone=%i +ellps=WGS84 +datum=WGS84 +units=m +no_defs",zone)

  if(geo==1) {
    out=proj_geo(out,out.anc.suggested_proj, ignore=-32768,resampling="bilinear")
  }
  
  out.anc.UTMzone=zone
  out.anc.lat=lat
  out.anc.lon=lon
  out.anc.elev=elev
  out.anc.zenith=zenith

  return(out)
}