Ejemplo n.º 1
0
Int_t getsipm( Char_t *start_datetime, Char_t *end_datetime )
{

  TSQLServer *serv = TSQLServer::Connect("pgsql://phnxdb1.phenix.bnl.gov/daq", "phnxrc", "");
  
  // Create the sql query
  TString sql = "SELECT EXTRACT(EPOCH FROM read_datetime)::INT AS read_timestamp,current FROM sipm WHERE read_datetime >= \'";
  sql += start_datetime;
  sql += "\' AND read_datetime < \'";
  sql += end_datetime;
  sql += "\'";
  std::cout << "sql query: " << sql << std::endl;

  TSQLResult *res;
  res = serv->Query(sql);
  
  // Extract the result of the query into vectors
  
  Int_t nrows = res->GetRowCount();
  Int_t nfields = res->GetFieldCount();
  std::cout << "rows: " << nrows << " columns: " << nfields << std::endl;
  
  TString fieldname;
  TString field;
  TSQLRow *row;
  //  std::vector<double> read_timestamp;
  //  std::vector<double> read_current;

 for (Int_t i = 0; i < nrows; i++) {
    row = res->Next();
    for (Int_t j = 0; j < nfields; j++) {
      fieldname = TString( res->GetFieldName(j) );
      field = TString( row->GetField(j) );
      //      std::cout << "fieldname: " << fieldname << " field: " << field << std::endl;
      if ( fieldname == "read_timestamp" ) read_time_sipm[0].push_back( field.Atof() );
      if ( fieldname.Contains( "current" ) ) sipm_current[0].push_back( field.Atof() );
    }
  }

 return nrows;

}
Ejemplo n.º 2
0
void histo_plot(void)
{

  // Store constants for connecting to database (fill in blanks as
  // appropriate)
  const Char_t *dbusername = "******";  // username for DB access
  const Char_t *dbpasswd = "parity";    // password for DB access
  const Char_t *dbname = "pandb";      // name of DB
  const Char_t *dbhostname = "alquds.jlab.org";  // hostname of DB server computer

  // Connect to MySQL server
  Char_t *dburl = new Char_t[50];
  sprintf(dburl,"mysql://%s/%s", dbhostname, dbname);
  TSQLServer *db = TSQLServer::Connect(dburl, dbusername, dbpasswd);
  delete []dburl;
  dburl=NULL;

  // Get name of dbtablename 
  Char_t * dbtablename= new Char_t[50];
  const Char_t *inputtable = "Please enter desired table:  ";
  cout << inputtable;
  cin.getline(dbtablename, 49);
  cout << dbtablename << endl;

  // Get name of column to plot
  Char_t *column = new Char_t[50];
  const Char_t *inputcolumn = "Please enter desired column:  ";
  cout << inputcolumn;
  cin.getline(column, 49);
  cout << column << endl;

  // Construct query
  Char_t *sql = new Char_t[4200];
  sprintf(sql, "SELECT %s FROM %s", column, dbtablename);
  cout << sql << endl;

  // start timer
  TStopwatch timer;
  timer.Start();

  // Submit query to server
  TSQLRow *row;
  TSQLResult *res;
  res = db->Query(sql);

  // Process results
  Int_t nrows = res->GetRowCount();
  cout << "Got " << nrows << " rows in result." << endl;

  Int_t nfields = res->GetFieldCount();
  cout << "Got " << nfields << " fields in result." << endl;
  if (nfields != 1) {
    cerr << "Select only one column to average over!" << endl;
    exit;
  }

  // Get histogram ranges
  Char_t *lowrangechar = new Char_t[10];
  const Char_t *lowrangemessage = "Please enter lower limit of "
    "the histogram range:  ";
  cout << lowrangemessage;
  cin.getline(lowrangechar, 9);
  Float_t lowrangefloat = atof(lowrangechar);
  
  Char_t *highrangechar = new Char_t[10];
  const Char_t *highrangemessage = "Please enter upper limit of "
    "the histogram range:  ";
  cout << highrangemessage;
  cin.getline(highrangechar, 9);
  Float_t highrangefloat = atof(highrangechar);
  
  // Create histogram
  TH1F *histo = new TH1F("histo", column, 50, lowrangefloat,
			 highrangefloat);

  // Fill histogram
  for (Int_t i = 0; i<nrows; i++) {
    row = res->Next();
    Float_t field = atof(row->GetField(0));
    delete row;
    histo->Fill(field);
  }

  histo->Draw();

  // stop timer and print results
  timer.Stop();
  Double_t rtime = timer.RealTime();
  Double_t ctime = timer.CpuTime();

  printf("\nRealTime=%f seconds, CpuTime=%f seconds\n", rtime, ctime);

  // Clean up
  delete []sql;
  delete []dbtablename;
  delete []column;
  delete []lowrangechar;
  delete []highrangechar;

  delete res;
  delete db;

}
Ejemplo n.º 3
0
Int_t getscaler( Int_t scalervector, Int_t scalerchannel, Char_t *start_datetime, Char_t *end_datetime )
{

  TSQLServer *serv = TSQLServer::Connect("mysql://phnxdb1.phenix.bnl.gov/scalers", "phoncs", "phenix7815");
  
  // Create the sql query
  
  Int_t which_table, which_rate;

  which_table = (scalerchannel/16) + 1;
  which_rate = ( scalerchannel%16 ) + 1;
  
  TString scaler_field_name = "rate";
  scaler_field_name += which_rate;

  TString columns = "UNIX_TIMESTAMP(rs.read_datetime) AS read_timestamp,rs.";
  columns += scaler_field_name;
  columns += ", (@csum:=@csum+60.0*rs.";
  columns += scaler_field_name;
  columns += ") as cum";
  
  TString sql = "SELECT ";
  sql += columns;
  sql += " FROM rhicscaler";
  sql += which_table;
  sql += " AS rs WHERE";
  sql += " rs.read_datetime>=\"";
  sql += start_datetime;
  sql += "\" AND rs.read_datetime<=\"";
  sql += end_datetime;
  sql += "\";";

  cout << "sql query: " << sql << endl;

  TSQLResult *res;
  res = serv->Query("SET @csum=0.0;");
  res = serv->Query(sql);

  // Extract the result of the query into vectors

  Int_t nrows = res->GetRowCount();
  Int_t nfields = res->GetFieldCount();
  cout << "rows: " << nrows << " columns: " << nfields << endl;

  TString fieldname;
  TString field;
  TSQLRow *row;

  Double_t read_timestamp;
  Double_t cum;
  Double_t running_sum = 0.0;
  Double_t summand = 0.0;

  sread_time[scalervector].clear();
  cum_scaler_db[scalervector].clear();
  cum_scaler_sum[scalervector].clear();

  for (Int_t i = 0; i < nrows; i++) {
    row = res->Next();
    for (Int_t j = 0; j < nfields; j++) {
      fieldname = TString( res->GetFieldName(j) );
      field = TString( row->GetField(j) );
      // Extract all columns of each row
      // std::cout << "fieldname: " << fieldname << " field: " << field << std::endl;
      if ( fieldname == "read_timestamp" ) read_timestamp = field.Atof();
      if ( fieldname == "cum" ) cum = field.Atof();
      if ( fieldname == scaler_field_name ) summand = field.Atof();
    }
    // Save all the columns in this row in vectors for plotting
    sread_time[scalervector].push_back(read_timestamp);
    cum_scaler_db[scalervector].push_back(cum);
    running_sum += 60.0*summand;
    cum_scaler_sum[scalervector].push_back(running_sum);
  }
  
  return nrows;
  
}
Ejemplo n.º 4
0
Int_t getradmon( Char_t *start_datetime, Char_t *end_datetime )
{

  TSQLServer *serv = TSQLServer::Connect("pgsql://phnxdb0.phenix.bnl.gov/daq", "phnxrc", "");
  
  // Create the sql query
  
  TString columns = "id, EXTRACT(EPOCH FROM read_datetime)::INT AS read_timestamp, channel, i_n_set, i_n, v_n, i_k_set, i_k, v_k, i_s_set, i_s, v_s, i_r_set, i_r, v_r";
  
  TString sql = "SELECT ";
  sql += columns;
  sql += " FROM radmon WHERE read_datetime>=\'";
  sql += start_datetime;
  sql += "\' AND read_datetime<=\'";
  sql += end_datetime;
  sql += "\'";
  sql += " AND ABS( (i_r/i_r_set) - 1.0 ) < 0.01"; 
  sql += " AND ABS( (i_s/i_s_set) - 1.0 ) < 0.01";
  sql += " AND ABS( (i_n/i_n_set) - 1.0 ) < 0.01";
  sql += " AND v_n > 0.4 AND v_n < 2.0";
  // key
  sql += " AND v_r < 20.0 AND v_s < 20.0";
  //  sql += " AND v_r < 50.0 AND v_s < 50.0";
  sql += ";";
  cout << "sql query: " << sql << endl;

  TSQLResult *res;
  res = serv->Query(sql);

  // Extract the result of the query into vectors

  Int_t nrows = res->GetRowCount();
  Int_t nfields = res->GetFieldCount();
  cout << "rows: " << nrows << " columns: " << nfields << endl;

  TString fieldname;
  TString field;
  TSQLRow *row;

  Int_t channel = 0;
  Double_t read_timestamp;
  Double_t v_k = 0.0, v_n = 0.0, v_s = 0.0, v_r = 0.0;
  Double_t i_k = 0.0, i_n = 0.0, i_s = 0.0, i_r = 0.0;

  // zero point and temperature correction for radfet 
  // Run 14 after 373780 May 28, 2014
  //  Double_t a0[nsensor] = { 3.923, 7.513, 5.395, 6.038, 4.140, 3.306, 3.263 };
  // Beginning of Run 15 Jan 14, 2015
  //  Double_t a0[nsensor] = { 3.971, 7.871, 5.645, 7.566, 3.322, 3.108, 3.214 };
  // after adding CAN 1 and CAN 2 2015.04.15 
  //  Double_t a0[nsensor] = { 3.971, 7.871, 5.645, 7.566, 3.322, 3.108, 3.214, 3.274, 3.643 };
  Double_t a0[nsensor] = { 3.36, 3.36, 3.36, 3.36, 3.36, 3.36, 3.36, 3.36, 3.36 };

  // Here's at the beginning of Run 14 in January
  //  Double_t a0[nsensor] = { 3.78, 6.74, 4.94, 3.40, 3.45, 3.306, 3.263 };


  // zero point correction for Si detector
  // Run 14 after 373780 May 28, 2014
  //  Double_t s0[nsensor] = { 4.290, 7.220, 6.250, 2.694, 2.050, 1.054, 1.051 };
  // Begining of Run 15 Jan 14, 2015  
  //  Double_t s0[nsensor] = { 4.326, 7.078, 6.208, 3.349, 1.108, 1.048, 1.058 };
  // after adding CAN 1 and CAN 2 2015.04.15 
  //  Double_t s0[nsensor] = { 4.326, 7.078, 6.208, 3.349, 1.108, 1.048, 1.058, 1.046, 1.048 };
  // Here's the beginning of Run 14 in January
  //  Double_t s0[nsensor] = { 3.60, 6.20, 5.26, 1.16, 1.18, 1.054, 1.051 };
  Double_t s0[nsensor] = { 1.05, 1.05, 1.05, 1.05, 1.05, 1.05, 1.05, 1.05, 1.05 };

  for ( channel = 0; channel < nsensor; channel++ ) {
    V_s[channel].clear();
    V_r[channel].clear();
    R_n[channel].clear();
    T_n[channel].clear();
    R_k[channel].clear();
    R_r[channel].clear();
    read_time[channel].clear();
    V_r_corrected[channel].clear();
    V_s_corrected[channel].clear();
    dose_r[channel].clear();
    dose_s[channel].clear();
    rs_ratio[channel].clear();
  }

  Double_t v_r_c = 0.0;
  Double_t v_s_c = 0.0;

  for (Int_t i = 0; i < nrows; i++) {
    row = res->Next();
    for (Int_t j = 0; j < nfields; j++) {
      fieldname = TString( res->GetFieldName(j) );
      field = TString( row->GetField(j) );
      // Extract all columns of each row
      // std::cout << "fieldname: " << fieldname << " field: " << field << std::endl;
      if ( fieldname == "read_timestamp" ) read_timestamp = field.Atof();
      if ( fieldname == "channel" ) channel = field.Atoi();
      if ( fieldname == "v_k" ) v_k = field.Atof();
      if ( fieldname == "v_n" ) v_n = field.Atof();
      if ( fieldname == "v_s" ) v_s = field.Atof();
      if ( fieldname == "v_r" ) v_r = field.Atof();
      if ( fieldname == "i_k" ) i_k = field.Atof();
      if ( fieldname == "i_n" ) i_n = field.Atof();
      if ( fieldname == "i_s" ) i_s = field.Atof();
      if ( fieldname == "i_r" ) i_r = field.Atof();
    }
    // Save all the columns in this row in vectors for plotting
      V_s[channel].push_back(v_s);
      V_r[channel].push_back(v_r);
      R_n[channel].push_back(v_n/i_n);
      T_n[channel].push_back( temperature(v_n,i_n) );
      R_k[channel].push_back(v_k/i_k);
      R_r[channel].push_back(v_r/i_r);
      read_time[channel].push_back(read_timestamp);
      v_r_c = v_r - a0[channel];
      V_r_corrected[channel].push_back( v_r_c );
      //      std::cout << channel << ": " << v_r_c << " " << radfet_dose( &v_r_c, 0 ) << std::endl; 
      dose_r[channel].push_back( radfet_dose( &v_r_c, 0 ) );
      v_s_c = v_s - s0[channel];
      V_s_corrected[channel].push_back( v_s_c );
      dose_s[channel].push_back( si_dose( &v_s_c, 0 ) );
      if ( TMath::Abs( v_s_c ) > 1E-9 ) {
	rs_ratio[channel].push_back( (v_r - a0[channel])/v_s_c );
      } else {
	rs_ratio[channel].push_back( 0.0 );
	};
  }
  
  return nrows;
  
}