int main(int argc,char *argv[]){ int c; int year = 2015, numIterations = 100; bool verbose = false, writeOutput = false; bool startFromOriginalSRS = false; /*____________________________Parse Command Line___________________________*/ while((c = getopt(argc,argv,"y:vn:oOh")) != -1){ switch(c){ case 'y': year = atoi(optarg); break; case 'n': numIterations = atoi(optarg); break; case 'v': verbose = true; break; case 'o': writeOutput = true; break; case 'O': startFromOriginalSRS = true; break; case 'h': printOptions(); return 0; default: // not an option break; } } if (year == 0){ std::cout << "you must set the year" << std::endl; printOptions(); return 0; } if (numIterations == 0){ std::cout << "you must set the number of iterations" << std::endl; printOptions(); return 0; } char *homePath, path[256]; homePath = getenv("HOME"); sprintf(path, "%s/cpp/NCAA_C/constants/season_info.d", homePath); ConstantSeasonInfo *seasonInfo = ConstantSeasonInfo::Instance(); seasonInfo->initialize(path); sprintf(path, "%s/cpp/NCAA_C/teams/%i/", homePath, year); std::cout << "Reading in " << year << std::endl; readTeamsFromDir(path); readTeamsFromDir(path,"waverages"); typedef std::unordered_map<std::string, double> teamHashType; typedef std::unordered_map<std::string, teamHashType *> dateHashType; typedef std::unordered_map<int, dateHashType *> srsHashType; typedef std::unordered_map<std::string, Team *> allTeamsHashType; srsHashType srsHash; srsHash.emplace(0,new dateHashType()); allTeamsHashType allTeamsHash = Team::getTeams(); sprintf(path,"%d north carolina",year); Team *genericTeam = Team::findTeam(path); std::unordered_map<std::string, TeamWAverage*> genericWAveragesUnordered = genericTeam->getWAveragesByDate(); std::map<std::string, TeamWAverage*> genericWAverages(genericWAveragesUnordered.begin(), genericWAveragesUnordered.end()); for (auto &genericWAverage : genericWAverages){ boost::gregorian::date day(boost::gregorian::from_string(genericWAverage.first)); std::string date = genericWAverage.first; srsHash[0]->emplace(genericWAverage.first,new teamHashType()); for (auto &team : allTeamsHash){ if (startFromOriginalSRS) srsHash[0]->at(genericWAverage.first)->emplace(team.first, team.second->WAverageOnDate(day)->getOrigSRS()); else srsHash[0]->at(genericWAverage.first)->emplace(team.first, team.second->WAverageOnDate(day)->getSrs()); } } std::vector<double> srsSOS; for (int i = 1; i < numIterations; i++){ srsHash.emplace(i, new dateHashType()); for (auto &genericWAverage : genericWAverages){ boost::gregorian::date day(boost::gregorian::from_string(genericWAverage.first)); std::string date = genericWAverage.first; srsHash[i]->emplace(date, new teamHashType()); for (auto &team : allTeamsHash){ srsSOS = calcSRS(srsHash[i-1]->at(date),team.first,day); srsHash[i]->at(date)->emplace(team.first,srsSOS[0]); } } if (verbose) { //this will show the srs for 3 different teams (a generally good team, a generally //mediocre team, and a generally bad team, on four different dates throughout the //season, the first date SRS is calculated (14 days after the season starts), //then 50 days into the season, 100 days into the season, the day the //tournament starts, and the day the tournament ends. char team1[256], team2[256], team3[256]; sprintf(team1, "%i north carolina", year); sprintf(team2, "%i bradley", year); sprintf(team3, "%i grambling state", year); std::string date1 = std::to_string(year-1)+"-12-01"; std::string date2 = std::to_string(year)+"-01-01"; std::string date3 = std::to_string(year)+"-02-14"; std::string date4 = boost::gregorian::to_iso_extended_string(seasonInfo->get(year, "tournament start")); std::string date5 = boost::gregorian::to_iso_extended_string(seasonInfo->get(year, "tournament end")); std::cout << i << "\t" << doubleFormatter(srsHash[i]->at(date1)->at(team1), 3) << "\t" << doubleFormatter(srsHash[i]->at(date1)->at(team2), 3) << "\t" << doubleFormatter(srsHash[i]->at(date1)->at(team3), 3) << "\t\t" << doubleFormatter(srsHash[i]->at(date2)->at(team1), 3) << "\t" << doubleFormatter(srsHash[i]->at(date2)->at(team2), 3) << "\t" << doubleFormatter(srsHash[i]->at(date2)->at(team3), 3) << "\t\t" << doubleFormatter(srsHash[i]->at(date3)->at(team1), 3) << "\t" << doubleFormatter(srsHash[i]->at(date3)->at(team2), 3) << "\t" << doubleFormatter(srsHash[i]->at(date3)->at(team3), 3) << "\t\t" << doubleFormatter(srsHash[i]->at(date4)->at(team1), 3) << "\t" << doubleFormatter(srsHash[i]->at(date4)->at(team2), 3) << "\t" << doubleFormatter(srsHash[i]->at(date4)->at(team3), 3) << "\t\t" << doubleFormatter(srsHash[i]->at(date5)->at(team1), 3) << "\t" << doubleFormatter(srsHash[i]->at(date5)->at(team2), 3) << "\t" << doubleFormatter(srsHash[i]->at(date5)->at(team3), 3) << std::endl; } } if (writeOutput) { TeamWAverage *wAverage; for (auto & team : allTeamsHash){ //open up the file std::ofstream waveragesFile; sprintf(path, "%s/cpp/NCAA_C/teams/%i/teams.%s.waverages.d", homePath, year, boost::replace_all_copy(team.first, " ", "_").c_str()); waveragesFile.open(path); for (auto &genericWAverage : genericWAverages){ boost::gregorian::date day(boost::gregorian::from_string(genericWAverage.first)); std::string date = genericWAverage.first; srsSOS = calcSRS(srsHash[numIterations - 1]->at(date), team.first, day); wAverage = team.second->WAverageOnDate(day); //write in the file waveragesFile << team.first; waveragesFile << "," << day.year(); waveragesFile << "," << day.month().as_number(); waveragesFile << "," << day.day(); waveragesFile << "," << wAverage->getOpts(); waveragesFile << "," << wAverage->getOtwo()->A(); waveragesFile << "," << doubleFormatter(wAverage->getOtwo()->P(), 3); waveragesFile << "," << wAverage->getOthree()->A(); waveragesFile << "," << doubleFormatter(wAverage->getOthree()->P(), 3); waveragesFile << "," << wAverage->getOft()->A(); waveragesFile << "," << doubleFormatter(wAverage->getOft()->P(), 3); waveragesFile << "," << wAverage->getOor()->A(); waveragesFile << "," << doubleFormatter(wAverage->getOor()->P(), 3); waveragesFile << "," << wAverage->getOdr()->A(); waveragesFile << "," << doubleFormatter(wAverage->getOdr()->P(), 3); waveragesFile << "," << wAverage->getOto()->A(); waveragesFile << "," << doubleFormatter(wAverage->getOto()->P(), 3); waveragesFile << "," << wAverage->getDpts(); waveragesFile << "," << wAverage->getDtwo()->A(); waveragesFile << "," << doubleFormatter(wAverage->getDtwo()->P(), 3); waveragesFile << "," << wAverage->getDthree()->A(); waveragesFile << "," << doubleFormatter(wAverage->getDthree()->P(), 3); waveragesFile << "," << wAverage->getDft()->A(); waveragesFile << "," << doubleFormatter(wAverage->getDft()->P(), 3); waveragesFile << "," << wAverage->getDor()->A(); waveragesFile << "," << doubleFormatter(wAverage->getDor()->P(), 3); waveragesFile << "," << wAverage->getDdr()->A(); waveragesFile << "," << doubleFormatter(wAverage->getDdr()->P(), 3); waveragesFile << "," << wAverage->getDto()->A(); waveragesFile << "," << doubleFormatter(wAverage->getDto()->P(), 3); waveragesFile << "," << doubleFormatter(wAverage->getRpi(), 3); waveragesFile << "," << doubleFormatter(wAverage->getOrigSRS(), 3); waveragesFile << "," << doubleFormatter(srsSOS[0], 3); waveragesFile << "," << doubleFormatter(srsSOS[1], 3); waveragesFile << "," << wAverage->getNum_games() << std::endl; } //close the file waveragesFile.close(); } } return 0; }