source: trunk/MagicSoft/Mars/mtemp/mpisa/macros/timedist3.C@ 4435

Last change on this file since 4435 was 4232, checked in by galante, 21 years ago
*** empty log message ***
File size: 11.1 KB
Line 
1/* ======================================================================== *\
2!
3! *
4! * This file is part of MARS, the MAGIC Analysis and Reconstruction
5! * Software. It is distributed to you in the hope that it can be a useful
6! * and timesaving tool in analysing Data of imaging Cerenkov telescopes.
7! * It is distributed WITHOUT ANY WARRANTY.
8! *
9! * Permission to use, copy, modify and distribute this software and its
10! * documentation for any purpose is hereby granted without fee,
11! * provided that the above copyright notice appear in all copies and
12! * that both that copyright notice and this permission notice appear
13! * in supporting documentation. It is provided "as is" without express
14! * or implied warranty.
15! *
16!
17!
18! Author(s): Javier López, 12/2003 <mailto:jlopez@ifae.es>
19! Markus Gaug , 04/2004 <mailto:markus@ifae.es>
20!
21! Copyright: MAGIC Software Development, 2000-2004
22!
23!
24\* ======================================================================== */
25/////////////////////////////////////////////////////////////////////////////
26//
27// bootcampstandardanalysis.C
28//
29// Updated version of the macro designed at the Wuerzburg bootcamp and
30// compatible with the latest changes in Mars for general usage at the
31// Udine bootcamp.
32//
33// Needs as arguments the run number of a pedestal file ("*_P_*.root"),
34// one of a calibration file ("*_C_*.root") and one of a data file
35// ("*_D_*.root"). Performs the pedestal calculation, the calibration
36/// constants calculation and the calibration of the data.
37//
38// The TString inpath has to be set correctly.
39//
40// The macro searches for the pulser colour which corresponds to the calibration
41// run number. If the run number is smaller than 20000, pulser colour "CT1"
42// is assumed, otherwise, it searches for the strings "green", "blue", "uv" or
43// "ct1" in the filenames. If no colour or multiple colours are found, the
44// execution is aborted.
45//
46//////////////////////////////////////////////////////////////////////////////////
47const Bool_t usedisplay = kTRUE;
48const TString defpath = "/data1/earth/magic/data/Period015/rootdata/2004_03_19/";
49const TString outpath = "./";
50const TString defrout = "output_Mrk421_20040319.root";
51// Mrk (13)
52const Int_t defpedr[] = {20823};
53//const Int_t defpedr [] = {20590,20593,20596,20599,20601,20602,20605,
54// 20608,20611,20614,20649,20652,20654};
55// OffMrk (14)
56//const Int_t defpedr [] = {20617,20619,20621,20623,20625,20628,20630,
57// 20632,20635,20637,20640,20643,20645,20647};
58
59
60//const Int_t defcalr [] = {20651};
61const Int_t defcalr [] = {20822};
62
63// Mrk (20)
64const Int_t defdatar[] = {20824};
65//const Int_t defdatar[] = {20591,20592,20594,20595,20597,20598,20600,
66// 20603,20604,20606,20607,20609,20610,20612,
67// 20613,20615,20616,20650,20653,20655};
68// OffMrk (18)
69// const Int_t defdatar[] = {20618,20620,20622,20624,20626,20627,20629,
70// 20631,20633,20634,20636,20638,20639,20641,
71// 20642,20644,20646,20648};
72
73
74void timedist3(const TString inpath=defpath,
75 const Int_t psize=1, const Int_t pedruns[]=defpedr,
76 const Int_t csize=1, const Int_t calruns[]=defcalr,
77 const Int_t dsize=1, const Int_t dataruns[]=defdatar,
78 const TString resname=defrout)
79
80{
81
82 //
83 // Choose the signal Extractor:
84 //
85 //MExtractSlidingWindow extractor;
86 MExtractFixedWindowPeakSearch extractor;
87 //MExtractFixedWindow extractor;
88
89 //
90 // Set Ranges or Windows
91 //
92 extractor.SetRange(3,14,3,14);
93 //extractor.SetWindows(8,8);
94
95 //
96 // Choose the arrival time Extractor:
97 //
98 MExtractTimeFastSpline timeext;
99 // MExtractTimeHighestIntegral timeext;
100 // MExtractTimeSpline timeext;
101 //
102 // Set Ranges or Windows
103 //
104 timeext.SetRange(2,12,4,14);
105
106
107 MRunIter pruns;
108 MRunIter cruns;
109 MRunIter druns;
110
111 for (Int_t i=0;i<psize;i++) {
112 cout << "Adding pedestal run: " << pedruns[i] << endl;
113 pruns.AddRun(pedruns[i],inpath);
114 }
115 for (Int_t i=0;i<csize;i++) {
116 cout << "Adding calibration run: " << calruns[i] << endl;
117 cruns.AddRun(calruns[i],inpath);
118 }
119 for (Int_t i=0;i<dsize;i++) {
120 cout << "Adding data run: " << dataruns[i] << endl;
121 druns.AddRun(dataruns[i],inpath);
122 }
123
124
125 //
126 // Now setup the tasks and tasklist for the pedestals:
127 // ---------------------------------------------------
128 //
129 MBadPixelsCam badcam;
130 MGeomCamMagic geomcam;
131 MGeomApply geomapl;
132 //
133 // If you want to exclude pixels from the beginning, read
134 // an ascii-file with the corr. pixel numbers (see MBadPixelsCam)
135 //
136 // badcam.AsciiRead("badpixels.dat");
137
138 /************************************/
139 /* FIRST LOOP: PEDESTAL COMPUTATION */
140 /************************************/
141
142 MJPedestal pedloop;
143 pedloop.SetInput(&pruns);
144 if (usedisplay)
145 {
146 MStatusDisplay *display = new MStatusDisplay;
147 display->SetUpdateTime(3000);
148 display->Resize(850,700);
149 pedloop.SetDisplay(display);
150 }
151 pedloop.SetBadPixels(badcam);
152 pedloop.SetExtractor(&extractor);
153
154 if (!pedloop.Process())
155 return;
156
157// /****************************************/
158// /* SECOND LOOP: CALIBRATION COMPUTATION */
159// /****************************************/
160
161// //
162// // Now setup the new tasks for the calibration:
163// // ---------------------------------------------------
164// //
165// MCalibrationQECam qecam;
166// MJCalibration calloop;
167// calloop.SetInput(&cruns);
168// calloop.SetExtractor(&extractor);
169// //
170// // Apply rel. time calibration:
171// //
172// calloop.SetRelTimeCalibration();
173// calloop.SetTimeExtractor(&timeext);
174// //
175// // Set the corr. cams:
176// //
177// calloop.SetQECam(qecam);
178// calloop.SetBadPixels(pedloop.GetBadPixels());
179// //
180// // The next two commands are for the display:
181// //
182// if (usedisplay)
183// calloop.SetDisplay(display);
184// cout << "Minchia 0" << endl;
185// //
186// // Do the event-loop:
187// //
188// if (!calloop.Process(pedloop.GetPedestalCam()))
189// return;
190
191// cout << "Minchia 1" << endl;
192// /*************************************/
193// /* THIRD LOOP: PEDESTAL CALIBRATION */
194// /*************************************/
195
196// //
197// // Create a empty Parameter List and an empty Task List
198// //
199// MParList plist3;
200// MTaskList tlist3;
201// plist3.AddToList(&tlist3);
202// cout << "Minchia 2" << endl;
203// //
204// // Now setup the tasks and tasklist to calculate the pedestal rms in number of photons
205// // -----------------------------------------------------------------------------------
206// //
207
208// MCerPhotEvt nphot;
209// MPedPhotCam nphotrms;
210
211// plist3.AddToList(&geomcam);
212// cout << "Minchia 3" << endl;
213// //
214// // Retrieve the cameras from the previous runs:
215// //
216// plist3.AddToList(&pedloop.GetPedestalCam());
217// plist3.AddToList(&calloop.GetCalibrationCam());
218// plist3.AddToList(&calloop.GetQECam());
219// plist3.AddToList(&calloop.GetRelTimeCam());
220// plist3.AddToList(&calloop.GetBadPixels());
221// plist3.AddToList(&nphot);
222// plist3.AddToList(&nphotrms);
223// cout << "Minchia 4" << endl;
224// //tasks
225// MReadMarsFile read3("Events");
226// read3.DisableAutoScheme();
227// static_cast<MRead&>(read3).AddFiles(pruns);
228
229// //MCalibrate photcalc;
230// MCalibrateData photcalc;
231// photcalc.SetCalibrationMode(MCalibrate::kFfactor);
232// MPedPhotCalc photrmscalc; //It doesn't exist yet
233
234// tlist3.AddToList(&read3);
235// tlist3.AddToList(&geomapl);
236// tlist3.AddToList(&extractor);
237// tlist3.AddToList(&photrmscalc);
238// //tlist3.AddToList(&photcalc);
239
240
241// //
242// // Create and setup the eventloop
243// //
244// MEvtLoop evtloop3;
245// evtloop3.SetParList(&plist3);
246
247// //
248// // Execute first analysis
249// //
250// if (!evtloop3.Eventloop())
251// return;
252
253// tlist3.PrintStatistics();
254
255 /*************************************/
256 /* FOURTH LOOP: DATA CALIBRATION */
257 /*************************************/
258
259 //
260 // Create a empty Parameter List and an empty Task List
261 //
262 MParList plist4;
263 MTaskList tlist4;
264 plist4.AddToList(&tlist4);
265
266 //
267 // Now setup the tasks and tasklist to analize the data
268 // -----------------------------------------------------
269 //
270
271 plist4.AddToList(&geomcam);
272 //
273 // Retrieve the cameras from the previous runs:
274 //
275 plist4.AddToList(&pedloop.GetPedestalCam());
276 // plist4.AddToList(&calloop.GetCalibrationCam());
277 // plist4.AddToList(&calloop.GetQECam());
278 // plist4.AddToList(&calloop.GetRelTimeCam());
279 //plist4.AddToList(&calloop.GetBadPixels());
280 //plist4.AddToList(&nphot);
281 //plist4.AddToList(&nphotrms);
282
283 MArrivalTimeCam times;
284 plist4.AddToList(&times);
285
286 //tasks
287 MReadMarsFile read4("Events");
288 read4.DisableAutoScheme();
289 static_cast<MRead&>(read4).AddFiles(druns);
290
291 MArrivalTimeCalc2 timecalc;
292 //MCalibrateRelTimes timecal;
293
294 tlist4.AddToList(&read4);
295 tlist4.AddToList(&geomapl);
296 //tlist4.AddToList(&extractor);
297 tlist4.AddToList(&timecalc);
298 // tlist4.AddToList(&photcalc);
299 //tlist4.AddToList(&timecal);
300 MRawEvtData *evtData;
301 //
302 // Create and setup the eventloop
303 //
304 MEvtLoop evtloop4;
305 evtloop4.SetParList(&plist4);
306 histTime = new TH1F("histTime","Arrival Time Dist",15,0.0,15.0);
307 Int_t i=0;
308 if (!evtloop4.PreProcess())
309 return;
310
311 TCanvas *c1 = new TCanvas;
312 MHCamera disp1(geomcam);
313 disp1.SetPrettyPalette();
314 //disp1.SetInvDeepBlueSeaPalette()
315 disp1.Draw();
316 gPad->SetLogy();
317 gPad->cd(1);
318
319 /*
320 TCanvas *c2 = new TCanvas;
321 MHCamera disp2(geomcam);
322 disp2.SetPrettyPalette();
323 //disp2.SetInvDeepBlueSeaPalette()
324 disp2.Draw();
325 gPad->SetLogy();
326 gPad->cd(1);
327 */
328 while (tlist4.Process())
329 {
330 i++;
331 //disp1.SetCamContent(nphot);
332
333 //gPad->Modified();
334 //gPad->Update();
335 // cout << i << endl;
336 //if((i == 16)||(i == 41)||(i == 111)||(i == 173)){
337 if((i == 41)){
338 cout << "Merda" << endl;
339 evtData = (MRawEvtData *)plist4->FindObject("MRawEvtData");
340 cout << "Merda1" << tlist4->FindObject("MRawEvtData") << endl;
341 MRawEvtPixelIter *pixIter = new MRawEvtPixelIter(evtData);
342 cout << "Merda2" << endl;
343 for (Int_t pix=1;pix<576;pix++){
344 pixIter->Next();
345 cout << "Merda3" << endl;
346 if(pixIter->GetSumHiGainSamples()>200){
347 cout << "Merda5" << endl;
348 cout << "pix #" << pixIter->GetPixelId() << " FADC Charge = " << pixIter->GetSumHiGainSamples() << endl;
349 histTime->Fill((times[pix])->GetArrivalTimeHiGain());
350 }
351 cout << i << endl;
352 }
353 }
354
355 /*
356 disp2.SetCamContent(times);
357
358 gPad->Modified();
359 gPad->Update();
360 */
361
362 // Remove the comments if you want to go through the file
363 // event-by-event:
364 //if (!HandleInput())
365 //break;
366 }
367
368 evtloop4.PostProcess();
369 histTime->DrawCopy();
370}
371
372Bool_t HandleInput()
373{
374 TTimer timer("gSystem->ProcessEvents();", 50, kFALSE);
375
376 while (1)
377 {
378 //
379 // While reading the input process gui events asynchronously
380 //
381 timer.TurnOn();
382 TString input = Getline("Type 'q' to exit, <return> to go on: ");
383 timer.TurnOff();
384
385 if (input=="q\n")
386 return kFALSE;
387
388 if (input=="\n")
389 return kTRUE;
390 };
391
392 return kFALSE;
393}
394
Note: See TracBrowser for help on using the repository browser.