Blame |
Last modification |
View Log
| RSS feed
#include <stdio.h>
#include <time.h>
#include <stdlib.h>
#include <TROOT.h>
#include <TLatex.h>
#include <TH1F.h>
#include <TH2D.h>
#include <TH3D.h>
#include <TGraph.h>
#include <TCanvas.h>
#include <TLegend.h>
#include <TStyle.h>
#include <TSystem.h>
#include <TFile.h>
#include <TTree.h>
#include <TDirectory.h>
#include <TPaveText.h>
#include "base.h"
#include "info.h"
#include "savetoroot.h"
int info
(int runNumber
, int save
) {
int HAPDnumber
; //Number of HAPD: 0, 1, 2 or 3!
char text
[256];
char pdfname
[256];
char buf
[256];
char path
[128];
int vrstaPisave
= 82;
const char * serialNumber
;
std
::string serialNumberTemp
;
std
::string HAPDserialNumber
,FEBserialNumber
;
unsigned int id
, len
, cas
;
int vmon
[24], vset
[24];
int imon
[24];
//int status[6];
//int min_imon[6], max_imon[6], min_vmon[6], max_vmon[6], min_status[6], max_status[6];
int min_chipBias
= 0, max_chipBias
= 0;
int sizeOfTree
;
time_t itime
;
TDatime dh
(1995,01,01,00,00,00); // to je za SetTimeOffset
char * viri
[6] = {"Guard", "Chip A", "Chip B", "Chip C", "Chip D", "HV"};
TFile
* data
[3];
TCanvas
* c
;
TPad
* pad1
, * pad2
, * pad3
, * pad4
, * pad5
;
TPaveText
* sn
, * timeStamp
, * imeMeritve
, * zacetekMeritve
;
TGraph
* gr
[10];
TLegend
* leg
[2];
TTree
* tree
;
/********** GLOBALNE **********/
gStyle
->SetOptStat
(0);
//gStyle->SetOptTitle(1);
gStyle
->SetTextFont
(vrstaPisave
);
gStyle
->SetTitleFont
(vrstaPisave
);
gStyle
->SetTitleFontSize
(0.08);
gStyle
->SetPalette
(55);
//gROOT->SetBatch(kTRUE); //Does not show canvases
sprintf(path
,"../modules/%04d/%04d_1_Treshold_Waveform.root",runNumber
,runNumber
);
data
[0] = new TFile
(path
);
if (!file_exists
(path
)){
printf("File '%s' does not exist.\n",path
);
return -1;
}
serialNumber
= getSN
(runNumber
);
printf("base.c return: %s\n", serialNumber
);
serialNumberTemp
= serialNumber
;
sprintf(path
,"../modules/%04d/%04d_2_2DX.root",runNumber
,runNumber
);
data
[1] = new TFile
(path
);
if (!file_exists
(path
)){
printf("File '%s' does not exist.\n",path
);
return -1;
}
sprintf(path
,"../modules/%04d/%04d_3_2DY.root",runNumber
,runNumber
);
data
[2] = new TFile
(path
);
if (!file_exists
(path
)){
printf("File '%s' does not exist.\n",path
);
return -1;
}
for(HAPDnumber
=0;HAPDnumber
<4;HAPDnumber
++){
SaveToRootInit
();
//std::cout << serialNumberTemp << std::endl;
FEBserialNumber
= serialNumberTemp.
substr(0,serialNumberTemp.
find(","));
serialNumberTemp.
erase(0,FEBserialNumber.
length()+1);
if(!FEBserialNumber.
compare("noserial")) continue;
HAPDserialNumber
= FEBserialNumber.
substr(0,FEBserialNumber.
find("/"));
FEBserialNumber.
erase(0,FEBserialNumber.
find("/")+1);
printf("%s \t %s \n",FEBserialNumber.
c_str(),HAPDserialNumber.
c_str());
sprintf(buf
,"%04d_%s_Monitor",runNumber
,HAPDserialNumber.
c_str());
c
= new TCanvas
(buf
,buf
,0,0,1500,1200);
/******* PRVI PAD *******/
sprintf(buf
,"%04d_%s_Monitor_pad1",runNumber
,HAPDserialNumber.
c_str());
pad1
= new TPad
(buf
,"SN",0,0.95,1,1,0,0);
pad1
->SetFillStyle
(4000);
pad1
->Draw
();
sn
= new TPaveText
(0.2,0,0.8,1,"ndc");
sn
->SetBorderSize
(0);
sn
->SetFillColor
(4000);
sn
->SetTextSize
(.8);
sn
->SetTextAlign
(22);
sn
->SetTextFont
(vrstaPisave
);
/******* DRUGI PAD *******/
sprintf(buf
,"%04d_%s_Monitor_pad2",runNumber
,HAPDserialNumber.
c_str());
pad2
= new TPad
(buf
,"Date",0.05,0.9,0.95,0.95,0,0);
pad2
->SetFillStyle
(4000);
pad2
->Draw
();
timeStamp
= new TPaveText
(0.2,0,0.8,1,"ndc");
timeStamp
->SetBorderSize
(0);
timeStamp
->SetFillColor
(4000);
timeStamp
->SetTextSize
(.4);
timeStamp
->SetTextAlign
(22);
timeStamp
->SetTextFont
(vrstaPisave
);
/******* TRETJI PAD *******/
sprintf(buf
,"%04d_%s_Monitor_pad3",runNumber
,HAPDserialNumber.
c_str());
pad3
= new TPad
(buf
,"Napetosti",0,0,1,0.9,0,0);
pad3
->SetFillStyle
(4000);
pad3
->Draw
();
pad3
->cd
();
pad3
->Divide
(0,3);
for (int k
=0;k
<3;k
++){
pad3
->cd
(k
+1);
sprintf(buf
,"%04d_%s_Monitor_pad4",runNumber
,HAPDserialNumber.
c_str());
pad4
= new TPad
(buf
,"Naslov",0.05,0.9,0.95,1,0,0);
pad4
->SetFillStyle
(4000);
pad4
->Draw
();
imeMeritve
= new TPaveText
(0,0,1,1,"ndc");
imeMeritve
->SetBorderSize
(0);
imeMeritve
->SetFillColor
(kSpring
+1);
imeMeritve
->SetTextSize
(.6);
imeMeritve
->SetTextAlign
(22);
imeMeritve
->SetTextFont
(vrstaPisave
);
zacetekMeritve
= new TPaveText
(0.8,0,1,1,"ndc");
zacetekMeritve
->SetBorderSize
(0);
zacetekMeritve
->SetFillColor
(kSpring
+1);
zacetekMeritve
->SetTextSize
(.4);
zacetekMeritve
->SetTextAlign
(22);
zacetekMeritve
->SetTextFont
(vrstaPisave
);
switch (k
){
case 0: sprintf(text
, "Treshold and Waveform");break;
case 1: sprintf(text
, "2D in X");break;
case 2: sprintf(text
, "2D in Y");break;
}
pad4
->cd
();
imeMeritve
->AddText
(text
);
imeMeritve
->Draw
();
pad3
->cd
(k
+1);
sprintf(buf
,"%04d_%s_Monitor_pad5",runNumber
,HAPDserialNumber.
c_str());
pad5
= new TPad
(buf
,"Grafi",0,0,1,.9,0,0);
pad5
->SetFillStyle
(4000);
pad5
->Draw
();
pad5
->cd
();
pad5
->Divide
(4,0);
tree
= (TTree
*) data
[k
]->Get
("Monitor");
tree
->SetBranchAddress
("id",&id
);
tree
->SetBranchAddress
("len",&len
);
tree
->SetBranchAddress
("time",&cas
);
tree
->SetBranchAddress
("imon",&imon
);
tree
->SetBranchAddress
("vmon",&vmon
);
tree
->SetBranchAddress
("vset",&vset
);
//tree->SetBranchAddress("status",&status);
sizeOfTree
= tree
->GetEntries
();
gr
[0] = new TGraph
(sizeOfTree
);
gr
[1] = new TGraph
(sizeOfTree
);
gr
[2] = new TGraph
(sizeOfTree
);
gr
[3] = new TGraph
(sizeOfTree
);
gr
[4] = new TGraph
(sizeOfTree
);
gr
[5] = new TGraph
(sizeOfTree
);
gr
[6] = new TGraph
(sizeOfTree
);
gr
[7] = new TGraph
(sizeOfTree
);
gr
[8] = new TGraph
(sizeOfTree
);
gr
[9] = new TGraph
(sizeOfTree
);
for (int i
=0;i
<sizeOfTree
;i
++){
tree
->GetEntry
(i
);
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
// cas-u morš še nekaj odštet, kr kasneje ko delaš TimeOffset, le ta vodi čas od 00:00:00 1.1.1995 naprej.
gr
[0]->SetPoint
(i
,cas
-788918400,vmon
[HAPDnumber
*6+0]);
gr
[1]->SetPoint
(i
,cas
-788918400,vmon
[HAPDnumber
*6+1]-vset
[HAPDnumber
*6+1]);
gr
[2]->SetPoint
(i
,cas
-788918400,vmon
[HAPDnumber
*6+2]-vset
[HAPDnumber
*6+2]);
gr
[3]->SetPoint
(i
,cas
-788918400,vmon
[HAPDnumber
*6+3]-vset
[HAPDnumber
*6+3]);
gr
[4]->SetPoint
(i
,cas
-788918400,vmon
[HAPDnumber
*6+4]-vset
[HAPDnumber
*6+4]);
gr
[5]->SetPoint
(i
,cas
-788918400,vmon
[HAPDnumber
*6+5]);
gr
[6]->SetPoint
(i
,cas
-788918400,imon
[HAPDnumber
*6+1]/1000.
);
gr
[7]->SetPoint
(i
,cas
-788918400,imon
[HAPDnumber
*6+2]/1000.
);
gr
[8]->SetPoint
(i
,cas
-788918400,imon
[HAPDnumber
*6+3]/1000.
);
gr
[9]->SetPoint
(i
,cas
-788918400,imon
[HAPDnumber
*6+4]/1000.
);
if (!i
){
itime
= cas
;
zacetekMeritve
->AddText
(ctime(&itime
));
} else if (k
==2 && i
==sizeOfTree
-1){
itime
= cas
;
sprintf(buf
,"End of measuring: %s",ctime(&itime
));
timeStamp
->AddText
(buf
);
}
for (int j
=1;j
<5;j
++){
if (!i
&& j
==1) {
min_chipBias
= max_chipBias
= vmon
[HAPDnumber
*6+j
]-vset
[HAPDnumber
*6+j
];
} else {
if (min_chipBias
> vmon
[HAPDnumber
*6+j
]-vset
[HAPDnumber
*6+j
]) min_chipBias
= vmon
[HAPDnumber
*6+j
]-vset
[HAPDnumber
*6+j
];
else if (max_chipBias
< vmon
[HAPDnumber
*6+j
]-vset
[HAPDnumber
*6+j
]) max_chipBias
= vmon
[HAPDnumber
*6+j
]-vset
[HAPDnumber
*6+j
];
}
}
}
leg
[0] = new TLegend
(0.55,0.1,.9,0.35);
leg
[1] = new TLegend
(0.70,0.70,.9,0.9);
leg
[0]->SetFillColor
(0);
leg
[1]->SetFillColor
(0);
for (int i
=0;i
<10;i
++){
gr
[i
]->GetYaxis
()->CenterTitle
();
gr
[i
]->GetYaxis
()->SetTitleFont
(vrstaPisave
);
gr
[i
]->GetYaxis
()->SetLabelFont
(vrstaPisave
);
gr
[i
]->GetYaxis
()->SetTitleOffset
(1.6);
gr
[i
]->GetXaxis
()->SetTitleFont
(vrstaPisave
);
gr
[i
]->GetXaxis
()->SetLabelFont
(vrstaPisave
);
//gr[i]->GetXaxis()->CenterTitle();
gr
[i
]->GetXaxis
()->SetTimeDisplay
(1);
gr
[i
]->GetXaxis
()->SetTimeOffset
(dh.
Convert());
gr
[i
]->GetXaxis
()->SetTimeFormat
("#splitline{%H:%M}{%d-%m}");
gr
[i
]->GetXaxis
()->SetLabelOffset
(0.02);
gr
[i
]->GetXaxis
()->SetTitleOffset
(1.5);
if(!i
){
pad5
->cd
(1);
sprintf(text
, "Guard bias (RMS = %.0f mV);Time;Bias [mV]", gr
[i
]->GetRMS
(2));
gr
[i
]->SetTitle
(text
);
gr
[i
]->GetYaxis
()->SetRangeUser
(170000,180000);
gr
[i
]->Draw
("AL");
sprintf(text
, "Guard_%s_T_%d", HAPDserialNumber.
c_str(), k
);
SaveToRootAddGraph
(gr
[i
], text
);
} else if (i
<5 && i
!=0){
pad5
->cd
(2);
sprintf(text
, "%s (RMS = %.0f mV)", viri
[i
], gr
[i
]->GetRMS
(2));
leg
[0]->AddEntry
(gr
[i
],text
,"L");
//gr[i]->GetYaxis()->SetRangeUser(min_chipBias-50,max_chipBias+50);
gr
[i
]->GetYaxis
()->SetRangeUser
(-1000,1000);
gr
[i
]->SetTitle
("Chip (vmon - vset) difference;Time;Bias difference [mV]");
if (i
==1) gr
[i
]->Draw
("AL");
gr
[i
]->SetLineColor
(i
);
gr
[i
]->SetLineWidth
(1);
gr
[i
]->Draw
("LSAME");
sprintf(text
, "BiasDifference_%s_CHIP_%d_T_%d", HAPDserialNumber.
c_str(), i
-1, k
);
SaveToRootAddGraph
(gr
[i
], text
);
} else if (i
>5){
pad5
->cd
(3);
sprintf(text
, "%s", viri
[i
-5]);
leg
[1]->AddEntry
(gr
[i
],text
,"L");
gr
[i
]->GetYaxis
()->SetRangeUser
(-1,11);
gr
[i
]->SetTitle
("Chip leakage current;Time;Leakage current [mA]");
if (i
==6) gr
[i
]->Draw
("AL");
gr
[i
]->SetLineColor
(i
);
gr
[i
]->SetLineWidth
(1);
gr
[i
]->Draw
("LSAME");
sprintf(text
, "LeakageCurrent_%s_CHIP_%d_T_%d", HAPDserialNumber.
c_str(), i
-6, k
);
SaveToRootAddGraph
(gr
[i
], text
);
} else if (i
==5){
pad5
->cd
(4);
sprintf(text
, "HV (RMS = %.0f mV);Time;Bias [mV]", gr
[i
]->GetRMS
(2));
gr
[i
]->GetYaxis
()->SetRangeUser
(6900000,7100000);
gr
[i
]->SetTitle
(text
);
gr
[i
]->Draw
("AL");
sprintf(text
, "HV_%s_T_%d", HAPDserialNumber.
c_str(), k
);
SaveToRootAddGraph
(gr
[i
], text
);
}
}
pad5
->cd
(2);
leg
[0]->Draw
();
pad5
->cd
(3);
leg
[1]->Draw
();
pad4
->cd
();
zacetekMeritve
->Draw
();
}
pad1
->cd
();
sprintf(buf
,"RUN#: %04d (pos %d) FEB#: %s HAPD#: %s",runNumber
, HAPDnumber
, FEBserialNumber.
c_str(),HAPDserialNumber.
c_str());
sn
->AddText
(buf
);
sn
->Draw
();
pad2
->cd
();
timeStamp
->Draw
();
c
->Modified
();
c
->Update
();
if (save
) {
switch (save
) {
case 1: sprintf(pdfname
,"../modules/%04d/%04d_%s_0_Info.pdf",runNumber
,runNumber
,HAPDserialNumber.
c_str());break;
case 2: sprintf(pdfname
,"../modules/%04d/%04d_%s.pdf(",runNumber
,runNumber
,HAPDserialNumber.
c_str());break;
}
c
->SaveAs
(pdfname
,"pdf");
}
sprintf(pdfname
,"../modules/%04d/%04d_%s_out.root",runNumber
,runNumber
,HAPDserialNumber.
c_str());
SaveToRootWrite
(pdfname
, HAPDserialNumber.
c_str());
}
for(int k
=0;k
<3;k
++) delete data
[k
];
return 0;
}