source: trunk/MagicSoft/Mars/manalysis/MCerPhotCalc.cc@ 1159

Last change on this file since 1159 was 1145, checked in by blanch, 23 years ago
Sanity check to avoid searching to pedestals outside the camera size has been added.
File size: 5.0 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 12/2000 <mailto:tbretz@uni-sw.gwdg.de>
19!
20! Copyright: MAGIC Software Development, 2000-2001
21!
22!
23\* ======================================================================== */
24
25//////////////////////////////////////////////////////////////////////////////
26// //
27// MCerPhotCalc //
28// //
29// This is a task which calculates the number of photons from the FADC //
30// time slices. At the moment it integrates simply the FADC values. //
31// //
32// Input Containers: //
33// MRawEvtData, MPedesdtalCam //
34// //
35// Output Containers: //
36// MCerPhotEvt //
37// //
38//////////////////////////////////////////////////////////////////////////////
39
40#include "MCerPhotCalc.h"
41
42#include "MParList.h"
43
44#include "MLog.h"
45#include "MLogManip.h"
46
47#include "MRawRunHeader.h"
48#include "MRawEvtData.h" // MRawEvtData::GetNumPixels
49#include "MCerPhotEvt.h"
50#include "MPedestalPix.h"
51#include "MPedestalCam.h"
52#include "MRawEvtPixelIter.h"
53
54ClassImp(MCerPhotCalc);
55
56// --------------------------------------------------------------------------
57//
58// Default constructor.
59//
60MCerPhotCalc::MCerPhotCalc(const char *name, const char *title)
61{
62 fName = name ? name : "MCerPhotCalc";
63 fTitle = title ? title : "Task to calculate Cerenkov photons from raw data";
64
65 AddToBranchList("MRawEvtData.fHiGainPixId");
66 AddToBranchList("MRawEvtData.fLoGainPixId");
67 AddToBranchList("MRawEvtData.fHiGainFadcSamples");
68 AddToBranchList("MRawEvtData.fLoGainFadcSamples");
69
70}
71
72// --------------------------------------------------------------------------
73//
74// The PreProcess searches for the following input containers:
75// - MRawRunHeader
76// - MRawEvtData
77// - MPedestalCam
78//
79// The following output containers are also searched and created if
80// they were not found:
81// - MCerPhotEvt
82//
83Bool_t MCerPhotCalc::PreProcess(MParList *pList)
84{
85 fRunHeader = (MRawRunHeader*)pList->FindObject("MRawRunHeader");
86 if (!fRunHeader)
87 {
88 *fLog << dbginf << "MRawRunHeader not found... aborting." << endl;
89 return kFALSE;
90 }
91
92 fRawEvt = (MRawEvtData*)pList->FindObject("MRawEvtData");
93 if (!fRawEvt)
94 {
95 *fLog << dbginf << "MRawEvtData not found... aborting." << endl;
96 return kFALSE;
97 }
98
99 fPedestals = (MPedestalCam*)pList->FindObject("MPedestalCam");
100 if (!fPedestals)
101 {
102 *fLog << dbginf << "MPedestalCam not found... aborting." << endl;
103 return kFALSE;
104 }
105
106 fCerPhotEvt = (MCerPhotEvt*)pList->FindCreateObj("MCerPhotEvt");
107 if (!fCerPhotEvt)
108 return kFALSE;
109
110 return kTRUE;
111}
112
113// --------------------------------------------------------------------------
114//
115// Calculate the integral of the FADC time slices and store them as a new
116// pixel in the MCerPhotEvt container.
117//
118Bool_t MCerPhotCalc::Process()
119{
120 fCerPhotEvt->InitSize(fRawEvt->GetNumPixels());
121
122 MRawEvtPixelIter pixel(fRawEvt);
123
124 while (pixel.Next())
125 {
126
127 UInt_t pixid = pixel.GetPixelId();
128
129 const MPedestalPix &ped = (*fPedestals)[pixid];
130
131 //
132 // sanity check
133 //
134 if (!fPedestals->CheckBounds(pixid)){
135 *fLog<<inf<<"Pixel ID larger than camera ... Skip the event"<<endl;
136 return kCONTINUE;
137 }
138
139 Float_t nphot = (Float_t)pixel.GetSumHiGainSamples();
140
141 // We check that the pixel is not empty, if it is empty
142 // we won't substract the pedestal. Empty means that it has
143 // 0 signal in all the slices.
144
145 if(nphot!=0) nphot -= fRunHeader->GetNumSamplesHiGain()*ped.GetMean();
146
147 fCerPhotEvt->AddPixel(pixid, nphot, sqrt(fRunHeader->GetNumSamplesHiGain())*ped.GetSigma());
148
149 // FIXME! Handling of Lo Gains is missing!
150 }
151
152 fCerPhotEvt->SetReadyToSave();
153
154 return kTRUE;
155}
Note: See TracBrowser for help on using the repository browser.