source: trunk/MagicSoft/Mars/mcalib/MCalibrationCam.cc@ 4775

Last change on this file since 4775 was 4670, checked in by gaug, 20 years ago
*** empty log message ***
File size: 13.4 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): Markus Gaug 11/2003 <mailto:markus@ifae.es>
19!
20! Copyright: MAGIC Software Development, 2000-2004
21!
22!
23\* ======================================================================== */
24
25/////////////////////////////////////////////////////////////////////////////
26//
27// MCalibrationCam
28//
29// Base class for Camera Calibration results.
30//
31// Contains TClonesArrays for the following objects:
32// - fPixels: Array of classes derived from MCalibrationPix, one entry
33// per pixel. Has to be created
34// - fAverageAreas: Array of classes derived from MCalibrationPix, one entry
35// per pixel AREA. Has to be created
36// - fAverageSectors: Array of classes derived from MCalibrationPix, one entry
37// per camera SECTOR. Has to be created
38//
39// - fAverageBadAreas: Array of classes derived from MBadPixelsPix, one entry
40// per pixel AREA. Is created automatically.
41// - fAverageBadSectors: Array of classes derived from MBadPixelsPix, one entry
42// per camera SECTOR. Is created automatically.
43//
44// All TClonesArrays have to enlarged by the corresponding calls to (e.g. in MGeomApply):
45// - InitSize()
46// - InitAverageAreas()
47// - InitAverageSectors()
48//
49/////////////////////////////////////////////////////////////////////////////
50#include "MCalibrationCam.h"
51
52#include <TClonesArray.h>
53
54#include "MGeomCam.h"
55#include "MGeomPix.h"
56
57#include "MBadPixelsCam.h"
58#include "MBadPixelsPix.h"
59
60#include "MCalibrationPix.h"
61
62ClassImp(MCalibrationCam);
63
64using namespace std;
65
66const Int_t MCalibrationCam::gkNumPulserColors = 4;
67// --------------------------------------------------------------------------
68//
69// Default constructor.
70//
71// Set the following pointer to NULL:
72// - fPixels
73// - fAverageAreas
74// - fAverageSectors
75//
76// Initializes:
77// - fPulserColor to kNONE
78// - fNumHiGainFADCSlices to 0.
79// - fNumLoGainFADCSlices to 0.
80//
81// Creates a TClonesArray of MBadPixelsPix containers for the TClonesArray's:
82// - fAverageBadAreas
83// - fAverageBadSectors
84// all initialized to 1 entry
85//
86// Later, a call to InitAverageAreas() and InitAverageSectors() (or Init())
87// has to be performed in order to get the dimension correctly.
88//
89MCalibrationCam::MCalibrationCam(const char *name, const char *title)
90 : fPulserColor(kNONE),
91 fPixels(NULL), fAverageAreas(NULL), fAverageSectors(NULL)
92{
93
94 fAverageBadAreas = new TClonesArray("MBadPixelsPix",1);
95 fAverageBadSectors = new TClonesArray("MBadPixelsPix",1);
96
97 fNumHiGainFADCSlices.Set(1);
98 fNumLoGainFADCSlices.Set(1);
99}
100
101// --------------------------------------------------------------------------
102//
103// Deletes the following TClonesArray's of MCalibrationPix containers (if exist):
104// - fPixels
105// - fAverageAreas
106// - fAverageSectors
107//
108// Deletes the following TClonesArray's of MBadPixelsPix containers (if exist):
109// - fAverageBadAreas
110// - fAverageBadSectors
111//
112MCalibrationCam::~MCalibrationCam()
113{
114
115 //
116 // delete fPixels should delete all Objects stored inside
117 //
118 if (fPixels)
119 delete fPixels;
120
121 if (fAverageAreas)
122 delete fAverageAreas;
123
124 if (fAverageSectors)
125 delete fAverageSectors;
126
127 delete fAverageBadAreas;
128 delete fAverageBadSectors;
129
130}
131
132// --------------------------------------
133//
134// Calls the ForEach macro for the TClonesArray fPixels with the argument Clear()
135//
136// Loops over the fAverageAreas, calling the function Clear() for
137// every entry in:
138// - fAverageAreas
139// - fAverageBadAreas
140//
141// Loops over the fAverageSectors, calling the function Clear() for
142// every entry in:
143// - fAverageSectors
144// - fAverageBadSectors
145//
146void MCalibrationCam::Clear(Option_t *o)
147{
148
149 { fPixels ->ForEach(TObject, Clear)(); }
150 { fAverageAreas ->ForEach(TObject, Clear)(); }
151 { fAverageSectors->ForEach(TObject, Clear)(); }
152
153 return;
154}
155
156void MCalibrationCam::Copy(TObject& object) const
157{
158
159 MCalibrationCam &calib = (MCalibrationCam&)object;
160
161 MParContainer::Copy(calib);
162
163 calib.fPulserColor = fPulserColor;
164
165 const Int_t n3 = GetSize();
166 if (n3 != 0)
167 {
168 calib.InitSize(n3);
169 for (int i=0; i<n3; i++)
170 (*this)[i].Copy(calib[i]);
171 }
172
173 const Int_t n4 = GetAverageAreas();
174 if (n4 != 0)
175 {
176 calib.InitAverageAreas(n4);
177 for (int i=0; i<n4; i++)
178 {
179 GetAverageArea (i).Copy(calib.GetAverageArea(i));
180 GetAverageBadArea(i).Copy(calib.GetAverageBadArea(i));
181 calib.fNumUnsuitable [i] = fNumUnsuitable[i];
182 calib.fNumUnreliable [i] = fNumUnreliable[i];
183 calib.fNumHiGainFADCSlices[i] = fNumHiGainFADCSlices[i];
184 calib.fNumLoGainFADCSlices[i] = fNumLoGainFADCSlices[i];
185 }
186 }
187
188 const Int_t n5 = GetAverageSectors();
189 if (n5 != 0)
190 {
191 calib.InitAverageSectors(n5);
192 for (int i=0; i<n5; i++)
193 {
194 GetAverageSector (i).Copy(calib.GetAverageSector(i));
195 GetAverageBadSector(i).Copy(calib.GetAverageBadSector(i));
196 }
197 }
198}
199
200// -------------------------------------------------------------------
201//
202// Calls TClonesArray::ExpandCreate() for fPixels
203//
204void MCalibrationCam::InitSize(const UInt_t i)
205{
206 fPixels->ExpandCreate(i);
207}
208
209// -------------------------------------------------------------------
210//
211// Calls TClonesArray::ExpandCreate() for:
212// - fAverageAreas
213// - fAverageBadAreas
214//
215void MCalibrationCam::InitAverageAreas(const UInt_t i)
216{
217 fAverageAreas->ExpandCreate(i);
218 fAverageBadAreas->ExpandCreate(i);
219
220 for (UInt_t j=0; j<i; j++)
221 GetAverageArea(j).SetPixId(j);
222
223 fNumUnsuitable.Set(i);
224 fNumUnreliable.Set(i);
225 fNumHiGainFADCSlices.Set(i);
226 fNumLoGainFADCSlices.Set(i);
227}
228
229// -------------------------------------------------------------------
230//
231// Calls TClonesArray::ExpandCreate() for:
232// - fAverageSectors
233// - fAverageBadSectors
234//
235void MCalibrationCam::InitAverageSectors(const UInt_t i)
236{
237 fAverageSectors->ExpandCreate(i);
238 fAverageBadSectors->ExpandCreate(i);
239
240 for (UInt_t j=0; j<i; j++)
241 GetAverageSector(j).SetPixId(j);
242
243}
244
245// -------------------------------------------------------------------
246//
247// Calls:
248// - InitSize()
249// - InitAverageAreas()
250// - InitAverageSectors()
251//
252void MCalibrationCam::Init(const MGeomCam &geom)
253{
254 InitSize (geom.GetNumPixels() );
255 InitAverageAreas (geom.GetNumAreas() );
256 InitAverageSectors(geom.GetNumSectors());
257}
258
259// --------------------------------------------------------------------------
260//
261// Returns the number of un-suitable pixels per area index and -1 if
262// the area index exceeds the initialized array.
263//
264const Int_t MCalibrationCam::GetNumUnsuitable( Int_t aidx ) const
265{
266 if (aidx < 0)
267 return -1;
268
269 return aidx > fNumUnsuitable.GetSize() ? -1 : fNumUnsuitable[aidx];
270}
271
272// --------------------------------------------------------------------------
273//
274// Returns the number of un-reliable pixels per area index and -1 if
275// the area index exceeds the initialized array.
276//
277const Int_t MCalibrationCam::GetNumUnreliable( Int_t aidx ) const
278{
279 if (aidx < 0)
280 return -1;
281
282 return aidx > fNumUnreliable.GetSize() ? -1 : fNumUnreliable[aidx];
283}
284
285// --------------------------------------------------------------------------
286//
287// Returns the mean number of High-Gain FADC slices per area index and -1 if
288// the area index exceeds the initialized array.
289//
290const Float_t MCalibrationCam::GetNumHiGainFADCSlices( Int_t aidx ) const
291{
292 if (aidx < 0)
293 return -1;
294
295 return aidx > fNumHiGainFADCSlices.GetSize() ? -1 : fNumHiGainFADCSlices[aidx];
296}
297
298// --------------------------------------------------------------------------
299//
300// Returns the mean number of Low-Gain FADC slices per area index and -1 if
301// the area index exceeds the initialized array.
302//
303const Float_t MCalibrationCam::GetNumLoGainFADCSlices( Int_t aidx ) const
304{
305 if (aidx < 0)
306 return -1;
307
308 return aidx > fNumLoGainFADCSlices.GetSize() ? -1 : fNumLoGainFADCSlices[aidx];
309}
310
311
312
313// --------------------------------------------------------------------------
314//
315// Returns the current size of the TClonesArray fAverageAreas
316// independently if the MCalibrationPix is filled with values or not.
317//
318const Int_t MCalibrationCam::GetAverageAreas() const
319{
320 return fAverageAreas->GetEntriesFast();
321}
322
323// --------------------------------------------------------------------------
324//
325// Returns the current size of the TClonesArray fAverageSectors
326// independently if the MCalibrationPix is filled with values or not.
327//
328const Int_t MCalibrationCam::GetAverageSectors() const
329{
330 return fAverageSectors->GetEntriesFast();
331}
332
333
334// --------------------------------------------------------------------------
335//
336// Get i-th pixel (pixel number)
337//
338MCalibrationPix &MCalibrationCam::operator[](UInt_t i)
339{
340 return *static_cast<MCalibrationPix*>(fPixels->UncheckedAt(i));
341}
342
343// --------------------------------------------------------------------------
344//
345// Get i-th pixel (pixel number)
346//
347const MCalibrationPix &MCalibrationCam::operator[](UInt_t i) const
348{
349 return *static_cast<MCalibrationPix*>(fPixels->UncheckedAt(i));
350}
351
352// --------------------------------------------------------------------------
353//
354// Returns the current size of the TClonesArray fPixels
355// independently if the MCalibrationPix is filled with values or not.
356//
357const Int_t MCalibrationCam::GetSize() const
358{
359 return fPixels->GetEntriesFast();
360}
361
362// --------------------------------------------------------------------------
363//
364// Get i-th average pixel (area number)
365//
366MCalibrationPix &MCalibrationCam::GetAverageArea(UInt_t i)
367{
368 return *static_cast<MCalibrationPix*>(fAverageAreas->UncheckedAt(i));
369}
370
371// --------------------------------------------------------------------------
372//
373// Get i-th average pixel (area number)
374//
375const MCalibrationPix &MCalibrationCam::GetAverageArea(UInt_t i) const
376{
377 return *static_cast<MCalibrationPix*>(fAverageAreas->UncheckedAt(i));
378}
379
380// --------------------------------------------------------------------------
381//
382// Get i-th average pixel (sector number)
383//
384MCalibrationPix &MCalibrationCam::GetAverageSector(UInt_t i)
385{
386 return *static_cast<MCalibrationPix*>(fAverageSectors->UncheckedAt(i));
387}
388
389// --------------------------------------------------------------------------
390//
391// Get i-th average pixel (sector number)
392//
393const MCalibrationPix &MCalibrationCam::GetAverageSector(UInt_t i) const
394{
395 return *static_cast<MCalibrationPix*>(fAverageSectors->UncheckedAt(i));
396}
397
398// --------------------------------------------------------------------------
399//
400// Get i-th average pixel (area number)
401//
402MBadPixelsPix &MCalibrationCam::GetAverageBadArea(UInt_t i)
403{
404 return *static_cast<MBadPixelsPix*>(fAverageBadAreas->UncheckedAt(i));
405}
406
407// --------------------------------------------------------------------------
408//
409// Get i-th average pixel (area number)
410//
411const MBadPixelsPix &MCalibrationCam::GetAverageBadArea(UInt_t i) const
412{
413 return *static_cast<MBadPixelsPix*>(fAverageBadAreas->UncheckedAt(i));
414}
415
416// --------------------------------------------------------------------------
417//
418// Get i-th average pixel (sector number)
419//
420MBadPixelsPix &MCalibrationCam::GetAverageBadSector(UInt_t i)
421{
422 return *static_cast<MBadPixelsPix*>(fAverageBadSectors->UncheckedAt(i));
423}
424
425// --------------------------------------------------------------------------
426//
427// Get i-th average pixel (sector number)
428//
429const MBadPixelsPix &MCalibrationCam::GetAverageBadSector(UInt_t i) const
430{
431 return *static_cast<MBadPixelsPix*>(fAverageBadSectors->UncheckedAt(i));
432}
433
434
435
436// --------------------------------------------------------------------------
437//
438// Dummy needed for compilation with MCamEvent
439//
440Bool_t MCalibrationCam::GetPixelContent(Double_t &val, Int_t idx, const MGeomCam &cam, Int_t type) const
441{
442 return kTRUE;
443}
444
445
446
447// --------------------------------------------------------------------------
448//
449// Calls MCalibrationPix::DrawClone()
450//
451void MCalibrationCam::DrawPixelContent(Int_t idx) const
452{
453 (*this)[idx].DrawClone();
454}
455
456void MCalibrationCam::SetNumHiGainFADCSlices( const Float_t i, const Int_t aidx)
457{
458 if (aidx < 0)
459 return;
460
461 if (aidx < fNumHiGainFADCSlices.GetSize())
462 fNumHiGainFADCSlices[aidx] = i;
463}
464
465void MCalibrationCam::SetNumLoGainFADCSlices( const Float_t i, const Int_t aidx)
466{
467 if (aidx < 0)
468 return;
469 if (aidx < fNumLoGainFADCSlices.GetSize())
470 fNumLoGainFADCSlices[aidx] = i;
471}
472
473void MCalibrationCam::SetNumUnsuitable( const UInt_t i, const Int_t aidx)
474{
475 if (aidx < 0)
476 return;
477
478 if (aidx < fNumUnsuitable.GetSize())
479 fNumUnsuitable[aidx] = i;
480}
481
482void MCalibrationCam::SetNumUnreliable( const UInt_t i, const Int_t aidx)
483{
484 if (aidx < 0)
485 return;
486 if (aidx < fNumUnreliable.GetSize())
487 fNumUnreliable[aidx] = i;
488}
Note: See TracBrowser for help on using the repository browser.