00001 #include "RawDataIO/IRawDataInputSvc.h"
00002 #include "GaudiKernel/RegistryEntry.h"
00003 #include "RawDataAddress.h"
00004 #include "RawDataEvent.h"
00005 #include "RawEventHeaderCnv.h"
00006
00007 #include "Event/RawEventHeader.h"
00008 #include "Event/RawRom.h"
00009 #include "Event/RawRomFee.h"
00010 #include "Event/RawPmtChannel.h"
00011
00012 using namespace std;
00013 using namespace DayaBay;
00014 using namespace dyb;
00015
00016 extern const CLID CLID_RawEventHeaderCnv;
00017
00018 extern const CLID CLID_DataObject;
00019
00020 RawEventHeaderCnv::RawEventHeaderCnv(unsigned char , const CLID& , ISvcLocator* svc)
00021 : Converter(RAWDATA_StorageType, classID(), svc)
00022 , m_log(msgSvc(), "RawEventHeaderCnv")
00023 {
00024 initialize();
00025 }
00026
00027 RawEventHeaderCnv::RawEventHeaderCnv(ISvcLocator*& svc)
00028 : Converter(RAWDATA_StorageType, classID(), svc)
00029 , m_log(msgSvc(), "RawEventHeaderCnv")
00030 {
00031 initialize();
00032 }
00033
00034 StatusCode RawEventHeaderCnv::initialize()
00035 {
00036 m_log << MSG::DEBUG << "initialize()" << endreq;
00037
00038 m_log << MSG::DEBUG << " query the service RawDataInputSvc." << endreq;
00039 IService* svc = 0;
00040 StatusCode sc = serviceLocator()->getService("RawDataInputSvc", svc, true);
00041 if (sc.isFailure()) {
00042 m_log << MSG::ERROR << "RawDataInputSvc could not be retrieved" << endreq;
00043 return sc;
00044 }
00045 svc->addRef();
00046
00047 sc = svc->queryInterface(IID_IRawDataInputSvc, (void**) & m_inputSvc);
00048 if (sc.isFailure()) {
00049 m_log << MSG::ERROR << "queryInterface(IID_IRawDataInputSvc) failed" << endreq;
00050 return StatusCode::FAILURE;
00051 }
00052
00053 return StatusCode::SUCCESS;
00054 }
00055
00056
00057 StatusCode RawEventHeaderCnv::updateObj(IOpaqueAddress* pAddr, DataObject* pObj)
00058 {
00059 m_log << MSG::DEBUG << "updateObj()" << endreq;
00060 return Converter::updateObj(pAddr, pObj);
00061 }
00062
00063 StatusCode RawEventHeaderCnv::createObj(IOpaqueAddress* , DataObject*& pObj)
00064 {
00065 m_log << MSG::DEBUG << "createObj()" << endreq;
00066
00067 RawEventHeader* rawEventHeader = new RawEventHeader();
00068 pObj = rawEventHeader;
00069
00070 if(m_inputSvc->m_inputSvcVersion==2) {
00071 DayaBay::RawEvent *event = m_inputSvc->currentRawEventClone();
00072 if (event == NULL) {
00073 m_log << MSG::INFO << "The RawEvent returned is not valid. Please declare RawEventHeader in RawDataInputSvc as true." << endreq;
00074 return StatusCode::FAILURE;
00075 }
00076
00077 unpackEvent(event, rawEventHeader);
00078 }
00079
00080 else {
00081 RawDataEvent* rawEvt = m_inputSvc->currentEvent();
00082 if (rawEvt == NULL) {
00083 m_log << MSG::INFO << "The RawDataEvent returned is not valid." << endreq;
00084 return StatusCode::FAILURE;
00085 }
00086
00087 vector<RawRom*> rawRoms;
00089 for (unsigned int i = 0; i < rawEvt->m_modules.size(); i++) {
00090 switch (rawEvt->m_modules[i]->m_type) {
00091 case kRomLtb:
00092 {
00093 RawDataEvent::RomLtb* romLtb = dynamic_cast<RawDataEvent::RomLtb*>(rawEvt->m_modules[i]);
00094 RawRom *rawRomLtb = convertRomLtb(romLtb);
00095 rawRomLtb->setHeader(rawEventHeader);
00096 rawRoms.push_back(rawRomLtb);
00097 }
00098 break;
00099 case kRomFee:
00100 {
00101 RawDataEvent::RomFee* romFee = dynamic_cast<RawDataEvent::RomFee*>(rawEvt->m_modules[i]);
00102 RawRom *rawRomFee = convertRomFee(romFee);
00103 rawRomFee->setHeader(rawEventHeader);
00104 rawRoms.push_back(rawRomFee);
00105 }
00106 break;
00107 default:
00108 break;
00109 }
00110 }
00111
00113 rawEventHeader->setModules(rawRoms);
00114
00115 rawEventHeader->setDataBlockNum(rawEvt->m_dataBlockNum);
00116 rawEventHeader->setDataBlockSize(rawEvt->m_dataBlockSize);
00117 rawEventHeader->setEvtSize(rawEvt->m_evtSize);
00118 rawEventHeader->setDetId(rawEvt->m_detId);
00119 rawEventHeader->setSiteId(rawEvt->m_siteId);
00120 rawEventHeader->setPositionId(rawEvt->m_positionId);
00121 rawEventHeader->setRunNum(rawEvt->m_runNum);
00122 rawEventHeader->setEvtNum(rawEvt->m_evtNum);
00123 rawEventHeader->setDataType(rawEvt->m_dataType);
00124 rawEventHeader->setDataTypeSpecific(rawEvt->m_dataTypeSpecific);
00125 rawEventHeader->setDataStatus(rawEvt->m_dataStatus);
00126 }
00127
00128 return StatusCode::SUCCESS;
00129 }
00130
00131 StatusCode RawEventHeaderCnv::createRep(DataObject* pObj, IOpaqueAddress*& pAddr)
00132 {
00133 m_log << MSG::DEBUG << "createRep()" << endreq;
00134
00135 RawEventHeader* rdth = dynamic_cast<RawEventHeader*>(pObj);
00136 if (!rdth) {
00137 m_log << MSG::ERROR << "Could not downcast Event" << endreq;
00138 return StatusCode::FAILURE;
00139 }
00140
00141 string nm = pObj->registry()->name();
00142 RawDataAddress* addr = new RawDataAddress(classID(), nm, "");
00143 pAddr = addr;
00144
00145 return StatusCode::SUCCESS;
00146 }
00147
00148 StatusCode RawEventHeaderCnv::finalize()
00149 {
00150 m_log << MSG::DEBUG << "finalize()" << endreq;
00151 return StatusCode::SUCCESS;
00152 }
00153
00154 RawRom* RawEventHeaderCnv::convertRomFee(const RawDataEvent::RomFee* romFee)
00155 {
00156 RawRom *rawRom = new RawRomFee();
00157
00158 RawRomFee *rawRomFee = dynamic_cast<RawRomFee*>(rawRom);
00159 rawRomFee->setSize(romFee->m_size);
00160 rawRomFee->setSlot(romFee->m_slot);
00161 rawRomFee->setType(romFee->m_type);
00162 rawRomFee->setCbltGA(romFee->m_cbltGA);
00163 rawRomFee->setCbltModuleType(romFee->m_cbltModuleType);
00164 rawRomFee->setCbltDataLength(romFee->m_cbltDataLength);
00165
00166 rawRomFee->setTriggerNum(romFee->m_triggerNum);
00167 rawRomFee->setTriggerType(romFee->m_triggerType);
00168 rawRomFee->setStatus(romFee->m_status);
00169 rawRomFee->setDataLength(romFee->m_dataLength);
00170 rawRomFee->setVersion(romFee->m_version);
00171
00173 vector<RawPmtChannel*> rawPmtChannels;
00174 for (unsigned int j = 0; j < romFee->m_channels.size(); j++) {
00175 const RawDataEvent::PmtChannel &channel = romFee->m_channels[j];
00176 rawPmtChannels.push_back(convertPmtChannel(channel));
00177 }
00178 rawRomFee->setChannels(rawPmtChannels);
00179
00180 return rawRom;
00181 }
00182
00183 RawPmtChannel* RawEventHeaderCnv::convertPmtChannel(const RawDataEvent::PmtChannel& pmtChannel)
00184 {
00185 RawPmtChannel *rawPmtChannel = new RawPmtChannel();
00186
00187 rawPmtChannel->setChannel(pmtChannel.m_channel);
00188 rawPmtChannel->setAdc(pmtChannel.m_adc);
00189 rawPmtChannel->setAdcPeakingCycle(pmtChannel.m_adcPeakingCycle);
00190 rawPmtChannel->setAdcRange(pmtChannel.m_adcRange);
00191 rawPmtChannel->setTdc(pmtChannel.m_tdc);
00192 rawPmtChannel->setTdcHitCount(pmtChannel.m_tdcHitCount);
00193 rawPmtChannel->setPedestal(pmtChannel.m_pedestal);
00194
00195 return rawPmtChannel;
00196 }
00197
00198 RawRom* RawEventHeaderCnv::convertRomLtb(const RawDataEvent::RomLtb* romLtb)
00199 {
00200 RawRom *rawRom = new RawRomLtb();
00201
00202 RawRomLtb *rawRomLtb = dynamic_cast<RawRomLtb*>(rawRom);
00203
00204 rawRomLtb->setSize(romLtb->m_size);
00205 rawRomLtb->setSlot(romLtb->m_slot);
00206 rawRomLtb->setType(romLtb->m_type);
00207 rawRomLtb->setCbltGA(romLtb->m_cbltGA);
00208 rawRomLtb->setCbltModuleType(romLtb->m_cbltModuleType);
00209 rawRomLtb->setCbltDataLength(romLtb->m_cbltDataLength);
00210
00212 vector<RawLtbFrame*> rawLtbFrames;
00213 for (unsigned int j = 0; j < romLtb->m_frames.size(); j++) {
00214 RawDataEvent::LtbFrame *frame = romLtb->m_frames[j];
00215 if(frame->m_timestampType && frame->m_GPSValid && frame->m_clockSystemValid) {
00216 RawDataEvent::LtbFrameUTC* ltbFrameUTC = dynamic_cast<RawDataEvent::LtbFrameUTC*>(frame);
00217 rawLtbFrames.push_back(convertLtbFrameUTC(ltbFrameUTC));
00218 } else {
00219 RawDataEvent::LtbFrameUnix* ltbFrameUnix = dynamic_cast<RawDataEvent::LtbFrameUnix*>(frame);
00220 rawLtbFrames.push_back(convertLtbFrameUnix(ltbFrameUnix));
00221 }
00222 }
00223 rawRomLtb->setFrames(rawLtbFrames);
00224
00225 return rawRom;
00226 }
00227
00228 RawLtbFrameUTC* RawEventHeaderCnv::convertLtbFrameUTC(const RawDataEvent::LtbFrameUTC *ltbFrame)
00229 {
00230 RawLtbFrameUTC *rawLtbFrame = new RawLtbFrameUTC();
00231
00232 rawLtbFrame->setAccStat(ltbFrame->m_accStat);
00233 rawLtbFrame->setGPSValid(ltbFrame->m_GPSValid);
00234 rawLtbFrame->setTimestampType(ltbFrame->m_timestampType);
00235 rawLtbFrame->setClockSystemValid(ltbFrame->m_clockSystemValid);
00236 rawLtbFrame->setIltSn(ltbFrame->m_iltSn);
00237 rawLtbFrame->setRot(ltbFrame->m_rot);
00238 rawLtbFrame->setTriggerSrc(ltbFrame->m_triggerSrc);
00239 rawLtbFrame->setNanoSecondLow(ltbFrame->m_nanoSecondLow);
00240 rawLtbFrame->setNanoSecondHigh(ltbFrame->m_nanoSecondHigh);
00241 rawLtbFrame->setAccumulationLow(ltbFrame->m_accumulationLow);
00242 rawLtbFrame->setAccumulationHigh(ltbFrame->m_accumulationHigh);
00243 rawLtbFrame->setHsum(ltbFrame->m_hsum);
00244 rawLtbFrame->setEsumComp(ltbFrame->m_esumComp);
00245 rawLtbFrame->setEsumADC(ltbFrame->m_esumADC);
00246 rawLtbFrame->setCrossTriggerSrc(ltbFrame->m_crossTriggerSrc);
00247 rawLtbFrame->setFeeBufferStat(ltbFrame->m_feeBufferStat);
00248 rawLtbFrame->setLtbBufferStat(ltbFrame->m_ltbBufferStat);
00249 rawLtbFrame->setDay(ltbFrame->m_day);
00250 rawLtbFrame->setHour(ltbFrame->m_hour);
00251 rawLtbFrame->setMinute(ltbFrame->m_minute);
00252 rawLtbFrame->setSecond(ltbFrame->m_second);
00253 rawLtbFrame->setTimestamp(ltbFrame->timeStamp());
00254
00255 return rawLtbFrame;
00256 }
00257
00258 RawLtbFrameUnix* RawEventHeaderCnv::convertLtbFrameUnix(const RawDataEvent::LtbFrameUnix *ltbFrame)
00259 {
00260 RawLtbFrameUnix *rawLtbFrame = new RawLtbFrameUnix();
00261
00262 rawLtbFrame->setAccStat(ltbFrame->m_accStat);
00263 rawLtbFrame->setGPSValid(ltbFrame->m_GPSValid);
00264 rawLtbFrame->setTimestampType(ltbFrame->m_timestampType);
00265 rawLtbFrame->setClockSystemValid(ltbFrame->m_clockSystemValid);
00266 rawLtbFrame->setIltSn(ltbFrame->m_iltSn);
00267 rawLtbFrame->setRot(ltbFrame->m_rot);
00268 rawLtbFrame->setTriggerSrc(ltbFrame->m_triggerSrc);
00269 rawLtbFrame->setNanoSecondLow(ltbFrame->m_nanoSecondLow);
00270 rawLtbFrame->setNanoSecondHigh(ltbFrame->m_nanoSecondHigh);
00271 rawLtbFrame->setAccumulationLow(ltbFrame->m_accumulationLow);
00272 rawLtbFrame->setAccumulationHigh(ltbFrame->m_accumulationHigh);
00273 rawLtbFrame->setHsum(ltbFrame->m_hsum);
00274 rawLtbFrame->setEsumComp(ltbFrame->m_esumComp);
00275 rawLtbFrame->setEsumADC(ltbFrame->m_esumADC);
00276 rawLtbFrame->setCrossTriggerSrc(ltbFrame->m_crossTriggerSrc);
00277 rawLtbFrame->setFeeBufferStat(ltbFrame->m_feeBufferStat);
00278 rawLtbFrame->setLtbBufferStat(ltbFrame->m_ltbBufferStat);
00279 rawLtbFrame->setUnixSecLow(ltbFrame->m_unixSecLow);
00280 rawLtbFrame->setUnixSecHigh(ltbFrame->m_unixSecHigh);
00281 rawLtbFrame->setTimestamp(ltbFrame->timeStamp());
00282
00283 return rawLtbFrame;
00284 }
00285
00286
00287 StatusCode RawEventHeaderCnv::unpackEvent(DayaBay::RawEvent* event,
00288 DayaBay::RawEventHeader* rawEventHeader)
00289 {
00290 m_log << MSG::DEBUG << "unpackEvent" << endreq;
00291
00292 vector<RawRom*> rawRoms;
00293
00294 while( DayaBay::RawModule* module = event->nextModule() ){
00295 StatusCode sc;
00296 if( module->isLocalTriggerModule() ){
00297 m_log << MSG::DEBUG << "LocalTriggerModule" << endreq;
00298 RawRom *rawRomLtb = unpackLtbModule(module);
00299 rawRomLtb->setHeader(rawEventHeader);
00300 rawRoms.push_back(rawRomLtb);
00301 }else if( module->isPmtFeeModule() ){
00302 m_log << MSG::DEBUG << "PmtFeeModule" << endreq;
00303 RawRom *rawRomFee = unpackFeeModule(module);
00304 rawRomFee->setHeader(rawEventHeader);
00305 rawRoms.push_back(rawRomFee);
00306 }else if( module->isFlashAdcModule() ){
00307
00308 }else if( module->isRpcRomModule() ){
00309
00310 }else if( module->isRpcRtmModule() ){
00311
00312 }else{
00313 m_log << MSG::WARNING << "Cannot unpack unknown module type: "
00314 << module->moduleType()<< endreq;
00315 sc = StatusCode::FAILURE;
00316 }
00317 if( !sc.isSuccess() ){
00318
00319 continue;
00320 }
00321 delete module;
00322 }
00323
00324 rawEventHeader->setModules(rawRoms);
00325
00326 return StatusCode::SUCCESS;
00327 }
00328
00329
00330 RawRom* RawEventHeaderCnv::unpackLtbModule(DayaBay::RawModule* module)
00331 {
00332 m_log << MSG::DEBUG << "unpackLtbModule" << endreq;
00333
00334 RawRom *rawRom = new RawRomLtb();
00335 RawRomLtb *rawRomLtb = dynamic_cast<RawRomLtb*>(rawRom);
00336 rawRomLtb->setType(module->moduleType());
00337 rawRomLtb->setSize(module->size());
00338 rawRomLtb->setSlot(module->slot());
00339
00340 vector<RawLtbFrame*> rawLtbFrames;
00341 while( DayaBay::DataFragment* fragment = module->nextDataFragment() ){
00342 if( fragment->isLocalTriggerData() ){
00343
00344 DayaBay::LocalTriggerData* ltbData =
00345 dynamic_cast<DayaBay::LocalTriggerData*>(fragment);
00346 if(!ltbData){
00347 m_log << MSG::WARNING << "Bad Local Trigger Data fragment" << endreq;
00348 continue;
00349 }
00350
00351 if(ltbData->isUnixTime()) {
00352 RawLtbFrameUnix *rawLtbFrame = new RawLtbFrameUnix();
00353 rawLtbFrames.push_back(rawLtbFrame);
00354
00355 rawLtbFrame->setAccStat(ltbData->accumulationStatus());
00356 rawLtbFrame->setGPSValid(ltbData->gpsValid());
00357 rawLtbFrame->setTimestampType(ltbData->timestampType());
00358 rawLtbFrame->setClockSystemValid(ltbData->clockValid());
00359 rawLtbFrame->setRot(ltbData->readOutType());
00360 rawLtbFrame->setTriggerSrc(ltbData->triggerType());
00361 rawLtbFrame->setNanoSecondLow(ltbData->nanosecondLow());
00362 rawLtbFrame->setNanoSecondHigh(ltbData->nanosecondHigh());
00363 rawLtbFrame->setAccumulationLow(ltbData->accumulationLow());
00364 rawLtbFrame->setAccumulationHigh(ltbData->accumulationHigh());
00365 rawLtbFrame->setHsum(ltbData->hsum());
00366 rawLtbFrame->setEsumComp(ltbData->esumComp());
00367 rawLtbFrame->setEsumADC(ltbData->esum());
00368 rawLtbFrame->setCrossTriggerSrc(ltbData->crossTriggerSource());
00369 rawLtbFrame->setFeeBufferStat(ltbData->feeBufferStatus());
00370 rawLtbFrame->setLtbBufferStat(ltbData->ltbBufferStatus());
00371 rawLtbFrame->setUnixSecLow(ltbData->unixtimeLow());
00372 rawLtbFrame->setUnixSecHigh(ltbData->unixtimeHigh());
00373
00374 TimeStamp triggerTime(ltbData->unixtime(),ltbData->nanosecond()+ltbData->accumulation());
00375 rawLtbFrame->setTimestamp(triggerTime);
00376
00377 }
00378
00379 else if(ltbData->isUtcTime()) {
00380 RawLtbFrameUTC *rawLtbFrame = new RawLtbFrameUTC();
00381 rawLtbFrames.push_back(rawLtbFrame);
00382
00383 rawLtbFrame->setAccStat(ltbData->accumulationStatus());
00384 rawLtbFrame->setGPSValid(ltbData->gpsValid());
00385 rawLtbFrame->setTimestampType(ltbData->timestampType());
00386 rawLtbFrame->setClockSystemValid(ltbData->clockValid());
00387 rawLtbFrame->setRot(ltbData->readOutType());
00388 rawLtbFrame->setTriggerSrc(ltbData->triggerType());
00389 rawLtbFrame->setNanoSecondLow(ltbData->nanosecondLow());
00390 rawLtbFrame->setNanoSecondHigh(ltbData->nanosecondHigh());
00391 rawLtbFrame->setAccumulationLow(ltbData->accumulationLow());
00392 rawLtbFrame->setAccumulationHigh(ltbData->accumulationHigh());
00393 rawLtbFrame->setHsum(ltbData->hsum());
00394 rawLtbFrame->setEsumComp(ltbData->esumComp());
00395 rawLtbFrame->setEsumADC(ltbData->esum());
00396 rawLtbFrame->setCrossTriggerSrc(ltbData->crossTriggerSource());
00397 rawLtbFrame->setFeeBufferStat(ltbData->feeBufferStatus());
00398 rawLtbFrame->setLtbBufferStat(ltbData->ltbBufferStatus());
00399 rawLtbFrame->setDay(ltbData->days());
00400 rawLtbFrame->setHour(ltbData->hour());
00401 rawLtbFrame->setMinute(ltbData->minute());
00402 rawLtbFrame->setSecond(ltbData->second());
00403 }
00404 }
00405 delete fragment;
00406 }
00407
00408 rawRomLtb->setFrames(rawLtbFrames);
00409 return rawRom;
00410 }
00411
00412
00413 RawRom* RawEventHeaderCnv::unpackFeeModule(DayaBay::RawModule* module)
00414 {
00415 m_log << MSG::DEBUG << "unpackFeeModule" << endreq;
00416
00417 RawRom *rawRom = new RawRomFee();
00418 RawRomFee *rawRomFee = dynamic_cast<RawRomFee*>(rawRom);
00419 rawRomFee->setType(module->moduleType());
00420 rawRomFee->setSize(module->size());
00421 rawRomFee->setSlot(module->slot());
00422 FeeHeadFragment *headFragment = dynamic_cast<FeeHeadFragment*>(module->headFragment());
00423 rawRomFee->setTriggerNum(headFragment->triggerNumber());
00424
00425 rawRomFee->setStatus(headFragment->status());
00426
00427 rawRomFee->setVersion(headFragment->feeDataVersion());
00428
00429 vector<RawPmtChannel*> rawPmtChannels;
00430 int preChannel = -1;
00431 vector<int> adc,adcRange,adcCycle,tdc,tdcHitCount,pedestal;
00432 RawPmtChannel *rawPmtChannel = 0;
00433 while( DayaBay::DataFragment* fragment = module->nextDataFragment() ){
00434 if( fragment->isFeePeakData() ){
00435
00436 DayaBay::FeePeakData* feePeakData =
00437 dynamic_cast<DayaBay::FeePeakData*>(fragment);
00438 if(!feePeakData){
00439 m_log << MSG::WARNING << "Bad FEE Peak-finding Data fragment" << endreq;
00440 continue;
00441 }
00442
00443 m_log << MSG::DEBUG << "(Slot,channel) = (" << module->slot()
00444 << "," << feePeakData->channel() << ")" << endreq;
00445 if(feePeakData->channel() != preChannel) {
00446
00447 if(preChannel != -1) {
00448 rawPmtChannel->setTdc(tdc);
00449 rawPmtChannel->setTdcHitCount(tdcHitCount);
00450 rawPmtChannel->setAdc(adc);
00451 rawPmtChannel->setAdcRange(adcRange);
00452 rawPmtChannel->setAdcPeakingCycle(adcCycle);
00453 rawPmtChannel->setPedestal(pedestal);
00454 }
00455
00456 preChannel = feePeakData->channel();
00457
00458 rawPmtChannel = new RawPmtChannel();
00459 rawPmtChannels.push_back(rawPmtChannel);
00460 rawPmtChannel->setChannel(feePeakData->channel());
00461 adc.clear();
00462 adcRange.clear();
00463 adcCycle.clear();
00464 tdc.clear();
00465 tdcHitCount.clear();
00466 pedestal.clear();
00467 }
00468
00469 tdc.push_back( feePeakData->tdc() );
00470 tdcHitCount.push_back( feePeakData->tdcHitCount() );
00471 adc.push_back( feePeakData->adc() );
00472 adcRange.push_back(feePeakData->adcRange());
00473 adcCycle.push_back( feePeakData->peakCycle() );
00474 if( feePeakData->hasAdcPedestal() )
00475 pedestal.push_back( feePeakData->adcPedestal() );
00476
00477 }else{
00478 m_log << MSG::WARNING << "Unknown FEE data fragment type: " << fragment->dataType()
00479 << endreq;
00480 }
00481 delete fragment;
00482 }
00483
00484 if(rawPmtChannel) {
00485 rawPmtChannel->setTdc(tdc);
00486 rawPmtChannel->setTdcHitCount(tdcHitCount);
00487 rawPmtChannel->setAdc(adc);
00488 rawPmtChannel->setAdcRange(adcRange);
00489 rawPmtChannel->setAdcPeakingCycle(adcCycle);
00490 rawPmtChannel->setPedestal(pedestal);
00491 }
00492
00493 rawRomFee->setChannels(rawPmtChannels);
00494 return rawRom;
00495 }