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 | } |