/[PAMELA software]/quicklook/QLflightS4_ND/S4_Calibration_QL.cpp
ViewVC logotype

Contents of /quicklook/QLflightS4_ND/S4_Calibration_QL.cpp

Parent Directory Parent Directory | Revision Log Revision Log


Revision 1.2 - (show annotations) (download)
Fri Jul 7 09:19:22 2006 UTC (18 years, 5 months ago) by pam-rm2
Branch: MAIN
CVS Tags: v1r04, v1r05, v1r03
Changes since 1.1: +66 -44 lines
S4_Calibration: implementata l'opzione format

1 /**
2 * S4 Calibration Quick Look
3 * Author Marcelli-Malvezzi
4 * Version 1.00 - 27 February 2006
5 *
6 * Description: The aim of S4 Calibration QL software is to keep under control the bahaviour of S4 Calibration.
7 * It creates only one output canvas relative to the time behaviour of collected calibration data.
8 * See documentation for a more detailed description of the output.
9 *
10 * Parameters:
11 * TSTring base - the path to the root directory for the specific Pamela unpack session
12 * There is no default value, without this input the program will not run
13 * TString outDir - the path where to save the output image (Default = ./)
14 * TString format - the format which will be used fo rsave the produced images (Default = "jpg")
15 *
16 *
17 * Version 1.1 - June 2006
18 * Fixed bugs: for a large namber of events is not possible to initialize vectors, so all graphs have been converted in histograms
19 *
20 * Known bugs: it is no possible to choise the figure format
21 **************/
22
23 #include <fstream>
24 #include <iostream>
25 #include <iostream>
26 #include <sstream>
27 #include "TStyle.h"
28 #include "TFile.h"
29 #include "TList.h"
30 #include "TTree.h"
31 #include "TLatex.h"
32 #include "TObjString.h"
33 #include "TCanvas.h"
34 #include "TGraph.h"
35 #include "TH1F.h"
36 #include "TF1.h"
37 #include "TGaxis.h"
38 #include "TString.h"
39 #include "TPaveText.h"
40 #include "TMultiGraph.h"
41 #include "TGraphErrors.h"
42 #include "EventHeader.h"
43 #include "PscuHeader.h"
44 #include "physics/S4/S4Event.h"
45 #include "CalibS4Event.h"
46 #include "tmtc/TmtcEvent.h"
47 #include "tmtc/TmtcRecord.h"
48
49 using namespace std;
50
51 //--------------- root function ----------------------------------
52
53 void S4_Calibration_QL(TString base, TString outDir, TString format){
54
55 //--------------- Variables initialization -----------------------------------//
56 const Int_t channels = 4096;
57 Double_t calib_1;
58 Double_t calib_2;
59 Double_t calib_4;
60 Double_t calib_1_RMS;
61 Double_t calib_2_RMS;
62 Double_t calib_4_RMS;
63 Double_t obt;
64 TString status;
65 Int_t IPM1status, IPM2status;
66 //------------------------- Open data file -------------------------------------//
67 TFile *file =new TFile(base.Data()) ;
68 TString filename = ((TObjString*)base.Tokenize('/')->Last())->GetString();
69 filename = ((TObjString*)filename.Tokenize('.')->First())->GetString();
70
71 if (!file){
72 printf("No such file in the directory has been found");
73 return;
74 }
75
76 TTree *CalibS4tr = (TTree*)file->Get("CalibS4");
77 TBranch *S4Br = CalibS4tr->GetBranch("CalibS4");
78 TBranch *headBr = CalibS4tr->GetBranch("Header");
79 TTree *tmtcTr = (TTree*)file->Get("Tmtc");
80 TBranch *tmtcBr = tmtcTr->GetBranch("Tmtc");
81
82 pamela::TmtcEvent *tme = 0;
83 pamela::TmtcRecord *tmr = 0;
84 pamela::S4::S4Event *s4Record;
85 pamela::CalibS4Event *s4Event = new pamela::CalibS4Event();
86 pamela::EventHeader *eh = 0;
87 pamela::PscuHeader *ph = 0;
88
89 CalibS4tr->SetBranchAddress("CalibS4", &s4Event);
90 CalibS4tr->SetBranchAddress("Header", &eh);
91 tmtcTr->SetBranchAddress("Tmtc", &tme);
92 Long64_t nevents= CalibS4tr->GetEntries();
93 Long64_t neventstmtc = tmtcBr->GetEntries();
94
95 if (neventstmtc<=0) {
96 printf("Tmtc packet: nevents = %i\n", nevents);
97 printf(" No info about kind of calibration (hot or cold) \n");
98 }
99 //----------------- if nevents = 0 ----------------------------------------------//
100 if (nevents<=0){
101 cout<<"WARNING: No Entries, RETURN"<<"\n";
102
103 TCanvas *canvas4 = new TCanvas("No entries", "No entries ", 400, 200);
104 canvas4->SetFillColor(10);
105 canvas4->cd();
106
107 TLatex *l = new TLatex();
108 l->SetTextAlign(12);
109 l->SetTextSize(0.15);
110 l->SetTextColor(2);
111 stringstream oss, noentries;
112 noentries.str("");
113 noentries<< "S4_Calibration_QL:";
114 l->DrawLatex(0.05, 0.7, noentries.str().c_str());
115 noentries.str("");
116 noentries<< "No entries for this files";
117 l->DrawLatex(0.05, 0.5, noentries.str().c_str());
118
119 if (outDir== "./") {
120 oss.str("");
121 oss << filename.Data() << "_S4_Calibration_QL." << format.Data();
122 } else {
123 oss.str("");
124 oss << outDir.Data() << filename.Data() << "_S4_Calibration_QL." << format.Data();
125 }
126
127 canvas4->Update();
128 canvas4->SaveAs(oss.str().c_str());
129 return;
130 }
131
132 //---------------Look for configuration hot or cold -----------------------//
133 Int_t recordstot=0;
134 for (Int_t i = 0; i < neventstmtc; i++){
135 tmtcBr->GetEntry(i);
136 Long64_t tmpSizetmtc = tme->Records->GetEntries();
137 recordstot=recordstot+tmpSizetmtc;
138 }
139 const Int_t lungmax=16*recordstot;
140 Double_t xrecordobtcc[lungmax], yccdiagacq[lungmax], xrecordobtcc_1[lungmax], yccdiagacq_1[lungmax];
141 recordstot=0;
142 for (Int_t i = 0; i < neventstmtc; i++){
143 tmtcBr->GetEntry(i);
144 Long64_t tmpSizetmtc = tme->Records->GetEntries();
145 Int_t size_b = tmpSizetmtc;
146 for (Int_t j = 0; j < size_b; j++){
147 tmr = (pamela::TmtcRecord*)tme->Records->At(j);
148 for (Int_t k =0; k <16; k++){
149 yccdiagacq[16*recordstot+16*j+k] = (((tmr->TM_DIAG_AND_BILEVEL_ACQ)>>(15-k))&0x0001);
150 xrecordobtcc[16*recordstot+16*j+k] = tmr->TM_RECORD_OBT;
151 }
152 }
153 recordstot=recordstot+tmpSizetmtc;
154 }
155 Int_t riftime = recordstot/2;
156 //CC (0=IPM1=hot; 1=IPM2=cold for S4 calibration)
157 for (Int_t k =0; k<16; k++){
158 for (Int_t i = 0; i < recordstot; i++){
159 yccdiagacq_1[i]= yccdiagacq[16*i+k];
160 xrecordobtcc_1[i]= xrecordobtcc[16*i+k];
161 }
162 if (k==0) IPM1status=(Int_t)yccdiagacq_1[riftime];
163 if (k==1) IPM2status=(Int_t)yccdiagacq_1[riftime];
164 }
165 if (IPM1status==0 && IPM2status==1){
166 status="CONFIGURATION: HOT";
167 }
168 if (IPM1status==1 && IPM2status==0){
169 status="CONFIGURATION: COLD";
170 }
171
172 //------------- Create and fill histograms -------------------------------------------//
173
174 TH1F *calibS4_1 =new TH1F("calibS4_1", "calibS4_1", channels, 0, channels);
175 TH1F *calibS4_2 =new TH1F("calibS4_2", "calibS4_2", channels, 0, channels);
176 TH1F *calibS4_4 =new TH1F("calibS4_4", "calibS4_4", channels, 0, channels);
177 ULong_t lastime, firstime, obt1;
178 double obmin=0.;
179 double obmax=0.;
180 double limitdown=0;
181 double limitup=0;
182 const Int_t size = nevents;
183
184 headBr->GetEntry(0);
185 ph = eh->GetPscuHeader();
186 firstime = ph->GetOrbitalTime();
187 headBr->GetEntry(nevents-1);
188 ph = eh->GetPscuHeader();
189 lastime = ph->GetOrbitalTime();
190 obmin=firstime;
191 obmax=lastime;
192 if(nevents < 2){
193 limitdown= obmin - 1000000;
194 limitup= obmax + 1000000;
195 }else{
196 limitdown=obmin;
197 limitup=obmax;
198 }
199 stringstream oss;
200 oss.str("");
201 oss << "S4_Calibration_QL: "<< filename.Data();
202 TH1F *cal1 =new TH1F("calibS4_1", oss.str().c_str(), size, obmin, obmax);
203 TH1F *cal2 =new TH1F("calibS4_2", oss.str().c_str(), size, obmin, obmax);
204 TH1F *cal4 =new TH1F("calibS4_4", oss.str().c_str(), size, obmin, obmax);
205
206 for(Int_t k = 0; k<nevents; k++){
207 headBr->GetEntry(k);
208 S4Br->GetEntry(k);
209 ph = eh->GetPscuHeader();
210 Int_t tmpSize = s4Event->Records->GetEntries();
211 for (Int_t j = 0; j < 4; j++){
212 for (Int_t i = 0; i < 128; i++){
213 s4Record = (pamela::S4::S4Event*)s4Event->Records->At((j*128 + i));
214 switch (j) {
215 case 0 :{
216 calibS4_1->Fill(s4Record->S4_DATA);
217 break;
218 }
219 case 1 :{
220 calibS4_2->Fill(s4Record->S4_DATA);
221 break;
222 }
223 case 3 :{
224 calibS4_4->Fill(s4Record->S4_DATA);
225 break;
226 }
227 }
228 }
229 }
230
231 //obt=ph->GetOrbitalTime();
232 calib_1=calibS4_1->GetMean(1);
233 //calib_1_RMS=calibS4_1->GetRMS(1);
234 calib_2=calibS4_2->GetMean(1);
235 //calib_2_RMS=calibS4_2->GetRMS(1);
236 calib_4=calibS4_4->GetMean(1);
237 //calib_4_RMS=calibS4_4->GetRMS(1);
238 cal1->Fill(ph->GetOrbitalTime(),calib_1);
239 cal2->Fill(ph->GetOrbitalTime(),calib_2);
240 cal4->Fill(ph->GetOrbitalTime(),calib_4);
241
242 //cout<<calib_1_RMS<<"\n";
243 //cout<<calib_2_RMS<<"\n";
244 //cout<<calib_4_RMS<<"\n";
245 //cout<<k<<" "<<obt<<" \n "<<calib_1<<" "<<calib_2<<" "<<calib_4<<"\n";
246
247 }
248
249 //----------------- Create and draw canvas -----------------------------------------//
250 TCanvas *finalCanv = new TCanvas("S4Calib","Calibration_QL", 1280, 1024);
251 finalCanv->SetFillColor(10);
252
253 finalCanv->cd();
254 gPad->SetLogy();
255
256 cal1->SetStats(kFALSE);
257 cal1->SetMarkerSize(.5);
258 cal1->SetMarkerStyle(21);
259 cal1->SetMarkerColor(3);
260 cal1->SetMinimum(1);
261 cal1->SetMaximum(10000);
262 cal1->GetYaxis()->SetTitle("S4 mean value (ADC)");
263 cal1->GetYaxis()->SetTitleSize(0.03);
264 cal1->GetYaxis()->SetTitleOffset(1);
265 cal1->GetYaxis()->CenterTitle();
266 cal1->GetYaxis()->SetLabelSize(0.02);
267 cal1->GetXaxis()->CenterTitle();
268 cal1->GetXaxis()->SetTitleSize(0.03);
269 cal1->GetXaxis()->SetTitleOffset(1);
270 cal1->GetXaxis()->SetLabelSize(0.02);
271 cal1->GetXaxis()->SetTitle("OBT (ms)");
272 cal1->Draw("9p");
273
274 cal2->SetStats(kFALSE);
275 cal2->SetMarkerSize(.5);
276 cal2->SetMarkerStyle(21);
277 cal2->SetMarkerColor(6);
278 cal2->SetMinimum(1);
279 cal2->SetMaximum(10000);
280 cal2->Draw("9psame");
281
282 cal4->SetStats(kFALSE);
283 cal4->SetMarkerSize(.5);
284 cal4->SetMarkerStyle(21);
285 cal4->SetMarkerColor(4);
286 cal4->SetMinimum(1);
287 cal4->SetMaximum(10000);
288 cal4->Draw("9psame");
289 if (IPM1status==0 && IPM2status==1){ ////hot configuration
290 TF1 *func1 = new TF1("func1", "1560"); ///valore di riferimento 1300
291 //func1->SetRange(obmin, obmax);
292 func1->SetRange(limitdown, limitup);
293 func1->SetLineColor(4);
294 func1->SetLineStyle(1);
295 func1->SetLineWidth(3);
296 func1->Draw("same");
297 TF1 *func2 = new TF1("func2", "1040"); ///valore di riferimento 1300
298 //func2->SetRange(obmin, obmax);
299 func2->SetRange(limitdown, limitup);
300 func2->SetLineColor(4);
301 func2->SetLineStyle(1);
302 func2->SetLineWidth(3);
303 func2->Draw("same");
304 TF1 *func3 = new TF1("func3", "109"); ///valore di riferimento 95
305 //func3->SetRange(obmin, obmax);
306 func3->SetRange(limitdown, limitup);
307 func3->SetLineColor(6);
308 func3->SetLineStyle(1);
309 func3->SetLineWidth(3);
310 func3->Draw("same");
311 TF1 *func4 = new TF1("func4", "71"); ///valore di riferimento 95
312 //func4->SetRange(obmin, obmax);
313 func4->SetRange(limitdown, limitup);
314 func4->SetLineColor(6);
315 func4->SetLineStyle(1);
316 func4->SetLineWidth(3);
317 func4->Draw("same");
318 TF1 *func5 = new TF1("func5", "38.4"); //valore di riferimento 32
319 //func5->SetRange(obmin, obmax);
320 func5->SetRange(limitdown, limitup);
321 func5->SetLineStyle(1);
322 func5->SetLineColor(3);
323 func5->SetLineWidth(3);
324 func5->Draw("same");
325 TF1 *func6 = new TF1("func6", "25.6"); //valore di riferimento 32
326 //func6->SetRange(obmin, obmax);
327 func6->SetRange(limitdown, limitup);
328 func6->SetLineStyle(1);
329 func6->SetLineColor(3);
330 func6->SetLineWidth(3);
331 func6->Draw("same");
332 }
333
334 if (IPM1status==1 && IPM2status==0){ ////cold configuration
335 TF1 *func1 = new TF1("func1", "2400");
336 //func1->SetRange(obmin, obmax);
337 func1->SetRange(limitdown, limitup);
338 func1->SetLineColor(4);
339 func1->SetLineStyle(1);
340 func1->SetLineWidth(3);
341 func1->Draw("same");
342 TF1 *func2 = new TF1("func2", "1600"); ///valore di riferimento 2000
343 //func2->SetRange(obmin, obmax);
344 func2->SetRange(limitdown, limitup);
345 func2->SetLineColor(4);
346 func2->SetLineStyle(1);
347 func2->SetLineWidth(3);
348 func2->Draw("same");
349 TF1 *func3 = new TF1("func3", "180");
350 //func3->SetRange(obmin, obmax);
351 func3->SetRange(limitdown, limitup);
352 func3->SetLineColor(6);
353 func3->SetLineStyle(1);
354 func3->SetLineWidth(3);
355 func3->Draw("same");
356 TF1 *func4 = new TF1("func4", "120"); ///valore di riferimento 150
357 //func4->SetRange(obmin, obmax);
358 func4->SetRange(limitdown, limitup);
359 func4->SetLineColor(6);
360 func4->SetLineStyle(1);
361 func4->SetLineWidth(3);
362 func4->Draw("same");
363 TF1 *func5 = new TF1("func5", "38.4");
364 //func5->SetRange(obmin, obmax);
365 func5->SetRange(limitdown, limitup);
366 func5->SetLineStyle(1);
367 func5->SetLineColor(3);
368 func5->SetLineWidth(3);
369 func5->Draw("same");
370 TF1 *func6 = new TF1("func6", "25.6"); //valore di riferimento 32
371 //func6->SetRange(obmin, obmax);
372 func6->SetRange(limitdown, limitup);
373 func6->SetLineStyle(1);
374 func6->SetLineColor(3);
375 func6->SetLineWidth(3);
376 func6->Draw("same");
377 }
378
379 TPad *pad = new TPad("pad","pad", .75, .93, .99, .99);
380 pad->SetFillColor(10);
381 pad->Draw();
382 pad->cd();
383 TLatex *l = new TLatex();
384 l->SetTextAlign(12);
385 l->SetTextSize(0.35);
386 l->SetTextColor(8);
387 l->DrawLatex(0.05, 0.65, status.Data());
388
389 oss.str("");
390 if (outDir == "./") {
391 oss << filename.Data() << "_S4_Calibration_QL." << format.Data();
392 } else {
393 oss << outDir.Data() << filename.Data() << "_S4_Calibration_QL." << format.Data();
394 }
395 finalCanv->SaveAs(oss.str().c_str());
396
397
398
399
400
401 }
402
403 int main(int argc, char* argv[]){
404 TString path;
405 TString outDir ="./";
406 TString format ="jpg";
407
408 if (argc < 2){
409 printf("You have to insert at least the file to analyze \n");
410 printf("Try '--help' for more information. \n");
411 exit(1);
412 }
413
414 if (!strcmp(argv[1], "--help")){
415 printf( "Usage: S4_Calibration_QL FILE [OPTION] \n");
416 printf( "\t --help Print this help and exit \n");
417 printf( "\t -outDir[path] Path where to put the output [default ./] \n");
418 // printf( "\t -format[] Format for output files [default 'jpg'] \n");
419 exit(1);
420 }
421
422 path=argv[1];
423
424 for (int i = 2; i < argc; i++){
425
426 if (!strcmp(argv[i], "-outDir")){
427 if (++i >= argc){
428 printf( "-outDir needs arguments. \n");
429 printf( "Try '--help' for more information. \n");
430 exit(1);
431 }
432 else{
433 outDir = argv[i];
434 continue;
435 }
436 }
437
438 if (!strcmp(argv[i], "-format")){
439 if (++i >= argc){
440 printf( "-format needs arguments. \n");
441 printf( "Try '--help' for more information. \n");
442 exit(1);
443 }
444 else{
445 format = argv[i];
446 continue;
447 }
448 }
449
450
451 }
452
453
454 S4_Calibration_QL(argv[1], outDir, format);
455
456 }
457
458

  ViewVC Help
Powered by ViewVC 1.1.23