/[PAMELA software]/calo/ground/QLOOK/macros/CaloMATRA.c
ViewVC logotype

Annotation of /calo/ground/QLOOK/macros/CaloMATRA.c

Parent Directory Parent Directory | Revision Log Revision Log


Revision 1.1.1.1 - (hide annotations) (download) (vendor branch)
Mon Dec 5 16:12:46 2005 UTC (19 years ago) by mocchiut
Branch: MAIN, QLOOK
CVS Tags: start, v3r00, v3r01, HEAD
Changes since 1.1: +0 -0 lines
File MIME type: text/plain
Imported sources

1 mocchiut 1.1 //
2     // Shows calorimeter tracks - Emiliano Mocchiutti
3     //
4     // CaloMATRA.c version 3.00 (2005-11-23)
5     //
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     //
10     // 2.12 - 3.00 (2005-11-23): now it can be run as a compiled program with graphic output!
11     //
12     // 2.11 - 2.12 (2005-11-15): compiled!
13     //
14     // 2.10 - 2.11 (2005-08-16): 64 bit arch bugs fixed.
15     //
16     // 2.09 - 2.10 (2005-07-25): don't load anymore yodaUtility.c use instead clones of routines.
17     //
18     // 2.08 - 2.09 (2005-07-12): small changes for compilation
19     //
20     // 2.07 - 2.08 (2005-06-28): changed to be inserted in package CaloQLOOK.
21     //
22     // 2.06 - 2.07 (2005-06-07): check if file is older than 050515_007.
23     //
24     // 2.05 - 2.06 (2005-04-07): changed tree name of level1 data.
25     //
26     // 2.04 - 2.05 (2005-03-30): changed call to WhatToDo subroutine according to the changes in WhatToDo
27     //
28     // 2.03 - 2.04 (2005-03-09): saveas input parameter introduced (required by Maurizio).
29     //
30     // 2.02 - 2.03 (2005-02-24): Changed colour background (required by Marco Casolino).
31     //
32     // 2.01 - 2.02 (2005-02-24): Changed variable definition from C/C++ style to ROOT style (int->Int_t).
33     //
34     // 2.00 - 2.01 (2005-02-07): User interaction routine changed. Maxevent bug fixed. Change default name for printed files.
35     //
36     // 1.04 - 2.00 (2005-01-20): Now it will access directly LEVEL1 ntuple instead of calibrating everything everytime.
37     //
38     // 1.03 - 1.04 (2005-01-17): Upgrade in the user-interaction capability and cleanup of the code
39     //
40     // 1.02 - 1.03 (2004-12-20): canvas is created once and then cleared.
41     //
42     // 1.01 - 1.02 (2004-12-17): bugs fixed and include the possibility of using a old calibration file to see the data
43     //
44     // 1.00 - 1.01 (2004-12-15): Include also yodaUtility.c
45     //
46     #include <fstream>
47     #include <sstream>
48     #include <TTree.h>
49     #include <TClassEdit.h>
50     #include <TObject.h>
51     #include <TList.h>
52     #include <TSystem.h>
53     #include <TSystemDirectory.h>
54     #include <TString.h>
55     #include <TFile.h>
56     #include <TClass.h>
57     #include <TCanvas.h>
58     #include <TH1.h>
59     #include <TH1F.h>
60     #include <TH2D.h>
61     #include <TLatex.h>
62     #include <TPad.h>
63     #include <TPaveLabel.h>
64     #include <TChain.h>
65     #include <TApplication.h>
66     #if !defined (__CINT__)
67     #include <event/PamelaRun.h>
68     #include <event/physics/calorimeter/CalorimeterEvent.h>
69     #include <event/physics/trigger/TriggerEvent.h>
70     #include <event/CalibCalPedEvent.h>
71     extern short int CaloLEVEL1(TString, TString, Int_t);
72     #include <caloclasses.h>
73     #endif
74     #include <CaloFunctions.h>
75    
76     void CaloMATRA(TString filename, Int_t fromevent = 1, Int_t toevent = 0, TString tyhist="box", TString outDir = "", TString saveas = "gif"){
77     gROOT->GetListOfCanvases()->Delete("a");
78     gDirectory->GetList()->Delete();
79     const char* startingdir = gSystem->WorkingDirectory();
80     Int_t doflag = 1;
81     #if !defined (__CINT__)
82     TApplication app("app",0,0);
83     #endif
84     #if defined (__CINT__)
85     emicheckLib();
86     stringstream llib;
87     const char *pamlib = gSystem->ExpandPathName("$PAM_LIB");
88     llib << pamlib << "/caloclasses_h.so";
89     gSystem->Load(llib.str().c_str());
90     #endif
91     if ( outDir == "" ) outDir = filename;
92     //
93     // Open LEVEL1 ntuple, if it doesn't exist call CaloLEVEL1.
94     //
95     TFile *headerFile = 0;
96     TFile *caloFile = 0;
97     headerFile = emigetFile(filename, "Physics", "Header");
98     if ( !headerFile ){
99     printf("No header file, exiting...\n");
100     return;
101     };
102     caloFile = emigetFile(filename, "Physics.Level1", "Calorimeter");
103     if ( !caloFile ){
104     printf("\n WARNING: No calorimeter LEVEL1 file! \n\n I am going to call CaloLEVEL1, it could take some time to generate level1 data. \n\n");
105     headerFile->Close();
106     gSystem->Exec("sleep 3");
107     short int ERR = CaloLEVEL1(filename,"",0);
108     if ( ERR ) {
109     printf("\n I am not able to calibrate data, please call CaloLEVEL1 by hand \n\n Exiting... \n\n");
110     return;
111     } else {
112     printf(" OK, back to CaloMATRA! \n\n");
113     headerFile = emigetFile(filename, "Physics", "Header");
114     caloFile = emigetFile(filename, "Physics.Level1", "Calorimeter");
115     };
116     };
117     //Takes the tree of the header file
118     TTree *otr = (TTree*)headerFile->Get("Pscu");
119     otr->AddFriend("CaloLevel1",caloFile);
120     //
121     CalorimeterLevel1 *calo = new CalorimeterLevel1();
122     otr->SetBranchAddress("Event", &calo);
123     //
124     Long64_t nevents = otr->GetEntries();
125     stringstream titolo;
126     // char *titolo=" looong long line as workaround since root is not working other ways";
127     // char *stringa=" looong long line as workaround since root is not working other ways";
128     stringstream stringa;
129     //TString *file[17];
130     //file = "dw_000000_000.dat";
131     //file = getFilename(filename);
132     TString fififile = getFilename(filename);
133     const char *file = fififile;
134     //
135     //
136     // input limits
137     //
138     if ( tyhist != "box" && tyhist != "lego" ) {
139     printf("You can choose tyhist as box (default) or lego \n");
140     return;
141     };
142    
143     if ( fromevent > toevent && toevent ){
144     printf("It must be fromevent < toevent \n");
145     return;
146     };
147    
148    
149     if ( fromevent > nevents+1 || fromevent < 0 ) {
150     printf("You can choose fromevent between 0 (all) and %i \n",(int)nevents+1);
151     return;
152     };
153    
154     if ( toevent > nevents+1 || toevent < 0 ) {
155     printf("You can choose toevent between 0 (all) and %i \n",(int)nevents+1);
156     return;
157     };
158     Int_t minevent = 0;
159     Int_t maxevent = nevents;
160     if ( fromevent == 0 ) {
161     minevent = 0;
162     maxevent = nevents;
163     } else {
164     minevent = fromevent - 1;
165     if ( toevent > 0 ){
166     maxevent = toevent - 1;
167     } else {
168     maxevent = fromevent -1;
169     };
170     };
171    
172     //
173     // run over all the events
174     //
175     TCanvas *figura2 = new TCanvas("Calorimeter_tracks", "Calorimeter_tracks", 750, 650);
176     figura2->SetFillColor(10);
177     figura2->Range(0,0,100,100);
178     Int_t i = minevent;
179     while ( i < maxevent+1 ){
180     figura2->Clear();
181     //
182     // variables definition
183     //
184     Int_t badstrip = 0;
185     //
186     // Book the histograms:
187     //
188     //
189     stringstream xview;
190     xview.str("");
191     xview << "x-view event " << (i+1);
192     stringstream yview;
193     yview.str("");
194     yview << "y-view event " << (i+1);
195     gDirectory->Delete(xview.str().c_str());
196     gDirectory->Delete(yview.str().c_str());
197     TH2F *Xview = new TH2F(xview.str().c_str(),"",96,-0.5,95.5,22,-0.5,21.5);
198     TH2F *Yview = new TH2F(yview.str().c_str(),"",96,-0.5,95.5,22,-0.5,21.5);
199     //
200     // figures:
201     //
202     Int_t bgcolor = 10;
203     TLatex *t=new TLatex();
204     t->SetTextFont(32);
205     t->SetTextColor(1);
206     t->SetTextSize(0.03);
207     t->SetTextAlign(12);
208     titolo.str("");
209     titolo << "Calorimeter tracks - file " << file;
210     titolo << " - event number " << (i+1);
211     // sprintf(titolo,"Calorimeter tracks - file %s - event number %i ",file,i+1);
212     t->DrawLatex(0.5,97.,titolo.str().c_str());
213     TPad *pd1 = new TPad("pd1","This is pad1",0.02,0.05,0.88,0.49,bgcolor);
214     TPad *pd2 = new TPad("pd2","This is pad2",0.02,0.51,0.88,0.95,bgcolor);
215     TPad *palette = new TPad("palette","This is palette",0.90,0.05,0.98,0.9,bgcolor);
216     figura2->cd();
217     t=new TLatex();
218     t->SetTextFont(32);
219     t->SetTextColor(1);
220     t->SetTextSize(0.03);
221     t->SetTextAlign(12);
222     t->DrawLatex(92.,92.5,"MIP");
223     pd1->Range(0,0,100,100);
224     pd2->Range(0,0,100,100);
225     palette->Range(0,0,100,100);
226     pd1->SetTicks();
227     pd2->SetTicks();
228     pd1->Draw();
229     pd2->Draw();
230     palette->Draw();
231     palette->cd();
232     // palette
233     TPaveLabel *box1 = new TPaveLabel(2,2,98,16.3,"0","");
234     box1->SetTextFont(32);
235     box1->SetTextColor(1);
236     box1->SetTextSize(0.25);
237     box1->SetFillColor(10);
238     box1->Draw();
239     TPaveLabel *box2 = new TPaveLabel(2,18.3,98,32.66,"0-2","");
240     box2->SetTextFont(32);
241     box2->SetTextColor(1);
242     box2->SetTextSize(0.25);
243     box2->SetFillColor(38);
244     box2->Draw();
245     TPaveLabel *box3 = new TPaveLabel(2,34.66,98,48.96,"2-10","");
246     box3->SetTextFont(32);
247     box3->SetTextColor(1);
248     box3->SetTextSize(0.25);
249     box3->SetFillColor(4);
250     box3->Draw();
251     TPaveLabel *box4 = new TPaveLabel(2,50.96,98,65.26,"10-100","");
252     box4->SetTextFont(32);
253     box4->SetTextColor(1);
254     box4->SetTextSize(0.25);
255     box4->SetFillColor(3);
256     box4->Draw();
257     TPaveLabel *box5 = new TPaveLabel(2,67.26,98,81.56,"100-500","");
258     box5->SetTextFont(32);
259     box5->SetTextColor(1);
260     box5->SetTextSize(0.2);
261     box5->SetFillColor(2);
262     box5->Draw();
263     TPaveLabel *box6 = new TPaveLabel(2,83.56,98,97.86,">500","");
264     box6->SetTextFont(32);
265     box6->SetTextColor(1);
266     box6->SetTextSize(0.25);
267     box6->SetFillColor(6);
268     box6->Draw();
269     figura2->cd();
270     gStyle->SetOptDate(1);
271     if ( tyhist == "box" ) {
272     pd1->cd();
273     gStyle->SetOptStat(0);
274     Xview->SetXTitle("strip");
275     Xview->SetYTitle("X - plane");
276     Xview->GetYaxis()->SetTitleOffset(0.5);
277     Xview->SetFillColor(bgcolor);
278     Xview->Fill(1.,1.,1.);
279     Xview->Draw(tyhist);
280     pd1->Update();
281     pd2->cd();
282     gStyle->SetOptStat(0);
283     Yview->SetXTitle("strip");
284     Yview->SetYTitle("Y - plane");
285     Yview->GetYaxis()->SetTitleOffset(0.5);
286     Yview->SetFillColor(bgcolor);
287     Yview->Fill(1.,1.,1.);
288     Yview->Draw(tyhist);
289     pd2->Update();
290     };
291     //
292     // read from the header of the event the absolute time at which it was recorded
293     //
294     otr->GetEntry(i);
295     //
296     // run over views and planes
297     //
298     for (Int_t m = 0; m < 22; m++){
299     for (Int_t l = 0; l < 2; l++){
300     for (Int_t n = 0; n < 96; n++){
301     if ( calo->estrip[l][m][n] > 0.7 ) {
302     //
303     // OK, now in estrip we have the energy deposit in MIP of all the strips for this event (at the end of loops of course)
304     //
305     if ( tyhist == "box" ){
306     xview.str("");
307     xview << "x-view event " << n;
308     xview << " " << m;
309     xview << " " << l;
310     yview.str("");
311     yview << "y-view event " << n;
312     yview << " " << m;
313     yview << " " << l;
314     gDirectory->Delete(xview.str().c_str());
315     gDirectory->Delete(yview.str().c_str());
316     TH2F *Xview = new TH2F(xview.str().c_str(),"",96,-0.5,95.5,22,-0.5,21.5);
317     TH2F *Yview = new TH2F(yview.str().c_str(),"",96,-0.5,95.5,22,-0.5,21.5);
318     Int_t colo;
319     ColorMIP(calo->estrip[l][m][n],colo);
320     Xview->SetFillColor(colo);
321     Yview->SetFillColor(colo);
322     if ( l == 0 ) {
323     Xview->Fill(n,m,1.);
324     pd1->cd();
325     Xview->Draw("box same");
326     };
327     if ( l == 1 ) {
328     Yview->Fill(n,m,1.);
329     pd2->cd();
330     Yview->Draw("box same");
331     };
332     } else {
333     if ( l == 0 ) Xview->Fill(n,m,calo->estrip[l][m][n]);
334     if ( l == 1 ) Yview->Fill(n,m,calo->estrip[l][m][n]);
335     };
336     if ( calo->good[l][m][n] != 0 ) badstrip++;
337     };
338     };
339     };
340     };
341     //
342     figura2->cd();
343     t=new TLatex();
344     t->SetTextFont(32);
345     t->SetTextColor(8);
346     t->SetTextAlign(12);
347     t->SetTextSize(0.02);
348     Int_t qtot = (int)calo->qtot;
349     Int_t nstrip = (int)calo->nstrip;
350     stringa.str("");
351     stringa << "QTOT = " << qtot;
352     stringa << " NSTRIP = " << nstrip;
353     stringa << " Bad strips = " << badstrip;
354     stringa << " ";
355     //sprintf(stringa,"QTOT = %i NSTRIP = %i Bad strips = %i ",qtot,nstrip,badstrip);
356     t->DrawLatex(30.,2.,stringa.str().c_str());
357     figura2->Update();
358     if ( tyhist == "lego" ){
359     pd1->cd();
360     gStyle->SetOptStat(0);
361     Xview->SetXTitle("strip");
362     Xview->SetYTitle("X - plane");
363     Xview->GetXaxis()->SetTitleOffset(1.5);
364     Xview->GetYaxis()->SetTitleOffset(1.5);
365     Xview->SetZTitle("MIP");
366     Xview->Draw(tyhist);
367     pd1->Update();
368     pd2->cd();
369     gStyle->SetOptStat(0);
370     Yview->SetXTitle("strip");
371     Yview->SetYTitle("Y - plane");
372     Yview->GetXaxis()->SetTitleOffset(1.5);
373     Yview->GetYaxis()->SetTitleOffset(1.5);
374     Yview->SetZTitle("MIP");
375     Yview->Draw(tyhist);
376     pd2->Update();
377     };
378     pd1->Update();
379     pd2->Update();
380     figura2->Update();
381    
382     //
383     // Interact with user: do you want to continue, exit or print the figure?
384     //
385     if ( i != maxevent ) {
386     TString figty = "matra";
387     doflag = 1;
388     Float_t lastevno = 0;
389     Float_t firstevno = 0;
390     Int_t jumpto = 0;
391     Int_t ifout = WhatToDo(i,doflag, jumpto,nevents,lastevno,firstevno,file,outDir,figty,*figura2);
392     if ( maxevent < i+1 ) {
393     maxevent = nevents;
394     printf("WARNING: you have chosen an event number out of the starting range.\n Range extended to %i\n\n",maxevent);
395     };
396     if ( ifout ) return;
397     } else {
398     const string fil = (const char*)filename;
399     Int_t posiz = fil.find("dw_");
400     if ( posiz == -1 ) posiz = fil.find("DW_");
401     Int_t posiz2 = posiz+13;
402     TString file2;
403     stringcopy(file2,filename,posiz,posiz2);
404     //
405     const char *figrec = file2;
406     const char *outdir = outDir;
407     stringstream figsave;
408     const char *format = saveas;
409     figsave.str("");
410     figsave << outdir << "/" ;
411     figsave << figrec << "_matra_";
412     figsave << (i+1) << ".";
413     figsave << format;
414     //
415     figura2->SaveAs(figsave.str().c_str());
416    
417     // char *figrec = 0;
418     //figrec = "dw_000000_000";
419     //memcpy(figrec, file, 13);
420     //const char *outdir = outDir;
421     // char *figsave = 0;
422     //const char *format = saveas;
423     //stringstream figsave;
424     //figsave.str("");
425     //figsave << outdir << "/";
426     //figsave << figrec << "_matra_";
427     //figsave << (i+1) << ".";
428     //figsave << format;
429     // figsave = Form("%s/%s_matra_%i.%s",outdir,figrec,i+1,format);
430     // figura2->SaveAs(figsave.str().c_str());
431     };
432     if ( doflag == 2 && i == 0 ) {
433     printf("\n WARNING: Cannot go backward! Going forward. \n");
434     doflag = 1;
435     };
436     if ( doflag == 2 && i>0 ) i--;
437     if ( doflag == 1 ) i++;
438     // app.Run();
439     };
440     //
441     // last warning (if the case)
442     //
443     figura2->Update();
444     printf("\n");
445     caloFile->Close();
446     gSystem->ChangeDirectory(startingdir);
447     }

  ViewVC Help
Powered by ViewVC 1.1.23