4 #include <JANA/JCalibration.h>
9 static int locNumEventWriterThreads = 0;
10 return locNumEventWriterThreads;
17 static map<string, pair<ofstream*, hddm_r::ostream*> > locRESTOutputFilePointers;
18 return locRESTOutputFilePointers;
23 japp->WriteLock(
"RESTWriter");
27 japp->Unlock(
"RESTWriter");
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)";
38 if(gPARMS->Exists(
"REST:DATAVERSIONSTRING"))
50 JEvent&
event = locEventLoop->GetJEvent();
51 JCalibration *jcalib = dapp->GetJCalibration(event.GetRunNumber());
61 std::vector<const DMCReaction*> reactions;
62 locEventLoop->Get(reactions);
64 std::vector<const DRFTime*> rftimes;
65 locEventLoop->Get(rftimes);
67 std::vector<const DBeamPhoton*> locBeamPhotons;
68 locEventLoop->Get(locBeamPhotons);
70 std::vector<const DBeamPhoton*> locBeamPhotons_TAGGEDMCGEN;
71 locEventLoop->Get(locBeamPhotons_TAGGEDMCGEN,
"TAGGEDMCGEN");
73 std::vector<const DFCALShower*> fcalshowers;
74 locEventLoop->Get(fcalshowers);
76 std::vector<const DBCALShower*> bcalshowers;
77 locEventLoop->Get(bcalshowers);
79 std::vector<const DTOFPoint*> tofpoints;
80 locEventLoop->Get(tofpoints);
82 std::vector<const DSCHit*> starthits;
83 locEventLoop->Get(starthits);
85 std::vector<const DTrackTimeBased*> tracks;
86 locEventLoop->Get(tracks);
88 std::vector<const DDetectorMatches*> locDetectorMatches;
89 locEventLoop->Get(locDetectorMatches);
91 std::vector<const DDIRCPmtHit*> locDIRCPmtHits;
92 locEventLoop->Get(locDIRCPmtHits);
94 std::vector<const DTrigger*> locTriggers;
95 locEventLoop->Get(locTriggers);
98 bool locOutputDataPresentFlag =
false;
99 if((!reactions.empty()) || (!locBeamPhotons.empty()) || (!tracks.empty()))
100 locOutputDataPresentFlag =
true;
101 else if((!fcalshowers.empty()) || (!bcalshowers.empty()) || (!tofpoints.empty()) || (!starthits.empty()))
102 locOutputDataPresentFlag =
true;
104 if(!locOutputDataPresentFlag)
109 hddm_r::HDDM locRecord;
110 hddm_r::ReconstructedPhysicsEventList res = locRecord.addReconstructedPhysicsEvents(1);
113 JEvent&
event = locEventLoop->GetJEvent();
114 res().setRunNo(event.GetRunNumber());
117 res().setEventNo(event.GetEventNumber());
120 for (
size_t i=0; i < reactions.size(); i++)
122 hddm_r::ReactionList rea = res().addReactions(1);
123 rea().setType(reactions[i]->type);
124 rea().setWeight(reactions[i]->weight);
125 rea().setEbeam(reactions[i]->beam.energy());
126 rea().setTargetType(reactions[i]->target.PID());
131 std::vector<const DMCThrown*> throwns;
132 locEventLoop->Get(throwns);
133 hddm_r::VertexList ver = rea().getVertices();
135 for(
size_t it=0; it < throwns.size(); ++it)
137 DLorentzVector locThrownX4(throwns[it]->position(), throwns[it]->time());
138 if((locThrownX4.T() != locPreviousX4.T()) || (locThrownX4.Vect() != locPreviousX4.Vect()))
141 ver = rea().addVertices(1);
142 hddm_r::OriginList ori = ver().addOrigins(1);
143 ori().setT(locThrownX4.T());
144 ori().setVx(locThrownX4.X());
145 ori().setVy(locThrownX4.Y());
146 ori().setVz(locThrownX4.Z());
147 locPreviousX4 = locThrownX4;
150 hddm_r::ProductList pro = ver().addProducts(1);
151 pro().setId(throwns[it]->myid);
152 pro().setParentId(throwns[it]->parentid);
153 int pdgtype = throwns[it]->pdgtype;
156 pro().setPdgtype(pdgtype);
157 hddm_r::MomentumList mom = pro().addMomenta(1);
158 mom().setE(throwns[it]->energy());
159 mom().setPx(throwns[it]->px());
160 mom().setPy(throwns[it]->
py());
161 mom().setPz(throwns[it]->pz());
166 for (
size_t i=0; i < rftimes.size(); i++)
168 hddm_r::RFtimeList rf = res().addRFtimes(1);
169 rf().setTsync(rftimes[i]->dTime);
173 for(
size_t loc_i = 0; loc_i < locBeamPhotons.size(); ++loc_i)
175 if(locBeamPhotons[loc_i]->dSystem ==
SYS_TAGM)
177 hddm_r::TagmBeamPhotonList locTagmBeamPhotonList = res().addTagmBeamPhotons(1);
178 locTagmBeamPhotonList().setT(locBeamPhotons[loc_i]->time());
179 locTagmBeamPhotonList().setE(locBeamPhotons[loc_i]->energy());
181 else if(locBeamPhotons[loc_i]->dSystem ==
SYS_TAGH)
183 hddm_r::TaghBeamPhotonList locTaghBeamPhotonList = res().addTaghBeamPhotons(1);
184 locTaghBeamPhotonList().setT(locBeamPhotons[loc_i]->time());
185 locTaghBeamPhotonList().setE(locBeamPhotons[loc_i]->energy());
188 for(
size_t loc_i = 0; loc_i < locBeamPhotons_TAGGEDMCGEN.size(); ++loc_i)
190 if(locBeamPhotons_TAGGEDMCGEN[loc_i]->dSystem ==
SYS_TAGM)
192 hddm_r::TagmBeamPhotonList locTagmBeamPhotonList = res().addTagmBeamPhotons(1);
193 locTagmBeamPhotonList().setJtag(
"TAGGEDMCGEN");
194 locTagmBeamPhotonList().setT(locBeamPhotons_TAGGEDMCGEN[loc_i]->time());
195 locTagmBeamPhotonList().setE(locBeamPhotons_TAGGEDMCGEN[loc_i]->energy());
197 else if(locBeamPhotons_TAGGEDMCGEN[loc_i]->dSystem ==
SYS_TAGH)
199 hddm_r::TaghBeamPhotonList locTaghBeamPhotonList = res().addTaghBeamPhotons(1);
200 locTaghBeamPhotonList().setJtag(
"TAGGEDMCGEN");
201 locTaghBeamPhotonList().setT(locBeamPhotons_TAGGEDMCGEN[loc_i]->time());
202 locTaghBeamPhotonList().setE(locBeamPhotons_TAGGEDMCGEN[loc_i]->energy());
207 for (
size_t i=0; i < fcalshowers.size(); i++)
209 hddm_r::FcalShowerList fcal = res().addFcalShowers(1);
210 DVector3 pos = fcalshowers[i]->getPosition();
214 fcal().setT(fcalshowers[i]->getTime());
215 fcal().setE(fcalshowers[i]->getEnergy());
216 fcal().setXerr(fcalshowers[i]->xErr());
217 fcal().setYerr(fcalshowers[i]->yErr());
218 fcal().setZerr(fcalshowers[i]->zErr());
219 fcal().setTerr(fcalshowers[i]->tErr());
220 fcal().setEerr(fcalshowers[i]->EErr());
221 fcal().setXycorr(fcalshowers[i]->XYcorr());
222 fcal().setXzcorr(fcalshowers[i]->XZcorr());
223 fcal().setYzcorr(fcalshowers[i]->YZcorr());
224 fcal().setEzcorr(fcalshowers[i]->EZcorr());
225 fcal().setTzcorr(fcalshowers[i]->ZTcorr());
228 hddm_r::FcalCorrelationsList locFcalCorrelationsList = fcal().addFcalCorrelationses(1);
229 locFcalCorrelationsList().setEtcorr(fcalshowers[i]->ETcorr());
230 locFcalCorrelationsList().setExcorr(fcalshowers[i]->EXcorr());
231 locFcalCorrelationsList().setEycorr(fcalshowers[i]->EYcorr());
232 locFcalCorrelationsList().setTxcorr(fcalshowers[i]->XTcorr());
233 locFcalCorrelationsList().setTycorr(fcalshowers[i]->YTcorr());
241 hddm_r::FcalShowerPropertiesList locFcalShowerPropertiesList = fcal().addFcalShowerPropertiesList(1);
242 locFcalShowerPropertiesList().setDocaTrack(fcalshowers[i]->getDocaTrack());
243 locFcalShowerPropertiesList().setTimeTrack(fcalshowers[i]->getTimeTrack());
244 locFcalShowerPropertiesList().setSumU(fcalshowers[i]->getSumU());
245 locFcalShowerPropertiesList().setSumV(fcalshowers[i]->getSumV());
246 locFcalShowerPropertiesList().setE1E9(fcalshowers[i]->getE1E9());
247 locFcalShowerPropertiesList().setE9E25(fcalshowers[i]->getE9E25());
248 hddm_r::FcalShowerNBlocksList locFcalShowerNBlocksList = fcal().addFcalShowerNBlockses(1);
249 locFcalShowerNBlocksList().setNumBlocks(fcalshowers[i]->getNumBlocks());
255 for (
size_t i=0; i < bcalshowers.size(); i++)
257 hddm_r::BcalShowerList bcal = res().addBcalShowers(1);
258 DVector3 pos(bcalshowers[i]->
x,bcalshowers[i]->
y,bcalshowers[i]->z);
259 bcal().setX(bcalshowers[i]->
x);
260 bcal().setY(bcalshowers[i]->
y);
261 bcal().setZ(bcalshowers[i]->z);
262 bcal().setT(bcalshowers[i]->t);
263 bcal().setE(bcalshowers[i]->E);
264 bcal().setXerr(bcalshowers[i]->xErr());
265 bcal().setYerr(bcalshowers[i]->yErr());
266 bcal().setZerr(bcalshowers[i]->zErr());
267 bcal().setTerr(bcalshowers[i]->tErr());
268 bcal().setEerr(bcalshowers[i]->EErr());
269 bcal().setXycorr(bcalshowers[i]->XYcorr());
270 bcal().setXzcorr(bcalshowers[i]->XZcorr());
271 bcal().setYzcorr(bcalshowers[i]->YZcorr());
272 bcal().setEzcorr(bcalshowers[i]->EZcorr());
273 bcal().setTzcorr(bcalshowers[i]->ZTcorr());
276 hddm_r::BcalCorrelationsList locBcalCorrelationsList = bcal().addBcalCorrelationses(1);
277 locBcalCorrelationsList().setEtcorr(bcalshowers[i]->ETcorr());
278 locBcalCorrelationsList().setExcorr(bcalshowers[i]->EXcorr());
279 locBcalCorrelationsList().setEycorr(bcalshowers[i]->EYcorr());
280 locBcalCorrelationsList().setTxcorr(bcalshowers[i]->XTcorr());
281 locBcalCorrelationsList().setTycorr(bcalshowers[i]->YTcorr());
283 hddm_r::PreshowerList locPreShowerList = bcal().addPreshowers(1);
284 locPreShowerList().setPreshowerE(bcalshowers[i]->E_preshower);
286 hddm_r::WidthList locWidthList = bcal().addWidths(1);
287 locWidthList().setSigLong(bcalshowers[i]->sigLong);
288 locWidthList().setSigTrans(bcalshowers[i]->sigTrans);
289 locWidthList().setSigTheta(bcalshowers[i]->sigTheta);
292 hddm_r::BcalClusterList bcalcluster = bcal().addBcalClusters(1);
293 bcalcluster().setNcell(bcalshowers[i]->N_cell);
295 hddm_r::BcalLayersList bcallayerdata = bcal().addBcalLayerses(1);
296 bcallayerdata().setE_L2(bcalshowers[i]->E_L2);
297 bcallayerdata().setE_L3(bcalshowers[i]->E_L3);
298 bcallayerdata().setE_L4(bcalshowers[i]->E_L4);
299 bcallayerdata().setRmsTime(bcalshowers[i]->rmsTime);
303 for (
size_t i=0; i < tofpoints.size(); i++)
305 hddm_r::TofPointList tof = res().addTofPoints(1);
306 tof().setX(tofpoints[i]->pos(0));
307 tof().setY(tofpoints[i]->pos(1));
308 tof().setZ(tofpoints[i]->pos(2));
309 tof().setT(tofpoints[i]->t);
310 tof().setDE(tofpoints[i]->dE);
313 hddm_r::TofStatusList tofstatus = tof().addTofStatuses(1);
314 int locStatus = tofpoints[i]->dHorizontalBar + 45*tofpoints[i]->dVerticalBar;
315 locStatus += 45*45*tofpoints[i]->dHorizontalBarStatus + 45*45*4*tofpoints[i]->dVerticalBarStatus;
316 tofstatus().setStatus(locStatus);
320 for (
size_t i=0; i < starthits.size(); i++)
322 hddm_r::StartHitList hit = res().addStartHits(1);
323 hit().setSector(starthits[i]->sector);
324 hit().setT(starthits[i]->t);
325 hit().setDE(starthits[i]->dE);
330 for (
size_t i=0; i < locDIRCPmtHits.size(); i++)
332 hddm_r::DircHitList hit = res().addDircHits(1);
333 hit().setCh(locDIRCPmtHits[i]->ch);
334 hit().setT(locDIRCPmtHits[i]->t);
335 hit().setTot(locDIRCPmtHits[i]->tot);
340 for (
size_t i=0; i < tracks.size(); ++i)
342 hddm_r::ChargedTrackList tra = res().addChargedTracks(1);
343 tra().setCandidateId(tracks[i]->candidateid);
344 tra().setPtype(tracks[i]->PID());
346 hddm_r::TrackFitList fit = tra().addTrackFits(1);
347 fit().setNdof(tracks[i]->Ndof);
348 fit().setChisq(tracks[i]->chisq);
349 fit().setX0(tracks[i]->
x());
350 fit().setY0(tracks[i]->
y());
351 fit().setZ0(tracks[i]->z());
352 fit().setPx(tracks[i]->px());
353 fit().setPy(tracks[i]->
py());
354 fit().setPz(tracks[i]->pz());
355 fit().setT0(tracks[i]->time());
359 const TMatrixFSym& errors = *(tracks[i]->TrackingErrorMatrix().get());
360 fit().setE11(errors(0,0));
361 fit().setE12(errors(0,1));
362 fit().setE13(errors(0,2));
363 fit().setE14(errors(0,3));
364 fit().setE15(errors(0,4));
365 fit().setE22(errors(1,1));
366 fit().setE23(errors(1,2));
367 fit().setE24(errors(1,3));
368 fit().setE25(errors(1,4));
369 fit().setE33(errors(2,2));
370 fit().setE34(errors(2,3));
371 fit().setE35(errors(2,4));
372 fit().setE44(errors(3,3));
373 fit().setE45(errors(3,4));
374 fit().setE55(errors(4,4));
376 hddm_r::TrackFlagsList myflags = tra().addTrackFlagses(1);
377 myflags().setFlags(tracks[i]->flags);
379 hddm_r::HitlayersList locHitLayers = tra().addHitlayerses(1);
380 locHitLayers().setCDCrings(tracks[i]->dCDCRings);
381 locHitLayers().setFDCplanes(tracks[i]->dFDCPlanes);
383 vector<const DCDCTrackHit*> locCDCHits;
384 tracks[i]->Get(locCDCHits);
385 vector<const DFDCPseudo*> locFDCHits;
386 tracks[i]->Get(locFDCHits);
388 hddm_r::ExpectedhitsList locExpectedHits = tra().addExpectedhitses(1);
391 locExpectedHits().setMeasuredCDChits(tracks[i]->measured_cdc_hits_on_track);
392 locExpectedHits().setMeasuredFDChits(tracks[i]->measured_fdc_hits_on_track);
395 locExpectedHits().setExpectedCDChits(tracks[i]->potential_cdc_hits_on_track);
396 locExpectedHits().setExpectedFDChits(tracks[i]->potential_fdc_hits_on_track);
398 hddm_r::McmatchList locMCMatches = tra().addMcmatchs(1);
399 locMCMatches().setIthrown(tracks[i]->dMCThrownMatchMyID);
400 locMCMatches().setNumhitsmatch(tracks[i]->dNumHitsMatchedToThrown);
402 if (tracks[i]->dNumHitsUsedFordEdx_FDC + tracks[i]->dNumHitsUsedFordEdx_CDC > 0)
404 hddm_r::DEdxDCList elo = tra().addDEdxDCs(1);
405 elo().setNsampleFDC(tracks[i]->dNumHitsUsedFordEdx_FDC);
406 elo().setNsampleCDC(tracks[i]->dNumHitsUsedFordEdx_CDC);
407 elo().setDxFDC(tracks[i]->ddx_FDC);
408 elo().setDxCDC(tracks[i]->ddx_CDC);
409 elo().setDEdxFDC(tracks[i]->ddEdx_FDC);
410 elo().setDEdxCDC(tracks[i]->ddEdx_CDC);
411 hddm_r::CDCAmpdEdxList elo2 = elo().addCDCAmpdEdxs(1);
412 elo2().setDxCDCAmp(tracks[i]->ddx_CDC_amp);
413 elo2().setDEdxCDCAmp(tracks[i]->ddEdx_CDC_amp);
419 for (
size_t i=0; i < locTriggers.size(); ++i)
421 hddm_r::TriggerList trigger = res().addTriggers(1);
427 for(
size_t loc_i = 0; loc_i < locDetectorMatches.size(); ++loc_i)
429 hddm_r::DetectorMatchesList
matches = res().addDetectorMatcheses(1);
430 for(
size_t loc_j = 0; loc_j < tracks.size(); ++loc_j)
432 vector<shared_ptr<const DBCALShowerMatchParams>> locBCALShowerMatchParamsVector;
433 locDetectorMatches[loc_i]->Get_BCALMatchParams(tracks[loc_j], locBCALShowerMatchParamsVector);
434 for(
size_t loc_k = 0; loc_k < locBCALShowerMatchParamsVector.size(); ++loc_k)
436 hddm_r::BcalMatchParamsList bcalList =
matches().addBcalMatchParamses(1);
437 bcalList().setTrack(loc_j);
439 const DBCALShower* locBCALShower = locBCALShowerMatchParamsVector[loc_k]->dBCALShower;
440 size_t locBCALindex = 0;
441 for(; locBCALindex < bcalshowers.size(); ++locBCALindex)
443 if(bcalshowers[locBCALindex] == locBCALShower)
446 bcalList().setShower(locBCALindex);
448 bcalList().setDeltaphi(locBCALShowerMatchParamsVector[loc_k]->dDeltaPhiToShower);
449 bcalList().setDeltaz(locBCALShowerMatchParamsVector[loc_k]->dDeltaZToShower);
450 bcalList().setDx(locBCALShowerMatchParamsVector[loc_k]->dx);
451 bcalList().setPathlength(locBCALShowerMatchParamsVector[loc_k]->dPathLength);
452 bcalList().setTflight(locBCALShowerMatchParamsVector[loc_k]->dFlightTime);
453 bcalList().setTflightvar(locBCALShowerMatchParamsVector[loc_k]->dFlightTimeVariance);
456 vector<shared_ptr<const DFCALShowerMatchParams>> locFCALShowerMatchParamsVector;
457 locDetectorMatches[loc_i]->Get_FCALMatchParams(tracks[loc_j], locFCALShowerMatchParamsVector);
458 for (
size_t loc_k = 0; loc_k < locFCALShowerMatchParamsVector.size(); ++loc_k)
460 hddm_r::FcalMatchParamsList fcalList =
matches().addFcalMatchParamses(1);
461 fcalList().setTrack(loc_j);
463 const DFCALShower* locFCALShower = locFCALShowerMatchParamsVector[loc_k]->dFCALShower;
464 size_t locFCALindex = 0;
465 for(; locFCALindex < fcalshowers.size(); ++locFCALindex)
467 if(fcalshowers[locFCALindex] == locFCALShower)
470 fcalList().setShower(locFCALindex);
472 fcalList().setDoca(locFCALShowerMatchParamsVector[loc_k]->dDOCAToShower);
473 fcalList().setDx(locFCALShowerMatchParamsVector[loc_k]->dx);
474 fcalList().setPathlength(locFCALShowerMatchParamsVector[loc_k]->dPathLength);
475 fcalList().setTflight(locFCALShowerMatchParamsVector[loc_k]->dFlightTime);
476 fcalList().setTflightvar(locFCALShowerMatchParamsVector[loc_k]->dFlightTimeVariance);
479 vector<shared_ptr<const DTOFHitMatchParams>> locTOFHitMatchParamsVector;
480 locDetectorMatches[loc_i]->Get_TOFMatchParams(tracks[loc_j], locTOFHitMatchParamsVector);
481 for(
size_t loc_k = 0; loc_k < locTOFHitMatchParamsVector.size(); ++loc_k)
483 hddm_r::TofMatchParamsList tofList =
matches().addTofMatchParamses(1);
484 tofList().setTrack(loc_j);
486 size_t locTOFindex = 0;
487 for(; locTOFindex < tofpoints.size(); ++locTOFindex)
489 if(tofpoints[locTOFindex] == locTOFHitMatchParamsVector[loc_k]->dTOFPoint)
492 tofList().setHit(locTOFindex);
494 tofList().setThit(locTOFHitMatchParamsVector[loc_k]->dHitTime);
495 tofList().setThitvar(locTOFHitMatchParamsVector[loc_k]->dHitTimeVariance);
496 tofList().setEhit(locTOFHitMatchParamsVector[loc_k]->dHitEnergy);
498 tofList().setDEdx(locTOFHitMatchParamsVector[loc_k]->dEdx);
499 tofList().setPathlength(locTOFHitMatchParamsVector[loc_k]->dPathLength);
500 tofList().setTflight(locTOFHitMatchParamsVector[loc_k]->dFlightTime);
501 tofList().setTflightvar(locTOFHitMatchParamsVector[loc_k]->dFlightTimeVariance);
503 tofList().setDeltax(locTOFHitMatchParamsVector[loc_k]->dDeltaXToHit);
504 tofList().setDeltay(locTOFHitMatchParamsVector[loc_k]->dDeltaYToHit);
507 vector<shared_ptr<const DSCHitMatchParams>> locSCHitMatchParamsVector;
508 locDetectorMatches[loc_i]->Get_SCMatchParams(tracks[loc_j], locSCHitMatchParamsVector);
509 for(
size_t loc_k = 0; loc_k < locSCHitMatchParamsVector.size(); ++loc_k)
511 hddm_r::ScMatchParamsList scList =
matches().addScMatchParamses(1);
512 scList().setTrack(loc_j);
514 size_t locSCindex = 0;
515 for(; locSCindex < starthits.size(); ++locSCindex)
517 if(starthits[locSCindex] == locSCHitMatchParamsVector[loc_k]->dSCHit)
520 scList().setHit(locSCindex);
522 scList().setDEdx(locSCHitMatchParamsVector[loc_k]->dEdx);
523 scList().setDeltaphi(locSCHitMatchParamsVector[loc_k]->dDeltaPhiToHit);
524 scList().setEhit(locSCHitMatchParamsVector[loc_k]->dHitEnergy);
525 scList().setPathlength(locSCHitMatchParamsVector[loc_k]->dPathLength);
526 scList().setTflight(locSCHitMatchParamsVector[loc_k]->dFlightTime);
527 scList().setTflightvar(locSCHitMatchParamsVector[loc_k]->dFlightTimeVariance);
528 scList().setThit(locSCHitMatchParamsVector[loc_k]->dHitTime);
529 scList().setThitvar(locSCHitMatchParamsVector[loc_k]->dHitTimeVariance);
533 shared_ptr<const DDIRCMatchParams> locDIRCMatchParams;
534 map<shared_ptr<const DDIRCMatchParams>, vector<const DDIRCPmtHit*> > locDIRCTrackMatchParamsMap;
539 if(locDIRCMatchParams) {
540 hddm_r::DircMatchParamsList dircList =
matches().addDircMatchParamses(1);
541 dircList().setTrack(loc_j);
543 vector<const DDIRCPmtHit*> locDIRCHitTrackMatch = (vector<const DDIRCPmtHit*>)locDIRCTrackMatchParamsMap[locDIRCMatchParams];
544 for(
size_t loc_k = 0; loc_k < locDIRCPmtHits.size(); ++loc_k) {
546 if(find(locDIRCHitTrackMatch.begin(), locDIRCHitTrackMatch.end(), locDIRCPmtHit) != locDIRCHitTrackMatch.end()) {
547 hddm_r::DircMatchHitList dircHitList =
matches().addDircMatchHits(1);
548 dircHitList().setTrack(loc_j);
549 dircHitList().setHit(loc_k);
553 vector<DTrackFitter::Extrapolation_t> extrapolations=tracks[loc_j]->extrapolations.at(
SYS_DIRC);
554 DVector3 locProjPos = locDIRCMatchParams->dExtrapolatedPos;
555 DVector3 locProjMom = locDIRCMatchParams->dExtrapolatedMom;
556 double locFlightTime = locDIRCMatchParams->dExtrapolatedTime;
557 dircList().setX(locProjPos.X());
558 dircList().setY(locProjPos.Y());
559 dircList().setZ(locProjPos.Z());
560 dircList().setT(locFlightTime);
561 dircList().setPx(locProjMom.X());
562 dircList().setPy(locProjMom.Y());
563 dircList().setPz(locProjMom.Z());
564 dircList().setExpectthetac(locDIRCMatchParams->dExpectedThetaC);
565 dircList().setThetac(locDIRCMatchParams->dThetaC);
566 dircList().setDeltat(locDIRCMatchParams->dDeltaT);
567 dircList().setLele(locDIRCMatchParams->dLikelihoodElectron);
568 dircList().setLpi(locDIRCMatchParams->dLikelihoodPion);
569 dircList().setLk(locDIRCMatchParams->dLikelihoodKaon);
570 dircList().setLp(locDIRCMatchParams->dLikelihoodProton);
571 dircList().setNphotons(locDIRCMatchParams->dNPhotons);
574 double locFlightTimePCorrelation = 0.0;
575 if(locDetectorMatches[loc_i]->Get_FlightTimePCorrelation(tracks[loc_j],
SYS_BCAL, locFlightTimePCorrelation))
577 hddm_r::TflightPCorrelationList correlationList =
matches().addTflightPCorrelations(1);
578 correlationList().setTrack(loc_j);
579 correlationList().setSystem(
SYS_BCAL);
580 correlationList().setCorrelation(locFlightTimePCorrelation);
582 if(locDetectorMatches[loc_i]->Get_FlightTimePCorrelation(tracks[loc_j],
SYS_FCAL, locFlightTimePCorrelation))
584 hddm_r::TflightPCorrelationList correlationList =
matches().addTflightPCorrelations(1);
585 correlationList().setTrack(loc_j);
586 correlationList().setSystem(
SYS_FCAL);
587 correlationList().setCorrelation(locFlightTimePCorrelation);
589 if(locDetectorMatches[loc_i]->Get_FlightTimePCorrelation(tracks[loc_j],
SYS_TOF, locFlightTimePCorrelation))
591 hddm_r::TflightPCorrelationList correlationList =
matches().addTflightPCorrelations(1);
592 correlationList().setTrack(loc_j);
593 correlationList().setSystem(
SYS_TOF);
594 correlationList().setCorrelation(locFlightTimePCorrelation);
596 if(locDetectorMatches[loc_i]->Get_FlightTimePCorrelation(tracks[loc_j],
SYS_START, locFlightTimePCorrelation))
598 hddm_r::TflightPCorrelationList correlationList =
matches().addTflightPCorrelations(1);
599 correlationList().setTrack(loc_j);
601 correlationList().setCorrelation(locFlightTimePCorrelation);
605 for(
size_t loc_j = 0; loc_j < bcalshowers.size(); ++loc_j)
607 double locDeltaPhi = 0.0, locDeltaZ = 0.0;
608 if(!locDetectorMatches[loc_i]->Get_DistanceToNearestTrack(bcalshowers[loc_j], locDeltaPhi, locDeltaZ))
611 hddm_r::BcalDOCAtoTrackList bcalDocaList =
matches().addBcalDOCAtoTracks(1);
612 bcalDocaList().setShower(loc_j);
613 bcalDocaList().setDeltaphi(locDeltaPhi);
614 bcalDocaList().setDeltaz(locDeltaZ);
617 for(
size_t loc_j = 0; loc_j < fcalshowers.size(); ++loc_j)
619 double locDistance = 0.0;
620 if(!locDetectorMatches[loc_i]->Get_DistanceToNearestTrack(fcalshowers[loc_j], locDistance))
623 hddm_r::FcalDOCAtoTrackList fcalDocaList =
matches().addFcalDOCAtoTracks(1);
624 fcalDocaList().setShower(loc_j);
625 fcalDocaList().setDoca(locDistance);
632 return locWriteStatus;
638 if (locOutputFileNameSubString !=
"")
639 locOutputFileName +=
string(
"_") + locOutputFileNameSubString;
640 return (locOutputFileName +
string(
".hddm"));
645 japp->WriteLock(
"RESTWriter");
652 japp->Unlock(
"RESTWriter");
653 *(locOutputRESTFileStream) << locRecord;
658 pair<ofstream*, hddm_r::ostream*> locRESTFilePointers(NULL, NULL);
659 locRESTFilePointers.first =
new ofstream(locOutputFileName.c_str());
660 if(!locRESTFilePointers.first->is_open())
663 delete locRESTFilePointers.first;
664 japp->Unlock(
"RESTWriter");
667 locRESTFilePointers.second =
new hddm_r::ostream(*locRESTFilePointers.first);
672 jout <<
" Enabling bz2 compression of output HDDM file stream" << std::endl;
673 locRESTFilePointers.second->setCompression(hddm_r::k_bz2_compression);
676 jout <<
" HDDM compression disabled" << std::endl;
681 jout <<
" Enabling CRC data integrity check in output HDDM file stream" << std::endl;
682 locRESTFilePointers.second->setIntegrityChecks(hddm_r::k_crc32_integrity);
685 jout <<
" HDDM integrity checks disabled" << std::endl;
688 hddm_r::HDDM locCommentRecord;
689 hddm_r::ReconstructedPhysicsEventList res = locCommentRecord.addReconstructedPhysicsEvents(1);
690 hddm_r::CommentList comment = res().addComments();
691 comment().setText(
"This is a REST event stream...");
694 hddm_r::DataVersionStringList dataVersionString = res().addDataVersionStrings();
698 hddm_r::CcdbContextList ccdbContextString = res().addCcdbContexts();
701 *(locRESTFilePointers.second) << locCommentRecord;
702 locCommentRecord.clear();
705 *(locRESTFilePointers.second) << locRecord;
710 japp->Unlock(
"RESTWriter");
717 japp->WriteLock(
"RESTWriter");
722 japp->Unlock(
"RESTWriter");
727 map<string, pair<ofstream*, hddm_r::ostream*> >::iterator locIterator;
730 string locOutputFileName = locIterator->first;
731 if (locIterator->second.second != NULL)
732 delete locIterator->second.second;
733 if (locIterator->second.first != NULL)
734 delete locIterator->second.first;
735 std::cout <<
"Closed REST file " << locOutputFileName << std::endl;
739 japp->Unlock(
"RESTWriter");
749 if((locUnsignedInt & 0x80000000) == 0)
750 return int32_t(locUnsignedInt);
753 int32_t locTopBitStripped = int32_t(locUnsignedInt & uint32_t(0x7FFFFFFF));
754 if(locTopBitStripped == 0)
756 return -1*locTopBitStripped;
bool Get_DIRCTrackMatchParamsMap(map< shared_ptr< const DDIRCMatchParams >, vector< const DDIRCPmtHit * > > &locDIRCTrackMatchParamsMap)
bool HDDM_USE_INTEGRITY_CHECKS
TLorentzVector DLorentzVector
static int PDGtype(Particle_t p)
bool Write_RESTEvent(JEventLoop *locEventLoop, string locOutputFileNameSubString) const
string CCDB_CONTEXT_STRING
DEventWriterREST(JEventLoop *locEventLoop, string locOutputFileBaseName)
bool REST_WRITE_DIRC_HITS
int & Get_NumEventWriterThreads(void) const
map< string, pair< ofstream *, hddm_r::ostream * > > & Get_RESTOutputFilePointers(void) const
bool Get_DIRCMatchParams(const DTrackingData *locTrack, shared_ptr< const DDIRCMatchParams > &locMatchParams) const
static int matches(char *d, char *c, t_iostream *fp)
string HDDM_DATA_VERSION_STRING
string dOutputFileBaseName
bool HDDM_USE_COMPRESSION
int32_t Convert_UnsignedIntToSigned(uint32_t locUnsignedInt) const
string Get_OutputFileName(string locOutputFileNameSubString) const