4 #include <JANA/JCalibration.h>
9 static int locNumEventWriterThreads = 0;
10 return locNumEventWriterThreads;
17 static map<string, pair<ofstream*, hddm_s::ostream*> > locHDDMOutputFilePointers;
18 return locHDDMOutputFilePointers;
23 japp->WriteLock(
"HDDMWriter");
27 japp->Unlock(
"HDDMWriter");
30 string locCompressionString =
"Turn on/off compression of the output HDDM stream. Set to \"0\" to turn off (it's on by default)";
34 string locIntegrityString =
"Turn on/off automatic integrity checking on the output HDDM stream. Set to \"0\" to turn off (it's on by default)";
44 JEvent&
event = locEventLoop->GetJEvent();
45 JCalibration *jcalib = dapp->GetJCalibration(event.GetRunNumber());
52 gPARMS->SetDefaultParameter(
"HDDMOUT:CDCTAG",
CDC_TAG,
"Tag (string) to use when selecting CDC hits to read out.");
55 gPARMS->SetDefaultParameter(
"HDDMOUT:FDCTAG",
FDC_TAG,
"Tag (string) to use when selecting FDC hits to read out.");
58 gPARMS->SetDefaultParameter(
"HDDMOUT:TAGMTAG",
TAGM_TAG,
"Tag (string) to use when selecting TAGM hits to read out.");
61 gPARMS->SetDefaultParameter(
"HDDMOUT:TAGHTAG",
TAGH_TAG,
"Tag (string) to use when selecting TAGH hits to read out.");
67 vector<const DCDCHit*> CDCHits;
68 vector<const DTOFHit*> TOFHits;
69 vector<const DFCALHit*> FCALHits;
70 vector<const DSCHit*> SCHits;
71 vector<const DBCALDigiHit*> BCALDigiHits;
72 vector<const DBCALTDCDigiHit*> BCALTDCDigiHits;
73 vector<const DPSHit*> PSHits;
74 vector<const DPSCHit*> PSCHits;
75 vector<const DFDCHit*> FDCHits;
76 vector<const DTAGHHit*> TAGHHits;
77 vector<const DTAGMHit*> TAGMHits;
78 vector<const DTPOLHit*> TPOLHits;
79 vector<const DRFTime*> RFtimes;
80 vector<const DDIRCPmtHit*> DIRCPmtHits;
82 locEventLoop->Get(CDCHits,
CDC_TAG.c_str());
83 locEventLoop->Get(FDCHits,
FDC_TAG.c_str());
84 locEventLoop->Get(TOFHits);
85 locEventLoop->Get(FCALHits);
86 locEventLoop->Get(BCALDigiHits);
87 locEventLoop->Get(BCALTDCDigiHits);
88 locEventLoop->Get(SCHits);
89 locEventLoop->Get(PSHits);
90 locEventLoop->Get(PSCHits);
91 locEventLoop->Get(TAGHHits,
TAGH_TAG.c_str());
92 locEventLoop->Get(TAGMHits,
TAGM_TAG.c_str());
93 locEventLoop->Get(TPOLHits);
94 locEventLoop->Get(RFtimes);
95 locEventLoop->Get(DIRCPmtHits);
97 if(CDCHits.size()== uint(0) && TOFHits.size()==uint(0) && FCALHits.size()==uint(0) && BCALDigiHits.size()==uint(0) && BCALTDCDigiHits.size()==uint(0) && SCHits.size()==uint(0) && PSHits.size()==uint(0) && PSCHits.size()==uint(0) && FDCHits.size()==uint(0) && TAGHHits.size()==uint(0) && TAGMHits.size()==uint(0) && TPOLHits.size()==uint(0) && RFtimes.size()==uint(0) && DIRCPmtHits.size()==uint(0))
103 hddm_s::HDDM* record =
new hddm_s::HDDM;
104 record->addPhysicsEvents();
105 hddm_s::PhysicsEvent* pe = &record->getPhysicsEvent();
106 pe->setEventNo(locEventLoop->GetJEvent().GetEventNumber());
107 pe->setRunNo(locEventLoop->GetJEvent().GetRunNumber());
110 hddm_s::HitView* hitv = &pe->getHitView();
116 for(uint i=0;i<TPOLHits.size();++i)
120 hitv->addTripletPolarimeters();
127 hddm_s::TpolSectorList* TPOL_SectorList = &hitv->getTripletPolarimeter().getTpolSectors();
128 hddm_s::TpolSectorList::iterator sectorIterator = TPOL_SectorList->begin();
131 for(sectorIterator = TPOL_SectorList->begin(); sectorIterator != TPOL_SectorList->end(); sectorIterator++)
134 if(
int(TPOLHits[i]->ring) == sectorIterator->getRing() && TPOLHits[i]->sector == sectorIterator->getSector() )
144 hitv->getTripletPolarimeter().addTpolSectors();
145 sectorIterator = TPOL_SectorList->end()-1;
146 sectorIterator->setRing(TPOLHits[i]->ring);
147 sectorIterator->setSector(TPOLHits[i]->sector);
150 sectorIterator->addTpolHits();
151 hddm_s::TpolHitList* TPOL_HitList = §orIterator->getTpolHits();
152 hddm_s::TpolHitList::iterator TPOL_HitIterator = TPOL_HitList->end()-1;
153 TPOL_HitIterator->setT(TPOLHits[i]->t);
154 TPOL_HitIterator->setDE(TPOLHits[i]->dE);
161 if(TAGHHits.size() != uint(0) || TAGMHits.size() != uint(0) )
167 for(uint i=0; i<TAGHHits.size(); ++i)
171 hddm_s::HodoChannelList* TAGH_ChannelList = &hitv->getTagger().getHodoChannels();
172 hddm_s::HodoChannelList::iterator TAGH_ChannelIterator = TAGH_ChannelList->begin();
175 for(TAGH_ChannelIterator=TAGH_ChannelList->begin(); TAGH_ChannelIterator != TAGH_ChannelList->end(); TAGH_ChannelIterator++)
178 if(
int(TAGHHits[i]->counter_id) == TAGH_ChannelIterator->getCounterId() )
188 hitv->getTagger().addHodoChannels();
189 TAGH_ChannelIterator = TAGH_ChannelList->end()-1;
190 TAGH_ChannelIterator->setCounterId(TAGHHits[i]->counter_id);
191 TAGH_ChannelIterator->setE(TAGHHits[i]->E);
195 TAGH_ChannelIterator->addTaggerHits();
196 hddm_s::TaggerHitList* TAGGER_HitList = &TAGH_ChannelIterator->getTaggerHits();
197 hddm_s::TaggerHitList::iterator TAGGER_HitIterator = TAGGER_HitList->end()-1;
198 TAGGER_HitIterator->setNpe(TAGHHits[i]->npe_fadc);
199 TAGGER_HitIterator->setT(TAGHHits[i]->t);
200 TAGGER_HitIterator->setTADC(TAGHHits[i]->time_fadc);
205 for(uint i=0;i<TAGMHits.size();++i)
210 hddm_s::MicroChannelList* TAGM_ChannelList= &hitv->getTagger().getMicroChannels();
211 hddm_s::MicroChannelList::iterator TAGM_ChannelIterator=TAGM_ChannelList->begin();
213 for(TAGM_ChannelIterator=TAGM_ChannelList->begin(); TAGM_ChannelIterator != TAGM_ChannelList->end(); TAGM_ChannelIterator++)
215 if(
int(TAGMHits[i]->
column) == TAGM_ChannelIterator->getColumn() && int(TAGMHits[i]->row) == TAGM_ChannelIterator->getRow() )
224 hitv->getTagger().addMicroChannels();
225 if(TAGMHits[i]->
column == 0 && TAGMHits[i]->row == 0)
227 std::cout<<
"I found one in the TAGM!"<<std::endl;
229 TAGM_ChannelIterator = TAGM_ChannelList->end()-1;
230 TAGM_ChannelIterator->setColumn(TAGMHits[i]->
column);
231 TAGM_ChannelIterator->setRow(TAGMHits[i]->row);
232 TAGM_ChannelIterator->setE(TAGMHits[i]->E);
235 TAGM_ChannelIterator->addTaggerHits();
236 hddm_s::TaggerHitList* TAGGER_HitList = &TAGM_ChannelIterator->getTaggerHits();
237 hddm_s::TaggerHitList::iterator TAGGER_HitIterator = TAGGER_HitList->end()-1;
238 TAGGER_HitIterator->setNpe(TAGMHits[i]->npix_fadc);
239 TAGGER_HitIterator->setT(TAGMHits[i]->t);
240 TAGGER_HitIterator->setTADC(TAGMHits[i]->time_fadc);
248 for(uint i=0;i<FDCHits.size();++i)
253 hitv->addForwardDCs();
256 bool foundChamber=
false;
257 hddm_s::FdcChamberList* FDC_ChamberList = &hitv->getForwardDC().getFdcChambers();
258 hddm_s::FdcChamberList::iterator FDC_ChamberIterator = FDC_ChamberList->begin();
260 for(FDC_ChamberIterator = FDC_ChamberList->begin(); FDC_ChamberIterator != FDC_ChamberList->end(); FDC_ChamberIterator++)
265 if(((FDCHits[i]->gLayer-1)%3)+1 == FDC_ChamberIterator->getLayer() && FDCHits[i]->module == FDC_ChamberIterator->getModule() )
272 if(foundChamber ==
false)
275 hitv->getForwardDC().addFdcChambers();
276 FDC_ChamberIterator = FDC_ChamberList->end()-1;
277 FDC_ChamberIterator->setLayer(((FDCHits[i]->gLayer-1)%3)+1);
278 FDC_ChamberIterator->setModule(FDCHits[i]->module);
288 hddm_s::FdcAnodeWireList* FDC_AnodeWireList= &FDC_ChamberIterator->getFdcAnodeWires();
289 hddm_s::FdcAnodeWireList::iterator FDC_AnodeWireIterator = FDC_AnodeWireList->begin();
291 for(FDC_AnodeWireIterator = FDC_AnodeWireList->begin(); FDC_AnodeWireIterator != FDC_AnodeWireList->end(); FDC_AnodeWireIterator++)
293 if(
int(FDCHits[i]->element) == FDC_AnodeWireIterator->getWire() )
302 FDC_ChamberIterator->addFdcAnodeWires();
303 FDC_AnodeWireIterator = FDC_AnodeWireList->end()-1;
304 FDC_AnodeWireIterator->setWire(FDCHits[i]->element);
307 FDC_AnodeWireIterator->addFdcAnodeHits();
308 hddm_s::FdcAnodeHitList* FDC_AnodeWireHitList = &FDC_AnodeWireIterator->getFdcAnodeHits();
309 hddm_s::FdcAnodeHitList::iterator FDC_AnodeWireHitIterator = FDC_AnodeWireHitList->end()-1;
310 FDC_AnodeWireHitIterator->setT(FDCHits[i]->t);
311 FDC_AnodeWireHitIterator->setDE(0);
318 hddm_s::FdcCathodeStripList* FDC_CathodeStripList = &FDC_ChamberIterator->getFdcCathodeStrips();
319 hddm_s::FdcCathodeStripList::iterator FDC_CathodeStripIterator = FDC_CathodeStripList->begin();
321 for(FDC_CathodeStripIterator = FDC_CathodeStripList->begin(); FDC_CathodeStripIterator != FDC_CathodeStripList->end(); FDC_CathodeStripIterator++)
323 if(
int(FDCHits[i]->element) == FDC_CathodeStripIterator->getStrip() && FDCHits[i]->plane == FDC_CathodeStripIterator->getPlane() )
333 FDC_ChamberIterator->addFdcCathodeStrips();
334 FDC_CathodeStripIterator=FDC_CathodeStripList->end()-1;
335 FDC_CathodeStripIterator->setStrip(FDCHits[i]->element);
336 FDC_CathodeStripIterator->setPlane(FDCHits[i]->plane);
340 FDC_CathodeStripIterator->addFdcCathodeHits();
341 hddm_s::FdcCathodeHitList* FDC_CathodeStripHitList = &FDC_CathodeStripIterator->getFdcCathodeHits();
342 hddm_s::FdcCathodeHitList::iterator FDC_CathodeStripHitIterator = FDC_CathodeStripHitList->end()-1;
343 FDC_CathodeStripHitIterator->setT(FDCHits[i]->t);
344 FDC_CathodeStripHitIterator->setQ(FDCHits[i]->q);
345 FDC_CathodeStripHitIterator->addFdcDigihits();
346 FDC_CathodeStripHitIterator->getFdcDigihits().begin()->setPeakAmp(FDCHits[i]->pulse_height);
356 for(uint i=0; i<PSHits.size(); ++i)
360 hitv->addPairSpectrometerFines();
364 hddm_s::PsTileList* PS_TileList = &hitv->getPairSpectrometerFine().getPsTiles();
365 hddm_s::PsTileList::iterator PS_TileIterator = PS_TileList->begin();
368 for(PS_TileIterator = PS_TileList->begin(); PS_TileIterator != PS_TileList->end(); PS_TileIterator++)
370 if(
int(PSHits[i]->arm) == PS_TileIterator->getArm() && PSHits[i]->column == PS_TileIterator->getColumn() )
380 hitv->getPairSpectrometerFine().addPsTiles();
381 PS_TileIterator = PS_TileList->end()-1;
382 PS_TileIterator->setArm(PSHits[i]->arm);
383 PS_TileIterator->setColumn(PSHits[i]->
column);
386 PS_TileIterator->addPsHits();
387 hddm_s::PsHitList* PS_HitList = &PS_TileIterator->getPsHits();
388 hddm_s::PsHitList::iterator PS_HitIterator = PS_HitList->end()-1;
389 PS_HitIterator->setT(PSHits[i]->t);
390 PS_HitIterator->setDE(PSHits[i]->E);
394 for(uint i=0;i<PSCHits.size();++i)
398 hitv->addPairSpectrometerCoarses();
403 hddm_s::PscPaddleList* PS_PaddleList = &hitv->getPairSpectrometerCoarse().getPscPaddles();
404 hddm_s::PscPaddleList::iterator PS_PaddleIterator = PS_PaddleList->begin();
406 for(PS_PaddleIterator = PS_PaddleList->begin(); PS_PaddleIterator != PS_PaddleList->end(); PS_PaddleIterator++)
408 if(
int(PSCHits[i]->arm) == PS_PaddleIterator->getArm() && PSCHits[i]->module == PS_PaddleIterator->getModule() )
417 hitv->getPairSpectrometerCoarse().addPscPaddles();
418 PS_PaddleIterator = PS_PaddleList->end()-1;
419 PS_PaddleIterator->setArm(PSCHits[i]->arm);
420 PS_PaddleIterator->setModule(PSCHits[i]->module);
423 PS_PaddleIterator->addPscHits();
424 hddm_s::PscHitList* PSC_HitList = &PS_PaddleIterator->getPscHits();
425 hddm_s::PscHitList::iterator pschitit = PSC_HitList->end()-1;
426 pschitit->setT(PSCHits[i]->t);
434 for(uint i=0; i<SCHits.size(); ++i)
438 hitv->addStartCntrs();
442 hddm_s::StcPaddleList* SC_CounterList = &hitv->getStartCntr().getStcPaddles();
443 hddm_s::StcPaddleList::iterator SC_CounterIterator = SC_CounterList->begin();
446 for(SC_CounterIterator = SC_CounterList->begin(); SC_CounterIterator != SC_CounterList->end(); SC_CounterIterator++)
448 if(SCHits[i]->sector == SC_CounterIterator->getSector() )
457 hitv->getStartCntr().addStcPaddles();
458 SC_CounterIterator=SC_CounterList->end()-1;
459 SC_CounterIterator->setSector(SCHits[i]->sector);
462 SC_CounterIterator->addStcHits();
463 hddm_s::StcHitList* schitl = &SC_CounterIterator->getStcHits();
464 hddm_s::StcHitList::iterator schitit = schitl->end()-1;
465 schitit->setT(SCHits[i]->t);
466 schitit->setDE(SCHits[i]->dE);
467 schitit->addStcDigihits();
468 schitit->getStcDigihits().begin()->setPeakAmp(SCHits[i]->pulse_height);
475 if(BCALDigiHits.size() != uint(0) || BCALTDCDigiHits.size() != uint(0) )
477 hitv->addBarrelEMcals();
480 for(uint i=0; i<BCALDigiHits.size(); ++i)
484 hddm_s::BcalCellList* BCAL_CellList= &hitv->getBarrelEMcal().getBcalCells();
485 hddm_s::BcalCellList::iterator BCAL_CellIterator=BCAL_CellList->begin();
488 for(BCAL_CellIterator = BCAL_CellList->begin(); BCAL_CellIterator != BCAL_CellList->end(); BCAL_CellIterator++)
490 if(BCALDigiHits[i]->sector == BCAL_CellIterator->getSector() && BCALDigiHits[i]->layer == BCAL_CellIterator->getLayer() && BCALDigiHits[i]->module == BCAL_CellIterator->getModule() )
499 hitv->getBarrelEMcal().addBcalCells();
500 BCAL_CellIterator = BCAL_CellList->end()-1;
501 BCAL_CellIterator->setLayer(BCALDigiHits[i]->
layer);
502 BCAL_CellIterator->setSector(BCALDigiHits[i]->sector);
503 BCAL_CellIterator->setModule(BCALDigiHits[i]->module);
506 BCAL_CellIterator->addBcalfADCDigiHits();
507 hddm_s::BcalfADCDigiHitList* BCAL_FADCDigiHitList = &BCAL_CellIterator->getBcalfADCDigiHits();
508 hddm_s::BcalfADCDigiHitList::iterator BCAL_FADCDigiHitIterator = BCAL_FADCDigiHitList->end()-1;
509 BCAL_FADCDigiHitIterator->setEnd(BCALDigiHits[i]->end);
510 BCAL_FADCDigiHitIterator->setPulse_time(BCALDigiHits[i]->pulse_time);
511 BCAL_FADCDigiHitIterator->setPulse_integral(BCALDigiHits[i]->pulse_integral);
512 BCAL_FADCDigiHitIterator->addBcalfADCPeaks();
513 BCAL_FADCDigiHitIterator->getBcalfADCPeaks().begin()->setPeakAmp(BCALDigiHits[i]->pulse_peak);
517 for(uint i=0; i<BCALTDCDigiHits.size(); ++i)
521 hddm_s::BcalCellList* BCAL_CellList = &hitv->getBarrelEMcal().getBcalCells();
522 hddm_s::BcalCellList::iterator BCAL_CellIterator = BCAL_CellList->begin();
524 for(BCAL_CellIterator = BCAL_CellList->begin(); BCAL_CellIterator != BCAL_CellList->end(); BCAL_CellIterator++)
526 if(BCALTDCDigiHits[i]->sector == uint(BCAL_CellIterator->getSector()) && BCALTDCDigiHits[i]->
layer == uint(BCAL_CellIterator->getLayer()) && BCALTDCDigiHits[i]->module == uint(BCAL_CellIterator->getModule()) )
535 hitv->getBarrelEMcal().addBcalCells();
536 BCAL_CellIterator = BCAL_CellList->end()-1;
537 BCAL_CellIterator->setLayer(BCALTDCDigiHits[i]->
layer);
538 BCAL_CellIterator->setSector(BCALTDCDigiHits[i]->sector);
539 BCAL_CellIterator->setModule(BCALTDCDigiHits[i]->module);
543 BCAL_CellIterator->addBcalTDCDigiHits();
544 hddm_s::BcalTDCDigiHitList* BCAL_TDCDigiHitList = &BCAL_CellIterator->getBcalTDCDigiHits();
545 hddm_s::BcalTDCDigiHitList::iterator BCAL_TDCDigiHitIterator = BCAL_TDCDigiHitList->end()-1;
546 BCAL_TDCDigiHitIterator->setEnd(BCALTDCDigiHits[i]->end);
547 BCAL_TDCDigiHitIterator->setTime(BCALTDCDigiHits[i]->time);
553 for(uint i=0; i<FCALHits.size(); ++i)
557 hitv->addForwardEMcals();
561 hddm_s::FcalBlockList* FCAL_BlockList = &hitv->getForwardEMcal().getFcalBlocks();
562 hddm_s::FcalBlockList::iterator FCAL_BlockIterator = FCAL_BlockList->begin();
564 for(FCAL_BlockIterator = FCAL_BlockList->begin(); FCAL_BlockIterator != FCAL_BlockList->end(); FCAL_BlockIterator++)
566 if(FCALHits[i]->row==FCAL_BlockIterator->getRow() && FCALHits[i]->column==FCAL_BlockIterator->getColumn())
575 hitv->getForwardEMcal().addFcalBlocks();
576 FCAL_BlockIterator=FCAL_BlockList->end()-1;
577 FCAL_BlockIterator->setColumn(FCALHits[i]->
column);
578 FCAL_BlockIterator->setRow(FCALHits[i]->row);
582 FCAL_BlockIterator->addFcalHits();
583 hddm_s::FcalHitList* FCAL_HitList = &FCAL_BlockIterator->getFcalHits();
584 hddm_s::FcalHitList::iterator FCAL_HitIterator = FCAL_HitList->end()-1;
585 FCAL_HitIterator->setT(FCALHits[i]->t);
586 FCAL_HitIterator->setE(FCALHits[i]->E);
587 FCAL_HitIterator->addFcalDigihits();
588 FCAL_HitIterator->getFcalDigihits().begin()->setIntegralOverPeak(FCALHits[i]->intOverPeak);
594 for(uint i=0; i<TOFHits.size(); ++i)
599 hitv->addForwardTOFs();
604 hddm_s::FtofCounterList* TOF_CounterList = &hitv->getForwardTOF().getFtofCounters();
605 hddm_s::FtofCounterList::iterator TOF_CounterIterator = TOF_CounterList->begin();
607 for(TOF_CounterIterator = TOF_CounterList->begin(); TOF_CounterIterator != TOF_CounterList->end(); TOF_CounterIterator++)
609 if(TOFHits[i]->bar==TOF_CounterIterator->getBar() && TOFHits[i]->plane==TOF_CounterIterator->getPlane())
618 hitv->getForwardTOF().addFtofCounters();
619 TOF_CounterIterator=TOF_CounterList->end()-1;
620 TOF_CounterIterator->setPlane(TOFHits[i]->plane);
621 TOF_CounterIterator->setBar(TOFHits[i]->bar);
625 TOF_CounterIterator->addFtofHits();
626 hddm_s::FtofHitList* ftofhitl=&TOF_CounterIterator->getFtofHits();
627 hddm_s::FtofHitList::iterator ftofhitit=ftofhitl->end()-1;
628 ftofhitit->setEnd(TOFHits[i]->end);
629 ftofhitit->setT(TOFHits[i]->t);
630 ftofhitit->setDE(TOFHits[i]->dE);
631 ftofhitit->addFtofDigihits();
632 ftofhitit->getFtofDigihits().begin()->setPeakAmp(TOFHits[i]->Amp);
638 for(uint i=0; i<CDCHits.size(); ++i)
642 hitv->addCentralDCs();
645 hitv->getCentralDC().addCdcStraws();
647 hddm_s::CdcStrawList* CDC_StrawList = &hitv->getCentralDC().getCdcStraws();
648 hddm_s::CdcStrawList::iterator CDC_StrawIterator = CDC_StrawList->end()-1;
649 CDC_StrawIterator->setRing(CDCHits[i]->ring);
650 CDC_StrawIterator->setStraw(CDCHits[i]->straw);
652 CDC_StrawIterator->addCdcStrawHits();
653 hddm_s::CdcStrawHitList* strawhitl = &CDC_StrawIterator->getCdcStrawHits();
654 hddm_s::CdcStrawHitList::iterator cdcstrawhitit = strawhitl->end()-1;
655 cdcstrawhitit->setQ(CDCHits[i]->q);
656 cdcstrawhitit->setT(CDCHits[i]->t);
657 cdcstrawhitit->addCdcDigihits();
658 cdcstrawhitit->getCdcDigihits().begin()->setPeakAmp(CDCHits[i]->amp);
659 cdcstrawhitit->addCdcHitQFs();
660 cdcstrawhitit->getCdcHitQFs().begin()->setQF(CDCHits[i]->QF);
665 for(uint i=0; i<RFtimes.size(); ++i)
667 hddm_s::RFtimeList nextRF = hitv->addRFtimes();
668 nextRF(0).setJtag(RFtimes[i]->GetTag());
669 nextRF(0).setTsync(RFtimes[i]->dTime);
672 std::vector<std::string> RFtags = {
"TOF",
"FDC",
"PSC",
"TAGH"};
673 hddm_s::RFtimeList mainRF = hitv->getRFtimes();
674 if(mainRF.size() > 0)
676 for(uint it=0; it < RFtags.size(); ++it)
678 vector<const DRFTime*> RFsubsys;
679 locEventLoop->Get(RFsubsys, RFtags[it].c_str());
680 for(uint i=0; i < RFsubsys.size(); ++i)
682 hddm_s::RFsubsystemList nextRF = mainRF(0).addRFsubsystems();
683 nextRF(0).setJtag(RFsubsys[i]->GetTag());
684 nextRF(0).setTsync(RFsubsys[i]->dTime);
691 for(uint i=0; i<DIRCPmtHits.size(); ++i) {
697 hddm_s::DircPmtHitList *pmtHits = &hitv->getDIRC().getDircPmtHits();
698 hddm_s::DircPmtHitList::iterator iter;
700 hitv->getDIRC().addDircPmtHits();
701 iter=pmtHits->end()-1;
702 iter->setCh(DIRCPmtHits[i]->ch);
703 iter->setT(DIRCPmtHits[i]->t);
717 BCALDigiHits.clear();
718 BCALTDCDigiHits.clear();
728 return locWriteStatus;
734 if (locOutputFileNameSubString !=
"")
735 locOutputFileName +=
string(
"_") + locOutputFileNameSubString;
736 return (locOutputFileName +
string(
".hddm"));
741 japp->WriteLock(
"HDDMWriter");
748 japp->Unlock(
"HDDMWriter");
749 *(locOutputHDDMFileStream) << locRecord;
754 pair<ofstream*, hddm_s::ostream*> locHDDMFilePointers(NULL, NULL);
755 locHDDMFilePointers.first =
new ofstream(locOutputFileName.c_str());
756 if(!locHDDMFilePointers.first->is_open())
759 delete locHDDMFilePointers.first;
760 japp->Unlock(
"HDDMWriter");
763 locHDDMFilePointers.second =
new hddm_s::ostream(*locHDDMFilePointers.first);
768 jout <<
" Enabling bz2 compression of output HDDM file stream" << std::endl;
769 locHDDMFilePointers.second->setCompression(hddm_s::k_bz2_compression);
772 jout <<
" HDDM compression disabled" << std::endl;
777 jout <<
" Enabling CRC data integrity check in output HDDM file stream" << std::endl;
778 locHDDMFilePointers.second->setIntegrityChecks(hddm_s::k_crc32_integrity);
781 jout <<
" HDDM integrity checks disabled" << std::endl;
785 *(locHDDMFilePointers.second) << locRecord;
790 japp->Unlock(
"HDDMWriter");
797 japp->WriteLock(
"HDDMWriter");
802 japp->Unlock(
"HDDMWriter");
807 map<string, pair<ofstream*, hddm_s::ostream*> >::iterator locIterator;
810 string locOutputFileName = locIterator->first;
811 if (locIterator->second.second != NULL)
812 delete locIterator->second.second;
813 if (locIterator->second.first != NULL)
814 delete locIterator->second.first;
815 std::cout <<
"Closed HDDM file " << locOutputFileName << std::endl;
819 japp->Unlock(
"HDDMWriter");
829 if((locUnsignedInt & 0x80000000) == 0)
830 return int32_t(locUnsignedInt);
833 int32_t locTopBitStripped = int32_t(locUnsignedInt & uint32_t(0x7FFFFFFF));
834 if(locTopBitStripped == 0)
836 return -1*locTopBitStripped;
string CCDB_CONTEXT_STRING
int & Get_NumEventWriterThreads(void) const
string HDDM_DATA_VERSION_STRING
bool Write_HDDMEvent(JEventLoop *locEventLoop, string locOutputFileNameSubString) const
bool HDDM_USE_COMPRESSION
bool HDDM_USE_INTEGRITY_CHECKS
int32_t Convert_UnsignedIntToSigned(uint32_t locUnsignedInt) const
DEventWriterHDDM(JEventLoop *locEventLoop, string locOutputFileBaseName)
string dOutputFileBaseName
map< string, pair< ofstream *, hddm_s::ostream * > > & Get_HDDMOutputFilePointers(void) const
string Get_OutputFileName(string locOutputFileNameSubString) const