Subversion Repositories f9daq

Rev

Details | Last modification | View Log | RSS feed

Rev Author Line No. Line
326 f9daq 1
#include <stdio.h>
2
#include <time.h>
3
#include <stdlib.h>
4
 
5
#include <TROOT.h>
6
#include <TLatex.h>
7
#include <TH1F.h>
8
#include <TH2D.h>
9
#include <TH3D.h>
10
#include <TGraph.h>
11
#include <TCanvas.h>
12
#include <TLegend.h>
13
#include <TStyle.h>
14
#include <TSystem.h>
15
#include <TFile.h>
16
#include <TTree.h>
17
#include <TDirectory.h>
18
#include <TPaveText.h>
19
 
20
#include "base.h"
21
#include "info.h"
22
#include "savetoroot.h"
23
 
24
int info(int runNumber, int save) {
25
 
26
  int HAPDnumber; //Number of HAPD: 0, 1, 2 or 3!
27
 
28
  char text[256];
29
  char pdfname[256];
30
  char buf[256];
31
  char path[128];
32
  int vrstaPisave = 82;
33
 
34
  const char * serialNumber;
35
  std::string serialNumberTemp;
36
  std::string HAPDserialNumber,FEBserialNumber;
37
 
38
  unsigned int id, len, cas;
39
  int vmon[24], vset[24];
40
  int imon[24];
41
  //int status[6];
42
  //int min_imon[6], max_imon[6], min_vmon[6], max_vmon[6], min_status[6], max_status[6];
43
  int min_chipBias = 0, max_chipBias = 0;
44
  int sizeOfTree;
45
  time_t itime;
46
  TDatime dh(1995,01,01,00,00,00); // to je za SetTimeOffset
47
 
48
  char * viri[6] = {"Guard", "Chip A", "Chip B", "Chip C", "Chip D", "HV"};
49
 
50
  TFile * data[3];
51
  TCanvas * c;
52
  TPad * pad1, * pad2, * pad3, * pad4, * pad5;
53
  TPaveText  * sn, * timeStamp, * imeMeritve, * zacetekMeritve;
54
  TGraph * gr[10];
55
  TLegend * leg[2];
56
  TTree * tree;
57
 
58
  /********** GLOBALNE **********/
59
  gStyle->SetOptStat(0);
60
  //gStyle->SetOptTitle(1);
61
  gStyle->SetTextFont(vrstaPisave);
62
  gStyle->SetTitleFont(vrstaPisave);
63
  gStyle->SetTitleFontSize(0.08);
64
 
65
  gStyle->SetPalette(55);
66
 
67
  //gROOT->SetBatch(kTRUE); //Does not show canvases
68
 
69
  sprintf(path,"../modules/%04d/%04d_1_Treshold_Waveform.root",runNumber,runNumber);
70
  data[0] = new TFile(path);
71
  if (!file_exists(path)){
72
    printf("File '%s' does not exist.\n",path);
73
    return -1;
74
  }
75
  serialNumber = getSN(runNumber);
76
  printf("base.c return: %s\n", serialNumber);
77
  serialNumberTemp = serialNumber;
78
 
79
  sprintf(path,"../modules/%04d/%04d_2_2DX.root",runNumber,runNumber);
80
  data[1] = new TFile(path);
81
  if (!file_exists(path)){
82
    printf("File '%s' does not exist.\n",path);
83
    return -1;
84
  }
85
  sprintf(path,"../modules/%04d/%04d_3_2DY.root",runNumber,runNumber);
86
  data[2] = new TFile(path);
87
  if (!file_exists(path)){
88
    printf("File '%s' does not exist.\n",path);
89
    return -1;
90
  }
91
 
92
  for(HAPDnumber=0;HAPDnumber<4;HAPDnumber++){
93
 
94
          SaveToRootInit();
95
 
96
   //std::cout << serialNumberTemp << std::endl;
97
    FEBserialNumber = serialNumberTemp.substr(0,serialNumberTemp.find(","));
98
    serialNumberTemp.erase(0,FEBserialNumber.length()+1);
99
    if(!FEBserialNumber.compare("noserial")) continue;
100
    HAPDserialNumber = FEBserialNumber.substr(0,FEBserialNumber.find("/"));
101
    FEBserialNumber.erase(0,FEBserialNumber.find("/")+1);
102
 
103
    printf("%s \t %s \n",FEBserialNumber.c_str(),HAPDserialNumber.c_str());
104
 
105
    sprintf(buf,"%04d_%s_Monitor",runNumber,HAPDserialNumber.c_str());
106
    c = new TCanvas(buf,buf,0,0,1500,1200);
107
    /******* PRVI PAD *******/
108
    sprintf(buf,"%04d_%s_Monitor_pad1",runNumber,HAPDserialNumber.c_str());
109
    pad1 = new TPad(buf,"SN",0,0.95,1,1,0,0);
110
      pad1->SetFillStyle(4000);
111
      pad1->Draw();
112
      sn = new TPaveText(0.2,0,0.8,1,"ndc");
113
        sn->SetBorderSize(0);
114
        sn->SetFillColor(4000);
115
        sn->SetTextSize(.8);
116
        sn->SetTextAlign(22);
117
        sn->SetTextFont(vrstaPisave);
118
 
119
    /******* DRUGI PAD *******/
120
    sprintf(buf,"%04d_%s_Monitor_pad2",runNumber,HAPDserialNumber.c_str());
121
    pad2 = new TPad(buf,"Date",0.05,0.9,0.95,0.95,0,0);
122
      pad2->SetFillStyle(4000);
123
      pad2->Draw();
124
      timeStamp = new TPaveText(0.2,0,0.8,1,"ndc");
125
        timeStamp->SetBorderSize(0);
126
        timeStamp->SetFillColor(4000);
127
        timeStamp->SetTextSize(.4);
128
        timeStamp->SetTextAlign(22);
129
        timeStamp->SetTextFont(vrstaPisave);
130
 
131
    /******* TRETJI PAD *******/
132
    sprintf(buf,"%04d_%s_Monitor_pad3",runNumber,HAPDserialNumber.c_str());
133
    pad3 = new TPad(buf,"Napetosti",0,0,1,0.9,0,0);
134
      pad3->SetFillStyle(4000);
135
      pad3->Draw();
136
      pad3->cd();
137
      pad3->Divide(0,3);
138
 
139
    for (int k=0;k<3;k++){
140
      pad3->cd(k+1);
141
 
142
      sprintf(buf,"%04d_%s_Monitor_pad4",runNumber,HAPDserialNumber.c_str());
143
      pad4 = new TPad(buf,"Naslov",0.05,0.9,0.95,1,0,0);
144
        pad4->SetFillStyle(4000);
145
        pad4->Draw();
146
        imeMeritve = new TPaveText(0,0,1,1,"ndc");
147
          imeMeritve->SetBorderSize(0);
148
          imeMeritve->SetFillColor(kSpring+1);
149
          imeMeritve->SetTextSize(.6);
150
          imeMeritve->SetTextAlign(22);
151
          imeMeritve->SetTextFont(vrstaPisave);
152
 
153
        zacetekMeritve = new TPaveText(0.8,0,1,1,"ndc");
154
          zacetekMeritve->SetBorderSize(0);
155
          zacetekMeritve->SetFillColor(kSpring+1);
156
          zacetekMeritve->SetTextSize(.4);
157
          zacetekMeritve->SetTextAlign(22);
158
          zacetekMeritve->SetTextFont(vrstaPisave);
159
 
160
      switch (k){
161
        case 0: sprintf(text, "Treshold and Waveform");break;
162
        case 1: sprintf(text, "2D in X");break;
163
        case 2: sprintf(text, "2D in Y");break;
164
      }
165
 
166
      pad4->cd();
167
        imeMeritve->AddText(text);
168
        imeMeritve->Draw();
169
 
170
      pad3->cd(k+1);
171
 
172
      sprintf(buf,"%04d_%s_Monitor_pad5",runNumber,HAPDserialNumber.c_str());
173
      pad5 = new TPad(buf,"Grafi",0,0,1,.9,0,0);
174
        pad5->SetFillStyle(4000);
175
        pad5->Draw();
176
        pad5->cd();
177
        pad5->Divide(4,0);
178
 
179
      tree = (TTree*) data[k]->Get("Monitor");
180
        tree->SetBranchAddress("id",&id);
181
        tree->SetBranchAddress("len",&len);
182
        tree->SetBranchAddress("time",&cas);
183
        tree->SetBranchAddress("imon",&imon);
184
        tree->SetBranchAddress("vmon",&vmon);
185
        tree->SetBranchAddress("vset",&vset);
186
        //tree->SetBranchAddress("status",&status);
187
 
188
      sizeOfTree = tree->GetEntries();
189
 
190
      gr[0] = new TGraph(sizeOfTree);
191
      gr[1] = new TGraph(sizeOfTree);
192
      gr[2] = new TGraph(sizeOfTree);
193
      gr[3] = new TGraph(sizeOfTree);
194
      gr[4] = new TGraph(sizeOfTree);
195
      gr[5] = new TGraph(sizeOfTree);
196
      gr[6] = new TGraph(sizeOfTree);
197
      gr[7] = new TGraph(sizeOfTree);
198
      gr[8] = new TGraph(sizeOfTree);
199
      gr[9] = new TGraph(sizeOfTree);
200
 
201
      for (int i=0;i<sizeOfTree;i++){
202
        tree->GetEntry(i);
203
 
204
        cas = cas-2208988800; //(2208988800)CVI zapiše čas v sekundah od 00:00:00 1.1.1900 naprej, UNIX čas je od 00:00:00 1.1.1970
205
        // cas-u morš še nekaj odštet, kr kasneje ko delaš TimeOffset, le ta vodi čas od 00:00:00 1.1.1995 naprej.
206
        gr[0]->SetPoint(i,cas-788918400,vmon[HAPDnumber*6+0]);
207
        gr[1]->SetPoint(i,cas-788918400,vmon[HAPDnumber*6+1]-vset[HAPDnumber*6+1]);
208
        gr[2]->SetPoint(i,cas-788918400,vmon[HAPDnumber*6+2]-vset[HAPDnumber*6+2]);
209
        gr[3]->SetPoint(i,cas-788918400,vmon[HAPDnumber*6+3]-vset[HAPDnumber*6+3]);
210
        gr[4]->SetPoint(i,cas-788918400,vmon[HAPDnumber*6+4]-vset[HAPDnumber*6+4]);
211
        gr[5]->SetPoint(i,cas-788918400,vmon[HAPDnumber*6+5]);
212
        gr[6]->SetPoint(i,cas-788918400,imon[HAPDnumber*6+1]/1000.);
213
        gr[7]->SetPoint(i,cas-788918400,imon[HAPDnumber*6+2]/1000.);
214
        gr[8]->SetPoint(i,cas-788918400,imon[HAPDnumber*6+3]/1000.);
215
        gr[9]->SetPoint(i,cas-788918400,imon[HAPDnumber*6+4]/1000.);
216
        if (!i){
217
          itime = cas;
218
          zacetekMeritve->AddText(ctime(&itime));
219
        } else if (k==2 && i==sizeOfTree-1){
220
          itime = cas;
221
          sprintf(buf,"End of measuring: %s",ctime(&itime));
222
          timeStamp->AddText(buf);
223
        }
224
 
225
        for (int j=1;j<5;j++){
226
          if (!i && j==1) {
227
            min_chipBias = max_chipBias = vmon[HAPDnumber*6+j]-vset[HAPDnumber*6+j];
228
          } else {
229
            if (min_chipBias > vmon[HAPDnumber*6+j]-vset[HAPDnumber*6+j]) min_chipBias = vmon[HAPDnumber*6+j]-vset[HAPDnumber*6+j];
230
            else if (max_chipBias < vmon[HAPDnumber*6+j]-vset[HAPDnumber*6+j]) max_chipBias = vmon[HAPDnumber*6+j]-vset[HAPDnumber*6+j];
231
          }
232
        }
233
      }
234
 
235
      leg[0] = new TLegend(0.55,0.1,.9,0.35);
236
      leg[1] = new TLegend(0.70,0.70,.9,0.9);
237
      leg[0]->SetFillColor(0);
238
      leg[1]->SetFillColor(0);
239
      for (int i=0;i<10;i++){
240
        gr[i]->GetYaxis()->CenterTitle();
241
        gr[i]->GetYaxis()->SetTitleFont(vrstaPisave);
242
        gr[i]->GetYaxis()->SetLabelFont(vrstaPisave);
243
        gr[i]->GetYaxis()->SetTitleOffset(1.6);
244
 
245
 
246
        gr[i]->GetXaxis()->SetTitleFont(vrstaPisave);
247
        gr[i]->GetXaxis()->SetLabelFont(vrstaPisave);
248
        //gr[i]->GetXaxis()->CenterTitle();
249
        gr[i]->GetXaxis()->SetTimeDisplay(1);
250
        gr[i]->GetXaxis()->SetTimeOffset(dh.Convert());
251
        gr[i]->GetXaxis()->SetTimeFormat("#splitline{%H:%M}{%d-%m}");
252
        gr[i]->GetXaxis()->SetLabelOffset(0.02);
253
        gr[i]->GetXaxis()->SetTitleOffset(1.5);
254
 
255
 
256
        if(!i){
257
          pad5->cd(1);
258
 
259
          sprintf(text, "Guard bias (RMS = %.0f mV);Time;Bias [mV]", gr[i]->GetRMS(2));
260
          gr[i]->SetTitle(text);
261
          gr[i]->GetYaxis()->SetRangeUser(170000,180000);
262
 
263
          gr[i]->Draw("AL");
264
 
265
          sprintf(text, "Guard_%s_T_%d", HAPDserialNumber.c_str(), k);
266
          SaveToRootAddGraph(gr[i], text);
267
        } else if (i<5 && i!=0){
268
          pad5->cd(2);
269
          sprintf(text, "%s (RMS = %.0f mV)", viri[i], gr[i]->GetRMS(2));
270
          leg[0]->AddEntry(gr[i],text,"L");
271
 
272
 
273
          //gr[i]->GetYaxis()->SetRangeUser(min_chipBias-50,max_chipBias+50);
274
          gr[i]->GetYaxis()->SetRangeUser(-1000,1000);
275
 
276
          gr[i]->SetTitle("Chip (vmon - vset) difference;Time;Bias difference [mV]");
277
          if (i==1) gr[i]->Draw("AL");
278
 
279
          gr[i]->SetLineColor(i);
280
          gr[i]->SetLineWidth(1);
281
 
282
          gr[i]->Draw("LSAME");
283
 
284
          sprintf(text, "BiasDifference_%s_CHIP_%d_T_%d", HAPDserialNumber.c_str(), i-1, k);
285
                  SaveToRootAddGraph(gr[i], text);
286
        } else if (i>5){
287
          pad5->cd(3);
288
          sprintf(text, "%s", viri[i-5]);
289
          leg[1]->AddEntry(gr[i],text,"L");
290
 
291
          gr[i]->GetYaxis()->SetRangeUser(-1,11);
292
 
293
          gr[i]->SetTitle("Chip leakage current;Time;Leakage current [mA]");
294
          if (i==6) gr[i]->Draw("AL");
295
 
296
          gr[i]->SetLineColor(i);
297
          gr[i]->SetLineWidth(1);
298
 
299
          gr[i]->Draw("LSAME");
300
 
301
          sprintf(text, "LeakageCurrent_%s_CHIP_%d_T_%d", HAPDserialNumber.c_str(), i-6, k);
302
                  SaveToRootAddGraph(gr[i], text);
303
        } else if (i==5){
304
          pad5->cd(4);
305
          sprintf(text, "HV (RMS = %.0f mV);Time;Bias [mV]", gr[i]->GetRMS(2));
306
          gr[i]->GetYaxis()->SetRangeUser(6900000,7100000);
307
 
308
          gr[i]->SetTitle(text);
309
 
310
          gr[i]->Draw("AL");
311
 
312
          sprintf(text, "HV_%s_T_%d", HAPDserialNumber.c_str(), k);
313
                  SaveToRootAddGraph(gr[i], text);
314
        }
315
      }
316
 
317
      pad5->cd(2);
318
        leg[0]->Draw();
319
      pad5->cd(3);
320
        leg[1]->Draw();
321
 
322
      pad4->cd();
323
        zacetekMeritve->Draw();
324
    }
325
 
326
    pad1->cd();
327
      sprintf(buf,"RUN#: %04d (pos %d)   FEB#: %s   HAPD#: %s",runNumber, HAPDnumber, FEBserialNumber.c_str(),HAPDserialNumber.c_str());
328
      sn->AddText(buf);
329
      sn->Draw();
330
 
331
    pad2->cd();
332
      timeStamp->Draw();
333
 
334
    c->Modified();
335
    c->Update();
336
 
337
    if (save) {
338
      switch (save) {
339
        case 1: sprintf(pdfname,"../modules/%04d/%04d_%s_0_Info.pdf",runNumber,runNumber,HAPDserialNumber.c_str());break;
340
        case 2: sprintf(pdfname,"../modules/%04d/%04d_%s.pdf(",runNumber,runNumber,HAPDserialNumber.c_str());break;
341
 
342
      }
343
      c->SaveAs(pdfname,"pdf");
344
    }
345
    sprintf(pdfname,"../modules/%04d/%04d_%s_out.root",runNumber,runNumber,HAPDserialNumber.c_str());
346
    SaveToRootWrite(pdfname, HAPDserialNumber.c_str());
347
  }
348
  for(int k=0;k<3;k++) delete data[k];
349
 
350
  return 0;
351
}