Hall-D Software  alpha
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Macros Groups Pages
PS_timing/scripts/offsets.C
Go to the documentation of this file.
1 void GetData(TString fname, double *y, double &mean, const int N) {
2  ifstream fin(fname);
3  double prod = 0.0; double sum = 0.0;
4  for (int i = 0; i < N; i++) {
5  char sep; int n; double w, t, dt, sigma;
6  fin >> n >> sep >> w >> sep >> t >> sep >> dt >> sep >> sigma;
7  y[i] = t;
8  prod += w*t;
9  sum += w;
10  }
11  if (sum > 0.0) {
12  mean = prod/sum;
13  }
14  for (int i = 0; i < N; i++) {if (y[i] == 0.0) y[i] = mean;}
15  fin.close();
16 }
17 double GetBaseOffset(TString fname) {
18  ifstream fin(fname);
19  char sep; int n; double w, t, dt, sigma;
20  fin >> n >> sep >> w >> sep >> t >> sep >> dt >> sep >> sigma;
21  fin.close();
22  return t;
23 }
24 void GetCCDBOffsetsBase(double &adc_offset_psc, double &tdc_offset_psc, double &adc_offset_ps) {
25  ifstream fin("offsets/base_time_offset_ccdb.txt");
27  fin >> adc_offset_psc >> tdc_offset_psc >> adc_offset_ps;
28  fin.close();
29 }
30 void GetPSCCCDBOffsetsTDC(double* tdc_offsets, const int N) {
31  ifstream fin("offsets/tdc_timing_offsets_psc_ccdb.txt");
33  for (int i = 0; i < N; i++) {
34  fin >> tdc_offsets[i];
35  }
36  fin.close();
37 }
38 void GetPSCCCDBOffsetsADC(double* adc_offsets, const int N) {
39  ifstream fin("offsets/adc_timing_offsets_psc_ccdb.txt");
41  for (int i = 0; i < N; i++) {
42  fin >> adc_offsets[i];
43  }
44  fin.close();
45 }
46 void GetPSCCDBOffsetsADC(double* adc_offsets_l, double* adc_offsets_r, const int N) {
47  ifstream fin("offsets/adc_timing_offsets_ps_ccdb.txt");
49  for (int i = 0; i < N; i++) {
50  fin >> adc_offsets_l[i] >> adc_offsets_r[i];
51  }
52  fin.close();
53 }
54 void WriteBaseOffsets(double TAGH_mu, double tdc_mu, double tdcadc_mu, double ps_mu) {
55  double adc_ccdb_psc; double tdc_ccdb_psc; double adc_ccdb_ps;
56  GetCCDBOffsetsBase(adc_ccdb_psc,tdc_ccdb_psc,adc_ccdb_ps);
57  ofstream fout; fout.open("offsets/base_time_offset.txt");
58  TString sep = " ";
59  double adc_mu = tdc_mu - tdcadc_mu; // mean PSC ADC time
60  fout << adc_ccdb_psc - adc_mu + TAGH_mu << sep << tdc_ccdb_psc - tdc_mu + TAGH_mu << sep << adc_ccdb_ps - ps_mu + TAGH_mu << endl;
61  fout.close();
62 }
63 void WritePSCTDCOffsets(double *y, double mean, const int N) {
64  double y_ccdb[N];
65  GetPSCCCDBOffsetsTDC(y_ccdb,N);
66  ofstream fout; fout.open("offsets/tdc_timing_offsets_psc.txt");
67  TString sep = " ";
68  for (int i = 0; i < N; i++) fout << y_ccdb[i] + y[i] - mean << endl;
69  fout.close();
70  fout.open("offsets/tdc_timing_offsets_psc_diff.txt");
71  for (int i = 0; i < N; i++) fout << y[i] - mean << endl;
72  fout.close();
73 }
74 void WritePSCADCOffsets(double *y_tdcadc, double mean_tdcadc, double *y, double mean, const int N) {
75  double y_ccdb[N];
76  GetPSCCCDBOffsetsADC(y_ccdb,N);
77  ofstream fout; fout.open("offsets/adc_timing_offsets_psc.txt");
78  TString sep = " ";
79  for (int i = 0; i < N; i++) fout << y_ccdb[i] + y[i] - mean - (y_tdcadc[i] - mean_tdcadc) << endl;
80  fout.close();
81  fout.open("offsets/adc_timing_offsets_psc_diff.txt");
82  for (int i = 0; i < N; i++) fout << y[i] - mean - (y_tdcadc[i] - mean_tdcadc) << endl;
83  fout.close();
84 }
85 void WritePSADCOffsets(double *y, double mean, const int N) {
86  double yl_ccdb[int(N/2)]; double yr_ccdb[int(N/2)];
87  GetPSCCDBOffsetsADC(yl_ccdb,yr_ccdb,int(N/2));
88  ofstream fout; fout.open("offsets/adc_timing_offsets_ps.txt");
89  TString sep = " ";
90  for (int i = 0; i < int(N/2); i++) fout << yl_ccdb[i] + y[i] - mean << sep << yr_ccdb[i] + y[i+145] - mean << endl;
91  fout.close();
92  fout.open("offsets/adc_timing_offsets_ps_diff.txt");
93  for (int i = 0; i < int(N/2); i++) fout << y[i] - mean << sep << y[i+145] - mean << endl;
94  fout.close();
95 }
96 int offsets(TString dir) {
97  system("mkdir -p offsets");
98  // PSC offsets
99  const int N = 16; // counters
100  double y[N]; double mean_tdc = 0.0;
101  GetData(dir+"/results_PSC.txt",y,mean_tdc,N);
102  WritePSCTDCOffsets(y,mean_tdc,N);
103  double y_tdcadc[N]; double mean_tdcadc = 0.0;
104  GetData(dir+"/results_TDCADC.txt",y_tdcadc,mean_tdcadc,N);
105  WritePSCADCOffsets(y_tdcadc,mean_tdcadc,y,mean_tdc,N);
106  // PS offsets
107  const int N_ps = 290; // counters
108  double y_ps[N_ps]; double mean_ps = 0.0;
109  GetData(dir+"/results_PS.txt",y_ps,mean_ps,N_ps);
110  WritePSADCOffsets(y_ps,mean_ps,N_ps);
111  // Base offsets
112  double PSCTAGH_offset = GetBaseOffset(dir+"/results_base.txt");
113  WriteBaseOffsets(PSCTAGH_offset,mean_tdc,mean_tdcadc,mean_ps);
114  return 0;
115 }
double GetBaseOffset(TString fname)
#define y
int offsets(TString dir)
void GetCCDBOffsetsBase(double &adc_offset_psc, double &tdc_offset_psc, double &adc_offset_ps)
void GetPSCCCDBOffsetsADC(double *adc_offsets, const int N)
Double_t sigma[NCHANNELS]
Definition: st_tw_resols.C:37
void GetPSCCDBOffsetsADC(double *adc_offsets_l, double *adc_offsets_r, const int N)
void GetData(TString fname, double *y, double &mean, const int N)
void WritePSCTDCOffsets(double *y, double mean, const int N)
void GetPSCCCDBOffsetsTDC(double *tdc_offsets, const int N)
void WritePSADCOffsets(double *y, double mean, const int N)
TDirectory * dir
Definition: bcal_hist_eff.C:31
void WritePSCADCOffsets(double *y_tdcadc, double mean_tdcadc, double *y, double mean, const int N)
void WriteBaseOffsets(double TAGH_mu, double tdc_mu, double tdcadc_mu, double ps_mu)