void Tracker::report() { // //std::cout<<"report here"<<std::endl; date currDate(calendar->selectedDate().year(), calendar->selectedDate().month(), calendar->selectedDate().day()); reportWindow1 = new reportWindow(0, expenseItems, incomeItems, expenseLabels, incomeLabels, currDate); reportWindow1->setMaximumSize(850,650); reportWindow1->setMinimumSize(850,650); reportWindow1->setWindowTitle("Report Window"); reportWindow1->exec(); }
float InputRdaNetcdf::getValueCore(const Key::Input& iKey) const { float returnValue = Global::MV; std::string filename = getFilename(iKey); NcFile ncfile(filename.c_str()); std::string localVariable; bool found = getLocalVariableName(iKey.variable, localVariable); assert(found); Key::Input key = iKey; // Pre-fill incase file does not contain some keys std::vector<float> offsets = getOffsets(); const std::vector<Location>& locations = getLocations(); for(int o = 0; o < offsets.size(); o++) { key.offset = offsets[o]; for(key.location = 0; key.location < locations.size(); key.location++) { if((mCacheOtherOffsets || iKey.offset == key.offset) || (mCacheOtherLocations || iKey.location == key.location)) { Input::addToCache(key, Global::MV); } } } if(ncfile.is_valid() && localVariable != "") { // Record data NcVar* ncvar = ncfile.get_var(localVariable.c_str()); NcVar* ncTimes = ncfile.get_var("time_observation"); NcVar* ncStationIds = ncfile.get_var("parent_index"); NcDim* ncNamesDim = ncfile.get_dim("id_len"); NcDim* ncRecordsDim = ncfile.get_dim("recNum"); long numRecords = ncRecordsDim->size(); float values[numRecords]; float stationIds[numRecords]; int times[numRecords]; long count[1] = {numRecords}; ncvar->get(values, count); ncTimes->get(times, count); ncStationIds->get(stationIds, count); // Station data NcVar* ncNames = ncfile.get_var("station_id"); NcDim* ncLocationDim = ncfile.get_dim("station"); long numCurrLocations = ncLocationDim->size(); long namesLength = ncNamesDim->size(); char names[numCurrLocations*namesLength]; long count2[2] = {numCurrLocations, namesLength}; ncNames->get(names, count2); ncfile.close(); // Set all values to missing std::vector<float> vec; vec.resize(locations.size()*offsets.size(), Global::MV); // Read data for(int i = 0; i < numRecords; i++) { int id = stationIds[i]; int namesIndex = id*namesLength; std::string name = std::string(&names[namesIndex], namesLength); std::map<std::string,int>::const_iterator it = mLocationNames.find(name); if(it != mLocationNames.end()) { key.location = it->second; key.member = 0; int time = times[i]; int year = Global::getYear(key.date); int month = Global::getMonth(key.date); int day = Global::getDay(key.date); boost::gregorian::date epochDate(1970, 1, 1); boost::gregorian::date currDate(year, month, day); boost::gregorian::date_period diff(epochDate, currDate); int daysSinceEpoch = diff.length().days(); int offsetIndex = round((float) (time - 86400*daysSinceEpoch)/3600); int secondsOffHour = (time - 86400*daysSinceEpoch) % 3600; if(secondsOffHour < 0) secondsOffHour = 3600 + secondsOffHour; if(secondsOffHour > 1800) { secondsOffHour = 3600 - secondsOffHour; } assert(offsetIndex >= 0); if(secondsOffHour < mTimeTolerance && offsetIndex < 24) { assert(key.location < locations.size()); int ind = offsetIndex*locations.size() + key.location; assert(offsetIndex >= 0 && offsetIndex < offsets.size()); key.offset = offsets[offsetIndex]; assert(ind < (int) vec.size() && ind >= 0); //std::cout << key.location << " " << key.offset << std::endl; // Rda dataset uses a different missing value indicator if(values[i] == mMV) values[i] = Global::MV; if((mCacheOtherOffsets || iKey.offset == key.offset) || (mCacheOtherLocations || iKey.location == key.location)) { Input::addToCache(key, values[i]); if(iKey == key) { returnValue = values[i]; } } } } } } return returnValue; }