Example #1
0
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;
}