source: trunk/MagicSoft/Mars/mcalib/MCalibrationRelTimeCam.cc@ 3909

Last change on this file since 3909 was 3657, checked in by gaug, 21 years ago
*** empty log message ***
File size: 8.2 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// MCalibrationRelTimeCam
28//
29// Storage container for relative arrival time calibration results
30// of the whole camera.
31//
32// Individual pixels have to be cast when retrieved e.g.:
33// MCalibrationRelTimePix &avpix = (MCalibrationRelTimePix&)(*fRelCam)[i]
34//
35// The following "calibration" constants can be retrieved from each pixel:
36// - GetTimeOffset(): The mean offset in relative times,
37// has to be added to any calculated relative time in the camera.
38// - GetTimePrecision(): The Gauss sigma of histogrammed relative arrival
39// times for the calibration run. Gives an estimate about the timing
40// resolution.
41//
42// ALL RELATIVE TIMES HAVE TO BE CALCULATED W.R.T. PIXEL IDX 1
43// (HARDWARE NUMBER: 2) !!
44//
45// Averaged values over one whole area index (e.g. inner or outer pixels for
46// the MAGIC camera), can be retrieved via:
47// MCalibrationRelTimePix &avpix = (MCalibrationRelTimePix&)fRelCam->GetAverageArea(i)
48//
49// Averaged values over one whole camera sector can be retrieved via:
50// MCalibrationRelTimePix &avpix = (MCalibrationRelTimePix&)fRelCam->GetAverageSector(i)
51//
52// Note the averageing has been done on an event-by-event basis. Resulting
53// Sigma's of the Gauss fit have been multiplied with the square root of the number
54// of involved pixels in order to make a direct comparison possible with the mean of
55// sigmas.
56//
57// See also: MHCalibrationRelTimePix, MHCalibrationRelTimeCam
58//
59// The calculated values (types of GetPixelContent) are:
60//
61// Fitted values:
62// ==============
63//
64// 0: Mean Time Offset
65// 1: Error of Mean Time Offset
66// 2: Sigma of Time Offset == Time Resolution
67// 3: Error of Sigma of Time Offset
68//
69// Useful variables derived from the fit results:
70// =============================================
71//
72// 4: Returned probability of Gauss fit to Rel. Arrival Time distribution
73//
74/////////////////////////////////////////////////////////////////////////////
75#include "MCalibrationRelTimeCam.h"
76#include "MCalibrationCam.h"
77
78#include <TClonesArray.h>
79
80#include "MLog.h"
81#include "MLogManip.h"
82
83#include "MGeomCam.h"
84#include "MGeomPix.h"
85
86#include "MCalibrationRelTimePix.h"
87
88ClassImp(MCalibrationRelTimeCam);
89
90using namespace std;
91
92// --------------------------------------------------------------------------
93//
94// Default constructor.
95//
96// Creates a TClonesArray of MCalibrationRelTimePix containers, initialized to 1 entry, destinated
97// to hold one container per pixel. Later, a call to MCalibrationRelTimeCam::InitSize()
98// has to be performed (in MGeomApply).
99//
100// Creates a TClonesArray of MCalibrationRelTimePix containers, initialized to 1 entry, destinated
101// to hold one container per pixel AREA. Later, a call to MCalibrationRelTimeCam::InitAreas()
102// has to be performed (in MGeomApply).
103//
104// Creates a TClonesArray of MCalibrationRelTimePix containers, initialized to 1 entry, destinated
105// to hold one container per camera SECTOR. Later, a call to MCalibrationRelTimeCam::InitSectors()
106// has to be performed (in MGeomApply).
107//
108MCalibrationRelTimeCam::MCalibrationRelTimeCam(const char *name, const char *title)
109{
110 fName = name ? name : "MCalibrationRelTimeCam";
111 fTitle = title ? title : "Storage container for the Calibration Information in the camera";
112
113 fPixels = new TClonesArray("MCalibrationRelTimePix",1);
114 fAverageAreas = new TClonesArray("MCalibrationRelTimePix",1);
115 fAverageSectors = new TClonesArray("MCalibrationRelTimePix",1);
116
117}
118
119// --------------------------------------------------------------------------
120//
121// Print first the well fitted pixels
122// and then the ones which are not Valid
123//
124void MCalibrationRelTimeCam::Print(Option_t *o) const
125{
126
127 *fLog << all << GetDescriptor() << ":" << endl;
128 int id = 0;
129
130 *fLog << all << "Calibrated pixels:" << endl;
131 *fLog << all << endl;
132
133 TIter Next(fPixels);
134 MCalibrationRelTimePix *pix;
135 while ((pix=(MCalibrationRelTimePix*)Next()))
136 {
137
138 if (!pix->IsExcluded())
139 {
140
141 *fLog << all
142 << Form("%s%4i%s%4.2f%s%4.2f%s%4.2f%s%4.2f","Pix ",pix->GetPixId(),
143 ": Offset: ",pix->GetTimeOffset()," +- ",pix->GetTimeOffsetErr(),
144 " Precision: ",pix->GetTimePrecision()," +- ",pix->GetTimePrecisionErr())
145 << endl;
146 id++;
147 }
148 }
149
150 *fLog << all << id << " pixels" << endl;
151 id = 0;
152
153
154 *fLog << all << endl;
155 *fLog << all << "Excluded pixels:" << endl;
156 *fLog << all << endl;
157
158 id = 0;
159
160 TIter Next4(fPixels);
161 while ((pix=(MCalibrationRelTimePix*)Next4()))
162 {
163 if (pix->IsExcluded())
164 {
165 *fLog << all << pix->GetPixId() << endl;
166 id++;
167 }
168 }
169 *fLog << all << id << " Excluded pixels " << endl;
170 *fLog << endl;
171
172 TIter Next5(fAverageAreas);
173 while ((pix=(MCalibrationRelTimePix*)Next5()))
174 {
175 *fLog << all
176 << Form("%s%4i%s%4.2f%s%4.2f%s%4.2f%s%4.2f","Average Area ",pix->GetPixId(),
177 ": Offset: ",pix->GetTimeOffset()," +- ",pix->GetTimeOffsetErr(),
178 " Precision: ",pix->GetTimePrecision()," +- ",pix->GetTimePrecisionErr())
179 << endl;
180 }
181
182 TIter Next6(fAverageSectors);
183 while ((pix=(MCalibrationRelTimePix*)Next5()))
184 {
185 *fLog << all
186 << Form("%s%4i%s%4.2f%s%4.2f%s%4.2f%s%4.2f","Average Sector ",pix->GetPixId(),
187 ": Offset: ",pix->GetTimeOffset()," +- ",pix->GetTimeOffsetErr(),
188 " Precision: ",pix->GetTimePrecision()," +- ",pix->GetTimePrecisionErr())
189 << endl;
190 }
191}
192
193
194// --------------------------------------------------------------------------
195//
196// The types are as follows:
197//
198// Fitted values:
199// ==============
200//
201// 0: Fitted RelTime
202// 1: Error of fitted RelTime
203// 2: Sigma of fitted RelTime
204// 3: Error of Sigma of fitted RelTime
205//
206// Useful variables derived from the fit results:
207// =============================================
208//
209// 4: Returned probability of Gauss fit to RelTime distribution
210//
211Bool_t MCalibrationRelTimeCam::GetPixelContent(Double_t &val, Int_t idx, const MGeomCam &cam, Int_t type) const
212{
213
214 if (idx > GetSize())
215 return kFALSE;
216
217 Float_t area = cam[idx].GetA();
218
219 if (area == 0)
220 return kFALSE;
221
222 MCalibrationRelTimePix &pix = (MCalibrationRelTimePix&)(*this)[idx];
223
224 switch (type)
225 {
226 case 0:
227 if (pix.IsExcluded())
228 return kFALSE;
229 val = pix.GetMean();
230 break;
231 case 1:
232 if (pix.IsExcluded())
233 return kFALSE;
234 val = pix.GetMeanErr();
235 break;
236 case 2:
237 if (pix.IsExcluded())
238 return kFALSE;
239 val = pix.GetSigma();
240 break;
241 case 3:
242 if (pix.IsExcluded())
243 return kFALSE;
244 val = pix.GetSigmaErr();
245 break;
246 case 4:
247 if (pix.IsExcluded())
248 return kFALSE;
249 val = pix.GetProb();
250 break;
251 default:
252 return kFALSE;
253 }
254
255 return val!=-1.;
256
257}
258
259// --------------------------------------------------------------------------
260//
261// Calls MCalibrationPix::DrawClone()
262//
263void MCalibrationRelTimeCam::DrawPixelContent(Int_t idx) const
264{
265 (*this)[idx].DrawClone();
266}
267
Note: See TracBrowser for help on using the repository browser.