source: trunk/MagicSoft/Mars/mbadpixels/MBadPixelsCam.cc@ 7864

Last change on this file since 7864 was 7864, checked in by tbretz, 18 years ago
*** empty log message ***
File size: 21.9 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//
28// MBadPixelsCam
29//
30//
31// Storage container to store bad pixel of the camera...
32//
33/////////////////////////////////////////////////////////////////////////////
34#include "MBadPixelsCam.h"
35
36#include <iostream>
37
38#include <TClonesArray.h>
39
40#include "MLog.h"
41#include "MLogManip.h"
42
43#include "MBadPixelsPix.h"
44
45#include "MGeomCam.h"
46#include "MGeomPix.h"
47
48ClassImp(MBadPixelsCam);
49
50using namespace std;
51
52// --------------------------------------------------------------------------
53//
54// Default constructor.
55//
56MBadPixelsCam::MBadPixelsCam(const char *name, const char *title)
57{
58 fName = name ? name : "MBadPixelsCam";
59 fTitle = title ? title : "Storage container to store bad pixel information";
60
61 fArray = new TClonesArray("MBadPixelsPix", 1);
62}
63
64MBadPixelsCam::MBadPixelsCam(const MBadPixelsCam &cam)
65{
66 fName = "MBadPixelsCam";
67 fTitle = "Storage container to store bad pixel information";
68
69 fArray = new TClonesArray("MBadPixelsPix", 1);
70 cam.Copy(*this);
71}
72
73// --------------------------------------------------------------------------
74//
75// Delete the array conatining the bad pixel information
76//
77MBadPixelsCam::~MBadPixelsCam()
78{
79 delete fArray;
80}
81
82// --------------------------------------------------------------------------
83//
84// Set the size of the camera
85//
86void MBadPixelsCam::InitSize(const UInt_t i)
87{
88 fArray->ExpandCreate(i);
89}
90
91// --------------------------------------------------------------------------
92//
93// Get the size of the MBadPixelsCam
94//
95Int_t MBadPixelsCam::GetSize() const
96{
97 return fArray->GetEntriesFast();
98}
99
100// --------------------------------------------------------------------------
101//
102// Copy 'constructor'
103//
104void MBadPixelsCam::Copy(TObject &object) const
105{
106 MBadPixelsCam &cam = (MBadPixelsCam&)object;
107
108 const Int_t n = GetSize();
109
110 if (n==0)
111 return;
112
113 cam.InitSize(n);
114 for (int i=0; i<n; i++)
115 (*this)[i].Copy(cam[i]);
116}
117
118// --------------------------------------------------------------------------
119//
120// Get i-th pixel (pixel number)
121//
122MBadPixelsPix &MBadPixelsCam::operator[](Int_t i)
123{
124 return *static_cast<MBadPixelsPix*>(fArray->UncheckedAt(i));
125}
126
127// --------------------------------------------------------------------------
128//
129// Get i-th pixel (pixel number)
130//
131const MBadPixelsPix &MBadPixelsCam::operator[](Int_t i) const
132{
133 return *static_cast<MBadPixelsPix*>(fArray->UncheckedAt(i));
134}
135
136// --------------------------------------------------------------------------
137//
138// Merge two MBadPixelsCam together, see also MBadPixelsPix::Merge
139//
140void MBadPixelsCam::Merge(const MBadPixelsCam &cam)
141{
142 const Int_t n = cam.GetSize();
143 if (n==0)
144 {
145 *fLog << warn << "MBadPixelsCam::Merge: Container empty." << endl;
146 return;
147 }
148
149 if (GetSize()==0)
150 InitSize(n);
151
152 if (n!=GetSize())
153 {
154 *fLog << warn << "MBadPixelsCam::Merge: Size mismatch... ignored." << endl;
155 return;
156 }
157
158 for (int i=0; i<n; i++)
159 (*this)[i].Merge(cam[i]);
160}
161
162// --------------------------------------------------------------------------
163//
164// Clear the contents of all bad pixels (set=0 means Ok)
165//
166void MBadPixelsCam::Clear(Option_t *o)
167{
168 fArray->R__FOR_EACH(TObject, Clear)();
169}
170
171// --------------------------------------------------------------------------
172//
173// Reset event depending bits
174//
175void MBadPixelsCam::Reset()
176{
177 fArray->R__FOR_EACH(MParContainer, Reset)();
178}
179
180// --------------------------------------------------------------------------
181//
182// Calculate the number of pixels without the given type-flags.
183//
184// The second argument aidx is the area index (see MGeomCam, MGeomPix)
185// The default (or any value less than 0) means: all
186//
187// Returns -1 if the geometry doesn't match.
188//
189Short_t MBadPixelsCam::GetNumSuitable(MBadPixelsPix::UnsuitableType_t type, const MGeomCam *geom, Int_t aidx) const
190{
191 const UInt_t n = GetSize();
192
193 if (aidx>=0 && (!geom || geom->GetNumPixels()!=n))
194 {
195 *fLog << err << GetDescriptor() << "ERROR - Geometry (" << geom->ClassName() << ") size mismatch!" << endl;
196 return -1;
197 }
198
199 Short_t rc = 0;
200 for (UInt_t i=0; i<n; i++)
201 {
202 if (aidx>=0 && geom && (*geom)[i].GetAidx()!=aidx)
203 continue;
204
205 if (!(*this)[i].IsUnsuitable(type))
206 rc++;
207 }
208 return rc;
209}
210
211// --------------------------------------------------------------------------
212//
213// Calculate the number of pixels with the given type-flags.
214//
215// The second argument aidx is the area index (see MGeomCam, MGeomPix)
216// The default (or any value less than 0) means: all
217//
218// Returns -1 if the geometry doesn't match.
219//
220Short_t MBadPixelsCam::GetNumUnsuitable(MBadPixelsPix::UnsuitableType_t type, const MGeomCam *geom, Int_t aidx) const
221{
222 const UInt_t n = GetSize();
223
224 if (aidx>=0 && geom && geom->GetNumPixels()!=n)
225 {
226 *fLog << err << GetDescriptor() << "ERROR - Geometry (" << geom->ClassName() << ") size mismatch!" << endl;
227 return -1;
228 }
229
230 Short_t rc = 0;
231 for (UInt_t i=0; i<n; i++)
232 {
233 if (aidx>=0 && geom && (*geom)[i].GetAidx()!=aidx)
234 continue;
235
236 if ((*this)[i].IsUnsuitable(type))
237 rc++;
238 }
239 return rc;
240}
241
242// --------------------------------------------------------------------------
243//
244// Counts the number of neighbors matching NOT UnsuitableType type
245//
246Short_t MBadPixelsCam::GetNumSuitableNeighbors(MBadPixelsPix::UnsuitableType_t type, const MGeomPix &pix) const
247{
248 const Int_t n2 = pix.GetNumNeighbors();
249
250 Int_t cnt=0;
251 for (int j=0; j<n2; j++)
252 {
253 const Int_t id2 = pix.GetNeighbor(j);
254 if (!(*this)[id2].IsUnsuitable(type))
255 cnt++;
256 }
257
258 return cnt;
259}
260
261// --------------------------------------------------------------------------
262//
263// Calculate the number of pixels which are - under no circumstances -
264// interpolatable, called isolated. This means that a pixel (its own status
265// doesn't matter) has less than two reliable neighbor pixels.
266//
267// The second argument aidx is the area index (see MGeomCam, MGeomPix)
268// The default (or any value less than 0) means: all
269//
270// Returns -1 if the geometry doesn't match.
271//
272Short_t MBadPixelsCam::GetNumIsolated(MBadPixelsPix::UnsuitableType_t type, const MGeomCam &geom, Int_t aidx) const
273{
274 const Int_t n = geom.GetNumPixels();
275
276 if (n!=GetSize())
277 {
278 *fLog << err << GetDescriptor() << "ERROR - Geometry (" << geom.ClassName() << ") size mismatch!" << endl;
279 return -1;
280 }
281
282 Short_t rc = 0;
283 for (int i=0; i<n; i++)
284 {
285 const MGeomPix &pix = geom[i];
286 if (aidx>=0 && pix.GetAidx()!=aidx)
287 continue;
288
289 if (GetNumSuitableNeighbors(type, pix)<2)
290 rc++;
291 }
292 return rc;
293}
294
295// --------------------------------------------------------------------------
296//
297// This is a helper function which calculates the size of a single cluster
298// by iterative calling.
299//
300// If a pixel matches the criterias the counter is increased by 1 and
301// the function is called for all its neighbors. If
302//
303// The second argument aidx is the area index (see MGeomCam, MGeomPix)
304// The default (or any value less than 0) means: all
305//
306// Returns -1 if the geometry doesn't match.
307//
308Short_t MBadPixelsCam::GetNumMaxCluster(MBadPixelsPix::UnsuitableType_t type, TObjArray &list, Int_t idx, Int_t aidx) const
309{
310 const MGeomPix *pix = (MGeomPix*)list[idx];
311 if (!pix)
312 return 0;
313
314 // Check whether more than one neighbor contains useful information,
315 // which mean it can later be interpolated
316 if (GetNumSuitableNeighbors(type, *pix)>1)
317 return 0;
318
319 // If the requested area-index is valid check whether it is the requested one
320 if (aidx>=0 && pix->GetAidx()!=aidx)
321 return 1;
322
323 // Remove the pixel from the list of pixels to be checked
324 list.RemoveAt(idx);
325
326 // Do the same for the neighbor pixels recursively and count the 1-results
327 Short_t cnt = 1;
328 const Int_t n = pix->GetNumNeighbors();
329 for (int i=0; i<n; i++)
330 cnt += GetNumMaxCluster(type, list, pix->GetNeighbor(i), aidx);
331
332 // return the number of neighbor pixels/clusters which have unsuitable-type type
333 return cnt;
334}
335
336// --------------------------------------------------------------------------
337//
338// Returns the size of the biggest cluster with the given UnsuitableType
339// type and the given area index.
340//
341// The second argument aidx is the area index (see MGeomCam, MGeomPix)
342// The default (or any value less than 0) means: all
343//
344// Returns -1 if the geometry doesn't match.
345//
346Short_t MBadPixelsCam::GetNumMaxCluster(MBadPixelsPix::UnsuitableType_t type, const MGeomCam &geom, Int_t aidx) const
347{
348 const Int_t n = geom.GetNumPixels();
349
350 if (n!=GetSize())
351 {
352 *fLog << err << GetDescriptor() << "ERROR - Geometry (" << geom.ClassName() << ") size mismatch!" << endl;
353 return -1;
354 }
355
356 TObjArray list(n);
357 for (int i=0; i<n; i++)
358 list.AddAt(&geom[i], i);
359
360 Short_t max = 0;
361 for (int i=0; i<n; i++)
362 max = TMath::Max(GetNumMaxCluster(type, list, i, aidx), max);
363
364 return max;
365}
366
367// --------------------------------------------------------------------------
368//
369// Print the contents of all bad pixels
370//
371void MBadPixelsCam::Print(Option_t *o) const
372{
373 *fLog << all << GetDescriptor() << ":" << endl;
374 *fLog << "Pixels without problems:" << endl;
375
376 Int_t count = 0;
377 Int_t full = 0;
378
379 for (Int_t i=0; i<GetSize(); i++)
380 {
381 if (!(*this)[i].IsUnsuitable(MBadPixelsPix::kUnsuitableRun))
382 {
383 *fLog << i << " ";
384 full++;
385 count ++;
386 }
387
388 if (count == 0)
389 continue;
390
391 if (!(full % 25))
392 {
393 full = 0;
394 *fLog << endl;
395 }
396 }
397 *fLog << endl;
398 *fLog << count << " normal pixels" << endl;
399 *fLog << endl;
400
401 *fLog << "Pixels unsuited for the whole run:" << endl;
402
403 full = 0;
404 count = 0;
405 for (Int_t i=0; i<GetSize(); i++)
406 {
407 if ((*this)[i].IsUnsuitable(MBadPixelsPix::kUnsuitableRun))
408 {
409 *fLog << i << " ";
410 full++;
411 count ++;
412 }
413
414 if (count == 0)
415 continue;
416
417 if (!(full % 25))
418 {
419 full = 0;
420 *fLog << endl;
421 }
422 }
423
424 *fLog << endl;
425 *fLog << count << " unsuited pixels per run :-(" << endl;
426 *fLog << endl;
427
428 *fLog << "Pixels unsuited for this event:" << endl;
429
430 full = 0;
431 count = 0;
432 for (Int_t i=0; i<GetSize(); i++)
433 {
434 if ((*this)[i].IsUnsuitable(MBadPixelsPix::kUnsuitableEvt))
435 {
436 *fLog << i << " ";
437 full++;
438 count ++;
439 }
440
441 if (count == 0)
442 continue;
443
444 if (!(full % 25))
445 {
446 full = 0;
447 *fLog << endl;
448 }
449 }
450
451 *fLog << endl;
452 *fLog << count << " unsuited pixels per event :-(" << endl;
453 *fLog << endl;
454
455 full = 0;
456 count = 0;
457
458 *fLog << all << "Pixels unreliable for the whole run:" << endl;
459
460 for (Int_t i=0; i<GetSize(); i++)
461 {
462 if ((*this)[i].IsUnsuitable(MBadPixelsPix::kUnreliableRun))
463 {
464 *fLog << i << " ";
465 full++;
466 count ++;
467 }
468
469 if (count == 0)
470 continue;
471
472 if (!(full % 25))
473 {
474 full = 0;
475 *fLog << endl;
476 }
477 }
478
479 *fLog << endl;
480 *fLog << count << " unreliable pixels :-(" << endl;
481 *fLog << endl;
482 *fLog << endl;
483 *fLog << all << "Unsuited pixels statistics:" << endl;
484 *fLog << endl;
485
486 PrintBadPixels(MBadPixelsPix::kPreviouslyExcluded,"Previously excluded");
487 PrintBadPixels(MBadPixelsPix::kChargeIsPedestal,"Signal smaller 3 Pedestal RMS");
488 PrintBadPixels(MBadPixelsPix::kChargeRelErrNotValid,"Signal Rel. error too large");
489 PrintBadPixels(MBadPixelsPix::kLoGainSaturation,"Low Gain Saturation");
490 PrintBadPixels(MBadPixelsPix::kMeanTimeInFirstBin,"Mean Arr. Time In First Extraction Bin");
491 PrintBadPixels(MBadPixelsPix::kMeanTimeInLast2Bins,"Mean Arr. Time In Last 2 Extraction Bins");
492 PrintBadPixels(MBadPixelsPix::kDeviatingNumPhes,"Deviating Number of Photo-electrons");
493 PrintBadPixels(MBadPixelsPix::kDeviatingNumPhots,"Deviating Number of Photons");
494 PrintBadPixels(MBadPixelsPix::kHiGainOverFlow,"High-Gain Histogram Overflow");
495 PrintBadPixels(MBadPixelsPix::kLoGainOverFlow,"Low-Gain Histogram Overflow");
496 PrintBadPixels(MBadPixelsPix::kDeadPedestalRms,"Presumably dead from Ped. Rms");
497 PrintBadPixels(MBadPixelsPix::kFluctuatingArrivalTimes,"Fluctuating Pulse Arrival Times");
498
499 *fLog << endl;
500 *fLog << all << "Unreliable pixels statistics:" << endl;
501 *fLog << endl;
502
503 PrintBadPixels(MBadPixelsPix::kChargeSigmaNotValid,"Signal Sigma smaller Pedestal RMS");
504 PrintBadPixels(MBadPixelsPix::kHiGainNotFitted ,"High Gain Signals could not be fitted");
505 PrintBadPixels(MBadPixelsPix::kLoGainNotFitted ,"Low Gain Signals could not be fitted");
506 PrintBadPixels(MBadPixelsPix::kRelTimeNotFitted ,"Relative Arr. Times could not be fitted");
507 PrintBadPixels(MBadPixelsPix::kHiGainOscillating ,"High Gain Signals Oscillation");
508 PrintBadPixels(MBadPixelsPix::kLoGainOscillating ,"Low Gain Signals Oscillation");
509 PrintBadPixels(MBadPixelsPix::kRelTimeOscillating ,"Relative Arr. Times Oscillation");
510 PrintBadPixels(MBadPixelsPix::kDeviatingFFactor ,"Deviating global F-Factor");
511}
512
513void MBadPixelsCam::PrintBadPixels( MBadPixelsPix::UncalibratedType_t typ, const char *text) const
514{
515 *fLog << "Pixels with " << text << ": " << endl;
516 UInt_t count = 0;
517 UInt_t full = 0;
518
519 for (Int_t i=0; i<GetSize(); i++)
520 {
521 if ((*this)[i].IsUncalibrated(typ))
522 {
523 *fLog << i << " ";
524 full++;
525 count++;
526 }
527
528 if (count == 0)
529 continue;
530
531 if (!(full % 25))
532 {
533 full = 0;
534 *fLog << endl;
535 }
536 }
537
538 *fLog << endl;
539 *fLog << Form("%3i",count) << " pixels in total " << endl;
540}
541
542// --------------------------------------------------------------------------
543//
544// Read from an ascii file of the format:
545// pixel1 pixel2 pixel3 pixel4
546// while pixel1,2,3,4 are the pixel indices used in the software.
547//
548// To read the pixels corresponding to a given run you can give run!=0
549// and a file of the format:
550// 1234: 17 193 292
551// 1235: 17 193 292 293
552//
553void MBadPixelsCam::AsciiRead(istream &fin, UInt_t run=0)
554{
555
556 Int_t len;
557 TString str;
558
559 while (1)
560 {
561 str.ReadLine(fin);
562
563 if (str.IsNull())
564 {
565 *fLog << warn << GetDescriptor()
566 << ": Cannot apply AsciiRead from istream pointer. "
567 << "Either file does not exist or file is empty! " << endl;
568 return;
569 }
570
571 Int_t r;
572
573 const Int_t n = sscanf(str.Data(), " %d : %n", &r, &len);
574 if (n!=1)
575 return;
576
577 if (run==0 || run && (UInt_t)r==run)
578 break;
579 }
580
581 str.Remove(0, len);
582
583 while (1)
584 {
585 Int_t idx;
586 const Int_t n = sscanf(str.Data(), " %d %n", &idx, &len);
587
588 if (n!=1)
589 break;
590
591 str.Remove(0, len);
592
593 if (idx>=GetSize())
594 InitSize(idx+1);
595
596 (*this)[idx].SetUnsuitable(MBadPixelsPix::kUnsuitableRun);
597 (*this)[idx].SetUncalibrated(MBadPixelsPix::kPreviouslyExcluded);
598 }
599}
600
601// --------------------------------------------------------------------------
602//
603// Write the information into an ascii file. If a run-number is given the
604// run-number will lead the line.
605//
606Bool_t MBadPixelsCam::AsciiWrite(ostream &fout, UInt_t run=0) const
607{
608 if (run)
609 fout << run << ":";
610
611 for (int i=0; i<GetSize(); i++)
612 if ((*this)[i].IsUnsuitable(MBadPixelsPix::kUnsuitableRun))
613 fout << " " << i;
614
615 if (run && GetSize())
616 fout << endl;
617
618 return kTRUE;
619}
620
621// --------------------------------------------------------------------------
622//
623// The types are the following:
624// 0: MBadPixelsPix::GetInfo()[0]
625// 1: MBadPixelsPix::IsUnsuitable(MBadPixelsPix::kUnsuitableRun)
626// 2: MBadPixelsPix::IsUnsuitable(MBadPixelsPix::kUnsuitableEvt)
627// 3: MBadPixelsPix::IsUnsuitable(MBadPixelsPix::kUnreliableRun)
628// 4: MBadPixelsPix::IsHiGainBad()
629// 5: MBadPixelsPix::IsLoGainBad()
630// 6: MBadPixelsPix::GetUnsuitableCalLevel()
631// 7: MBadPixelsPix::GetUnreliableCalLevel()
632// 8: MBadPixelsPix::IsUncalibrated(MBadPixelsPix::kHiGainNotFitted)
633// 9: MBadPixelsPix::IsUncalibrated(MBadPixelsPix::kLoGainNotFitted)
634// 10: MBadPixelsPix::IsUncalibrated(MBadPixelsPix::kHiGainOscillating)
635// 11: MBadPixelsPix::IsUncalibrated(MBadPixelsPix::kLoGainOscillating)
636// 12: MBadPixelsPix::IsUncalibrated(MBadPixelsPix::kLoGainSaturation )
637// 13: MBadPixelsPix::IsUncalibrated(MBadPixelsPix::kChargeIsPedestal )
638// 14: MBadPixelsPix::IsUncalibrated(MBadPixelsPix::kChargeErrNotValid)
639// 15: MBadPixelsPix::IsUncalibrated(MBadPixelsPix::kChargeRelErrNotValid)
640// 16: MBadPixelsPix::IsUncalibrated(MBadPixelsPix::kChargeSigmaNotValid )
641// 17: MBadPixelsPix::IsUncalibrated(MBadPixelsPix::kMeanTimeInFirstBin )
642// 18: MBadPixelsPix::IsUncalibrated(MBadPixelsPix::kMeanTimeInLast2Bins )
643// 19: MBadPixelsPix::IsUncalibrated(MBadPixelsPix::kDeviatingNumPhes )
644// 20: MBadPixelsPix::IsUncalibrated(MBadPixelsPix::kRelTimeNotFitted )
645// 21: MBadPixelsPix::IsUncalibrated(MBadPixelsPix::kRelTimeOscillating )
646// 22: MBadPixelsPix::IsUncalibrated(MBadPixelsPix::kDeviatingNumPhots )
647// 23: MBadPixelsPix::IsUncalibrated(MBadPixelsPix::kHiGainOverFlow )
648// 24: MBadPixelsPix::IsUncalibrated(MBadPixelsPix::kLoGainOverFlow )
649// 102: MBadPixelsPix::IsUnsuitable()
650//
651Bool_t MBadPixelsCam::GetPixelContent(Double_t &val, Int_t idx, const MGeomCam &cam, Int_t type) const
652{
653
654 if (idx >= GetSize())
655 return kFALSE;
656
657 switch (type)
658 {
659 case 0:
660 return (*this)[idx].GetInfo()[0];
661 case 1:
662 if (!(*this)[idx].IsUnsuitable(MBadPixelsPix::kUnsuitableRun))
663 return kFALSE;
664 val = 1;
665 break;
666 case 2:
667 if (!(*this)[idx].IsUnsuitable(MBadPixelsPix::kUnsuitableEvt))
668 return kFALSE;
669 val = 1;
670 break;
671 case 3:
672 if (!(*this)[idx].IsUnsuitable(MBadPixelsPix::kUnreliableRun))
673 return kFALSE;
674 val = 1;
675 break;
676 case 4:
677 if (!(*this)[idx].IsHiGainBad())
678 return kFALSE;
679 val = 1;
680 break;
681 case 5:
682 if (!(*this)[idx].IsLoGainBad())
683 return kFALSE;
684 val = 1;
685 break;
686 case 6:
687 if (!(*this)[idx].GetUnsuitableCalLevel())
688 return kFALSE;
689 val = (*this)[idx].GetUnsuitableCalLevel();
690 break;
691 case 7:
692 if (!(*this)[idx].GetUnreliableCalLevel())
693 return kFALSE;
694 val = (*this)[idx].GetUnreliableCalLevel();
695 break;
696 case 8:
697 if (!(*this)[idx].IsUncalibrated(MBadPixelsPix::kHiGainNotFitted))
698 return kFALSE;
699 val = 1;
700 break;
701 case 9:
702 if (!(*this)[idx].IsUncalibrated(MBadPixelsPix::kLoGainNotFitted))
703 return kFALSE;
704 val = 1;
705 break;
706 case 10:
707 if (!(*this)[idx].IsUncalibrated(MBadPixelsPix::kHiGainOscillating))
708 return kFALSE;
709 val = 1;
710 break;
711 case 11:
712 if (!(*this)[idx].IsUncalibrated(MBadPixelsPix::kLoGainOscillating))
713 return kFALSE;
714 val = 1;
715 break;
716 case 12:
717 if (!(*this)[idx].IsUncalibrated(MBadPixelsPix::kLoGainSaturation ))
718 return kFALSE;
719 val = 1;
720 break;
721 case 13:
722 if (!(*this)[idx].IsUncalibrated(MBadPixelsPix::kChargeIsPedestal ))
723 return kFALSE;
724 val = 1;
725 break;
726 case 14:
727 if (!(*this)[idx].IsUncalibrated(MBadPixelsPix::kChargeErrNotValid))
728 return kFALSE;
729 val = 1;
730 break;
731 case 15:
732 if (!(*this)[idx].IsUncalibrated(MBadPixelsPix::kChargeRelErrNotValid))
733 return kFALSE;
734 val = 1;
735 break;
736 case 16:
737 if (!(*this)[idx].IsUncalibrated(MBadPixelsPix::kChargeSigmaNotValid ))
738 return kFALSE;
739 val = 1;
740 break;
741 case 17:
742 if (!(*this)[idx].IsUncalibrated(MBadPixelsPix::kMeanTimeInFirstBin ))
743 return kFALSE;
744 val = 1;
745 break;
746 case 18:
747 if (!(*this)[idx].IsUncalibrated(MBadPixelsPix::kMeanTimeInLast2Bins ))
748 return kFALSE;
749 val = 1;
750 break;
751 case 19:
752 if (!(*this)[idx].IsUncalibrated(MBadPixelsPix::kDeviatingNumPhes ))
753 return kFALSE;
754 val = 1;
755 break;
756 case 20:
757 if (!(*this)[idx].IsUncalibrated(MBadPixelsPix::kRelTimeNotFitted ))
758 return kFALSE;
759 val = 1;
760 break;
761 case 21:
762 if (!(*this)[idx].IsUncalibrated(MBadPixelsPix::kRelTimeOscillating))
763 return kFALSE;
764 val = 1;
765 break;
766 case 22:
767 if (!(*this)[idx].IsUncalibrated(MBadPixelsPix::kDeviatingNumPhots))
768 return kFALSE;
769 val = 1;
770 break;
771 case 23:
772 if (!(*this)[idx].IsUncalibrated(MBadPixelsPix::kHiGainOverFlow ))
773 return kFALSE;
774 val = 1;
775 break;
776 case 24:
777 if (!(*this)[idx].IsUncalibrated(MBadPixelsPix::kLoGainOverFlow ))
778 return kFALSE;
779 val = 1;
780 break;
781 case 102:
782 if (!(*this)[idx].IsUnsuitable())
783 return kFALSE;
784 val = 1;
785 break;
786 default:
787 return kFALSE;
788 }
789
790 return kTRUE;
791}
792
793void MBadPixelsCam::DrawPixelContent(Int_t num) const
794{
795 *fLog << warn << "MBadPixelsCam::DrawPixelContent - not available." << endl;
796}
Note: See TracBrowser for help on using the repository browser.