30 MsgStream log(
msgSvc(), name() );
31 log << MSG::INFO <<
"in execute()" << endmsg;
34 SmartDataPtr<Event::EventHeader> eventHeader( eventSvc(),
"/Event/EventHeader" );
37 log << MSG::FATAL <<
"Could not find Event Header" << endmsg;
38 return StatusCode::FAILURE;
40 log << MSG::DEBUG <<
"Retrieved event: " << eventHeader->eventNumber()
41 <<
" run: " << eventHeader->runNumber() << endmsg;
44 DataObject* aRecEvent = 0;
45 eventSvc()->findObject(
"/Event/Recon", aRecEvent );
49 StatusCode sc = eventSvc()->registerObject(
"/Event/Recon", aRecEvent );
52 log << MSG::FATAL <<
"Could not register ReconEvent" << endmsg;
53 return StatusCode::FAILURE;
61 log << MSG::FATAL <<
"Could not register RecZddChannelCol" << endmsg;
62 return StatusCode::FAILURE;
67 if ( m_errStat )
return StatusCode::SUCCESS;
70 SmartDataPtr<Event::ZddEvent> zddEvt( eventSvc(),
"/Event/ZddEvent" );
71 int zddCheck = zddDataStat( zddEvt.ptr(), eventHeader->eventNumber() + 1 );
82 return StatusCode::FAILURE;
87 return StatusCode::SUCCESS;
91 double bes3_t0 = -10000.0;
92 SmartDataPtr<RecEsTimeCol> evTimeCol( eventSvc(),
"/Event/Recon/RecEsTimeCol" );
93 if ( !evTimeCol || evTimeCol->size() == 0 )
95 log << MSG::WARNING <<
" Could not find RecEsTimeCol" << endmsg;
100 RecEsTimeCol::iterator iter_evt = evTimeCol->begin();
101 if ( iter_evt != evTimeCol->end() )
103 bes3_t0 = ( *iter_evt )->getTest();
105 bes3_t0 = 6400 - bes3_t0;
113 Event::ZddEvent::Channels::const_iterator end_ch = chs.end();
114 for ( Event::ZddEvent::Channels::const_iterator it = chs.begin(); it != end_ch; ++it )
124 double e_K = getEK( pch->
getChId() );
127 int maxSamples = 800;
128 unsigned char waveform[800];
129 memset( waveform, 0, maxSamples );
130 ZddChannel::Fragments::const_iterator end_fg = frags.end();
131 bool quit_event =
false;
133 for ( ZddChannel::Fragments::const_iterator jt = frags.begin(); jt != end_fg; ++jt )
144 if ( start + frag.
length > maxSamples )
147 MsgStream log(
msgSvc(), name() );
148 log << MSG::ERROR <<
"ZDD BAD DATA: CAEN corruption problem" << endmsg;
153 for (
int i = 0; i < frag.
length; ++i ) waveform[start++] = frag.
sample[i];
157 unsigned char threshold = 20;
158 unsigned char rephaseThreshold = 40;
159 unsigned char minSample = 255, maxSample = -1;
162 int phases[4] = { -1, -1, -1, -1 };
163 for (
int pt = 0; pt < maxSamples; pt++ )
165 bool notZero = waveform[pt] > 0;
166 bool smaller = waveform[pt] < minSample;
167 if ( notZero && smaller ) minSample = waveform[pt];
168 if ( waveform[pt] > threshold )
173 maxSample = waveform[pt];
178 if ( waveform[pt] > maxSample )
180 maxSample = waveform[pt];
190 double tNsec = 2. * maxTime;
195 if ( maxSample > rephaseThreshold )
197 int phase = maxTime % 4;
206 double tNsec = 2. * maxTime;
209 if ( maxSample > rephaseThreshold )
211 int phase = maxTime % 4;
219 for (
int ph = 0; ph < 4; ph++ )
221 if ( phases[ph] > mostProb )
223 mostProb = phases[ph];
236 recZddCol->push_back( recZddCh );
251 return StatusCode::SUCCESS;