v[j][jj]=new Variable(ncfile, null, null, var_name);
v[j][jj].setDataType(DataType.FLOAT);
dims2.add(radial);
dims2.add(gateR[jj]);
v[j][jj].setDimensions(dims2);
v[j][jj].addAttribute(new Attribute( "long_name", var_name));
v[j][jj].addAttribute(new Attribute( "units", unit[tp]));
String coordinates="time elevationR azimuthR distanceR";
v[j][jj].addAttribute(new Attribute(_Coordinate.Axes, coordinates));
v[j][jj].addAttribute(new Attribute("missing_value", -999.99f));
ncfile.addVariable(null, v[j][jj]);
varList.add(v[j][jj]);
dims2.clear();
}
}
tsu_sec=new int[number_sweeps];
String[] tsu=new String[number_sweeps];
String[] time_units=new String[number_sweeps];
tsu_sec=volScan.getStartSweep();
for (int i=0; i< number_sweeps; i++) {
String st1=Short.toString(month);
if (st1.length() < 2) st1="0"+st1;
String st2=Short.toString(day);
if (st2.length() < 2) st2="0"+st2;
date0=String.valueOf(year)+"-"+st1+"-"+st2;
tsu[i]=date0+"T"+calcTime(tsu_sec[i],0)+"Z";
}
for (int j=0; j<number_sweeps; j++) { time_units[j]="secs since "+tsu[j]; }
dims0.add(radial);
// add "time" variable
Variable[] time=new Variable[number_sweeps];
String tm="time"; String tm_name="";
for (int j=0; j<number_sweeps; j++) { tm_name=tm;
if (number_sweeps > 1) { tm_name=tm+"_sweep_"+(j+1); }
time[j]=new Variable(ncfile, null, null, tm_name);
time[j].setDataType(DataType.INT);
time[j].setDimensions(dims0);
time[j].addAttribute(new Attribute("long_name", "time from start of sweep"));
time[j].addAttribute(new Attribute("units", time_units[j]));
time[j].addAttribute( new Attribute(_Coordinate.AxisType, AxisType.Time.toString()));
time[j].addAttribute(new Attribute("missing_value", -99));
ncfile.addVariable(null, time[j]);
varList.add(time[j]);
}
// add "elevationR" variable
Variable[] elevationR=new Variable[number_sweeps];
String ele="elevationR"; String ele_name="";
for (int j=0; j<number_sweeps; j++) { ele_name=ele;
if (number_sweeps > 1) { ele_name=ele+"_sweep_"+(j+1); }
elevationR[j]=new Variable(ncfile, null, null, ele_name);
elevationR[j].setDataType(DataType.FLOAT);
elevationR[j].setDimensions(dims0);
elevationR[j].addAttribute(new Attribute("long_name", "elevation angle"));
elevationR[j].addAttribute(new Attribute("units", "degrees"));
elevationR[j].addAttribute(new Attribute(_Coordinate.AxisType, AxisType.RadialElevation.toString()));
elevationR[j].addAttribute(new Attribute("missing_value", -999.99f));
ncfile.addVariable(null, elevationR[j]);
varList.add(elevationR[j]);
}
// add "azimuthR" variable
Variable[] azimuthR=new Variable[number_sweeps];
String azim="azimuthR"; String azim_name="";
for (int j=0; j<number_sweeps; j++) { azim_name=azim;
if (number_sweeps > 1) { azim_name=azim+"_sweep_"+(j+1); }
azimuthR[j]=new Variable(ncfile, null, null, azim_name);
azimuthR[j].setDataType(DataType.FLOAT);
azimuthR[j].setDimensions(dims0);
azimuthR[j].addAttribute(new Attribute("long_name", "azimuth angle"));
azimuthR[j].addAttribute(new Attribute("units", "degrees"));
azimuthR[j].addAttribute(new Attribute(_Coordinate.AxisType, AxisType.RadialAzimuth.toString()));
azimuthR[j].addAttribute(new Attribute("missing_value", -999.99f));
ncfile.addVariable(null, azimuthR[j]);
varList.add(azimuthR[j]);
}
// add "distanceR" variable
Variable[] distanceR=new Variable[number_sweeps];
String dName="distanceR";
String dist_name="";
for (int j=0; j<number_sweeps; j++) { dist_name=dName;
if (number_sweeps > 1) { dist_name=dName+"_sweep_"+(j+1); }
distanceR[j]=new Variable(ncfile, null, null, dist_name);
distanceR[j].setDataType(DataType.FLOAT);
dims1.add(gateR[j]);
distanceR[j].setDimensions(dims1);
distanceR[j].addAttribute(new Attribute("long_name", "radial distance"));
distanceR[j].addAttribute(new Attribute("units", "m"));
distanceR[j].addAttribute(new Attribute(_Coordinate.AxisType, AxisType.RadialDistance.toString()));
ncfile.addVariable(null, distanceR[j]);
varList.add(distanceR[j]);
dims1.clear();
}
// add "numGates" variable
dims3.add(scanR);
Variable numGates=new Variable(ncfile, null, null, "numGates");
numGates.setDataType(DataType.INT);
numGates.setDimensions(dims3);
numGates.addAttribute(new Attribute("long_name", "number of gates in the sweep"));
ncfile.addVariable(null, numGates);
varList.add(numGates);
// add global attributes
ncfile.addAttribute(null, new Attribute("definition", "SIGMET-IRIS RAW"));
ncfile.addAttribute(null, new Attribute("description", "SIGMET-IRIS data are reading by Netcdf IOSP"));
ncfile.addAttribute(null, new Attribute("StationName", stnName));
ncfile.addAttribute(null, new Attribute("StationName_SetupUtility", stnName_util));
ncfile.addAttribute(null, new Attribute("radar_lat", new Float(radar_lat)));
ncfile.addAttribute(null, new Attribute("radar_lon", new Float(radar_lon)));
ncfile.addAttribute(null, new Attribute("ground_height", new Short(ground_height)));
ncfile.addAttribute(null, new Attribute("radar_height", new Short(radar_height)));
ncfile.addAttribute(null, new Attribute("radar_alt", new Integer(radar_alt)));
ncfile.addAttribute(null, new Attribute("num_data_types", new Integer(nparams)));
ncfile.addAttribute(null, new Attribute("number_sweeps", new Short(number_sweeps)));
String sn="start_sweep"; String snn="";
for (int j=0; j<number_sweeps; j++) { snn=sn;
if (number_sweeps > 1) { snn=sn+"_"+(j+1); }
ncfile.addAttribute(null, new Attribute(snn, tsu[j]));
}
ncfile.addAttribute(null, new Attribute("num_rays", new Short(num_rays)));
ncfile.addAttribute(null, new Attribute("max_number_gates", new Short(bins)));
ncfile.addAttribute(null, new Attribute("range_first", new Float(range_first)));
ncfile.addAttribute(null, new Attribute("range_last", new Float(range_last)));
ncfile.addAttribute(null, new Attribute("DataType", "Radial"));
ncfile.addAttribute(null, new Attribute("Conventions", _Coordinate.Convention));
// --------- fill all of values in the ncfile ------
doNetcdfFileCoordinate(ncfile, volScan.base_time, volScan.year, volScan.month, volScan.day, varList, recHdr);
ncfile.finish();