/[PAMELA software]/calo/flight/FQLOOK/macros/FCaloCHKCALIB.cxx
ViewVC logotype

Annotation of /calo/flight/FQLOOK/macros/FCaloCHKCALIB.cxx

Parent Directory Parent Directory | Revision Log Revision Log


Revision 1.11 - (hide annotations) (download)
Fri Sep 22 13:38:58 2006 UTC (18 years, 2 months ago) by mocchiut
Branch: MAIN
CVS Tags: v1r15, v1r17, v1r16, v1r18
Changes since 1.10: +4 -1 lines
Create also a txt file, some bugs fixed

1 mocchiut 1.1 //
2     // Check the calorimter calibrations - Emiliano Mocchiutti
3     //
4 mocchiut 1.11 // FCaloCHKCALIB.c version 1.13 (2006-09-22)
5 mocchiut 1.1 //
6     // The only input needed is the path to the directory created by YODA for the data file you want to analyze.
7     //
8     // Changelog:
9 mocchiut 1.7 //
10 mocchiut 1.11 // 1.12 - 1.13 (2006-09-22): Set upper limit in calvar plot.
11     //
12 mocchiut 1.10 // 1.07 - 1.12 (2006-08-04): bugs fixed.
13     //
14 mocchiut 1.9 // 1.07 - 1.11 (2006-07-17): Adapted to flight conditions.
15     //
16 mocchiut 1.8 // 1.06 - 1.07 (2006-05-29): Fixed bug in output filename when input is not in the form DW_YYMMDD_NNN. Changed threshold for bad strip warning (from 0.005 to 0.03).
17     //
18 mocchiut 1.7 // 1.05 - 1.06 (2006-03-22): Add optimize flag in compiling the script!
19 mocchiut 1.6 //
20     // 1.04 - 1.05 (2006-03-22): Corrected wrong .C files.
21 mocchiut 1.5 //
22     // 1.03 - 1.04 (2006-03-20): Documentation updated.
23 mocchiut 1.4 //
24     // 1.02 - 1.03 (2006-03-20): Changed name of shared libraries (for example from FCaloQLOOK_cxx.so to libFCaloQLOOK.so).
25 mocchiut 1.1 //
26 mocchiut 1.3 // 1.01 - 1.02 (2006-03-13): Include files from YODA without "event" directory.
27     //
28 mocchiut 1.1 // 1.00 - 1.01 (2006-03-02): Works on YODA v6 output (single file), does not require anymore calocommon package.
29     //
30     // 0.00 - 1.00 (2006-03-02): Clone of CaloCHKCALIB.c
31     //
32     #include <iostream>
33     #include <fstream>
34     //
35     #include <TTree.h>
36     #include <TObject.h>
37     #include <TString.h>
38     #include <TFile.h>
39     #include <TCanvas.h>
40     #include <TH1.h>
41     #include <TPolyLine.h>
42     #include <TH1F.h>
43     #include <TH2D.h>
44     #include <TLatex.h>
45     #include <TPad.h>
46     #include <TPaveLabel.h>
47     #include <TStyle.h>
48 mocchiut 1.2 #include <TSystem.h>
49 mocchiut 1.10 #include <TApplication.h>
50 mocchiut 1.1 //
51 mocchiut 1.3 #include <CalibCalPedEvent.h>
52 mocchiut 1.1 //
53     using namespace std;
54     //
55     void stringcopy(TString& s1, const TString& s2, Int_t from=0, Int_t to=0){
56 mocchiut 1.10 if ( to == 0 ){
57     Int_t t2length = s2.Length();
58     s1 = "";
59     to = t2length;
60     };
61     for (Int_t i = from; i<to; i++){
62     s1.Append(s2[i],1);
63     };
64 mocchiut 1.1 }
65     void stringappend(TString& s1, const TString& s2){
66 mocchiut 1.10 Int_t t2length = s2.Length();
67     for (Int_t i = 0; i<t2length; i++){
68     s1.Append(s2[i],1);
69     };
70 mocchiut 1.1 }
71    
72     TString getFilename(const TString filename){
73 mocchiut 1.8 //
74     const string fil = gSystem->BaseName(filename.Data());
75     Int_t posiz = fil.find(".root");
76     //
77     TString file2;
78     if ( posiz == -1 ){
79     file2 = gSystem->BaseName(filename.Data());
80     } else {
81     Int_t posiz2 = 0;
82     stringcopy(file2,gSystem->BaseName(filename.Data()),posiz2,posiz);
83 mocchiut 1.1 TString pdat(".dat");
84 mocchiut 1.8 stringappend(file2,pdat);
85     };
86     return file2;
87 mocchiut 1.1 }
88    
89     typedef struct Calib {
90 mocchiut 1.10 Int_t iev;
91     Int_t cstwerr[4];
92     Float_t cperror[4];
93     Float_t mip[2][22][96];
94     Float_t calped[2][22][96];
95     Float_t calgood[2][22][96];
96     Float_t calthr[2][22][6];
97     Float_t calrms[2][22][96];
98     Float_t calbase[2][22][6];
99     Float_t calvar[2][22][6];
100     Float_t calpuls[2][22][96];
101 mocchiut 1.1 } calib;
102    
103 mocchiut 1.10 void FCaloCHKCALIB(TString filename, Long64_t calibnumber = 0, TString outDir = "", Int_t figmatra = 0, TString saveas = "png", Bool_t iactive =false, Bool_t w4i=false){
104     gStyle->SetPaperSize(19.,25.);
105     //
106     TApplication *app = 0;
107     if ( iactive ) app = new TApplication("app",0,0);
108     Float_t ccalrmsthr=0.99;
109     Float_t ccalpedthr=0.99;
110     Float_t ccalbadthr=0.03;// 0.005
111     Float_t ccalthrthr=0.98;
112     Float_t ccalvarthr=0.99;
113     Float_t ccalbasthr=0.99;
114     //
115     Float_t ccalrms;
116     Float_t ccalped;
117     Float_t ccalbad;
118     Float_t ccalthr;
119     Float_t ccalvar;
120     Float_t ccalbas;
121     //
122     struct Calib calib;
123     stringstream titolo;
124     stringstream xviewev;
125     stringstream yviewev;
126     const char* startingdir = gSystem->WorkingDirectory();
127     if ( !strcmp(outDir.Data(),"") ) outDir = startingdir;
128     TString fififile = getFilename(filename);
129     const char *file;
130     file = fififile;
131     //
132     ifstream myfile;
133     myfile.open(filename.Data());
134     if ( !myfile ){
135     printf(" %s :no such file, exiting...\n\n",filename.Data());
136     return;
137     };
138     myfile.close();
139     //
140     TFile *File = new TFile(filename.Data());
141     //
142     TTree *tr = (TTree*)File->Get("CalibCalPed");
143     if ( !tr ) {
144     printf(" CalibCalPed : no such tree in %s \n",filename.Data());
145     printf(" Exiting, are you sure this is a LEVEL0 not corrupted file? \n\n");
146     return;
147     };
148     pamela::CalibCalPedEvent *ce = 0;
149     //
150     UInt_t found;
151     tr->SetBranchStatus("*",0,&found); //disable all branches
152     //
153     found = 0;
154     tr->SetBranchStatus("iev*",1,&found);
155     found = 0;
156     tr->SetBranchStatus("cstwerr*",1,&found);
157     // printf("enabled %i branches \n",found);
158     found = 0;
159     tr->SetBranchStatus("cperror*",1,&found);
160     //printf("enabled %i branches \n",found);
161     found = 0;
162     tr->SetBranchStatus("cal*",1,&found);
163     //printf("enabled %i branches \n",found);
164     found = 0;
165     tr->SetBranchStatus("CalibCalPed*",1,&found);
166     //printf("enabled %i branches \n",found);
167     //
168     tr->SetBranchAddress("CalibCalPed", &ce);
169     //
170     Long64_t ncalibs = tr->GetEntries();
171     if ( ncalibs == 0 ){
172     printf(" No calibrations in this files! \n Exiting... \n");
173     return;
174     };
175     printf("\n This file contains %i entries which corrispond to %i calibrations \n\n",(int)ncalibs,(int)ncalibs/4);
176     Long64_t minev = 0;
177     Long64_t maxev = ncalibs;
178     if ( calibnumber ){
179     minev = (calibnumber - 1)* 4;
180     maxev = minev + 4;
181     };
182     TCanvas *figura1;
183     TCanvas *figura2 = 0;
184     TCanvas *figura3;
185     TCanvas *rapporto = 0;
186     Int_t cmask = 127 ;
187     Int_t cestw = 0;
188     Int_t ver[4][23];
189     //
190     for (Int_t k = 0; k < 4; k++ ){
191     for (Int_t m = 0; m < 23 ; m++ ){
192     ver[k][m] = 0 ;
193 mocchiut 1.1 };
194 mocchiut 1.10 };
195     //
196     //
197     const string fil = gSystem->BaseName(filename.Data());
198     Int_t posiz = fil.find(".root");
199     //
200     TString file2;
201     if ( posiz == -1 ){
202     file2 = gSystem->BaseName(filename.Data());
203     } else {
204     Int_t posiz2 = 0;
205     stringcopy(file2,gSystem->BaseName(filename.Data()),posiz2,posiz);
206     };
207     const char *figrec = file2;
208     //
209     const char *outdir = outDir;
210     const char *format = saveas;
211     stringstream figsave;
212     stringstream figsave1;
213     stringstream figsave2;
214     //
215     // to check or not to check? this is the problem...
216     //
217     Bool_t check = false;
218     //
219     for (Int_t ci = minev; ci < maxev ; ci+=4){
220 mocchiut 1.1 //
221 mocchiut 1.10 Int_t incalrms = 0;
222     Int_t outcalrms = 0;
223     Int_t totcalbad = 0;
224     Int_t incalped = 0;
225     Int_t outcalped = 0;
226     Int_t incalthr = 0;
227     Int_t outcalthr = 0;
228     Int_t incalvar = 0;
229     Int_t outcalvar = 0;
230     Int_t incalbas = 0;
231     Int_t outcalbas = 0;
232 mocchiut 1.1 //
233 mocchiut 1.10 for ( Int_t s=0 ; s<4 ;s++ ){
234     tr->GetEntry(ci+s);
235     calib.iev = ce->iev;
236     //
237     //
238     //
239     cestw = 0;
240     if ( ce->cstwerr[s] ){
241     cestw = ce->cstwerr[s] & cmask ;
242     ver[s][16]++;
243     };
244     if ( cestw ){
245     if ( cestw & (1 << 0) ) ver[s][6]++ ;
246     if ( cestw & (1 << 1) ) ver[s][5]++ ;
247     if ( cestw & (1 << 2) ) ver[s][4]++ ;
248     if ( cestw & (1 << 3) ) ver[s][3]++ ;
249     if ( cestw & (1 << 4) ) ver[s][2]++ ;
250     if ( cestw & (1 << 5) ) ver[s][1]++ ;
251     if ( cestw & (1 << 6) ) ver[s][0]++ ;
252     };
253     if ( ce->cperror[s] != 0. ){
254     if (ce->cperror[s] == 128) ver[s][7]++ ;
255     if (ce->cperror[s] == 129) ver[s][8]++ ;
256     if (ce->cperror[s] == 130) {
257     ver[s][9]++ ;
258     ver[s][16]--;
259     };
260     if (ce->cperror[s] == 132) ver[s][11]++ ;
261     if (ce->cperror[s] == 140) ver[s][19]++ ;
262     if (ce->cperror[s] == 141) ver[s][20]++ ;
263     if (ce->cperror[s] == 142) ver[s][22]++ ;
264     };
265     //
266     for ( Int_t d=0 ; d<11 ;d++ ){
267     Int_t pre = -1;
268     for ( Int_t j=0; j<96 ;j++){
269     if ( j%16 == 0 ) pre++;
270     if ( s == 2 ){
271     calib.calped[0][2*d+1][j] = ce->calped[3][d][j];
272     calib.cstwerr[3] = ce->cstwerr[3];
273     calib.cperror[3] = ce->cperror[3];
274     calib.calgood[0][2*d+1][j] = ce->calgood[3][d][j];
275     calib.calthr[0][2*d+1][pre] = ce->calthr[3][d][pre];
276     calib.calrms[0][2*d+1][j] = ce->calrms[3][d][j];
277     calib.calbase[0][2*d+1][pre] = ce->calbase[3][d][pre];
278     calib.calvar[0][2*d+1][pre] = ce->calvar[3][d][pre];
279     };
280     if ( s == 3 ){
281     calib.calped[0][2*d][j] = ce->calped[1][d][j];
282     calib.cstwerr[1] = ce->cstwerr[1];
283     calib.cperror[1] = ce->cperror[1];
284     calib.calgood[0][2*d][j] = ce->calgood[1][d][j];
285     calib.calthr[0][2*d][pre] = ce->calthr[1][d][pre];
286     calib.calrms[0][2*d][j] = ce->calrms[1][d][j];
287     calib.calbase[0][2*d][pre] = ce->calbase[1][d][pre];
288     calib.calvar[0][2*d][pre] = ce->calvar[1][d][pre];
289     };
290     if ( s == 0 ){
291     calib.calped[1][2*d][j] = ce->calped[0][d][j];
292     calib.cstwerr[0] = ce->cstwerr[0];
293     calib.cperror[0] = ce->cperror[0];
294     calib.calgood[1][2*d][j] = ce->calgood[0][d][j];
295     calib.calthr[1][2*d][pre] = ce->calthr[0][d][pre];
296     calib.calrms[1][2*d][j] = ce->calrms[0][d][j];
297     calib.calbase[1][2*d][pre] = ce->calbase[0][d][pre];
298     calib.calvar[1][2*d][pre] = ce->calvar[0][d][pre];
299     };
300     if ( s == 1 ){
301     calib.calped[1][2*d+1][j] = ce->calped[2][d][j];
302     calib.cstwerr[2] = ce->cstwerr[2];
303     calib.cperror[2] = ce->cperror[2];
304     calib.calgood[1][2*d+1][j] = ce->calgood[2][d][j];
305     calib.calthr[1][2*d+1][pre] = ce->calthr[2][d][pre];
306     calib.calrms[1][2*d+1][j] = ce->calrms[2][d][j];
307     calib.calbase[1][2*d+1][pre] = ce->calbase[2][d][pre];
308     calib.calvar[1][2*d+1][pre] = ce->calvar[2][d][pre];
309     };
310     };
311     };
312 mocchiut 1.2 };
313 mocchiut 1.1 //
314 mocchiut 1.10 // Book the histograms:
315 mocchiut 1.1 //
316     //
317 mocchiut 1.10 Int_t i = (ci-minev)/4;
318     xviewev.str("");
319     xviewev << "x-view event " << (i+1);
320     yviewev.str("");
321     yviewev << "y-view event " << (i+1);
322     TH2F *Xview = new TH2F(xviewev.str().c_str(),"",96,-0.5,95.5,22,-0.5,21.5);
323     TH2F *Yview = new TH2F(yviewev.str().c_str(),"",96,-0.5,95.5,22,-0.5,21.5);
324 mocchiut 1.8 //
325 mocchiut 1.10 // figures:
326 mocchiut 1.1 //
327 mocchiut 1.10 gDirectory->Delete("C14");
328     gDirectory->Delete("C15");
329     gDirectory->Delete("C16");
330     //TH1F *calped = new TH1F("C14","calped",4230,-3.5,4227.5);
331     // TH1F *calrms = new TH1F("C15","calrms",4230,-3.5,4228.5);
332     TH1F *calped = new TH1F("C14","calped",2112,-3.5,4227.5);
333     // TH1F *calrms = new TH1F("C15","calrms",264,-2.,4226.);
334     TH1F *calrms = new TH1F("C15","calrms",2112,-3.5,4228.5);
335     TH1F *calbad = new TH1F("C16","calgood",4230,-3.5,4228.5);
336 mocchiut 1.1 //
337 mocchiut 1.10 gDirectory->Delete("C17");
338     gDirectory->Delete("C18");
339     gDirectory->Delete("C19");
340     TH1F *calthr = new TH1F("C17","calthr",271,-4.5,268.5);
341     TH1F *calvar = new TH1F("C18","calvar",271,-4.5,268.5);
342     TH1F *calbase = new TH1F("C19","calbase",271,-4.5,268.5);
343 mocchiut 1.1 //
344 mocchiut 1.10 Int_t bgcolor = 10;
345     TPad *pd1 = 0;
346     TPad *pd2 = 0;
347     TPad *palette = 0;
348     TLatex *t=new TLatex();
349     if ( figmatra ){
350     figura2 = new TCanvas("Calorimeter:_strip_RMS", "Calorimeter:_strip_RMS", 750, 650);
351     figura2->SetFillColor(10);
352     figura2->Range(0,0,100,100);
353     bgcolor = 10;
354     pd1 = new TPad("pd1","This is pad1",0.02,0.05,0.88,0.49,bgcolor);
355     pd2 = new TPad("pd2","This is pad2",0.02,0.51,0.88,0.95,bgcolor);
356     palette = new TPad("palette","This is palette",0.90,0.05,0.98,0.90,bgcolor);
357     figura2->cd();
358     gStyle->SetOptStat("");
359     t=new TLatex();
360     t->SetTextFont(32);
361     t->SetTextColor(1);
362     t->SetTextSize(0.03);
363     t->SetTextAlign(12);
364     t->DrawLatex(90.,92.5,"ADC ch.");
365     pd1->Range(0,0,100,100);
366     pd2->Range(0,0,100,100);
367     palette->Range(0,0,100,100);
368     pd1->SetTicks();
369     pd2->SetTicks();
370     pd1->Draw();
371     pd2->Draw();
372     palette->Draw();
373     palette->cd();
374     // palette
375     TPaveLabel *box1 = new TPaveLabel(2,2,98,14,"OFF","");
376     box1->SetTextFont(32);
377     box1->SetTextColor(1);
378     box1->SetTextSize(0.25);
379     box1->SetFillColor(10);
380     box1->Draw();
381     TPaveLabel *box2 = new TPaveLabel(2,16,98,28,"0-1.5","");
382     box2->SetTextFont(32);
383     box2->SetTextColor(1);
384     box2->SetTextSize(0.25);
385     box2->SetFillColor(38);
386     box2->Draw();
387     TPaveLabel *box3 = new TPaveLabel(2,30,98,42,"1.5-4","");
388     box3->SetTextFont(32);
389     box3->SetTextColor(1);
390     box3->SetTextSize(0.25);
391     box3->SetFillColor(4);
392     box3->Draw();
393     TPaveLabel *box4 = new TPaveLabel(2,44,98,56,"4-6.5","");
394     box4->SetTextFont(32);
395     box4->SetTextColor(1);
396     box4->SetTextSize(0.25);
397     box4->SetFillColor(3);
398     box4->Draw();
399     TPaveLabel *box5 = new TPaveLabel(2,58,98,70,"6.5-11.5","");
400     box5->SetTextFont(32);
401     box5->SetTextColor(1);
402     box5->SetTextSize(0.25);
403     box5->SetFillColor(2);
404     box5->Draw();
405     TPaveLabel *box6 = new TPaveLabel(2,72,98,84,">11.5","");
406     box6->SetTextFont(32);
407     box6->SetTextColor(1);
408     box6->SetTextSize(0.25);
409     box6->SetFillColor(6);
410     box6->Draw();
411     TPaveLabel *box7 = new TPaveLabel(2,86,98,98,"BAD","");
412     box7->SetTextFont(32);
413     box7->SetTextColor(10);
414     box7->SetTextSize(0.25);
415     box7->SetFillColor(1);
416     box7->Draw();
417     //
418     pd1->cd();
419     gStyle->SetOptStat("");
420     Xview->SetXTitle("strip");
421     Xview->SetYTitle("X - plane");
422     Xview->GetYaxis()->SetTitleOffset(0.5);
423     Xview->SetFillColor(bgcolor);
424     Xview->Fill(1.,1.,1.);
425     Xview->Draw("box");
426     pd1->Update();
427     pd2->cd();
428     gStyle->SetOptStat("");
429     Yview->SetXTitle("strip");
430     Yview->SetYTitle("Y - plane");
431     Yview->GetYaxis()->SetTitleOffset(0.5);
432     Yview->SetFillColor(bgcolor);
433     Yview->Fill(1.,1.,1.);
434     Yview->Draw("box");
435     pd2->Update();
436     };
437 mocchiut 1.1 //
438 mocchiut 1.10 // run over views and planes
439 mocchiut 1.1 //
440 mocchiut 1.10 Int_t j = 0;
441     Int_t g = 0;
442     gStyle->SetOptStat("");
443     for (Int_t m = 0; m < 22; m++){
444     for (Int_t l = 0; l < 2; l++){
445     for (Int_t n = 0; n < 96; n++){
446     //
447     calped->Fill((float)j,calib.calped[l][m][n]);
448     if ( (calib.calped[l][m][n] > 700. || calib.calped[l][m][n] < -700.) && (j < 4032 || j > 4048) ){
449     outcalped++;
450     } else {
451     incalped++;
452     };
453     calrms->Fill((float)j,(calib.calrms[l][m][n]/4.));
454     if ( (((calib.calrms[l][m][n]/4.) > 7. || (calib.calrms[l][m][n]/4.) < 1.) && (j < 3440 || j > 3550)) || ( (j > 3439 && j < 3551) && ((calib.calrms[l][m][n]/4.) > 150. || (calib.calrms[l][m][n]/4.) < 1.)) ){
455     outcalrms++;
456     } else {
457     incalrms++;
458     };
459     calbad->Fill((float)j,(float)calib.calgood[l][m][n]);
460     if ( calib.calgood[l][m][n] ) totcalbad++;
461     //
462     if ( n < 6 ){
463     calthr->Fill((float)g,(float)calib.calthr[l][m][n]);
464     if ( (calib.calthr[l][m][n] > 21. || calib.calthr[l][m][n] < 12.) && (g < 215 || g > 221) ){
465     outcalthr++;
466     } else {
467     incalthr++;
468     };
469     calvar->Fill((float)g,(float)calib.calvar[l][m][n]);
470     if ( (calib.calvar[l][m][n] > 8. || calib.calvar[l][m][n] < 1. ) && (g < 215 || g > 221) ){
471     outcalvar++;
472     } else {
473     incalvar++;
474 mocchiut 1.1 };
475 mocchiut 1.10 calbase->Fill((float)g,(float)calib.calbase[l][m][n]);
476     if ( calib.calbase[l][m][n] > 4500. || calib.calbase[l][m][n] < 2000. ){
477     outcalbas++;
478     } else {
479     incalbas++;
480 mocchiut 1.1 };
481 mocchiut 1.10 g++;
482     };
483     //
484     j++;
485     //
486     if ( figmatra ){
487     figura2->cd();
488     xviewev.str("");
489     xviewev << "x-view " << i;
490     xviewev << " event " << n;
491     xviewev << " " << m;
492     xviewev << " " << l;
493     yviewev.str("");
494     yviewev << "y-view " << i;
495     yviewev << " event " << n;
496     yviewev << " " << m;
497     yviewev << " " << l;
498     TH2F *Xview = new TH2F(xviewev.str().c_str(),"",96,-0.5,95.5,22,-0.5,21.5);
499     TH2F *Yview = new TH2F(yviewev.str().c_str(),"",96,-0.5,95.5,22,-0.5,21.5);
500     if ( calib.calrms[l][m][n] > 0 ){
501     Xview->SetFillColor(38);
502     Yview->SetFillColor(38);
503 mocchiut 1.1 };
504 mocchiut 1.10 if ( calib.calrms[l][m][n] > 6 ){
505     Xview->SetFillColor(4);
506     Yview->SetFillColor(4);
507 mocchiut 1.1 };
508 mocchiut 1.10 if ( calib.calrms[l][m][n] > 16 ){
509     Xview->SetFillColor(3);
510     Yview->SetFillColor(3);
511 mocchiut 1.1 };
512 mocchiut 1.10 if ( calib.calrms[l][m][n] > 26 ){
513     Xview->SetFillColor(2);
514     Yview->SetFillColor(2);
515 mocchiut 1.1 };
516 mocchiut 1.10 if ( calib.calrms[l][m][n] > 46 ){
517     Xview->SetFillColor(6);
518     Yview->SetFillColor(6);
519 mocchiut 1.1 };
520 mocchiut 1.10 if ( calib.calrms[l][m][n] <= 0 || calib.calrms[l][m][n] >30000 || calib.calped[l][m][n]>25000){
521     Xview->SetFillColor(10);
522     Yview->SetFillColor(10);
523 mocchiut 1.1 };
524 mocchiut 1.10 if ( calib.calgood[l][m][n] != 0 ){
525     Xview->SetFillColor(1);
526     Yview->SetFillColor(1);
527 mocchiut 1.1 };
528 mocchiut 1.10 if ( l == 0 ) {
529     Xview->Fill(n,m,1.);
530     pd1->cd();
531     Xview->Draw("box same");
532     };
533     if ( l == 1 ) {
534     Yview->Fill(n,m,1.);
535     pd2->cd();
536     Yview->Draw("box same");
537     };
538     };
539     };
540     };
541     };
542     if ( figmatra ){
543     figura2->cd();
544     gStyle->SetOptStat("");
545     gStyle->SetOptDate(0);
546     t=new TLatex();
547     t->SetTextFont(32);
548     t->SetTextColor(1);
549     t->SetTextSize(0.03);
550     t->SetTextAlign(12);
551     titolo.str("");
552     titolo << "C13 - Calorimeter: strip RMS - file ";
553     titolo << file;
554     titolo << " - calibration number ";
555     titolo << (i+1);
556     t->DrawLatex(0.5,97.,titolo.str().c_str());
557     pd1->Update();
558     pd2->Update();
559     figura2->Update();
560     };
561     //
562     figura1 = new TCanvas("Calorimeter_calped_calrms_calgood", "Calorimeter_calped_calrms_calgood", 750, 950);
563     figura1->SetFillColor(10);
564     figura1->Range(0,0,100,100);
565     //
566     ccalped = (float)incalped/((float)outcalped + (float)incalped);
567     Int_t f1pd1col = 10;
568     if ( ccalped < ccalpedthr ) {
569     check = true;
570     f1pd1col = 45;
571     };
572     //
573     ccalrms = (float)incalrms/((float)outcalrms + (float)incalrms);
574     Int_t f1pd2col = 10;
575     if ( ccalrms < ccalrmsthr ) {
576     check = true;
577     f1pd2col = 45;
578     };
579     //
580     ccalbad = (float)totcalbad/4224.;
581     Int_t f1pd3col = 10;
582     if ( ccalbad > ccalbadthr ) {
583     check = true;
584     f1pd3col = 45;
585     };
586     //
587     TPad *f1pd1 = new TPad("f1pd1","This is f1pad1",0.02,0.684,0.98,0.95,f1pd1col);
588     TPad *f1pd2 = new TPad("f1pd2","This is f1pad2",0.02,0.367,0.98,0.634,f1pd2col);
589     TPad *f1pd3 = new TPad("f1pd3","This is f1pad3",0.02,0.05,0.98,0.317,f1pd3col);
590     figura1->Clear();
591     figura1->cd();
592     f1pd1->SetTicks();
593     f1pd2->SetTicks();
594     f1pd3->SetTicks();
595     f1pd1->Draw();
596     f1pd2->Draw();
597     f1pd3->Draw();
598     figura1->Draw();
599     figura3 = new TCanvas("Calorimeter_calthr_calvar_calbase", "Calorimeter_calthr_calvar_calbase", 750, 950);
600     figura3->SetFillColor(10);
601     figura3->Range(0,0,100,100);
602     //
603     ccalthr = (float)incalthr/((float)outcalthr + (float)incalthr);
604     Int_t f3pd1col = 10;
605     if ( ccalthr < ccalthrthr ) {
606     check = true;
607     f3pd1col = 45;
608     };
609     //
610     ccalvar = (float)incalvar/((float)outcalvar + (float)incalvar);
611     Int_t f3pd2col = 10;
612     if ( ccalvar < ccalvarthr ) {
613     check = true;
614     f3pd2col = 45;
615     };
616     //
617     ccalbas = (float)incalbas/((float)outcalbas + (float)incalbas);
618     Int_t f3pd3col = 10;
619     if ( ccalbas < ccalbasthr ) {
620     check = true;
621     f3pd3col = 45;
622     };
623     //
624     TPad *f3pd1 = new TPad("f3pd1","This is f3pad1",0.02,0.684,0.98,0.95,f3pd1col);
625     TPad *f3pd2 = new TPad("f3pd2","This is f3pad2",0.02,0.367,0.98,0.634,f3pd2col);
626     TPad *f3pd3 = new TPad("f3pd3","This is f3pad3",0.02,0.05,0.98,0.317,f3pd3col);
627     figura3->Clear();
628     figura3->cd();
629     f3pd1->SetTicks();
630     f3pd2->SetTicks();
631     f3pd3->SetTicks();
632     f3pd1->Draw();
633     f3pd2->Draw();
634     f3pd3->Draw();
635     figura3->Draw();
636     //
637     gStyle->SetOptStat("N");
638     figura1->cd();
639     gStyle->SetNdivisions(322,"x");
640     t=new TLatex();
641     t->SetTextFont(32);
642     t->SetTextColor(1);
643     t->SetTextSize(0.025);
644     t->SetTextAlign(12);
645     titolo.str("");
646     titolo << "EXPERT - Calorimeter: calped/calrms/calgood - file ";
647     titolo << file;
648     titolo << " - calibration number ";
649     titolo << (i+1);
650     t->DrawLatex(0.5,97.,titolo.str().c_str());
651     t->SetTextSize(0.03);
652     f1pd1->cd();
653     //
654     calped->GetXaxis()->SetNdivisions(322);
655     calped->SetXTitle("strip");
656     calped->SetYTitle("ADC channels");
657     calped->SetMaximum(3000.);
658     calped->SetMinimum(-3000.);
659     calped->Draw();
660     TPolyLine *banda1;
661     Double_t xc[4] = {0.,4224.,4224.,0.};
662     Double_t yc[4] = {-700.,-700.,700.,700.};
663     banda1 = new TPolyLine(4,xc,yc);
664     banda1->SetLineColor(5);
665     banda1->SetFillColor(5);
666     banda1->SetLineWidth(1);
667     banda1->Draw("fSAME");
668     TPolyLine *banda2;
669     Double_t xc2[4] = {4031.5,4047.5,4047.5,4031.5};
670     // Double_t yc2[4] = {-2500.,-2500.,28000.,28000.};
671     Double_t yc2[4] = {-3000.,-3000.,3000.,3000.};
672     banda2 = new TPolyLine(4,xc2,yc2);
673     banda2->SetLineColor(5);
674     banda2->SetFillColor(5);
675     banda2->SetLineWidth(1);
676     banda2->Draw("fSAME");
677     calped->Draw("SAME");
678     f1pd2->cd();
679     f1pd2->SetLogy();
680     calrms->GetXaxis()->SetNdivisions(322);
681     calrms->Draw();
682     Double_t xd[4] = {0.,4224.,4224.,0.};
683     Double_t yd[4] = {1.,1.,7.,7.};
684     banda1 = new TPolyLine(4,xd,yd);
685     banda1->SetLineColor(5);
686     banda1->SetFillColor(5);
687     banda1->SetLineWidth(1);
688     banda1->Draw("fSAME");
689     Float_t minrm = calrms->GetMinimum();
690     Float_t maxrm = calrms->GetMaximum();
691     Double_t xrm2[4] = {3449.,3551.,3551.,3449.};
692     Double_t yrm2[4] = {minrm,minrm,maxrm,maxrm};
693     banda2 = new TPolyLine(4,xrm2,yrm2);
694     banda2->SetLineColor(5);
695     banda2->SetFillColor(5);
696     banda2->SetLineWidth(1);
697     banda2->Draw("fSAME");
698     calrms->SetXTitle("strip");
699     calrms->SetYTitle("ADC channels");
700     calrms->Draw("SAME");
701     f1pd3->cd();
702     gStyle->SetNdivisions(344,"x");
703     calbad->GetXaxis()->SetNdivisions(322);
704     calbad->Draw();
705     calbad->SetXTitle("strip");
706     calbad->SetYTitle("0=good 255=bad");
707     f1pd1->Update();
708     f1pd2->Update();
709     f1pd3->Update();
710     figura1->Update();
711     //
712     figura3->cd();
713     gStyle->SetNdivisions(644,"x");
714     t=new TLatex();
715     t->SetTextFont(32);
716     t->SetTextColor(1);
717     t->SetTextSize(0.025);
718     t->SetTextAlign(12);
719     titolo.str("");
720     titolo << "EXPERT - Calorimeter: calthr/calvar/calbase - file ";
721     titolo << file;
722     titolo << " - calibration number ";
723     titolo << (i+1);
724     t->DrawLatex(0.5,97.,titolo.str().c_str());
725     t->SetTextSize(0.03);
726     //
727     f3pd1->cd();
728     calthr->GetXaxis()->SetNdivisions(644);
729     calthr->SetXTitle("pre-amplifier");
730     calthr->SetYTitle("ADC channels");
731     calthr->Draw();
732     Double_t xe[4] = {0.,264.,264.,0.};
733     Double_t ye[4] = {12.,12.,21.,21.};
734     banda1 = new TPolyLine(4,xe,ye);
735     banda1->SetLineColor(5);
736     banda1->SetFillColor(5);
737     banda1->SetLineWidth(1);
738     banda1->Draw("fSAME");
739     //
740     minrm = calthr->GetMinimum();
741     maxrm = 1.05*calthr->GetMaximum();
742     Double_t xth2[4] = {215.,221.,221.,215.};
743     Double_t yth2[4] = {minrm,minrm,maxrm,maxrm};
744     banda2 = new TPolyLine(4,xth2,yth2);
745     banda2->SetLineColor(5);
746     banda2->SetFillColor(5);
747     banda2->SetLineWidth(1);
748     banda2->Draw("fSAME");
749     //
750     calthr->Draw("SAME");
751     f3pd2->cd();
752     // gPad->SetLogy();
753 mocchiut 1.11 calvar->SetMaximum(25.);
754 mocchiut 1.10 calvar->GetXaxis()->SetNdivisions(644);
755     calvar->SetXTitle("pre-amplifier");
756     calvar->SetYTitle("ADC channels");
757     calvar->Draw();
758     Double_t xt[4] = {0.,264.,264.,0.};
759     Double_t yt[4] = {1.,1.,8.,8.};
760     banda1 = new TPolyLine(4,xt,yt);
761     banda1->SetLineColor(5);
762     banda1->SetFillColor(5);
763     banda1->SetLineWidth(1);
764     banda1->Draw("fSAME");
765     //
766     minrm = calvar->GetMinimum();
767     maxrm = 1.05*calvar->GetMaximum();
768     Double_t xva2[4] = {215.,221.,221.,215.};
769     Double_t yva2[4] = {minrm,minrm,maxrm,maxrm};
770     banda2 = new TPolyLine(4,xva2,yva2);
771     banda2->SetLineColor(5);
772     banda2->SetFillColor(5);
773     banda2->SetLineWidth(1);
774     banda2->Draw("fSAME");
775     //
776     calvar->Draw("SAME");
777     f3pd3->cd();
778     calbase->GetXaxis()->SetNdivisions(644);
779     calbase->SetXTitle("pre-amplifier");
780     calbase->SetYTitle("ADC channels");
781     calbase->Draw();
782     Double_t xg[4] = {0.,264.,264.,0.};
783     Double_t yg[4] = {2000.,2000.,4500.,4500.};
784     banda1 = new TPolyLine(4,xg,yg);
785     banda1->SetLineColor(5);
786     banda1->SetFillColor(5);
787     banda1->SetLineWidth(1);
788     banda1->Draw("fSAME");
789     calbase->Draw("SAME");
790     f3pd1->Update();
791     f3pd2->Update();
792     f3pd3->Update();
793     figura3->Update();
794     //
795     if ( !strcmp(format,"ps") ) {
796     if ( ci == minev ) {
797     figsave.str("");
798     figsave << outdir << "/" ;
799     figsave << figrec << "_CaloCHKCALIB.";
800     figsave << format;
801     figsave << "(";
802     };
803     if ( figmatra ) {
804     figura2->Print(figsave.str().c_str(),"Portrait");
805     if ( ci == minev ) {
806     figsave.str("");
807     figsave << outdir << "/" ;
808     figsave << figrec << "_CaloCHKCALIB.";
809     figsave << format;
810 mocchiut 1.1 };
811 mocchiut 1.10 };
812     //
813     figura1->Print(figsave.str().c_str(),"Portrait");
814     if ( ci == minev ) {
815     figsave.str("");
816     figsave << outdir << "/" ;
817     figsave << figrec << "_CaloCHKCALIB.";
818     figsave << format;
819     };
820     //
821     figura3->Print(figsave.str().c_str(),"Portrait");
822     //
823     } else {
824     if ( figmatra ) {
825     figsave.str("");
826     figsave << outdir << "/" ;
827     figsave << figrec << "_CaloCHKCALIB1_";
828     figsave << (i+1) << ".";
829     figsave << format;
830     figura2->SaveAs(figsave.str().c_str());
831     };
832     //
833     figsave1.str("");
834     figsave1 << outdir << "/" ;
835     figsave1 << figrec << "_CaloCHKCALIB2_";
836     figsave1 << (i+1) << ".";
837     figsave1 << format;
838     figura1->SaveAs(figsave1.str().c_str());
839     //
840     figsave2.str("");
841     figsave2 << outdir << "/" ;
842     figsave2 << figrec << "_CaloCHKCALIB3_";
843     figsave2 << (i+1) << ".";
844     figsave2 << format;
845     figura3->SaveAs(figsave2.str().c_str());
846     //
847     };
848     if ( iactive && w4i ){
849     while ( gROOT->GetListOfCanvases()->FindObject(figura2) || gROOT->GetListOfCanvases()->FindObject(figura1) || gROOT->GetListOfCanvases()->FindObject(figura3) ){
850     gSystem->ProcessEvents();
851     gSystem->Sleep(10);
852     };
853     };
854     };
855     //
856     //
857     //
858     //
859     // report sheet:
860     //
861     stringstream errore;
862     rapporto= new TCanvas("Calorimeter calibration report", "Calorimeter calibration report", 750, 950);
863     rapporto->cd();
864     rapporto->SetFillColor(10);
865     rapporto->Range(0,0,100,100);
866     TLatex *t=new TLatex();
867     t->SetTextFont(32);
868     t->SetTextColor(1);
869     t->SetTextSize(0.035);
870     t->SetTextAlign(12);
871     errore.str("");
872     errore << "BASIC - C20 - Calibrations in file: " << file;
873     errore << " ";
874     t->SetTextSize(0.02);
875     t->DrawLatex(2.,99.,errore.str().c_str());
876     //
877     TPad *pad1;
878     TPad *pad2;
879     TPad *pad3;
880     TPad *pad4;
881     pad1 = new TPad("pad1","This is pad1",0.02,0.47,0.49,0.90,19);
882     pad2 = new TPad("pad2","This is pad2",0.51,0.47,0.98,0.90,19);
883     pad3 = new TPad("pad3","This is pad3",0.02,0.02,0.49,0.45,19);
884     pad4 = new TPad("pad4","This is pad4",0.51,0.02,0.98,0.45,19);
885     pad1->Range(0,0,100,100);
886     pad2->Range(0,0,100,100);
887     pad3->Range(0,0,100,100);
888     pad4->Range(0,0,100,100);
889     //
890     pad1->Draw();
891     pad2->Draw();
892     pad3->Draw();
893     pad4->Draw();
894     //
895     char *sezione = 0;
896     for (Int_t si = 0; si < 4; si++){
897     if (si == 2)
898     {
899     pad1->cd() ;
900     sezione = "** Section YE (x even) **";
901     }
902     if (si == 3)
903     {
904     pad2->cd();
905     sezione = "** Section YO (x odd) **";
906     }
907     if (si == 0)
908     {
909     pad3->cd();
910     sezione = "** Section XE (y odd) **";
911     }
912     if (si == 1)
913     {
914     pad4->cd();
915     sezione = "** Section XO (y even) **";
916     }
917     t->SetTextFont(32);
918     t->SetTextColor(1);
919     t->SetTextSize(0.05);
920     t->SetTextAlign(12);
921     t->DrawLatex(33.,97.,sezione);
922     t->SetTextSize(0.05);
923     for (Int_t j = 0; j < 23; j++){
924     if ( ver[si][j] ) {
925     t->SetTextColor(50);
926     if (j == 0) {
927     errore.str("");
928     errore << "* DSP ack error: " << ver[si][j];
929     errore << " time(s)";
930     t->DrawLatex(2.,30.,errore.str().c_str());
931     check = true;
932     }
933     if (j == 1) {
934     errore.str("");
935     errore << "* Temperature alarm: " << ver[si][j];
936     errore << " time(s)";
937     t->DrawLatex(2.,74.,errore.str().c_str());
938     check = true;
939     }
940     if (j == 2) {
941     errore.str("");
942     errore << "* Latch up alarm: " << ver[si][j];
943     errore << " time(s).";
944     t->DrawLatex(2.,65.,errore.str().c_str());
945     check = true;
946     }
947     if (j == 3) {
948     errore.str("");
949     errore << "RAW mode: " << ver[si][j];
950     errore << " time(s)";
951     t->SetTextColor(38);
952     t->DrawLatex(2.,90.,errore.str().c_str());
953     }
954     if (j == 4) {
955     errore.str("");
956     errore << "* CMD length error: " << ver[si][j];
957     errore << " time(s)";
958     t->DrawLatex(2.,66.,errore.str().c_str());
959     check = true;
960     }
961     if (j == 5) {
962     errore.str("");
963     errore << "* Execution error: " << ver[si][j];
964     errore << " time(s)";
965     t->DrawLatex(2.,62.,errore.str().c_str());
966     check = true;
967     }
968     if (j == 6) {
969     errore.str("");
970     errore << "* CRC error (st. word): " << ver[si][j];
971     errore << " time(s)";
972     t->DrawLatex(2.,58.,errore.str().c_str());
973     check = true;
974     }
975     if (j == 7) {
976     errore.str("");
977     errore << "View or command not recognized: " << ver[si][j];
978     errore << " time(s)";
979     t->DrawLatex(2.,54.,errore.str().c_str());
980     check = true;
981     }
982     //
983     if (j == 8) {
984     errore.str("");
985     errore << "Missing section: " << ver[si][j];
986     errore << " time(s)";
987     t->DrawLatex(2.,50.,errore.str().c_str());
988     check = true;
989     }
990     if (j == 9) {
991     errore.str("");
992     errore << "RAW MODE COMMAND: " << ver[si][j];
993     errore << " time(s)";
994     t->DrawLatex(2.,42.,errore.str().c_str());
995     }
996     if (j == 11) {
997     errore.str("");
998     errore << "CRC error (data): " << ver[si][j];
999     errore << " time(s)";
1000     t->DrawLatex(2.,38.,errore.str().c_str());
1001     check = true;
1002     }
1003     if (j == 16) {
1004     errore.str("");
1005     errore << "Number of calibrations: " << ver[si][j];
1006     t->SetTextColor(38);
1007     t->DrawLatex(2.,86.,errore.str().c_str());
1008     }
1009     if (j == 19) {
1010     errore.str("");
1011     errore << "Pedestal checksum wrong: " << ver[si][j];
1012     errore << " time(s)";
1013     t->DrawLatex(2.,14.,errore.str().c_str());
1014     check = true;
1015     }
1016     if (j == 20) {
1017     errore.str("");
1018     errore << "Thresholds checksum wrong: " << ver[si][j];
1019     errore << " time(s)";
1020     t->DrawLatex(2.,10.,errore.str().c_str());
1021     check = true;
1022     }
1023     if (j == 22) {
1024     errore.str("");
1025     errore << "Packet length is zero (YODA input error), skipped: " << ver[si][j];
1026     errore << " time(s)";
1027     t->DrawLatex(2.,3.,errore.str().c_str());
1028     check = true;
1029     };
1030     };
1031     };
1032     };
1033     rapporto->cd();
1034     t->SetTextFont(32);
1035     t->SetTextColor(1);
1036     t->SetTextSize(0.035);
1037     t->SetTextAlign(12);
1038     t->DrawLatex(7.,95.,"Calorimeter CALIBRATION quick look: ");
1039     //printf("vediamo: ccalped %f ccalrms %f ccalbad %f ccalthr %f ccalvar %f ccalbas %f \n",ccalped,ccalrms,ccalbad,ccalthr,ccalvar,ccalbas);
1040     if ( check ) {
1041     t->SetTextColor(50);
1042     t->DrawLatex(65.,95.,"WARNING, CHECK!");
1043     t->SetTextColor(1);
1044     } else {
1045     t->SetTextColor(38);
1046     t->DrawLatex(65.,95.,"OK!");
1047     t->SetTextColor(1);
1048     };
1049     rapporto->Update();
1050     //
1051     if ( !strcmp(format,"ps") ) {
1052     figsave.str("");
1053     figsave << outdir << "/" ;
1054     figsave << figrec << "_CaloCHKCALIB.";
1055     figsave << format;
1056     figsave << ")";
1057     rapporto->Print(figsave.str().c_str(),"Portrait");
1058     } else {
1059     figsave.str("");
1060     figsave << outdir << "/" ;
1061     figsave << figrec << "_CaloCHKCALIB_report.";
1062     figsave << format;
1063     rapporto->SaveAs(figsave.str().c_str());
1064     };
1065     if ( iactive && w4i ){
1066     while ( gROOT->GetListOfCanvases()->FindObject(rapporto) ){
1067     gSystem->ProcessEvents();
1068     gSystem->Sleep(10);
1069 mocchiut 1.1 };
1070 mocchiut 1.10 };
1071     printf("\n");
1072     return;
1073 mocchiut 1.1 }

  ViewVC Help
Powered by ViewVC 1.1.23