/[PAMELA software]/calo/flight/FUTILITIES/macros/FCaloMATRA.cxx
ViewVC logotype

Contents of /calo/flight/FUTILITIES/macros/FCaloMATRA.cxx

Parent Directory Parent Directory | Revision Log Revision Log


Revision 1.2 - (show annotations) (download)
Mon Sep 22 20:18:46 2008 UTC (16 years, 2 months ago) by mocchiut
Branch: MAIN
CVS Tags: HEAD
Changes since 1.1: +1 -0 lines
Error occurred while calculating annotation data.
Added -m32 flag for cross compilation on 64bit machines

1 //
2 // Shows calorimeter tracks - Emiliano Mocchiutti
3 //
4 // FCaloMATRA.cxx version 1.01 (2006-03-07)
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 // 1.00 - 1.01 (2006-03-07): Flight version, read unique YODA file.
11 //
12 // 0.00 - 1.00 (2006-03-07): Clone of CaloMATARA v3r00.
13 //
14 #include <sys/types.h>
15 #include <unistd.h>
16 #include <stdio.h>
17 #include <fstream>
18 #include <sstream>
19 #include <TTree.h>
20 #include <TObjectTable.h>
21 #include <TClassEdit.h>
22 #include <TObject.h>
23 #include <TList.h>
24 #include <TSystem.h>
25 #include <TSystemDirectory.h>
26 #include <TString.h>
27 #include <TFile.h>
28 #include <TClass.h>
29 #include <TCanvas.h>
30 #include <TROOT.h>
31 #include <TH1.h>
32 #include <TH1F.h>
33 #include <TH2D.h>
34 #include <TLatex.h>
35 #include <TPad.h>
36 #include <TPaveLabel.h>
37 #include <TChain.h>
38 #include <TApplication.h>
39 #include <TStyle.h>
40 extern bool existfile(TString);
41 extern void stringcopy(TString&, const TString&, Int_t, Int_t);
42 extern void ColorMIP(Float_t, int&);
43 extern Int_t WhatToDo(int&, int&, int&, Long64_t, Float_t, Float_t, const char*, TString, TString, TCanvas&);
44 extern TString getFilename(const TString);
45 extern void *processevents(void *);
46 //
47 #include <caloclassesfun.h>
48 //
49 using namespace std;
50
51
52 void FCaloMATRA(TString filename, Int_t fromevent = 1, Int_t toevent = 0, TString tyhist="box", TString outDir = "", TString saveas = "gif"){
53 Int_t doflag = 1;
54 TApplication *app;
55 if ( !gROOT->GetListOfClasses()->FindObject("TRint") ){
56 //
57 app = new TApplication("app",0,0);
58 };
59 const char* startingdir = gSystem->WorkingDirectory();
60 if ( !strcmp(outDir.Data(),"") ) outDir = startingdir;
61 if ( !existfile(filename) ){
62 printf(" %s :no such file or directory \n",filename.Data());
63 printf("\n ERROR: No calorimeter LEVEL1 file! \n\n Run FCaloLEVEL1 to generate level1 data. \n\n");
64 return;
65 };
66 //
67 TFile *File = new TFile(filename.Data());
68 TTree *otr = (TTree*)File->Get("CaloLevel1");
69 if ( !otr ){
70 printf(" %s are you sure? I need a LEVEL1 file! \n",filename.Data());
71 return;
72 };
73 //
74 CalorimeterLevel1 *calo = new CalorimeterLevel1();
75 otr->SetBranchAddress("Event", &calo);
76 //
77 Long64_t nevents = otr->GetEntries();
78 stringstream titolo;
79 stringstream stringa;
80 TString fififile = getFilename(filename);
81 const char *file = fififile;
82 //
83 //
84 // input limits
85 //
86 if ( tyhist != "box" && tyhist != "lego" ) {
87 printf("You can choose tyhist as box (default) or lego \n");
88 return;
89 };
90
91 if ( fromevent > toevent && toevent ){
92 printf("It must be fromevent < toevent \n");
93 return;
94 };
95
96
97 if ( fromevent > nevents+1 || fromevent < 0 ) {
98 printf("You can choose fromevent between 0 (all) and %i \n",(int)nevents+1);
99 return;
100 };
101
102 if ( toevent > nevents+1 || toevent < 0 ) {
103 printf("You can choose toevent between 0 (all) and %i \n",(int)nevents+1);
104 return;
105 };
106 Int_t minevent = 0;
107 Int_t maxevent = nevents;
108 if ( fromevent == 0 ) {
109 minevent = 0;
110 maxevent = nevents;
111 } else {
112 minevent = fromevent - 1;
113 if ( toevent > 0 ){
114 maxevent = toevent - 1;
115 } else {
116 maxevent = fromevent -1;
117 };
118 };
119
120 //
121 // run over all the events
122 //
123 TCanvas *figura2 = new TCanvas("Calorimeter_tracks", "Calorimeter_tracks", 750, 650);
124 figura2->SetFillColor(10);
125 figura2->Range(0,0,100,100);
126 Int_t i = minevent;
127 while ( i < maxevent+1 ){
128 figura2->Clear();
129 //
130 // variables definition
131 //
132 Int_t badstrip = 0;
133 //
134 // Book the histograms:
135 //
136 //
137 stringstream xview;
138 xview.str("");
139 xview << "x-view event " << (i+1);
140 stringstream yview;
141 yview.str("");
142 yview << "y-view event " << (i+1);
143 gDirectory->Delete(xview.str().c_str());
144 gDirectory->Delete(yview.str().c_str());
145 TH2F *Xview = new TH2F(xview.str().c_str(),"",96,-0.5,95.5,22,-0.5,21.5);
146 TH2F *Yview = new TH2F(yview.str().c_str(),"",96,-0.5,95.5,22,-0.5,21.5);
147 //
148 // figures:
149 //
150 Int_t bgcolor = 10;
151 TLatex *t=new TLatex();
152 t->SetTextFont(32);
153 t->SetTextColor(1);
154 t->SetTextSize(0.03);
155 t->SetTextAlign(12);
156 titolo.str("");
157 titolo << "Calorimeter tracks - file " << file;
158 titolo << " - event number " << (i+1);
159 t->DrawLatex(0.5,97.,titolo.str().c_str());
160 Float_t paddim = 0.88;
161 if ( !strcmp(tyhist.Data(),"lego") ){
162 paddim = 0.98;
163 } else {
164 paddim = 0.88;
165 };
166 TPad *pd1 = new TPad("pd1","This is pad1",0.02,0.05,paddim,0.49,bgcolor);
167 TPad *pd2 = new TPad("pd2","This is pad2",0.02,0.51,paddim,0.95,bgcolor);
168 TPad *palette = 0;
169 figura2->cd();
170 pd1->Range(0,0,100,100);
171 pd2->Range(0,0,100,100);
172 pd1->SetTicks();
173 pd2->SetTicks();
174 pd1->Draw();
175 pd2->Draw();
176 if ( !strcmp(tyhist.Data(),"box") ){
177 palette = new TPad("palette","This is palette",0.90,0.05,0.98,0.9,bgcolor);
178 figura2->cd();
179 t=new TLatex();
180 t->SetTextFont(32);
181 t->SetTextColor(1);
182 t->SetTextSize(0.03);
183 t->SetTextAlign(12);
184 t->DrawLatex(92.,92.5,"MIP");
185 palette->Range(0,0,100,100);
186 palette->Draw();
187 palette->cd();
188 // palette
189 TPaveLabel *box1 = new TPaveLabel(2,2,98,16.3,"0","");
190 box1->SetTextFont(32);
191 box1->SetTextColor(1);
192 box1->SetTextSize(0.25);
193 box1->SetFillColor(10);
194 box1->Draw();
195 TPaveLabel *box2 = new TPaveLabel(2,18.3,98,32.66,"0-2","");
196 box2->SetTextFont(32);
197 box2->SetTextColor(1);
198 box2->SetTextSize(0.25);
199 box2->SetFillColor(38);
200 box2->Draw();
201 TPaveLabel *box3 = new TPaveLabel(2,34.66,98,48.96,"2-10","");
202 box3->SetTextFont(32);
203 box3->SetTextColor(1);
204 box3->SetTextSize(0.25);
205 box3->SetFillColor(4);
206 box3->Draw();
207 TPaveLabel *box4 = new TPaveLabel(2,50.96,98,65.26,"10-100","");
208 box4->SetTextFont(32);
209 box4->SetTextColor(1);
210 box4->SetTextSize(0.25);
211 box4->SetFillColor(3);
212 box4->Draw();
213 TPaveLabel *box5 = new TPaveLabel(2,67.26,98,81.56,"100-500","");
214 box5->SetTextFont(32);
215 box5->SetTextColor(1);
216 box5->SetTextSize(0.2);
217 box5->SetFillColor(2);
218 box5->Draw();
219 TPaveLabel *box6 = new TPaveLabel(2,83.56,98,97.86,">500","");
220 box6->SetTextFont(32);
221 box6->SetTextColor(1);
222 box6->SetTextSize(0.25);
223 box6->SetFillColor(6);
224 box6->Draw();
225 };
226 figura2->cd();
227 gStyle->SetOptDate(1);
228 if ( tyhist == "box" ) {
229 pd1->cd();
230 gStyle->SetOptStat(0);
231 Xview->SetXTitle("strip");
232 Xview->SetYTitle("X - plane");
233 Xview->GetYaxis()->SetTitleOffset(0.5);
234 Xview->SetFillColor(bgcolor);
235 Xview->Fill(1.,1.,1.);
236 Xview->Draw(tyhist);
237 pd1->Update();
238 pd2->cd();
239 gStyle->SetOptStat(0);
240 Yview->SetXTitle("strip");
241 Yview->SetYTitle("Y - plane");
242 Yview->GetYaxis()->SetTitleOffset(0.5);
243 Yview->SetFillColor(bgcolor);
244 Yview->Fill(1.,1.,1.);
245 Yview->Draw(tyhist);
246 pd2->Update();
247 };
248 //
249 // read from the header of the event the absolute time at which it was recorded
250 //
251 otr->GetEntry(i);
252 //
253 // run over views and planes
254 //
255 for (Int_t m = 0; m < 22; m++){
256 for (Int_t l = 0; l < 2; l++){
257 for (Int_t n = 0; n < 96; n++){
258 if ( calo->estrip[l][m][n] > 0.7 ) {
259 //
260 // 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)
261 //
262 if ( tyhist == "box" ){
263 xview.str("");
264 xview << "x-view event " << n;
265 xview << " " << m;
266 xview << " " << l;
267 yview.str("");
268 yview << "y-view event " << n;
269 yview << " " << m;
270 yview << " " << l;
271 gDirectory->Delete(xview.str().c_str());
272 gDirectory->Delete(yview.str().c_str());
273 TH2F *Xview = new TH2F(xview.str().c_str(),"",96,-0.5,95.5,22,-0.5,21.5);
274 TH2F *Yview = new TH2F(yview.str().c_str(),"",96,-0.5,95.5,22,-0.5,21.5);
275 Int_t colo;
276 ColorMIP(calo->estrip[l][m][n],colo);
277 Xview->SetFillColor(colo);
278 Yview->SetFillColor(colo);
279 if ( l == 0 ) {
280 Xview->Fill(n,m,1.);
281 pd1->cd();
282 Xview->Draw("box same");
283 };
284 if ( l == 1 ) {
285 Yview->Fill(n,m,1.);
286 pd2->cd();
287 Yview->Draw("box same");
288 };
289 } else {
290 if ( l == 0 ) Xview->Fill(n,m,calo->estrip[l][m][n]);
291 if ( l == 1 ) Yview->Fill(n,m,calo->estrip[l][m][n]);
292 };
293 if ( calo->good[l][m][n] != 0 ) badstrip++;
294 };
295 };
296 };
297 };
298 //
299 figura2->cd();
300 t=new TLatex();
301 t->SetTextFont(32);
302 t->SetTextColor(8);
303 t->SetTextAlign(12);
304 t->SetTextSize(0.02);
305 Int_t qtot = (int)calo->qtot;
306 Int_t nstrip = (int)calo->nstrip;
307 stringa.str("");
308 stringa << "QTOT = " << qtot;
309 stringa << " NSTRIP = " << nstrip;
310 stringa << " Bad strips = " << badstrip;
311 stringa << " ";
312 t->DrawLatex(30.,2.,stringa.str().c_str());
313 figura2->Update();
314 if ( tyhist == "lego" ){
315 pd1->cd();
316 gStyle->SetOptStat(0);
317 Xview->SetXTitle("strip");
318 Xview->SetYTitle("X - plane");
319 Xview->GetXaxis()->SetTitleOffset(1.5);
320 Xview->GetYaxis()->SetTitleOffset(1.5);
321 Xview->SetZTitle("MIP");
322 Xview->Draw(tyhist);
323 pd1->Update();
324 pd2->cd();
325 gStyle->SetOptStat(0);
326 Yview->SetXTitle("strip");
327 Yview->SetYTitle("Y - plane");
328 Yview->GetXaxis()->SetTitleOffset(1.5);
329 Yview->GetYaxis()->SetTitleOffset(1.5);
330 Yview->SetZTitle("MIP");
331 Yview->Draw(tyhist);
332 pd2->Update();
333 };
334 pd1->Update();
335 pd2->Update();
336 figura2->Update();
337
338 //
339 // Interact with user: do you want to continue, exit or print the figure?
340 //
341 if ( i != maxevent ) {
342 TString figty = "matra";
343 doflag = 1;
344 Float_t lastevno = 0;
345 Float_t firstevno = 0;
346 Int_t jumpto = 0;
347 Int_t ifout = WhatToDo(i,doflag, jumpto,nevents,lastevno,firstevno,file,outDir,figty,*figura2);
348 if ( maxevent < i+1 ) {
349 maxevent = nevents;
350 printf("WARNING: you have chosen an event number out of the starting range.\n Range extended to %i\n\n",maxevent);
351 };
352 if ( ifout ) return;
353 } else {
354 const string fil = (const char*)filename;
355 Int_t posiz = fil.find("dw_");
356 if ( posiz == -1 ) posiz = fil.find("DW_");
357 Int_t posiz2 = posiz+13;
358 TString file2;
359 stringcopy(file2,filename,posiz,posiz2);
360 //
361 const char *figrec = file2;
362 const char *outdir = outDir;
363 stringstream figsave;
364 const char *format = saveas;
365 figsave.str("");
366 figsave << outdir << "/" ;
367 figsave << figrec << "_matra_";
368 figsave << (i+1) << ".";
369 figsave << format;
370 //
371 figura2->SaveAs(figsave.str().c_str());
372 };
373 if ( doflag == 2 && i == 0 ) {
374 printf("\n WARNING: Cannot go backward! Going forward. \n");
375 doflag = 1;
376 };
377 if ( doflag == 2 && i>0 ) i--;
378 if ( doflag == 1 ) i++;
379 };
380 //
381 // last warning (if the case)
382 //
383 figura2->Update();
384 printf("\n");
385 gSystem->ChangeDirectory(startingdir);
386 }

  ViewVC Help
Powered by ViewVC 1.1.23