source: tags/Mars-V0.8.7pre/mbadpixels/MBadPixelsPix.cc

Last change on this file was 5797, checked in by gaug, 20 years ago
*** empty log message ***
File size: 7.5 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): Thomas Bretz, 1/2004 <mailto:tbretz@astro.uni-wuerzburg.de>
19! Markus Gaug, 3/2004 <mailto:markus@ifae.es>
20!
21! Copyright: MAGIC Software Development, 2000-2004
22!
23!
24\* ======================================================================== */
25/////////////////////////////////////////////////////////////////////////////
26//
27// MBadPixelsPix
28//
29// The bits of an integer array fInfo are used to declare and inform about
30// possible defects in a pixel. Default and absence of defects create an array
31// of zeros.
32//
33// The first index (fInfo[0]) holds general information which is coded as follows:
34// * BIT(1): Unsuitable Run: The pixel is not suited for analysis for the entire run
35// * BIT(2): Unsuitable Evt: The pixel is not suited for analysis for the current event
36// * BIT(3): Unreliable Run: The pixel can in principle be used for analysis, although
37// previous analysis steps have yielded certain inconsistencies
38//
39// These bits can be called with the enum MBadPixelsPix::UnsuitableTupe_t in combination
40// with the function IsUnsuitable(MBadPixelsPix::UnsuitableTupe_t), e.g.
41// MBadPixelsPix::IsUnsuitalbe(MBadPixelsPix::kUnsuitableRun) asks if the first bit is set.
42//
43// The second index (fInfo[1]) hold information acquired during the calibration. The bits
44// are coded in the following form:
45//
46// * Set bits leading to an unreliable flag:
47//
48// BIT(1 ): kHiGainNotFitted : Any High Gain signal is calibrated without a Gauss Fit to the signal distribution
49// BIT(2 ): kLoGainNotFitted : Any Low Gain signal is calibrated without a Gauss Fit to the signal distribution
50// BIT(3 ): kRelTimeNotFitted : Any High Gain signal's arrival times are calibrated without a Gauss Fit
51// BIT(4 ): kHiGainOscillating : The High Gain signals fourier transform showed abnormal behavior
52// BIT(5 ): kLoGainOscillating : The Low Gain signals fourier transform showed abnormal behavior
53// BIT(6 ): kRelTimeOscillating : The High Gain arrival times fourier transform showed abnormal behavior
54// BIT(14): kDeviatingNumPhes : The calculated number of photo-electrons deviates too much from the mean - inconsistency
55// BIT(16): kDeviatingFFactor : The calculated overall F-Factor deviates too much from the mean - inconsistency
56// BIT(15): kDeviatingNumPhots : The calculated number of calibrated photons deviates too much from the mean - inconsistency
57//
58// * Set bits leading to an unsuitable flag:
59//
60// BIT(7 ): kLoGainSaturation : The Low Gain signals were saturated during calibration
61// BIT(8 ): kChargeIsPedestal : The calibration signal contained only pedestals - presumably dead pixel
62// BIT(9 ): kChargeErrNotValid : The absolute error of the derived charge has given non-sense - presumably pedestal
63// BIT(10): kChargeRelErrNotValid: The relative error of the derived charge was too large or too small
64// BIT(11): kChargeSigmaNotValid : The sigma of the pedestal distribution smaller than the pedestal RMS - presumably a pixel with a star in its FOV only during the pedestal taking
65// BIT(12): kMeanTimeInFirstBin : The signal has its mean maximum in the first used FADC slice - signal extractor bad
66// BIT(13): kMeanTimeInLast2Bins : The signal has its mean maximum in the last two used FADC slice - signal extractor bad
67// BIT(19): kHiGainOverFlow : The Hi-Gain calibration histogram showed overflow without saturating the FADC
68// BIT(20): kLoGainOverFlow : The Lo-Gain calibration histogram showed overflow
69//
70// * Set bits leading to not useable low-gain signal:
71//
72// BIT(17): kConversionHiLoNotValid: The calibrated Conversion between Hi-Gain and Low Gain gives absurd results
73//
74// These bits can be called with the enum MBadPixelsPix::UncalibratedType_t in combination
75// with the function IsUncalibrated(MBadPixelsPix::UncalibratedTupe_t), e.g.
76// MBadPixelsPix::IsUncalibrated(MBadPixelsPix::kHiGainNotCalibrated) asks if the Hi Gain signal
77// could be calibrated.
78//
79// The third index (fInfo[2]) holds information about possible hardware mulfunctionning. The bits
80// are coded in the following form:
81// BIT(1 ): kHVNotNominal : The HV deviates more than 3% from the nominal value.
82//
83/////////////////////////////////////////////////////////////////////////////
84#include "MBadPixelsPix.h"
85
86#include "MLog.h"
87#include "MLogManip.h"
88
89ClassImp(MBadPixelsPix);
90
91using namespace std;
92
93const Int_t MBadPixelsPix::fgRunMask =
94 MBadPixelsPix::kUnsuitableRun |
95 MBadPixelsPix::kUnreliableRun;
96
97// ------------------------------------------------------------------------
98//
99// Initialize Pixel to be Ok.
100//
101MBadPixelsPix::MBadPixelsPix(const char* name, const char* title)
102{
103 fName = name ? name : "MBadPixelsPix";
104 fTitle = title ? title : "Container storing bad pixel information for a single pixel";
105
106 fInfo.Set(3);
107
108}
109
110// ------------------------------------------------------------------------
111//
112// Invalidate all bits which are not run-wise. This will be called for
113// all entries in the parameter list, just before each time the task-list
114// is executed.
115//
116void MBadPixelsPix::Reset()
117{
118 fInfo[0] &= fgRunMask;
119}
120
121// ------------------------------------------------------------------------
122//
123// Invalidate values (set=0 which mean Pixel OK)
124//
125void MBadPixelsPix::Clear(Option_t *o)
126{
127 fInfo.Reset(0);
128}
129
130// ------------------------------------------------------------------------
131//
132// Merge (bitwise or) the information in pix into this pixel.
133//
134void MBadPixelsPix::Merge(const MBadPixelsPix &pix)
135{
136 const Int_t n = pix.fInfo.GetSize();
137 if (n>fInfo.GetSize())
138 fInfo.Set(n);
139
140 for (int i=0; i<n; i++)
141 fInfo[i] |= pix.fInfo[i];
142}
143
144
145/****************************************************************************
146 This is a collection of possible defects for later use
147 ****************************************************************************/
148
149/*
150 1 PMT defective.
151 2 Preamplifier defective.
152 3 Optical link defective.
153 4 HV cannot be set.
154 7 HV unstable.
155 5 HV readout defective.
156 8 DC unstable.
157 6 DC readout defective.
158 9 Discriminator threshold cannot be set.
159 10 Trigger delay cannot be set.
160 11 Discriminator gives no output.
161 <-? 12 Pixel out of L1T.
162 13 FADC defective.
163 14 FADC board digital information defective.
164 */
165
166/*
167 1 Pixel shows no signal
168 */
169
170/*
171
172Hardware defects which cannot be detected automatically by software. This might be stored at least in the data-base. I think we should wait until we implement these things...
173Preamplifier defective.
174Optical link defective.
175HV cannot be set.
176HV readout defective.
177DC readout defective.
178Discriminator threshold cannot be set.
179Trigger delay cannot be set.
180Discriminator gives no output.
181FADC defective.
182FADC board digital information defective.
183Pixel out of L1T. (this is an important information, but not necessarily a defect, is it?)
184
185*/
Note: See TracBrowser for help on using the repository browser.