Пример #1
0
static void make_confirmation_text (char *ctxt, DATASET *dwinfo, gretlopt *flags)
{
    if (dwinfo->structure == CROSS_SECTION) {
	sprintf(ctxt, _("%s, observations 1 to %d"), _("Cross-sectional data"), 
		dataset->n);
    } else if (time_series(dwinfo)) {
	int lastobs = dwinfo->t1 + dataset->n - 1;
	char stobs[OBSLEN];
	char endobs[OBSLEN];
	const char *tslabel;

	tslabel = _(ts_frequency_string(dwinfo));

	if (lastobs > dwinfo->n - 1) {
	    dwinfo->n = lastobs + 1;
	}

	ntodate(stobs, dwinfo->t1, dwinfo);
	ntodate(endobs, lastobs, dwinfo);
	sprintf(ctxt, _("%s, %s to %s"), tslabel, stobs, endobs);
    } else if (dwinfo->structure == PANEL_UNKNOWN) {
	sprintf(ctxt, _("Panel data (%s)\n"
			"%d cross-sectional units observed over %d periods"),
		_("stacked time series"), dwinfo->n, dwinfo->pd);
    } else if (known_panel(dwinfo)) {
	int nunits = dwinfo->t1;
	int nperiods = dataset->n / nunits;

	sprintf(ctxt, _("Panel data (%s)\n"
			"%d cross-sectional units observed over %d periods"),
		(dwinfo->structure == STACKED_TIME_SERIES)? 
		_("stacked time series") : _("stacked cross sections"),
		nunits, nperiods);
    } 

    if (*flags & DW_DROPMISS) {
	strcat(ctxt, "\n");
	strcat(ctxt, _("(dropping missing observations)"));
    }
}
Пример #2
0
void radmonanb::Loop( Int_t idfirst, Int_t idlast, TString plotfile ) {

  //   In a ROOT session, you can do:
  //      Root > .L radmonanb.C
  //      Root > radmonanb t
  //      Root > t.GetEntry(12); // Fill t data members with entry number 12
  //      Root > t.Show();       // Show values of entry 12
  //      Root > t.Show(16);     // Read and show values of entry 16
  //      Root > t.Loop();       // Loop on all entries
  //
  
  //     This is the loop skeleton where:
  //    jentry is the global entry number in the chain
  //    ientry is the entry number in the current Tree
  //  Note that the argument to GetEntry must be:
  //    jentry for TChain::GetEntry
  //    ientry for TTree::GetEntry and TBranch::GetEntry
  //
  //       To read only selected branches, Insert statements like:
  // METHOD1:
  //    fChain->SetBranchStatus("*",0);  // disable all branches
  //    fChain->SetBranchStatus("branchname",1);  // activate branchname
  // METHOD2: replace line
  //    fChain->GetEntry(jentry);       //read all branches
  //by  b_branchname->GetEntry(ientry); //read only this branch
  if (fChain == 0) return;

  const Int_t nsensor = 7;

   // N, K, S, R
   std::vector<double> V_s[nsensor];
   std::vector<double> V_r[nsensor];
   std::vector<double> R_n[nsensor];
   std::vector<double> T_n[nsensor];
   std::vector<double> dV_r[nsensor];
   std::vector<double> dR_n[nsensor];
   std::vector<double> R_k[nsensor];
   std::vector<double> R_r[nsensor];
   std::vector<double> time[nsensor];
   std::vector<double> record[nsensor];
   std::vector<double> V_r_corrected[nsensor];
   std::vector<double> V_s_corrected[nsensor];

   Long64_t nentries = fChain->GetEntriesFast();

   Long64_t nbytes = 0, nb = 0;
   for (Long64_t jentry=0; jentry<nentries;jentry++) {
      Long64_t ientry = LoadTree(jentry);
      if (ientry < 0) break;
      nb = fChain->GetEntry(jentry);   nbytes += nb;

      if ( id < idfirst || id > idlast ) continue;

      // cuts to eliminate data pathologies

      if ( TMath::Abs( (i_r/i_r_set) - 1.0 ) < 0.01 && 
	   TMath::Abs( (i_s/i_s_set) - 1.0 ) < 0.01 && 
	   TMath::Abs( (i_n/i_n_set) - 1.0 ) < 0.01 &&
	   0.75 < v_n && v_n < 5.0 && 
	   v_r < 10.0 && v_s < 10.0 ) {
	// fill vectors for plotting
	V_s[channel].push_back(v_s);
	V_r[channel].push_back(v_r);
	dV_r[channel].push_back( 0.00005 );
	R_n[channel].push_back(v_n/i_n);
	T_n[channel].push_back( temperature(v_n,i_n) );
	dR_n[channel].push_back( 5.0 );
	R_k[channel].push_back(v_k/i_k);
	R_r[channel].push_back(v_r/i_r);
	time[channel].push_back(t);
	record[channel].push_back(id);
      }
   }

   gSystem->Setenv("TZ","EDT");
   gStyle->SetOptFit(111);

   // 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 };
   Double_t b0[nsensor] = { 0.0 };
   Double_t c0[nsensor] = { 0.0 };

   // 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 };
   
   TString legend[nsensor] = { "Channel 0: 150", "Channel 1: 151", "Channel 2: 152", "Channel 3: 148", "Channel 4: 149", "Channel 5", "Channel 6" };
   
   TGraphErrors *gr[nsensor];
   TGraph *grna[nsensor];

   TGraph *gr_vr[nsensor];
   TGraph *gr_vrc[nsensor];
   TGraph *gr_vs[nsensor];
   TGraph *gr_vsc[nsensor];
   TGraph *gr_rn[nsensor];
   TGraph *gr_tn[nsensor];
   TGraph *gr_rk[nsensor];
   TGraph *gr_vs_tn[nsensor];
   TGraph *gr_vr_tn[nsensor];
   
   TMultiGraph *mg_vs_tn = new TMultiGraph("mg_vs_tn","mg_vs_tn");;
   TMultiGraph *mg_vr_tn = new TMultiGraph("mg_vr_tn","mg_vr_tn");;

   Int_t icolor = 1;
   Double_t corrected;
   for ( Int_t i = 0; i < nsensor; i++ ) {

     std::cout << i << ": " << a0[i] << "," << b0[i] << "," << c0[i] << std::endl;
     for ( Int_t j = 0; j < (int) R_n[i].size(); j++ ) {
       corrected = V_r[i][j] - 
       	 ( a0[i] + b0[i]*R_n[i][j] + c0[i]*TMath::Power( R_n[i][j],2.0 ) );
       V_r_corrected[i].push_back( corrected );
       V_s_corrected[i].push_back( V_s[i][j] - s0[i] );
     }

     gr[i] = new TGraphErrors( R_n[i].size(), &R_n[i][0], &V_r[i][0], &dR_n[i][0], &dV_r[i][0] );
     grna[i] = new TGraph( R_n[i].size(), &(record[i][0]), &(R_n[i][0]) );

     gr_vs_tn[i] = new TGraph( T_n[i].size(), &(T_n[i][0]), &(V_s[i][0]) );
     gr_vs_tn[i]->SetMarkerColor( icolor );
     gr_vs_tn[i]->SetLineColor( icolor );
     mg_vs_tn->Add( gr_vs_tn[i], "p" );
    
     gr_vr_tn[i] = new TGraph( T_n[i].size(), &(T_n[i][0]), &(V_r[i][0]) );
     gr_vr_tn[i]->SetMarkerColor( icolor );
     gr_vr_tn[i]->SetLineColor( icolor );
     mg_vr_tn->Add( gr_vr_tn[i], "p" );

     // time series graphs

     gr_vr[i] = new TGraph( R_n[i].size(), &(time[i][0]), &(V_r[i][0]) );
     gr_vrc[i] = new TGraph( R_n[i].size(), &(time[i][0]), &(V_r_corrected[i][0]) );
     gr_vs[i] = new TGraph( V_s[i].size(), &(time[i][0]), &(V_s[i][0]) );
     gr_vsc[i] = new TGraph( V_s[i].size(), &(time[i][0]), &(V_s_corrected[i][0]) );
     gr_rn[i] = new TGraph( R_n[i].size(), &(time[i][0]), &(R_n[i][0]) );
     gr_tn[i] = new TGraph( T_n[i].size(), &(time[i][0]), &(T_n[i][0]) );
     gr_rk[i] = new TGraph( R_n[i].size(), &(time[i][0]), &(R_k[i][0]) );

     icolor++;
   }

   TCanvas *correct = new TCanvas("correct","correct",960,480);
   correct->Divide(2,1);

   correct->cd(1);
   mg_vs_tn->Draw("a");
   mg_vs_tn->GetXaxis()->SetTitle("T (#circC)");
   mg_vs_tn->GetYaxis()->SetTitle("V (V)");

   correct->cd(2);
   mg_vr_tn->Draw("a");
   mg_vr_tn->GetXaxis()->SetTitle("T (#circC)");
   mg_vr_tn->GetYaxis()->SetTitle("V (V)");

   TCanvas *cradmon = new TCanvas("cradmon","radmon",640,480);
   cradmon->Divide(2,3);

   // Draw the time series summary

   cradmon->cd(1);
   TMultiGraph *mg_rk;
   mg_rk = time_series( gr_rk, legend, "PHENIX Dosimeter Resistor", "R ( #Omega )", nsensor ); 
   mg_rk->GetYaxis()->SetRangeUser( 995, 1015.0 );

   cradmon->cd(2);
   TMultiGraph *mg_tn;
   mg_tn = time_series( gr_tn, legend, "PHENIX Dosimeter Temperature", "T (#circC)", nsensor ); 

   cradmon->cd(3);
   TMultiGraph *mg_vr;
   mg_vr = time_series( gr_vr, legend, "PHENIX Dosimeter RadFET", "V@160 #mu A (V)", nsensor ); 

   cradmon->cd(4);
   TMultiGraph *mg_vs;
   mg_vs = time_series( gr_vs, legend, "PHENIX Dosimeter p-i-n Diode", "V@25mA (V)", nsensor ); 

   cradmon->cd(5);
   TMultiGraph *mg_vrc;
   mg_vrc = time_series( gr_vrc, legend, "PHENIX Corrected RadFET", "#DeltaV (V)", nsensor ); 

   cradmon->cd(6);
   TMultiGraph *mg_vsc;
   mg_vsc = time_series( gr_vsc, legend, "PHENIX Corrected p-i-n Diode", "#DeltaV (V)", nsensor ); 

   cradmon->Print(plotfile);

   // save graphs
   
   TFile *rootfile = new TFile( "radmonanb.root", "recreate");
   Char_t graphname[20];
   for ( Int_t i = 0; i < nsensor; i++ ) {
     sprintf( graphname, "gr_vr%d", i );
     gr_vr[i]->Write( graphname );
     sprintf( graphname, "gr_vs%d", i );
     gr_vs[i]->Write( graphname );
   }
   rootfile->Close();

}
Пример #3
0
static int dwiz_make_changes (DATASET *dwinfo, dw_opts *opts,
			      GtkWidget *dlg)
{
    gchar *setobs_cmd = NULL;
    gretlopt opt = OPT_NONE;
    int create = (opts->flags & DW_CREATE);
    int delmiss = (opts->flags & DW_DROPMISS);
    int delete_markers = 0;
    int err = 0;

#if DWDEBUG
    fprintf(stderr, "dwiz_make_changes: create = %d\n", create);
#endif

    /* preliminaries */
    if (time_series(dwinfo)) {
	ntodate(dwinfo->stobs, dwinfo->t1, dwinfo);
    } else if (known_panel(dwinfo)) {
	if (!dataset_is_panel(dataset)) {
	    /* Turning a subset of a non-panel dataset into a panel:
	       this change will be irreversible */
	    maybe_unrestrict_dataset();
	}
    }

    /* special: reorganizing dataset based on panel index vars */
    if (dwinfo->structure == PANEL_UNKNOWN) {
	int uv, tv;

	err = translate_panel_vars(opts, &uv, &tv);
	if (!err) {
	    err = set_panel_structure_from_vars(uv, tv, dataset);
	}
	if (!err) {
	    setobs_cmd = g_strdup_printf("setobs %s %s --panel-vars",
					 dataset->varname[uv],
					 dataset->varname[tv]);
	}
	goto finalize;
    }

    /* check for nothing to be done */
    if (dwinfo->structure == dataset->structure &&
	dwinfo->pd == dataset->pd &&
	strcmp(dwinfo->stobs, dataset->stobs) == 0) {
	if (create || delmiss) {
	    /* recording? */
	    goto finalize;
	} else {
	    infobox(_("No changes were made"));
	    return 0;
	}
    }

    /* if converting to time series, we probably don't want to
       retain any original observation-marker strings */
    if (dwinfo->structure == TIME_SERIES && 
	dataset->markers && !delmiss) {
	delete_markers = 1;
    }

    /* handle panel structure */
    if (known_panel(dwinfo)) {
	int nunits = dwinfo->t1;
	int nperiods = dataset->n / nunits;

	/* we don't offer a choice of "starting obs" */
	dwinfo->pd = (dwinfo->structure == STACKED_TIME_SERIES)? 
	    nperiods : nunits;
	strcpy(dwinfo->stobs, "1.1");
    } 

    /* handle conversion to cross-section */
    if (dwinfo->structure == CROSS_SECTION) {
	strcpy(dwinfo->stobs, "1");
    }

    if (dwinfo->structure == TIME_SERIES) {
	opt = OPT_T;
    } else if (dwinfo->structure == STACKED_TIME_SERIES) {
	opt = OPT_S;
    } else if (dwinfo->structure == STACKED_CROSS_SECTION) {
	opt = OPT_C;
    } else if (dwinfo->structure == CROSS_SECTION) {
	opt = OPT_X;
    } else if (dwinfo->structure == SPECIAL_TIME_SERIES) {
	opt = OPT_N;
    }

    err = simple_set_obs(dataset, dwinfo->pd, dwinfo->stobs, opt);

#if DWDEBUG
    fprintf(stderr, "pd=%d, stobs='%s', opt=%d; set_obs returned %d\n", 
	    dwinfo->pd, dwinfo->stobs, opt, err);
#endif

    if (!err && setobs_cmd == NULL) {
	setobs_cmd = g_strdup_printf("setobs %d %s%s",
				     dwinfo->pd, dwinfo->stobs, 
				     print_flags(opt, SETOBS));
    }

 finalize:

    if (!err && delmiss) {
	err = dataset_purge_missing_rows(dataset);
    }

    if (err) {
	gui_errmsg(err);
    } else if (create) {
	if (opts->flags & DW_SSHEET) {
	    gtk_widget_hide(dlg);
	    maybe_start_editing();
	} else {
	    register_data(NULLDATA_STARTED);
	    lib_command_sprintf("nulldata %d", dataset->n);
	    record_command_verbatim();
	}
    } else {
	if (delete_markers) {
	    dataset_destroy_obs_markers(dataset);
	}
	mark_dataset_as_modified();
    }

    if (!err && setobs_cmd != NULL) {
	lib_command_strcpy(setobs_cmd);
	record_command_verbatim();
    }

    g_free(setobs_cmd);

#if DWDEBUG
    fprintf(stderr, "dwiz_make_changes: returning %d\n", err);
#endif

    return err;
}
Пример #4
0
static int dwiz_compute_step (int prevstep, int direction, DATASET *dwinfo, 
			      dw_opts *opts)
{
    int create = opts->flags & DW_CREATE;
    int step = 0;

#if DWDEBUG
    fprintf(stderr, "dwiz_compute_step: incoming step = %d\n", prevstep);
#endif

    if (direction == DW_FORWARD) {
	if (prevstep == DW_SET_TYPE) {
	    if (time_series(dwinfo)) {
		step = DW_TS_FREQUENCY;
	    } else if (known_panel(dwinfo)) {
		if (create) {
		    dwinfo->structure = STACKED_TIME_SERIES;
		    step = DW_PANEL_SIZE;
		} else {
		    step = DW_PANEL_MODE;
		}
	    } else if (dwinfo->structure == PANEL_UNKNOWN) {
		step = DW_PANEL_MODE;
	    } else {
		/* cross section */
		dwinfo->pd = 1;
		step = DW_CONFIRM;
	    }		
	} else if (prevstep == DW_TS_FREQUENCY) {
	    if (dwinfo->structure != SPECIAL_TIME_SERIES) {
		if (dwinfo->pd == 52) {
		    step = DW_WEEKLY_SELECT;
		} else {
		    step = DW_STARTING_OBS;
		}
	    } else {
		step = DW_STARTING_OBS;
	    }
	} else if (prevstep == DW_WEEKLY_SELECT) {
	    step = DW_STARTING_OBS;
	} else if (prevstep == DW_PANEL_MODE) {
	    if (dwinfo->structure == PANEL_UNKNOWN) {
		step = DW_PANEL_VARS;
	    } else {
		step = DW_PANEL_SIZE;
	    }
	} else if (prevstep == DW_PANEL_VARS) {
	    if (process_panel_vars(dwinfo, opts)) {
		/* error: don't proceed */
		step = DW_PANEL_VARS;
	    } else {
		step = DW_CONFIRM;
	    }
	} else if (prevstep == DW_STARTING_OBS || 
		   prevstep == DW_PANEL_SIZE) {
	    if (prevstep == DW_PANEL_SIZE &&
		dwinfo->structure == STACKED_TIME_SERIES) {
		dwinfo->pd = dwinfo->t2;
	    }
	    step = DW_CONFIRM;
	} 
    } else if (direction == DW_BACK) {
	if (prevstep == DW_TS_FREQUENCY || prevstep == DW_PANEL_MODE) {
	    step = DW_SET_TYPE;
	} else if (prevstep == DW_STARTING_OBS) {
	    if (dwinfo->pd == 52) {
		step = DW_WEEKLY_SELECT;
	    } else {
		step = DW_TS_FREQUENCY;
	    }
	} else if (prevstep == DW_WEEKLY_SELECT) {
	    step = DW_TS_FREQUENCY;
	} else if (prevstep == DW_PANEL_SIZE) {
	    step = (create)? DW_SET_TYPE : DW_PANEL_MODE;
	} else if (prevstep == DW_PANEL_VARS) {
	    step = DW_PANEL_MODE;
	} else if (prevstep == DW_CONFIRM) {
	    if (dwinfo->structure == TIME_SERIES || 
		dwinfo->structure == SPECIAL_TIME_SERIES) {
		step = DW_STARTING_OBS;
	    } else if (dwinfo->structure == STACKED_TIME_SERIES ||
		       dwinfo->structure == STACKED_CROSS_SECTION) {
		step = DW_PANEL_SIZE;
	    } else {
		step = DW_SET_TYPE;
	    }
	} 
    }

#if DWDEBUG
    fprintf(stderr, "dwiz_compute_step: returning step = %d\n", step);
#endif

    return step;
}