source: trunk/MagicSoft/Mars/mcalib/MCalibrationPulseTimeCam.cc@ 9434

Last change on this file since 9434 was 9374, checked in by tbretz, 16 years ago
*** empty log message ***
File size: 6.8 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// MCalibrationPulseTimeCam
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// MCalibrationPix &avpix = (MCalibrationPix&)(*fPulseCam)[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// MCalibrationPix &avpix = (MCalibrationPix&)fPulseCam->GetAverageArea(i)
48//
49// Averaged values over one whole camera sector can be retrieved via:
50// MCalibrationPix &avpix = (MCalibrationPix&)fPulseCam->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: MHCalibrationPix, MHCalibrationPulseTimeCam
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 Pulse. Arrival Time distribution
73//
74/////////////////////////////////////////////////////////////////////////////
75#include "MCalibrationPulseTimeCam.h"
76#include "MCalibrationCam.h"
77
78#include <TOrdCollection.h>
79
80#include "MLog.h"
81#include "MLogManip.h"
82
83#include "MGeomCam.h"
84#include "MGeom.h"
85
86#include "MCalibrationPix.h"
87
88ClassImp(MCalibrationPulseTimeCam);
89
90using namespace std;
91
92// --------------------------------------------------------------------------
93//
94// Default constructor.
95//
96MCalibrationPulseTimeCam::MCalibrationPulseTimeCam(const char *name, const char *title)
97{
98
99 fName = name ? name : "MCalibrationPulseTimeCam";
100 fTitle = title ? title : "Container for Pulse Time Information";
101
102}
103
104// --------------------------------------------------------------------------
105//
106// Print first the well fitted pixels
107// and then the ones which are not Valid
108//
109void MCalibrationPulseTimeCam::Print(Option_t *o) const
110{
111
112 *fLog << all << GetDescriptor() << ":" << endl;
113 int id = 0;
114
115 *fLog << all << "Calibrated pixels:" << endl;
116 *fLog << all << endl;
117
118 TIter Next(fPixels);
119 MCalibrationPix *pix;
120 while ((pix=(MCalibrationPix*)Next()))
121 {
122
123 if (!pix->IsExcluded())
124 {
125
126 *fLog << all
127 << Form("Pix %4i: Mean Time: %4.2f+-%4.2f Time Jitter: %4.2f+-%4.2f",pix->GetPixId(),
128 pix->GetMean(),pix->GetMeanErr(),pix->GetSigma(),pix->GetSigmaErr())
129 << endl;
130 id++;
131 }
132 }
133
134 *fLog << all << id << " pixels" << endl;
135 id = 0;
136
137
138 *fLog << all << endl;
139 *fLog << all << "Excluded pixels:" << endl;
140 *fLog << all << endl;
141
142 id = 0;
143
144 TIter Next4(fPixels);
145 while ((pix=(MCalibrationPix*)Next4()))
146 {
147 if (pix->IsExcluded())
148 {
149 *fLog << all << pix->GetPixId() << endl;
150 id++;
151 }
152 }
153 *fLog << all << id << " Excluded pixels " << endl;
154 *fLog << endl;
155
156 TIter Next5(fAverageAreas);
157 while ((pix=(MCalibrationPix*)Next5()))
158 {
159 *fLog << all
160 << Form("Pix %4i: Mean Time: %4.2f+-%4.2f Time Jitter: %4.2f+-%4.2f",pix->GetPixId(),
161 pix->GetMean(),pix->GetMeanErr(),pix->GetSigma(),pix->GetSigmaErr())
162 << endl;
163 }
164
165 TIter Next6(fAverageSectors);
166 while ((pix=(MCalibrationPix*)Next5()))
167 {
168 *fLog << all
169 << Form("Pix %4i: Mean Time: %4.2f+-%4.2f Time Jitter: %4.2f+-%4.2f",pix->GetPixId(),
170 pix->GetMean(),pix->GetMeanErr(),pix->GetSigma(),pix->GetSigmaErr())
171 << endl;
172 }
173}
174
175
176// --------------------------------------------------------------------------
177//
178// The types are as follows:
179//
180// Fitted values:
181// ==============
182//
183// 0: Fitted PulseTime
184// 1: Error of fitted PulseTime
185// 2: Sigma of fitted PulseTime
186// 3: Error of Sigma of fitted PulseTime
187//
188// Useful variables derived from the fit results:
189// =============================================
190//
191// 4: Returned probability of Gauss fit to PulseTime distribution
192//
193Bool_t MCalibrationPulseTimeCam::GetPixelContent(Double_t &val, Int_t idx, const MGeomCam &cam, Int_t type) const
194{
195
196 if (idx > GetSize())
197 return kFALSE;
198
199 Float_t area = cam[idx].GetA();
200
201 if (area == 0)
202 return kFALSE;
203
204 const MCalibrationPix &pix = static_cast<const MCalibrationPix&>((*this)[idx]);
205
206 switch (type)
207 {
208 case 0:
209 if (pix.IsExcluded())
210 return kFALSE;
211 val = pix.GetHiGainMean();
212 break;
213 case 1:
214 if (pix.IsExcluded())
215 return kFALSE;
216 val = pix.GetHiGainMeanErr();
217 break;
218 case 2:
219 if (pix.IsExcluded())
220 return kFALSE;
221 val = pix.GetHiGainSigma();
222 break;
223 case 3:
224 if (pix.IsExcluded())
225 return kFALSE;
226 val = pix.GetHiGainSigmaErr();
227 break;
228 case 4:
229 if (pix.IsExcluded())
230 return kFALSE;
231 val = pix.GetProb();
232 break;
233 default:
234 return kFALSE;
235 }
236
237 return val!=-1.;
238
239}
Note: See TracBrowser for help on using the repository browser.