forked from eutelescope/eutelescope
-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathEUTelCopyPedestalProcessor.cc
172 lines (123 loc) · 6.37 KB
/
EUTelCopyPedestalProcessor.cc
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
// Author Antonio Bulgheroni, INFN <mailto:antonio.bulgheroni@gmail.com>
// Version $Id$
/*
* This source code is part of the Eutelescope package of Marlin.
* You are free to use this source files for your own development as
* long as it stays in a public research context. You are not
* allowed to use it for commercial purpose. You must put this
* header with author names in all development based on this file.
*
*/
// eutelescope includes ".h"
#include "EUTelCopyPedestalProcessor.h"
#include "EUTelRunHeaderImpl.h"
#include "EUTelEventImpl.h"
#include "EUTELESCOPE.h"
// marlin includes ".h"
#include "marlin/Processor.h"
// lcio includes <.h>
#include <IMPL/TrackerRawDataImpl.h>
#include <IMPL/TrackerDataImpl.h>
#include <IMPL/LCCollectionVec.h>
#include <UTIL/CellIDEncoder.h>
// system includes <>
#include <memory>
using namespace std;
using namespace marlin;
using namespace eutelescope;
EUTelCopyPedestalProcessor::EUTelCopyPedestalProcessor () : Processor("EUTelCopyPedestalProcessor"),
_pedestalCollectionVec(NULL),
_noiseCollectionVec(NULL),
_statusCollectionVec(NULL) {
// modify processor description
_description =
"EUTelCopyPedestalProcessor copies the condition data into local writable collections";
// first of all we need to register the input collection
registerInputCollection (LCIO::TRACKERDATA, "PedestalConditionName",
"Pedestal input condition",
_pedestalConditionName, string ("pedestalDB"));
registerInputCollection (LCIO::TRACKERDATA, "NoiseConditionName",
"Noise input condition",
_noiseConditionName, string ("noiseDB"));
registerInputCollection (LCIO::TRACKERRAWDATA, "StatusConditionName",
"Status input condition",
_statusConditionName, string ("statusDB"));
registerOutputCollection (LCIO::TRACKERDATA, "PedestalCollectionName",
"Pedestal local collection",
_pedestalCollectionName, string ("pedestal"));
registerOutputCollection (LCIO::TRACKERDATA, "NoiseCollectionName",
"Noise local collection",
_noiseCollectionName, string("noise"));
registerOutputCollection (LCIO::TRACKERRAWDATA, "StatusCollectionName",
"Pixel status collection",
_statusCollectionName, string("status"));
}
void EUTelCopyPedestalProcessor::init () {
// this method is called only once even when the rewind is active
// usually a good idea to
printParameters ();
// set to zero the run and event counters
_iRun = 0;
_iEvt = 0;
}
void EUTelCopyPedestalProcessor::processRunHeader (LCRunHeader * rdr) {
auto_ptr<EUTelRunHeaderImpl> runHeader ( new EUTelRunHeaderImpl( rdr ) ) ;
runHeader->addProcessor( type() );
// increment the run counter
++_iRun;
}
void EUTelCopyPedestalProcessor::processEvent (LCEvent * event) {
EUTelEventImpl * evt = static_cast<EUTelEventImpl*> (event);
if ( evt->getEventType() == kEORE ) {
streamlog_out ( DEBUG4 ) << "EORE found: nothing else to do." << endl;
return;
} else if ( evt->getEventType() == kUNKNOWN ) {
streamlog_out ( WARNING2 ) << "Event number " << evt->getEventNumber() << " in run " << evt->getRunNumber()
<< " is of unknown type. Continue considering it as a normal Data Event." << endl;
}
if (isFirstEvent()) {
LCCollectionVec * pedestalCollectionVecDB = dynamic_cast< LCCollectionVec * > (evt->getCollection(_pedestalConditionName));
LCCollectionVec * noiseCollectionVecDB = dynamic_cast< LCCollectionVec * > (evt->getCollection(_noiseConditionName));
LCCollectionVec * statusCollectionVecDB = dynamic_cast< LCCollectionVec * > (evt->getCollection(_statusConditionName));
_pedestalCollectionVec = new LCCollectionVec(LCIO::TRACKERDATA);
_noiseCollectionVec = new LCCollectionVec(LCIO::TRACKERDATA);
_statusCollectionVec = new LCCollectionVec(LCIO::TRACKERRAWDATA);
CellIDEncoder<TrackerDataImpl> pedeDecoder (EUTELESCOPE::MATRIXDEFAULTENCODING,_pedestalCollectionVec);
CellIDEncoder<TrackerDataImpl> noiseDecoder (EUTELESCOPE::MATRIXDEFAULTENCODING,_noiseCollectionVec);
CellIDEncoder<TrackerRawDataImpl> statusDecoder(EUTELESCOPE::MATRIXDEFAULTENCODING,_statusCollectionVec);
for (int iDetector = 0; iDetector < pedestalCollectionVecDB->getNumberOfElements(); iDetector++) {
TrackerRawDataImpl * statusDB = dynamic_cast< TrackerRawDataImpl * > (statusCollectionVecDB->getElementAt(iDetector));
TrackerRawDataImpl * status = new TrackerRawDataImpl;
status->setADCValues(statusDB->getADCValues());
status->setCellID0(statusDB->getCellID0());
status->setCellID1(statusDB->getCellID1());
_statusCollectionVec->push_back(status);
TrackerDataImpl * pedestalDB = dynamic_cast< TrackerDataImpl * > (pedestalCollectionVecDB->getElementAt(iDetector));
TrackerDataImpl * pedestal = new TrackerDataImpl;
pedestal->setChargeValues(pedestalDB->getChargeValues());
pedestal->setCellID0(pedestalDB->getCellID0());
pedestal->setCellID1(pedestalDB->getCellID1());
_pedestalCollectionVec->push_back(pedestal);
TrackerDataImpl * noiseDB = dynamic_cast< TrackerDataImpl * > (noiseCollectionVecDB->getElementAt(iDetector));
TrackerDataImpl * noise = new TrackerDataImpl;
noise->setChargeValues(noiseDB->getChargeValues());
noise->setCellID0(noiseDB->getCellID0());
noise->setCellID1(noiseDB->getCellID1());
_noiseCollectionVec->push_back(noise);
}
_isFirstEvent = false;
}
evt->addCollection(_pedestalCollectionVec, _pedestalCollectionName);
evt->takeCollection(_pedestalCollectionName);
evt->addCollection(_noiseCollectionVec, _noiseCollectionName);
evt->takeCollection(_noiseCollectionName);
evt->addCollection(_statusCollectionVec, _statusCollectionName);
evt->takeCollection(_statusCollectionName);
++_iEvt;
}
void EUTelCopyPedestalProcessor::end() {
delete _pedestalCollectionVec;
delete _noiseCollectionVec;
delete _statusCollectionVec;
streamlog_out ( MESSAGE2 ) << "Successfully finished" << endl;
}