Skip to content
Snippets Groups Projects
Select Git revision
  • shuo
  • master default protected
  • derp
3 results

plot_charge_vs_time.cxx

Blame
  • Whitney Armstrong's avatar
    Whitney Armstrong authored
    - moved root scripts into "scripts" directory
    - created batch directory for auger files and run lists
    a3dc8c96
    History
    plot_charge_vs_time.cxx 8.44 KiB
    #ifdef __cpp_lib_filesystem
    #include <filesystem>
    namespace fs = std::filesystem;
    #else
    #include <experimental/filesystem>
    namespace fs = std::experimental::filesystem;
    #endif
    
    #include "nlohmann/json.hpp"
    
    #include "TObject.h"
    #include "TGraph.h"
    
    #include <sstream>
    #include <iomanip>
    #include <ctime>
    
    void plot_charge_vs_time(int start_run = 0){
    
      using nlohmann::json;
      json j;
      {
        std::ifstream json_input_file("db2/run_count_list.json");
        try {
          json_input_file >> j;
        } catch(json::parse_error) {
          std::cerr << "error: json file, db2/run_count_list.json, is incomplete or has broken syntax.\n";
          std::quick_exit(-127);
        }
      }
      json j2;
      {
        std::ifstream json_input_file("db2/run_list.json");
        try {
          json_input_file >> j2;
        } catch(json::parse_error)  {
          std::cerr << "error: json file, db2/run_list.json, is incomplete or has broken syntax.\n";
          std::quick_exit(-127);
        }
      }
    
    
      std::vector<double> runs;
      std::vector<double> time1;
      std::vector<double> daq_triggers;
      std::vector<double> daq_triggers2;
    
      std::vector<double> time2;
      std::vector<double> runs2;
      std::vector<double> charges;
      std::vector<double> charges2;
    
      std::vector<double> hms_yields2;
      std::vector<double> hms_yield_uncs2;
    
      std::vector<double> runs3;
      std::vector<double> yield_ratios;
      std::vector<double> yield_ratio_uncs;
    
      std::vector<double> target_ids;
    
      TGraph* gr_triggers = new TGraph();
      TGraph* gr_charge   = new TGraph();
    
      TGraphErrors* gr_yield_ratio = new TGraphErrors();
    
      double total_accumulated_charge2 = 0.0;
      double total_accumulated_charge = 0.0;
      double total_accumulated_triggers = 0.0;
      double total_accumulated_triggers2 = 0.0;
    
      for (json::iterator it = j.begin(); it != j.end(); ++it) {
    
        int run_number = std::stoi(it.key());
        int run_number2 = 0;
        double yield    = 0.0;
        double yield2   = 0.0;
    
    
        if (j2.find(it.key()) == j2.end()) {
          continue;
        }
        //if (j2[it.key()]["target"]["target_id"].get<int>() != 3) {
        //  continue;
        //}
    
        if(run_number < start_run ) {
          continue;
        }
    
        double P0_shms_setting =
        j2[it.key()]["spectrometers"]["shms_momentum"].get<double>();
    
        double sign = 1.0;
        if( P0_shms_setting < 0 ) {
          sign = -1.0;
        }
    
        std::string start_time = j2[it.key()]["start_time"].get<std::string>();
        std::cout << start_time << "\n";
    
        std::tm a_tm = {};
        std::stringstream time_date_ss(start_time );
        time_date_ss >> std::get_time(&a_tm, "%H:%M:%S %m/%d/%y EST");
    
    
        if (it.value().find("total trigger events") != it.value().end()) {
          try {
            int run_triggers =  it.value()["pion bg sub. counts"].get<int>();
            total_accumulated_triggers += double(run_triggers);
            total_accumulated_triggers2 += sign*double(run_triggers);
            runs.push_back(double(run_number));
            time1.push_back(double(a_tm.tm_mday)+ double(a_tm.tm_hour)/24.0 + double(a_tm.tm_min)/60.0/24.0);
            daq_triggers.push_back(total_accumulated_triggers);
            daq_triggers2.push_back(total_accumulated_triggers2);
          } catch(std::domain_error ) {
            std::cout << " you suck\n";
            //you suck
            continue;
          }
        }
        if (it.value().find("charge bcm4b 2u cut") != it.value().end()) {
          try {
            int run_charge =  it.value()["charge bcm4b 2u cut"].get<double>();
            total_accumulated_charge += double(run_charge/1000.0);
            total_accumulated_charge2 += sign*double(run_charge/1000.0);
            runs2.push_back(double(run_number));
            double atime = a_tm.tm_mday+ double(a_tm.tm_hour)/24.0 + double(a_tm.tm_min)/60.0/24.0;
            //std::cout << atime << "\n";
            //std::cout << "d " <<  a_tm.tm_mday << "\n";
            //std::cout << "h " <<  a_tm.tm_hour << "\n";
            //std::cout << "m " <<  a_tm.tm_min << "\n";
            time2.push_back(atime);
            charges.push_back(total_accumulated_charge);
            charges2.push_back(total_accumulated_charge2);
          } catch(std::domain_error ) {
            std::cout << " you suck\n";
            continue;
          }
        }
        //if (it.value().find("hms e yield") != it.value().end()) {
        //  try {
        //  yield      = it.value()["hms e yield"].get<double>();
        //  runs.push_back(double(run_number));
        //  hms_yields.push_back(yield);
        //  if (it.value().find("hms e yield unc.") != it.value().end()) {
        //    hms_yield_uncs.push_back(it.value()["hms e yield unc."].get<double>());
        //  } else {
        //    hms_yield_uncs.push_back(0.0);
        //  }
        //  } catch(std::domain_error ) {
        //    continue;
        //    //you suck
        //  }
        //}
        //if (it.value().find("hms scaler yield") != it.value().end()) {
        //  run_number2 = std::stoi(it.key());
        //  yield2      = it.value()["hms scaler yield"].get<double>();
        //  runs2.push_back(double(run_number2));
        //  hms_yields2.push_back(scaler_reduce_factor*yield2);
        //  if (it.value().find("hms scaler yield unc.") != it.value().end()) {
        //    hms_yield_uncs2.push_back(scaler_reduce_factor*it.value()["hms scaler yield unc."].get<double>());
        //  } else {
        //    hms_yield_uncs2.push_back(0.0);
        //  }
        //}
        //if (it.value().find("hms scaler yield") != it.value().end()) {
        //  if (it.value().find("hms e yield") != it.value().end()) {
        //    runs3.push_back(double(run_number2));
        //    double yield_ratio = yield / yield2;
        //    yield_ratios.push_back(yield_ratio);
        //    if ((it.value().find("hms e yield unc.") != it.value().end()) &&
        //        (it.value().find("hms scaler yield unc.") != it.value().end())) {
        //      double y1 = it.value()["hms e yield unc."].get<double>();
        //      double y2 = it.value()["hms scaler yield unc."].get<double>();
        //      yield_ratio_uncs.push_back(yield_ratio*std::sqrt(y1 * y1/(yield*yield) + y2 * y2/(yield2*yield2)));
        //    } else {
        //      yield_ratio_uncs.push_back(0.0);
        //    }
        //  }
        //}
      }
    
      //// ------------------------------
      ////
      TGraphErrors* gr = nullptr;
      TMultiGraph*  mg = nullptr;
      TCanvas*      c  = nullptr;
    
      // ---------------------------------------------------------
      //
      // ---------------------------------------------------------
      c  = new TCanvas("chargeVsTime","charge",1200,800);
      c->Divide(1, 2);
    
      c->cd(1);
      mg = new TMultiGraph();
      mg->SetTitle("; run number ; triggers");
      //std::vector<double> zeros(runs.size());
      gr = new TGraphErrors(runs.size(), runs.data(), daq_triggers.data());
      gr->SetMarkerStyle(20);
      mg->Add(gr,"p");
      mg->Draw("a");
    
      c->cd(2);
      mg = new TMultiGraph();
      mg->SetTitle("; run number ; charge");
      gr = new TGraphErrors(runs2.size(), runs2.data(), charges.data());
      gr->SetMarkerStyle(23);
      gr->SetMarkerColor(2);
      mg->Add(gr,"p");
    
      //std::vector<double> zeros2(runs2.size());
      //gr = new TGraphErrors(runs2.size(), runs2.data(), hms_yields2.data(),zeros2.data(),hms_yield_uncs2.data());
      //mg->Add(gr,"p");
      mg->Draw("a");
    
      c->SaveAs("results/plot_charge_vs_time.png");
      c->SaveAs("results/plot_charge_vs_time.pdf");
    
      // ---------------------------------------------------------
      //
      // ---------------------------------------------------------
      c  = new TCanvas("chargeVsTime2","charge2",1200,800);
      c->Divide(1, 2);
    
      c->cd(1);
      mg = new TMultiGraph();
      mg->SetTitle("; days ; triggers");
    
      //std::vector<double> zeros(runs.size());
      
      gr = new TGraphErrors(time1.size(), time1.data(), daq_triggers.data());
      gr->SetMarkerStyle(20);
      mg->Add(gr,"p");
      mg->Draw("a");
    
      c->cd(2);
      mg = new TMultiGraph();
      mg->SetTitle("; days ; charge");
    
      gr = new TGraphErrors(time2.size(), time2.data(), charges.data());
      gr->SetMarkerStyle(20);
      gr->SetMarkerColor(2);
      mg->Add(gr,"p");
    
      mg->Draw("a");
    
      c->SaveAs("results/plot_charge_vs_time2.png");
      c->SaveAs("results/plot_charge_vs_time2.pdf");
      
      // ---------------------------------------------------------
      //
      // ---------------------------------------------------------
      c  = new TCanvas("chargeVsTime3","charge3",1200,800);
      c->Divide(1, 2);
    
      c->cd(1);
      mg = new TMultiGraph();
      mg->SetTitle("; days ; triggers");
    
      gr = new TGraphErrors(time1.size(), time1.data(), daq_triggers2.data());
      gr->SetMarkerStyle(20);
      mg->Add(gr,"p");
      mg->Draw("a");
    
      c->cd(2);
      mg = new TMultiGraph();
      mg->SetTitle("; days ; charge");
    
      gr = new TGraphErrors(time2.size(), time2.data(), charges2.data());
      gr->SetMarkerStyle(20);
      gr->SetMarkerColor(2);
      mg->Add(gr,"p");
    
      mg->Draw("a");
    
      c->SaveAs("results/plot_charge_vs_time3.png");
      c->SaveAs("results/plot_charge_vs_time3.pdf");
    }