26 #include <JANA/JFactory_base.h>
27 #include <JANA/JEventLoop.h>
28 #include <JANA/JEvent.h>
31 #include <JANA/JGeometryXML.h>
51 return thit1->
z < thit2->
z;
57 return thit1->
z < thit2->
z;
65 : JEventSource(source_name)
68 ifs =
new ifstream(source_name);
70 fin =
new hddm_s::istream(*
ifs);
80 if( (!gPARMS->Exists(
"JANA_CALIB_CONTEXT")) && (getenv(
"JANA_CALIB_CONTEXT")==NULL) ){
81 cout <<
"============================================================" << endl;
82 cout <<
" WARNING: JANA_CALIB_CONTEXT not set. " << endl;
83 cout <<
"You are reading from an HDDM file which is most likely" << endl;
84 cout <<
"MC data. In most cases, you will want to set this parameter" << endl;
85 cout <<
"to get proper reconstruction." << endl;
86 cout <<
"(usually something like \"variation=mc\")" << endl;
87 cout <<
"============================================================" << endl;
110 return EVENT_SOURCE_NOT_OPEN;
114 else if (!
ifs->good()) {
119 return NO_MORE_EVENTS_IN_SOURCE;
122 hddm_s::HDDM *record =
new hddm_s::HDDM();
123 if (! (*
fin >> *record)) {
128 return NO_MORE_EVENTS_IN_SOURCE;
133 int event_number = -1;
137 hddm_s::PhysicsEvent &pe = record->getPhysicsEvent(0);
138 event_number = pe.getEventNo();
139 run_number = pe.getRunNo();
142 event.SetJEventSource(
this);
143 event.SetEventNumber(event_number);
144 event.SetRunNumber(run_number);
145 event.SetRef(record);
158 hddm_s::HDDM *record = (hddm_s::HDDM*)event.GetRef();
174 throw RESOURCE_UNAVAILABLE;
178 string tag = (factory->Tag()==NULL)?
"" : factory->Tag();
181 hddm_s::HDDM *record = (hddm_s::HDDM*)event.GetRef();
183 throw RESOURCE_UNAVAILABLE;
186 JEventLoop *loop =
event.GetJEventLoop();
192 jcalib =
dapp->GetJCalibration(event.GetRunNumber());
195 _DBG_ <<
"ERROR - no jcalib set!" <<endl;
196 return RESOURCE_UNAVAILABLE;
199 vector< map<string, float> > tvals;
200 if(
jcalib->Get(
"FDC/strip_calib", tvals))
201 throw JException(
"Could not load CCDB table: FDC/strip_calib");
203 if (tvals.size() != 192) {
204 _DBG_ <<
"ERROR - strip calibration vectors are not the right size!"
206 return VALUE_OUT_OF_RANGE;
208 map<string,float>::iterator iter;
209 for (iter=tvals[0].begin(); iter!=tvals[0].end(); iter++) {
212 for (
unsigned int i=0; i<tvals.size(); i++) {
213 map<string, float> &row = tvals[i];
220 vector<const DBCALGeometry *> BCALGeomVec;
221 loop->Get(BCALGeomVec);
222 if(BCALGeomVec.size() == 0)
223 throw JException(
"Could not load DBCALGeometry object!");
227 vector<const DPSGeometry*> psGeomVect;
228 loop->Get(psGeomVect);
229 if (psGeomVect.size() < 1)
230 return OBJECT_NOT_AVAILABLE;
243 <<
"WARNING: DEventSourceHDDM cannot currently handle HDDM files containing" << endl
244 <<
"events with multiple runs! If you encounter this error message," << endl
245 <<
"please contact the GlueX Offline Software Group: halld-offline@jlab.org" << endl
252 bool locNewRunNumber =
false;
253 unsigned int locRunNumber =
event.GetRunNumber();
263 double locTargetCenterZ = 0.0;
266 JGeometryXML *jgeom =
dynamic_cast<JGeometryXML *
>(locGeometry);
267 hddm_s::GeometryList geolist = record->getGeometrys();
268 if (jgeom != 0 && geolist.size() > 0) {
269 std::string md5sim = geolist(0).getMd5simulation();
272 geolist(0).setMd5reconstruction(md5recon);
273 if (md5sim != md5smear) {
275 <<
"WARNING: simulation geometry checksum does not match"
276 <<
" that shown for the mcsmear step."
279 else if (md5sim != md5recon) {
281 <<
"WARNING: simulation geometry checksum does not match"
282 <<
" the geometry being used for reconstruction."
287 vector<double> locBeamPeriodVector;
288 if(loop->GetCalib(
"PHOTON_BEAM/RF/beam_period", locBeamPeriodVector))
289 throw runtime_error(
"Could not load CCDB table: PHOTON_BEAM/RF/beam_period");
290 double locBeamBunchPeriod = locBeamPeriodVector[0];
301 string dataClassName = factory->GetDataClassName();
303 if (dataClassName ==
"DPSHit")
305 dynamic_cast<JFactory<DPSHit>*
>(factory), tag);
307 if (dataClassName ==
"DPSTruthHit")
309 dynamic_cast<JFactory<DPSTruthHit>*
>(factory), tag);
311 if (dataClassName ==
"DPSCHit")
313 dynamic_cast<JFactory<DPSCHit>*
>(factory), tag);
315 if (dataClassName ==
"DPSCTruthHit")
317 dynamic_cast<JFactory<DPSCTruthHit>*
>(factory), tag);
319 if (dataClassName ==
"DRFTime")
321 dynamic_cast<JFactory<DRFTime>*
>(factory), loop);
323 if (dataClassName ==
"DTAGMHit")
325 dynamic_cast<JFactory<DTAGMHit>*
>(factory), tag);
327 if (dataClassName ==
"DTAGHHit")
329 dynamic_cast<JFactory<DTAGHHit>*
>(factory), tag);
331 if (dataClassName ==
"DMCTrackHit")
333 dynamic_cast<JFactory<DMCTrackHit>*
>(factory), tag);
335 if (dataClassName ==
"DMCReaction")
337 dynamic_cast<JFactory<DMCReaction>*
>(factory), tag, loop);
339 if (dataClassName ==
"DMCThrown")
341 dynamic_cast<JFactory<DMCThrown>*
>(factory), tag);
343 if (dataClassName ==
"DBCALTruthShower")
345 dynamic_cast<JFactory<DBCALTruthShower>*
>(factory), tag);
347 if (dataClassName ==
"DBCALSiPMSpectrum")
349 dynamic_cast<JFactory<DBCALSiPMSpectrum>*
>(factory), tag);
351 if (dataClassName ==
"DBCALTruthCell")
353 dynamic_cast<JFactory<DBCALTruthCell>*
>(factory), tag);
355 if (dataClassName ==
"DBCALSiPMHit")
357 dynamic_cast<JFactory<DBCALSiPMHit>*
>(factory), tag);
359 if (dataClassName ==
"DBCALDigiHit")
361 dynamic_cast<JFactory<DBCALDigiHit>*
>(factory), tag);
363 if (dataClassName ==
"DBCALIncidentParticle")
365 dynamic_cast<JFactory<DBCALIncidentParticle>*
>(factory), tag);
367 if (dataClassName ==
"DBCALTDCDigiHit")
369 dynamic_cast<JFactory<DBCALTDCDigiHit>*
>(factory), tag);
371 if (dataClassName ==
"DCDCHit")
373 dynamic_cast<JFactory<DCDCHit>*
>(factory) , tag);
375 if (dataClassName ==
"DFDCHit")
377 dynamic_cast<JFactory<DFDCHit>*
>(factory), tag);
379 if (dataClassName ==
"DFCALTruthShower")
381 dynamic_cast<JFactory<DFCALTruthShower>*
>(factory), tag);
383 if (dataClassName ==
"DFCALHit")
385 dynamic_cast<JFactory<DFCALHit>*
>(factory), tag,
386 event.GetJEventLoop());
388 if (dataClassName ==
"DCCALTruthShower")
390 dynamic_cast<JFactory<DCCALTruthShower>*
>(factory), tag);
392 if (dataClassName ==
"DCCALHit")
394 dynamic_cast<JFactory<DCCALHit>*
>(factory), tag,
395 event.GetJEventLoop());
397 if (dataClassName ==
"DMCTrajectoryPoint" && tag ==
"")
399 dynamic_cast<JFactory<DMCTrajectoryPoint>*
>(factory), tag);
401 if (dataClassName ==
"DTOFTruth")
403 dynamic_cast<JFactory<DTOFTruth>*
>(factory), tag);
407 if (dataClassName ==
"DTOFHit") {
408 JFactory_base* factory2 = loop->GetFactory(
"DTOFHitMC", tag.c_str());
410 dynamic_cast<JFactory<DTOFHit>*
>(factory),
411 dynamic_cast<JFactory<DTOFHitMC>*
>(factory2), tag);
413 if (dataClassName ==
"DTOFHitMC") {
414 JFactory_base* factory2 = loop->GetFactory(
"DTOFHit", tag.c_str());
416 dynamic_cast<JFactory<DTOFHit>*
>(factory2),
417 dynamic_cast<JFactory<DTOFHitMC>*
>(factory), tag);
420 if (dataClassName ==
"DSCHit")
422 dynamic_cast<JFactory<DSCHit>*
>(factory), tag);
424 if (dataClassName ==
"DSCTruthHit")
426 dynamic_cast<JFactory<DSCTruthHit>*
>(factory), tag);
428 if (dataClassName ==
"DFMWPCTruthHit")
430 dynamic_cast<JFactory<DFMWPCTruthHit>*
>(factory), tag);
432 if (dataClassName ==
"DFMWPCHit")
434 dynamic_cast<JFactory<DFMWPCHit>*
>(factory), tag);
436 if (dataClassName ==
"DDIRCTruthBarHit")
438 dynamic_cast<JFactory<DDIRCTruthBarHit>*
>(factory), tag);
440 if (dataClassName ==
"DDIRCTruthPmtHit")
442 dynamic_cast<JFactory<DDIRCTruthPmtHit>*
>(factory), tag);
444 if (dataClassName ==
"DDIRCPmtHit")
446 dynamic_cast<JFactory<DDIRCPmtHit>*
>(factory), tag, event.GetJEventLoop());
450 if (dataClassName ==
"DCereHit")
452 dynamic_cast<JFactory<DCereHit>*
>(factory), tag);
454 if (dataClassName ==
"DTPOLHit")
456 dynamic_cast<JFactory<DTPOLHit>*
>(factory), tag);
458 if (dataClassName ==
"DTPOLTruthHit")
460 dynamic_cast<JFactory<DTPOLTruthHit>*
>(factory), tag);
462 return OBJECT_NOT_AVAILABLE;
469 JFactory<DRFTime> *factory, JEventLoop* locEventLoop)
472 return OBJECT_NOT_AVAILABLE;
473 string tag = (factory->Tag())? factory->Tag() :
"";
475 vector<DRFTime*> locRFTimes;
478 const hddm_s::RFtimeList &rftimes = record->getRFtimes();
479 hddm_s::RFtimeList::iterator iter;
480 for (iter = rftimes.begin(); iter != rftimes.end(); ++iter)
482 if (iter->getJtag() != tag)
485 locRFTime->
dTime = iter->getTsync();
487 locRFTimes.push_back(locRFTime);
490 if(!locRFTimes.empty())
493 factory->CopyTo(locRFTimes);
501 vector<const DBeamPhoton*> locMCGENPhotons;
502 locEventLoop->Get(locMCGENPhotons,
"MCGEN");
503 if(locMCGENPhotons.empty())
504 return OBJECT_NOT_AVAILABLE;
513 locRFTime->
dTime = locMCGENPhotons[0]->time();
515 locRFTimes.push_back(locRFTime);
519 double locBeamBunchPeriod = 0.0;
520 int locRunNumber = locEventLoop->GetJEvent().GetRunNumber();
528 double locTime = locMCGENPhotons[0]->time();
529 int locNumRFBuckets = int(locTime/locBeamBunchPeriod);
530 locTime -= double(locNumRFBuckets)*locBeamBunchPeriod;
531 while(locTime > 0.5*locBeamBunchPeriod)
532 locTime -= locBeamBunchPeriod;
533 while(locTime < -0.5*locBeamBunchPeriod)
534 locTime += locBeamBunchPeriod;
537 locRFTime->
dTime = locTime;
539 locRFTimes.push_back(locRFTime);
543 factory->CopyTo(locRFTimes);
552 JFactory<DMCTrackHit> *factory,
string tag)
559 return OBJECT_NOT_AVAILABLE;
561 return OBJECT_NOT_AVAILABLE;
565 vector<DMCTrackHit*> data;
580 for (
unsigned int i=0; i < data.size(); i++)
581 if (!isfinite(data[i]->z))
582 data[i]->z = -1000.0;
589 for (
unsigned int i=0; i < data.size(); i++) {
591 if (mctrackhit->
phi < 0.0)
592 mctrackhit->
phi += 2.0*M_PI;
596 factory->CopyTo(data);
605 vector<DMCTrackHit*>& data)
607 const hddm_s::CdcTruthPointList &points = record->getCdcTruthPoints();
608 hddm_s::CdcTruthPointList::iterator iter;
609 for (iter = points.begin(); iter != points.end(); ++iter) {
611 mctrackhit->
r = iter->getR();
612 mctrackhit->
phi = iter->getPhi();
613 mctrackhit->
z = iter->getZ();
614 mctrackhit->
track = iter->getTrack();
615 mctrackhit->
primary = iter->getPrimary();
616 mctrackhit->
ptype = iter->getPtype();
618 const hddm_s::TrackIDList &ids = iter->getTrackIDs();
619 mctrackhit->
itrack = (ids.size())? ids.begin()->getItrack() : 0;
620 data.push_back(mctrackhit);
630 vector<DMCTrackHit*>& data)
632 const hddm_s::FdcTruthPointList &points = record->getFdcTruthPoints();
633 hddm_s::FdcTruthPointList::iterator iter;
634 for (iter = points.begin(); iter != points.end(); ++iter) {
635 float x = iter->getX();
636 float y = iter->getY();
638 mctrackhit->
r =
sqrt(x*x + y*y);
639 mctrackhit->
phi = atan2(y,x);
640 mctrackhit->
z = iter->getZ();
641 mctrackhit->
track = iter->getTrack();
642 mctrackhit->
primary = iter->getPrimary();
643 mctrackhit->
ptype = iter->getPtype();
645 const hddm_s::TrackIDList &ids = iter->getTrackIDs();
646 mctrackhit->
itrack = (ids.size())? ids.begin()->getItrack() : 0;
647 data.push_back(mctrackhit);
657 vector<DMCTrackHit*>& data)
659 const hddm_s::BcalTruthShowerList &showers = record->getBcalTruthShowers();
660 hddm_s::BcalTruthShowerList::iterator iter;
661 for (iter = showers.begin(); iter != showers.end(); ++iter) {
663 mctrackhit->
r = iter->getR();
664 mctrackhit->
phi = iter->getPhi();
665 mctrackhit->
z = iter->getZ();
666 mctrackhit->
track = iter->getTrack();
667 mctrackhit->
primary = iter->getPrimary();
668 mctrackhit->
ptype = iter->getPtype();
670 const hddm_s::TrackIDList &ids = iter->getTrackIDs();
671 mctrackhit->
itrack = (ids.size())? ids.begin()->getItrack() : 0;
672 data.push_back(mctrackhit);
682 vector<DMCTrackHit*>& data)
684 const hddm_s::FtofTruthPointList &points = record->getFtofTruthPoints();
685 hddm_s::FtofTruthPointList::iterator iter;
686 for (iter = points.begin(); iter != points.end(); ++iter) {
687 float x = iter->getX();
688 float y = iter->getY();
690 mctrackhit->
r =
sqrt(x*x + y*y);
691 mctrackhit->
phi = atan2(y,x);
692 mctrackhit->
z = iter->getZ();
693 mctrackhit->
track = iter->getTrack();
694 mctrackhit->
primary = iter->getPrimary();
695 mctrackhit->
ptype = iter->getPtype();
697 const hddm_s::TrackIDList &ids = iter->getTrackIDs();
698 mctrackhit->
itrack = (ids.size())? ids.begin()->getItrack() : 0;
699 data.push_back(mctrackhit);
710 vector<DMCTrackHit*>& data)
712 const hddm_s::CereTruthPointList &points = record->getCereTruthPoints();
713 hddm_s::CereTruthPointList::iterator iter;
714 for (iter = points.begin(); iter != points.end(); ++iter) {
715 float x = iter->getX();
716 float y = iter->getY();
718 mctrackhit->
r =
sqrt(x*x + y*y);
719 mctrackhit->
phi = atan2(y,x);
720 mctrackhit->
z = iter->getZ();
721 mctrackhit->
track = iter->getTrack();
722 mctrackhit->
primary = iter->getPrimary();
723 mctrackhit->
ptype = iter->getPtype();
725 const hddm_s::TrackIDList &ids = iter->getTrackIDs();
726 mctrackhit->
itrack = (ids.size())? ids.begin()->getItrack() : 0;
727 data.push_back(mctrackhit);
737 vector<DMCTrackHit*>& data)
739 const hddm_s::FcalTruthShowerList &points = record->getFcalTruthShowers();
740 hddm_s::FcalTruthShowerList::iterator iter;
741 for (iter = points.begin(); iter != points.end(); ++iter) {
742 float x = iter->getX();
743 float y = iter->getY();
745 mctrackhit->
r =
sqrt(x*x + y*y);
746 mctrackhit->
phi = atan2(y,x);
747 mctrackhit->
z = iter->getZ();
748 mctrackhit->
track = iter->getTrack();
749 mctrackhit->
primary = iter->getPrimary();
750 mctrackhit->
ptype = iter->getPtype();
752 const hddm_s::TrackIDList &ids = iter->getTrackIDs();
753 mctrackhit->
itrack = (ids.size())? ids.begin()->getItrack() : 0;
754 data.push_back(mctrackhit);
764 vector<DMCTrackHit*>& data)
766 const hddm_s::CcalTruthShowerList &points = record->getCcalTruthShowers();
767 hddm_s::CcalTruthShowerList::iterator iter;
768 for (iter = points.begin(); iter != points.end(); ++iter) {
769 float x = iter->getX();
770 float y = iter->getY();
772 mctrackhit->
r =
sqrt(x*x + y*y);
773 mctrackhit->
phi = atan2(y,x);
774 mctrackhit->
z = iter->getZ();
775 mctrackhit->
track = iter->getTrack();
776 mctrackhit->
primary = iter->getPrimary();
777 mctrackhit->
ptype = iter->getPtype();
779 const hddm_s::TrackIDList &ids = iter->getTrackIDs();
780 mctrackhit->
itrack = (ids.size())? ids.begin()->getItrack() : 0;
781 data.push_back(mctrackhit);
792 vector<DMCTrackHit*>& data)
794 const hddm_s::StcTruthPointList &points = record->getStcTruthPoints();
795 hddm_s::StcTruthPointList::iterator iter;
796 for (iter = points.begin(); iter != points.end(); ++iter) {
798 mctrackhit->
r = iter->getR();
799 mctrackhit->
phi = iter->getPhi();
800 mctrackhit->
z = iter->getZ();
801 mctrackhit->
track = iter->getTrack();
802 mctrackhit->
primary = iter->getPrimary();
803 mctrackhit->
ptype = iter->getPtype();
805 const hddm_s::TrackIDList &ids = iter->getTrackIDs();
806 mctrackhit->
itrack = (ids.size())? ids.begin()->getItrack() : 0;
807 data.push_back(mctrackhit);
817 JFactory<DBCALSiPMHit> *factory,
string tag)
824 return OBJECT_NOT_AVAILABLE;
826 return OBJECT_NOT_AVAILABLE;
828 vector<DBCALSiPMHit*> data;
830 const hddm_s::BcalSiPMUpHitList &uphits = record->getBcalSiPMUpHits();
831 hddm_s::BcalSiPMUpHitList::iterator uiter;
832 for (uiter = uphits.begin(); uiter != uphits.end(); ++uiter) {
834 response->
module = uiter->getModule();
835 response->
layer = uiter->getLayer();
836 response->
sector = uiter->getSector();
837 response->
E = uiter->getE();
838 response->
t = uiter->getT();
843 data.push_back(response);
846 const hddm_s::BcalSiPMDownHitList &downhits = record->getBcalSiPMDownHits();
847 hddm_s::BcalSiPMDownHitList::iterator diter;
848 for (diter = downhits.begin(); diter != downhits.end(); ++diter) {
850 response->
module = diter->getModule();
851 response->
layer = diter->getLayer();
852 response->
sector = diter->getSector();
853 response->
E = diter->getE();
854 response->
t = diter->getT();
859 data.push_back(response);
863 factory->CopyTo(data);
872 JFactory<DBCALDigiHit> *factory,
string tag)
879 return OBJECT_NOT_AVAILABLE;
881 return OBJECT_NOT_AVAILABLE;
883 vector<DBCALDigiHit*> data;
885 const hddm_s::BcalfADCDigiHitList &digihits = record->getBcalfADCDigiHits();
886 hddm_s::BcalfADCDigiHitList::iterator iter;
887 for (iter = digihits.begin(); iter != digihits.end(); ++iter) {
889 response->
module = iter->getModule();
890 response->
layer = iter->getLayer();
891 response->
sector = iter->getSector();
894 if(iter->getBcalfADCPeaks().size() > 0) {
895 response->
pulse_peak = iter->getBcalfADCPeak().getPeakAmp();
897 response->
pulse_time = (uint32_t)iter->getPulse_time();
905 data.push_back(response);
909 factory->CopyTo(data);
918 JFactory<DBCALIncidentParticle> *factory,
926 return OBJECT_NOT_AVAILABLE;
928 return OBJECT_NOT_AVAILABLE;
930 vector<DBCALIncidentParticle*> data;
932 const hddm_s::BcalTruthIncidentParticleList &plist =
933 record->getBcalTruthIncidentParticles();
934 hddm_s::BcalTruthIncidentParticleList::iterator iter;
935 for (iter = plist.begin(); iter != plist.end(); ++iter) {
937 part->
ptype = iter->getPtype();
938 part->
px = iter->getPx();
939 part->
py = iter->getPy();
940 part->
pz = iter->getPz();
941 part->
x = iter->getX();
942 part->
y = iter->getY();
943 part->
z = iter->getZ();
944 data.push_back(part);
947 factory->CopyTo(data);
956 JFactory<DBCALSiPMSpectrum> *factory,
964 return OBJECT_NOT_AVAILABLE;
965 if (tag !=
"" && tag !=
"TRUTH")
966 return OBJECT_NOT_AVAILABLE;
968 vector<DBCALSiPMSpectrum*> data;
970 const hddm_s::BcalSiPMSpectrumList &specs = record->getBcalSiPMSpectrums();
971 hddm_s::BcalSiPMSpectrumList::iterator iter;
972 for (iter = specs.begin(); iter != specs.end(); ++iter) {
974 dana_spectrum->
module = iter->getModule();
975 dana_spectrum->
layer = iter->getLayer();
976 dana_spectrum->
sector = iter->getSector();
977 dana_spectrum->
end = (iter->getEnd()==0)?
982 else if (tag ==
"TRUTH") {
983 const hddm_s::BcalSiPMTruthList &truths = iter->getBcalSiPMTruths();
984 if (truths.size() > 0)
985 dana_spectrum->
incident_id = truths.begin()->getIncident_id();
990 double t = iter->getTstart();
991 double bin_width = iter->getBin_width();
992 stringstream ss(iter->getVals());
996 while (ss >> entry) {
997 if (entry[0] ==
'X') {
999 stringstream
sss(entry.substr(1));
1003 for(
int i=0; i<num_zeros; i++) {
1008 stringstream
sss(entry);
1016 data.push_back(dana_spectrum);
1020 factory->CopyTo(data);
1029 JFactory<DBCALTDCDigiHit> *factory,
string tag)
1035 if (factory == NULL)
1036 return OBJECT_NOT_AVAILABLE;
1038 return OBJECT_NOT_AVAILABLE;
1040 vector<DBCALTDCDigiHit*> data;
1042 const hddm_s::BcalTDCDigiHitList &hits = record->getBcalTDCDigiHits();
1043 hddm_s::BcalTDCDigiHitList::iterator iter;
1044 for (iter = hits.begin(); iter != hits.end(); ++iter) {
1046 bcaltdchit->
module = iter->getModule();
1047 bcaltdchit->
layer = iter->getLayer();
1048 bcaltdchit->
sector = iter->getSector();
1051 bcaltdchit->
time = (uint32_t)iter->getTime();
1052 data.push_back(bcaltdchit);
1056 factory->CopyTo(data);
1065 JFactory<DMCReaction> *factory,
string tag,
1073 return OBJECT_NOT_AVAILABLE;
1075 if (factory == NULL)
1076 return OBJECT_NOT_AVAILABLE;
1078 double locTargetCenterZ = 0.0;
1079 int locRunNumber = loop->GetJEvent().GetRunNumber();
1085 DVector3 locPosition(0.0, 0.0, locTargetCenterZ);
1087 vector<DMCReaction*> dmcreactions;
1089 const hddm_s::ReactionList &reacts = record->getReactions();
1090 hddm_s::ReactionList::iterator iter;
1091 for (iter = reacts.begin(); iter != reacts.end(); ++iter) {
1093 dmcreactions.push_back(mcreaction);
1094 mcreaction->
type = iter->getType();
1095 mcreaction->
weight = iter->getWeight();
1096 hddm_s::Origin &origin = iter->getVertex().getOrigin();
1097 double torig = origin.getT();
1098 double zorig = origin.getVz();
1100 const hddm_s::BeamList &beams = record->getBeams();
1101 if (beams.size() > 0) {
1102 hddm_s::Beam &beam = iter->getBeam();
1103 DVector3 mom(beam.getMomentum().getPx(),
1104 beam.getMomentum().getPy(),
1105 beam.getMomentum().getPz());
1111 mcreaction->
beam.
setTime(torig - (zorig - locTargetCenterZ)/29.9792458);
1119 const hddm_s::TargetList &targets = record->getTargets();
1120 if (targets.size() > 0) {
1123 DVector3 mom(target.getMomentum().getPx(),
1124 target.getMomentum().getPy(),
1125 target.getMomentum().getPz());
1129 target.getProperties().getMass()));
1130 mcreaction->
target.
setTime(torig - (zorig - locTargetCenterZ)/29.9792458);
1141 factory->CopyTo(dmcreactions);
1150 JFactory<DMCThrown> *factory,
string tag)
1156 if (factory == NULL)
1157 return OBJECT_NOT_AVAILABLE;
1159 return OBJECT_NOT_AVAILABLE;
1161 vector<DMCThrown*> data;
1163 const hddm_s::VertexList &verts = record->getVertices();
1164 hddm_s::VertexList::iterator iter;
1165 for (iter = verts.begin(); iter != verts.end(); ++iter) {
1166 const hddm_s::OriginList &origs = iter->getOrigins();
1167 const hddm_s::ProductList &prods = iter->getProducts();
1168 double vertex[4] = {0., 0., 0., 0.};
1169 if (origs.size() > 0) {
1170 vertex[0] = iter->getOrigin().getT();
1171 vertex[1] = iter->getOrigin().getVx();
1172 vertex[2] = iter->getOrigin().getVy();
1173 vertex[3] = iter->getOrigin().getVz();
1175 hddm_s::ProductList::iterator piter;
1176 for (piter = prods.begin(); piter != prods.end(); ++piter) {
1177 double E = piter->getMomentum().getE();
1178 double px = piter->getMomentum().getPx();
1179 double py = piter->getMomentum().getPy();
1180 double pz = piter->getMomentum().getPz();
1181 double mass =
sqrt(E*E - (px*px + py*py + pz*pz));
1182 if (!isfinite(mass))
1185 mcthrown->
type = piter->getType();
1186 mcthrown->
myid = piter->getId();
1187 mcthrown->
parentid = piter->getParentid();
1188 mcthrown->
mech = piter->getMech();
1189 mcthrown->
pdgtype = piter->getPdgtype();
1194 data.push_back(mcthrown);
1199 factory->CopyTo(data);
1208 JFactory<DCDCHit> *factory,
string tag)
1214 if (factory == NULL)
1215 return OBJECT_NOT_AVAILABLE;
1222 if (tag !=
"TRUTH" && tag !=
"Calib")
1223 return OBJECT_NOT_AVAILABLE;
1225 vector<DCDCHit*> data;
1227 if ( tag ==
"" || tag ==
"Calib" ) {
1228 vector<const DCDCHit*> locTruthHits;
1229 locEventLoop->Get(locTruthHits,
"TRUTH");
1232 map<pair<int, int>, vector<const DCDCHit*>> locTruthHitMap;
1233 for(
auto& locTruthHit : locTruthHits)
1234 locTruthHitMap[std::make_pair(locTruthHit->ring, locTruthHit->straw)].push_back(locTruthHit);
1236 const hddm_s::CdcStrawHitList &hits = record->getCdcStrawHits();
1237 hddm_s::CdcStrawHitList::iterator iter;
1239 for (iter = hits.begin(); iter != hits.end(); ++iter) {
1241 hit->
ring = iter->getRing();
1242 hit->
straw = iter->getStraw();
1243 hit->
q = iter->getQ();
1244 hit->
t = iter->getT();
1245 if(iter->getCdcDigihits().size() > 0) {
1246 hit->
amp = iter->getCdcDigihit().getPeakAmp();
1254 if(iter->getCdcHitQFs().size() > 0) {
1255 hit->
QF = iter->getCdcHitQF().getQF();
1262 auto& locPotentialTruthHits = locTruthHitMap[std::make_pair(hit->
ring, hit->
straw)];
1263 double locBestDeltaT = 9.9E99;
1264 const DCDCHit* locBestTruthHit =
nullptr;
1265 for(
auto& locTruthHit : locPotentialTruthHits)
1267 auto locDeltaT = fabs(hit->
t - locTruthHit->t);
1268 if(locDeltaT >= locBestDeltaT)
1270 locBestDeltaT = locDeltaT;
1271 locBestTruthHit = locTruthHit;
1273 if(locBestTruthHit !=
nullptr)
1274 hit->AddAssociatedObject(locBestTruthHit);
1276 data.push_back(hit);
1280 else if (tag ==
"TRUTH") {
1281 const hddm_s::CdcStrawTruthHitList &thits = record->getCdcStrawTruthHits();
1282 hddm_s::CdcStrawTruthHitList::iterator iter;
1283 for (iter = thits.begin(); iter != thits.end(); ++iter) {
1285 hit->
ring = iter->getRing();
1286 hit->
straw = iter->getStraw();
1287 hit->
q = iter->getQ();
1288 hit->
t = iter->getT();
1289 hit->
d = iter->getD();
1290 hit->
itrack = iter->getItrack();
1291 hit->
ptype = iter->getPtype();
1292 data.push_back(hit);
1297 factory->CopyTo(data);
1307 JFactory<DFDCHit> *factory,
string tag)
1313 if (factory == NULL)
1314 return OBJECT_NOT_AVAILABLE;
1315 if (tag !=
"" && tag !=
"TRUTH" && tag !=
"CALIB")
1316 return OBJECT_NOT_AVAILABLE;
1318 vector<DFDCHit*> data;
1321 const hddm_s::FdcAnodeHitList &ahits = record->getFdcAnodeHits();
1322 hddm_s::FdcAnodeHitList::iterator ahiter;
1323 for (ahiter = ahits.begin(); ahiter != ahits.end(); ++ahiter) {
1325 newHit->
layer = ahiter->getLayer();
1326 newHit->
module = ahiter->getModule();
1327 newHit->
element = ahiter->getWire();
1328 newHit->
q = ahiter->getDE();
1330 newHit->
t = ahiter->getT();
1339 data.push_back(newHit);
1343 const hddm_s::FdcCathodeHitList &chits = record->getFdcCathodeHits();
1344 hddm_s::FdcCathodeHitList::iterator chiter;
1345 for (chiter = chits.begin(); chiter != chits.end(); ++chiter) {
1347 newHit->
layer = chiter->getLayer();
1348 newHit->
module = chiter->getModule();
1349 newHit->
element = chiter->getStrip();
1352 newHit->
plane = chiter->getPlane();
1353 newHit->
q = chiter->getQ();
1355 if(chiter->getFdcDigihits().size() > 0) {
1356 newHit->
pulse_height = chiter->getFdcDigihit().getPeakAmp();
1358 newHit->
t = chiter->getT();
1366 data.push_back(newHit);
1370 else if (tag ==
"TRUTH"){
1371 const hddm_s::FdcAnodeTruthHitList &aths = record->getFdcAnodeTruthHits();
1372 hddm_s::FdcAnodeTruthHitList::iterator atiter;
1373 for (atiter = aths.begin(); atiter != aths.end(); ++atiter) {
1375 newHit->
layer = atiter->getLayer();
1376 newHit->
module = atiter->getModule();
1377 newHit->
element = atiter->getWire();
1378 newHit->
q = atiter->getDE();
1380 newHit->
t = atiter->getT();
1381 newHit->
d = atiter->getD();
1382 newHit->
itrack = atiter->getItrack();
1383 newHit->
ptype = atiter->getPtype();
1389 data.push_back(newHit);
1393 const hddm_s::FdcCathodeTruthHitList &cths =
1394 record->getFdcCathodeTruthHits();
1395 hddm_s::FdcCathodeTruthHitList::iterator ctiter;
1396 for (ctiter = cths.begin(); ctiter != cths.end(); ++ctiter) {
1398 newHit->
layer = ctiter->getLayer();
1399 newHit->
module = ctiter->getModule();
1400 newHit->
element = ctiter->getStrip();
1403 newHit->
plane = ctiter->getPlane();
1404 newHit->
q = ctiter->getQ();
1406 newHit->
t = ctiter->getT();
1408 newHit->
itrack = ctiter->getItrack();
1409 newHit->
ptype = ctiter->getPtype();
1414 data.push_back(newHit);
1418 else if (tag ==
"CALIB") {
1420 const hddm_s::FdcAnodeHitList &ahits = record->getFdcAnodeHits();
1421 hddm_s::FdcAnodeHitList::iterator ahiter;
1422 for (ahiter = ahits.begin(); ahiter != ahits.end(); ++ahiter) {
1424 newHit->
layer = ahiter->getLayer();
1425 newHit->
module = ahiter->getModule();
1426 newHit->
element = ahiter->getWire();
1427 newHit->
q = ahiter->getDE();
1428 newHit->
t = ahiter->getT();
1437 data.push_back(newHit);
1441 const hddm_s::FdcCathodeHitList &chits = record->getFdcCathodeHits();
1442 hddm_s::FdcCathodeHitList::iterator chiter;
1443 for (chiter = chits.begin(); chiter != chits.end(); ++chiter) {
1445 newHit->
layer = chiter->getLayer();
1446 newHit->
module = chiter->getModule();
1447 newHit->
element = chiter->getStrip();
1450 newHit->
plane = chiter->getPlane();
1451 if (newHit->
plane == 1)
1455 newHit->
t = chiter->getT();
1463 data.push_back(newHit);
1468 factory->CopyTo(data);
1477 JFactory<DBCALTruthShower> *factory,
1484 if (factory == NULL)
1485 return OBJECT_NOT_AVAILABLE;
1487 return OBJECT_NOT_AVAILABLE;
1489 vector<DBCALTruthShower*> data;
1491 const hddm_s::BcalTruthShowerList &shows = record->getBcalTruthShowers();
1492 hddm_s::BcalTruthShowerList::iterator iter;
1493 for (iter = shows.begin(); iter != shows.end(); ++iter) {
1495 bcaltruth->
track = iter->getTrack();
1496 bcaltruth->
ptype = iter->getPtype();
1497 bcaltruth->
primary = (iter->getPrimary())? 1 : 0;
1498 bcaltruth->
phi = iter->getPhi();
1499 bcaltruth->
r = iter->getR();
1500 bcaltruth->
z = iter->getZ();
1501 bcaltruth->
t = iter->getT();
1502 bcaltruth->
E = iter->getE();
1503 bcaltruth->
px = iter->getPx();
1504 bcaltruth->
py = iter->getPy();
1505 bcaltruth->
pz = iter->getPz();
1506 const hddm_s::TrackIDList &ids = iter->getTrackIDs();
1507 bcaltruth->
itrack = (ids.size())? ids.begin()->getItrack() : 0;
1508 data.push_back(bcaltruth);
1512 factory->CopyTo(data);
1521 JFactory<DBCALTruthCell> *factory,
1528 if (factory == NULL)
1529 return OBJECT_NOT_AVAILABLE;
1531 return OBJECT_NOT_AVAILABLE;
1533 vector<DBCALTruthCell*> data;
1535 const hddm_s::BcalTruthHitList &hits = record->getBcalTruthHits();
1536 hddm_s::BcalTruthHitList::iterator hiter;
1537 for (hiter = hits.begin(); hiter != hits.end(); ++hiter) {
1539 truthcell->
module = hiter->getModule();
1540 truthcell->
layer = hiter->getLayer();
1541 truthcell->
sector = hiter->getSector();
1542 truthcell->
E = hiter->getE();
1543 truthcell->
t = hiter->getT();
1544 truthcell->
zLocal = hiter->getZLocal();
1545 data.push_back(truthcell);
1549 factory->CopyTo(data);
1558 JFactory<DFCALTruthShower> *factory,
1565 if (factory == NULL)
1566 return OBJECT_NOT_AVAILABLE;
1568 return OBJECT_NOT_AVAILABLE;
1570 vector<DFCALTruthShower*> data;
1571 JObject::oid_t
id=1;
1573 const hddm_s::FcalTruthShowerList &shows = record->getFcalTruthShowers();
1574 hddm_s::FcalTruthShowerList::iterator iter;
1575 for (iter = shows.begin(); iter != shows.end(); ++iter) {
1576 const hddm_s::TrackIDList &ids = iter->getTrackIDs();
1577 int itrack = (ids.size())? ids.begin()->getItrack() : 0;
1593 data.push_back(dfcaltruthshower);
1597 factory->CopyTo(data);
1606 JFactory<DFCALHit> *factory,
string tag,
1607 JEventLoop* eventLoop)
1613 if (factory == NULL)
1614 return OBJECT_NOT_AVAILABLE;
1615 if (tag !=
"" && tag !=
"TRUTH")
1616 return OBJECT_NOT_AVAILABLE;
1619 vector<const DFCALGeometry*> fcalGeomVect;
1620 eventLoop->Get( fcalGeomVect );
1621 if (fcalGeomVect.size() < 1)
1622 return OBJECT_NOT_AVAILABLE;
1625 vector<DFCALHit*> data;
1628 const hddm_s::FcalHitList &hits = record->getFcalHits();
1629 hddm_s::FcalHitList::iterator iter;
1630 for (iter = hits.begin(); iter != hits.end(); ++iter) {
1631 int row = iter->getRow();
1632 int column = iter->getColumn();
1647 mchit->
E = iter->getE();
1648 mchit->
t = iter->getT();
1650 if(iter->getFcalDigihits().size() > 0) {
1651 mchit->
intOverPeak = iter->getFcalDigihit().getIntegralOverPeak();
1653 data.push_back(mchit);
1656 else if (tag ==
"TRUTH") {
1657 const hddm_s::FcalTruthHitList &hits = record->getFcalTruthHits();
1658 hddm_s::FcalTruthHitList::iterator iter;
1659 for (iter = hits.begin(); iter != hits.end(); ++iter) {
1660 int row = iter->getRow();
1661 int column = iter->getColumn();
1676 mchit->
E = iter->getE();
1677 mchit->
t = iter->getT();
1679 data.push_back(mchit);
1684 factory->CopyTo(data);
1693 JFactory<DCCALTruthShower> *factory,
1700 if (factory == NULL)
1701 return OBJECT_NOT_AVAILABLE;
1703 return OBJECT_NOT_AVAILABLE;
1705 vector<DCCALTruthShower*> data;
1706 JObject::oid_t
id=1;
1708 const hddm_s::CcalTruthShowerList &shows = record->getCcalTruthShowers();
1709 hddm_s::CcalTruthShowerList::iterator iter;
1710 for (iter = shows.begin(); iter != shows.end(); ++iter) {
1711 const hddm_s::TrackIDList &ids = iter->getTrackIDs();
1712 int itrack = (ids.size())? ids.begin()->getItrack() : 0;
1728 data.push_back(dccaltruthshower);
1732 factory->CopyTo(data);
1741 JFactory<DCCALHit> *factory,
string tag,
1742 JEventLoop* eventLoop)
1748 if (factory == NULL)
1749 return OBJECT_NOT_AVAILABLE;
1750 if (tag !=
"" && tag !=
"TRUTH")
1751 return OBJECT_NOT_AVAILABLE;
1754 vector<const DCCALGeometry*> ccalGeomVect;
1755 eventLoop->Get( ccalGeomVect );
1756 if (ccalGeomVect.size() < 1)
1757 return OBJECT_NOT_AVAILABLE;
1760 vector<DCCALHit*> data;
1764 const hddm_s::CcalHitList &hits = record->getCcalHits();
1765 hddm_s::CcalHitList::iterator iter;
1766 for (iter = hits.begin(); iter != hits.end(); ++iter) {
1767 int row = iter->getRow();
1768 int column = iter->getColumn();
1783 mchit->
E = iter->getE();
1784 mchit->
t = iter->getT();
1785 mchit->id = hitId++;
1786 data.push_back(mchit);
1790 else if (tag ==
"TRUTH") {
1791 const hddm_s::CcalTruthHitList &hits = record->getCcalTruthHits();
1792 hddm_s::CcalTruthHitList::iterator iter;
1793 for (iter = hits.begin(); iter != hits.end(); ++iter) {
1794 int row = iter->getRow();
1795 int column = iter->getColumn();
1810 mchit->
E = iter->getE();
1811 mchit->
t = iter->getT();
1812 mchit->id = hitId++;
1813 data.push_back(mchit);
1818 factory->CopyTo(data);
1827 JFactory<DMCTrajectoryPoint> *factory,
1834 if (factory == NULL)
1835 return OBJECT_NOT_AVAILABLE;
1837 return OBJECT_NOT_AVAILABLE;
1839 vector<DMCTrajectoryPoint*> data;
1841 const hddm_s::McTrajectoryPointList &pts = record->getMcTrajectoryPoints();
1842 hddm_s::McTrajectoryPointList::iterator iter;
1843 for (iter = pts.begin(); iter != pts.end(); ++iter) {
1845 p->
x = iter->getX();
1846 p->
y = iter->getY();
1847 p->
z = iter->getZ();
1848 p->
t = iter->getT();
1849 p->
px = iter->getPx();
1850 p->
py = iter->getPy();
1851 p->
pz = iter->getPz();
1852 p->
E = iter->getE();
1853 p->
dE = iter->getDE();
1855 p->
track = iter->getTrack();
1856 p->
part = iter->getPart();
1857 p->
radlen = iter->getRadlen();
1858 p->
step = iter->getStep();
1859 p->
mech = iter->getMech();
1864 factory->CopyTo(data);
1873 JFactory<DTOFTruth>* factory,
string tag)
1879 if (factory == NULL)
1880 return OBJECT_NOT_AVAILABLE;
1882 return OBJECT_NOT_AVAILABLE;
1884 vector<DTOFTruth*> data;
1886 const hddm_s::FtofTruthPointList &points = record->getFtofTruthPoints();
1887 hddm_s::FtofTruthPointList::iterator iter;
1888 for (iter = points.begin(); iter != points.end(); ++iter) {
1890 toftruth->
primary = iter->getPrimary();
1891 toftruth->
track = iter->getTrack();
1892 toftruth->
x = iter->getX();
1893 toftruth->
y = iter->getY();
1894 toftruth->
z = iter->getZ();
1895 toftruth->
t = iter->getT();
1896 toftruth->
px = iter->getPx();
1897 toftruth->
py = iter->getPy();
1898 toftruth->
pz = iter->getPz();
1899 toftruth->
E = iter->getE();
1900 toftruth->
ptype = iter->getPtype();
1901 const hddm_s::TrackIDList &ids = iter->getTrackIDs();
1902 toftruth->
itrack = (ids.size())? ids.begin()->getItrack() : 0;
1903 data.push_back(toftruth);
1907 factory->CopyTo(data);
1916 JFactory<DTOFHit>* factory,
1917 JFactory<DTOFHitMC> *factoryMC,
1924 if (factory == NULL)
1925 return OBJECT_NOT_AVAILABLE;
1926 if (tag !=
"" && tag !=
"TRUTH")
1927 return OBJECT_NOT_AVAILABLE;
1929 vector<DTOFHit*> data;
1930 vector<DTOFHitMC*> dataMC;
1932 const hddm_s::FtofCounterList &ctrs = record->getFtofCounters();
1933 hddm_s::FtofCounterList::iterator iter;
1934 for (iter = ctrs.begin(); iter != ctrs.end(); ++iter) {
1936 vector<DTOFHit*> north_hits;
1937 vector<DTOFHit*> south_hits;
1940 const hddm_s::FtofHitList &hits = iter->getFtofHits();
1941 hddm_s::FtofHitList::iterator hiter;
1942 for (hiter = hits.begin(); hiter != hits.end(); ++hiter) {
1944 tofhit->
bar = hiter->getBar();
1945 tofhit->
plane = hiter->getPlane();
1946 tofhit->
end = hiter->getEnd();
1947 tofhit->
dE = hiter->getDE();
1949 if(hiter->getFtofDigihits().size() > 0) {
1950 tofhit->
Amp = hiter->getFtofDigihit().getPeakAmp();
1952 tofhit->
t = hiter->getT();
1953 tofhit->
t_TDC = tofhit->
t;
1957 data.push_back(tofhit);
1958 if (tofhit->
end == 0)
1959 north_hits.push_back(tofhit);
1961 south_hits.push_back(tofhit);
1965 const hddm_s::FtofTruthHitList &truths = iter->getFtofTruthHits();
1966 hddm_s::FtofTruthHitList::iterator titer;
1967 unsigned int north_mchits = 0;
1968 unsigned int south_mchits = 0;
1969 for (titer = truths.begin(); titer != truths.end(); ++titer) {
1971 tofmchit->
bar = titer->getBar();
1972 tofmchit->
plane = titer->getPlane();
1973 tofmchit->
end = titer->getEnd();
1974 tofmchit->
itrack = titer->getFtofTruthExtra(0).getItrack();
1975 tofmchit->
ptype = titer->getFtofTruthExtra(0).getPtype();
1976 tofmchit->
dist = titer->getFtofTruthExtra(0).getDist();
1977 tofmchit->
x = titer->getFtofTruthExtra(0).getX();
1978 tofmchit->
y = titer->getFtofTruthExtra(0).getY();
1979 tofmchit->
z = titer->getFtofTruthExtra(0).getZ();
1980 tofmchit->
px = titer->getFtofTruthExtra(0).getPx();
1981 tofmchit->
py = titer->getFtofTruthExtra(0).getPy();
1982 tofmchit->
pz = titer->getFtofTruthExtra(0).getPz();
1983 tofmchit->
E = titer->getFtofTruthExtra(0).getE();
1984 dataMC.push_back(tofmchit);
1987 if (tofmchit->
end == 0) {
1988 if (north_mchits < north_hits.size()) {
1989 north_hits[north_mchits]->AddAssociatedObject(tofmchit);
1994 if (south_mchits < south_hits.size()) {
1995 south_hits[south_mchits]->AddAssociatedObject(tofmchit);
2002 else if (tag ==
"TRUTH") {
2003 const hddm_s::FtofTruthHitList &truths = iter->getFtofTruthHits();
2004 hddm_s::FtofTruthHitList::iterator titer;
2005 for (titer = truths.begin(); titer != truths.end(); ++titer) {
2007 tofhit->
bar = titer->getBar();
2008 tofhit->
plane = titer->getPlane();
2009 tofhit->
end = titer->getEnd();
2010 tofhit->
dE = titer->getDE();
2011 tofhit->
t = titer->getT();
2013 tofhit->
t_TDC = tofhit->
t;
2016 data.push_back(tofhit);
2019 tofmchit->
bar = tofhit->
bar;
2021 tofmchit->
end = tofhit->
end;
2022 tofmchit->
itrack = titer->getFtofTruthExtra().getItrack();
2023 tofmchit->
ptype = titer->getFtofTruthExtra().getPtype();
2024 tofmchit->
dist = titer->getFtofTruthExtra().getDist();
2025 tofmchit->
x = titer->getFtofTruthExtra().getX();
2026 tofmchit->
y = titer->getFtofTruthExtra().getY();
2027 tofmchit->
z = titer->getFtofTruthExtra().getZ();
2028 tofmchit->
px = titer->getFtofTruthExtra().getPx();
2029 tofmchit->
py = titer->getFtofTruthExtra().getPy();
2030 tofmchit->
pz = titer->getFtofTruthExtra().getPz();
2031 tofmchit->
E = titer->getFtofTruthExtra().getE();
2032 dataMC.push_back(tofmchit);
2033 tofhit->AddAssociatedObject(tofmchit);
2039 factory->CopyTo(data);
2040 factoryMC->CopyTo(dataMC);
2049 JFactory<DSCHit>* factory,
string tag)
2055 if (factory == NULL)
2056 return OBJECT_NOT_AVAILABLE;
2057 if (tag !=
"" && tag !=
"TRUTH")
2058 return OBJECT_NOT_AVAILABLE;
2060 vector<DSCHit*> data;
2063 const hddm_s::StcHitList &hits = record->getStcHits();
2064 hddm_s::StcHitList::iterator iter;
2065 for (iter = hits.begin(); iter != hits.end(); ++iter) {
2067 hit->
sector = iter->getSector();
2068 hit->
dE = iter->getDE();
2069 hit->
t = iter->getT();
2073 if(iter->getStcDigihits().size() > 0) {
2074 hit->
pulse_height = iter->getStcDigihit().getPeakAmp();
2078 data.push_back(hit);
2081 else if (tag ==
"TRUTH") {
2082 const hddm_s::StcTruthHitList &hits = record->getStcTruthHits();
2083 hddm_s::StcTruthHitList::iterator iter;
2084 for (iter = hits.begin(); iter != hits.end(); ++iter) {
2086 hit->
sector = iter->getSector();
2087 hit->
dE = iter->getDE();
2088 hit->
t = iter->getT();
2093 data.push_back(hit);
2098 factory->CopyTo(data);
2107 JFactory<DSCTruthHit>* factory,
string tag)
2113 if (factory == NULL)
2114 return OBJECT_NOT_AVAILABLE;
2116 return OBJECT_NOT_AVAILABLE;
2118 vector<DSCTruthHit*> data;
2120 const hddm_s::StcTruthPointList &points = record->getStcTruthPoints();
2121 hddm_s::StcTruthPointList::iterator iter;
2122 for (iter = points.begin(); iter != points.end(); ++iter) {
2124 hit->
dEdx = iter->getDEdx();
2125 hit->
phi = iter->getPhi();
2126 hit->
primary = iter->getPrimary();
2127 hit->
ptype = iter->getPtype();
2128 hit->
r = iter->getR();
2129 hit->
t = iter->getT();
2130 hit->
z = iter->getZ();
2131 hit->
track = iter->getTrack();
2132 hit->
sector = iter->getSector();
2133 const hddm_s::TrackIDList &ids = iter->getTrackIDs();
2134 hit->
itrack = (ids.size())? ids.begin()->getItrack() : 0;
2135 data.push_back(hit);
2139 factory->CopyTo(data);
2148 JFactory<DTrackTimeBased> *factory,
2149 string tag, int32_t runnumber, JEventLoop* locEventLoop)
2157 if (factory == NULL)
2158 return OBJECT_NOT_AVAILABLE;
2160 return OBJECT_NOT_AVAILABLE;
2162 vector<DTrackTimeBased*> data;
2163 vector<DReferenceTrajectory*> rts;
2165 const hddm_s::TracktimebasedList &ttbs = record->getTracktimebaseds();
2166 hddm_s::TracktimebasedList::iterator iter;
2167 for (iter = ttbs.begin(); iter != ttbs.end(); ++iter) {
2168 DVector3 mom(iter->getMomentum().getPx(),
2169 iter->getMomentum().getPy(),
2170 iter->getMomentum().getPz());
2171 DVector3 pos(iter->getOrigin().getVx(),
2172 iter->getOrigin().getVy(),
2173 iter->getOrigin().getVz());
2175 track->setMomentum(mom);
2176 track->setPosition(pos);
2177 track->setPID(
IDTrack(iter->getProperties().getCharge(),
2178 iter->getProperties().getMass()));
2179 track->chisq = iter->getChisq();
2180 track->Ndof = iter->getNdof();
2181 track->FOM = iter->getFOM();
2182 track->candidateid = iter->getCandidateid();
2183 track->id = iter->getId();
2187 locCovarianceMatrix->ResizeTo(7, 7);
2188 string str_vals = iter->getErrorMatrix().getVals();
2190 iter->getErrorMatrix().getNrows(),
2191 iter->getErrorMatrix().getNcols());
2192 track->setErrorMatrix(locCovarianceMatrix);
2195 str_vals = iter->getTrackingErrorMatrix().getVals();
2197 TrackingErrorMatrix->ResizeTo(5, 5);
2199 iter->getTrackingErrorMatrix().getNrows(),
2200 iter->getTrackingErrorMatrix().getNcols());
2201 track->setTrackingErrorMatrix(TrackingErrorMatrix);
2203 data.push_back(track);
2207 if (ttbs.size() > 0){
2208 factory->CopyTo(data);
2218 return OBJECT_NOT_AVAILABLE;
2226 int Nrows,
int Ncols)
2232 mat->ResizeTo(Nrows, Ncols);
2233 stringstream ss(str_vals);
2234 for (
int irow=0; irow<mat->GetNrows(); irow++) {
2235 for (
int icol=irow; icol<mat->GetNcols(); icol++) {
2236 ss >> (*mat)[irow][icol];
2237 (*mat)[icol][irow] = (*mat)[irow][icol];
2248 JFactory<DTAGMHit>* factory,
2255 if (factory == NULL)
2256 return OBJECT_NOT_AVAILABLE;
2257 if (tag !=
"" && tag !=
"TRUTH")
2258 return OBJECT_NOT_AVAILABLE;
2260 vector<DTAGMHit*> data;
2263 const hddm_s::MicroChannelList &tags = record->getMicroChannels();
2264 hddm_s::MicroChannelList::iterator iter;
2265 for (iter = tags.begin(); iter != tags.end(); ++iter) {
2267 const hddm_s::TaggerHitList &hits = iter->getTaggerHits();
2268 hddm_s::TaggerHitList::iterator hiter;
2269 for (hiter = hits.begin(); hiter != hits.end(); ++hiter) {
2271 taghit->
E = hiter->getE();
2272 taghit->
t = hiter->getT();
2275 taghit->
column = hiter->getColumn();
2276 taghit->
row = hiter->getRow();
2279 data.push_back(taghit);
2282 else if (tag ==
"TRUTH") {
2283 const hddm_s::TaggerTruthHitList &hits = iter->getTaggerTruthHits();
2284 hddm_s::TaggerTruthHitList::iterator hiter;
2285 for (hiter = hits.begin(); hiter != hits.end(); ++hiter) {
2287 taghit->
E = hiter->getE();
2288 taghit->
t = hiter->getT();
2289 taghit->
npix_fadc = hiter->getDE() * 1e5;
2291 taghit->
column = hiter->getColumn();
2292 taghit->
row = hiter->getRow();
2295 taghit->
bg = hiter->getBg();
2296 data.push_back(taghit);
2302 factory->CopyTo(data);
2311 JFactory<DTAGHHit>* factory,
2318 if (factory == NULL)
2319 return OBJECT_NOT_AVAILABLE;
2320 if (tag !=
"" && tag !=
"TRUTH")
2321 return OBJECT_NOT_AVAILABLE;
2323 vector<DTAGHHit*> data;
2326 const hddm_s::HodoChannelList &tags = record->getHodoChannels();
2327 hddm_s::HodoChannelList::iterator iter;
2328 for (iter = tags.begin(); iter != tags.end(); ++iter) {
2330 const hddm_s::TaggerHitList &hits = iter->getTaggerHits();
2331 hddm_s::TaggerHitList::iterator hiter;
2332 for (hiter = hits.begin(); hiter != hits.end(); ++hiter) {
2334 taghit->
E = hiter->getE();
2335 taghit->
t = hiter->getT();
2336 taghit->
npe_fadc = hiter->getNpe();
2341 data.push_back(taghit);
2344 else if (tag ==
"TRUTH") {
2345 const hddm_s::TaggerTruthHitList &hits = iter->getTaggerTruthHits();
2346 hddm_s::TaggerTruthHitList::iterator hiter;
2347 for (hiter = hits.begin(); hiter != hits.end(); ++hiter) {
2349 taghit->
E = hiter->getE();
2350 taghit->
t = hiter->getT();
2351 taghit->
npe_fadc = hiter->getDE() * 5e5;
2356 taghit->
bg = hiter->getBg();
2358 data.push_back(taghit);
2364 factory->CopyTo(data);
2373 JFactory<DPSHit>* factory,
string tag)
2379 if (factory == NULL)
2380 return OBJECT_NOT_AVAILABLE;
2381 if (tag !=
"" && tag !=
"TRUTH")
2382 return OBJECT_NOT_AVAILABLE;
2384 vector<DPSHit*> data;
2387 const hddm_s::PsHitList &hits = record->getPsHits();
2388 hddm_s::PsHitList::iterator iter;
2389 for (iter = hits.begin(); iter != hits.end(); ++iter) {
2391 if(iter->getArm() == 0)
2392 hit->
arm = DPSGeometry::Arm::kNorth;
2394 hit->
arm = DPSGeometry::Arm::kSouth;
2395 hit->
column = iter->getColumn();
2396 double npix_fadc = iter->getDE()*0.5e5;
2398 hit->
t = iter->getT();
2403 data.push_back(hit);
2406 else if (tag ==
"TRUTH") {
2407 const hddm_s::PsTruthHitList &hits = record->getPsTruthHits();
2408 hddm_s::PsTruthHitList::iterator iter;
2409 for (iter = hits.begin(); iter != hits.end(); ++iter) {
2411 if(iter->getArm() == 0)
2412 hit->
arm = DPSGeometry::Arm::kNorth;
2414 hit->
arm = DPSGeometry::Arm::kSouth;
2415 hit->
column = iter->getColumn();
2417 hit->
t = iter->getT();
2418 data.push_back(hit);
2423 factory->CopyTo(data);
2432 JFactory<DPSTruthHit>* factory,
string tag)
2438 if (factory == NULL)
2439 return OBJECT_NOT_AVAILABLE;
2441 return OBJECT_NOT_AVAILABLE;
2443 vector<DPSTruthHit*> data;
2445 const hddm_s::PsTruthPointList &points = record->getPsTruthPoints();
2446 hddm_s::PsTruthPointList::iterator iter;
2447 for (iter = points.begin(); iter != points.end(); ++iter) {
2449 hit->
dEdx = iter->getDEdx();
2450 hit->
primary = iter->getPrimary();
2451 hit->
ptype = iter->getPtype();
2452 hit->
t = iter->getT();
2453 hit->
x = iter->getX();
2454 hit->
y = iter->getY();
2455 hit->
z = iter->getZ();
2456 hit->
track = iter->getTrack();
2457 hit->
column = iter->getColumn();
2458 const hddm_s::TrackIDList &ids = iter->getTrackIDs();
2459 hit->
itrack = (ids.size())? ids.begin()->getItrack() : 0;
2460 data.push_back(hit);
2464 factory->CopyTo(data);
2473 JFactory<DPSCHit>* factory,
string tag)
2479 if (factory == NULL)
2480 return OBJECT_NOT_AVAILABLE;
2481 if (tag !=
"" && tag !=
"TRUTH")
2482 return OBJECT_NOT_AVAILABLE;
2484 vector<DPSCHit*> data;
2487 const hddm_s::PscHitList &hits = record->getPscHits();
2488 hddm_s::PscHitList::iterator iter;
2489 for (iter = hits.begin(); iter != hits.end(); ++iter) {
2491 if(iter->getArm() == 0)
2492 hit->
arm = DPSGeometry::Arm::kNorth;
2494 hit->
arm = DPSGeometry::Arm::kSouth;
2495 hit->
module = iter->getModule();
2497 double npe_fadc = iter->getDE()*2.5e5;
2502 hit->
t = iter->getT();
2509 data.push_back(hit);
2512 else if (tag ==
"TRUTH") {
2513 const hddm_s::PscTruthHitList &hits = record->getPscTruthHits();
2514 hddm_s::PscTruthHitList::iterator iter;
2515 for (iter = hits.begin(); iter != hits.end(); ++iter) {
2517 if(iter->getArm() == 0)
2518 hit->
arm = DPSGeometry::Arm::kNorth;
2520 hit->
arm = DPSGeometry::Arm::kSouth;
2521 hit->
module = iter->getModule();
2522 hit->
npe_fadc = iter->getDE() * 5e5;
2523 hit->
t = iter->getT();
2524 data.push_back(hit);
2529 factory->CopyTo(data);
2538 JFactory<DPSCTruthHit>* factory,
string tag)
2544 if (factory == NULL)
2545 return OBJECT_NOT_AVAILABLE;
2547 return OBJECT_NOT_AVAILABLE;
2549 vector<DPSCTruthHit*> data;
2551 const hddm_s::PscTruthPointList &points = record->getPscTruthPoints();
2552 hddm_s::PscTruthPointList::iterator iter;
2553 for (iter = points.begin(); iter != points.end(); ++iter) {
2555 hit->
dEdx = iter->getDEdx();
2556 hit->
primary = iter->getPrimary();
2557 hit->
ptype = iter->getPtype();
2558 hit->
t = iter->getT();
2559 hit->
x = iter->getX();
2560 hit->
y = iter->getY();
2561 hit->
z = iter->getZ();
2562 hit->
track = iter->getTrack();
2563 hit->
column = iter->getModule();
2564 const hddm_s::TrackIDList &ids = iter->getTrackIDs();
2565 hit->
itrack = (ids.size())? ids.begin()->getItrack() : 0;
2566 data.push_back(hit);
2570 factory->CopyTo(data);
2579 JFactory<DTPOLHit>* factory,
string tag)
2581 if (factory == NULL)
2582 return OBJECT_NOT_AVAILABLE;
2584 return OBJECT_NOT_AVAILABLE;
2586 vector<DTPOLHit*> data;
2590 const hddm_s::TpolHitList &hits = record->getTpolHits();
2591 hddm_s::TpolHitList::iterator iter;
2592 for (iter = hits.begin(); iter != hits.end(); ++iter)
2595 hit->
sector = iter->getSector();
2596 hit->
ring = iter->getRing();
2597 hit->
dE = iter->getDE();
2598 hit->
t = iter->getT();
2600 data.push_back(hit);
2603 else if (tag ==
"Truth")
2605 const hddm_s::TpolTruthHitList &truthHits = record->getTpolTruthHits();
2606 hddm_s::TpolTruthHitList::iterator iter;
2607 for (iter = truthHits.begin(); iter != truthHits.end(); ++iter)
2610 hit->
sector = iter->getSector();
2611 hit->
t = iter->getT();
2613 data.push_back(hit);
2617 factory->CopyTo(data);
2627 if (factory == NULL)
2628 return OBJECT_NOT_AVAILABLE;
2630 return OBJECT_NOT_AVAILABLE;
2632 vector<DTPOLTruthHit*> data;
2634 const hddm_s::TpolTruthPointList &points = record->getTpolTruthPoints();
2635 hddm_s::TpolTruthPointList::iterator iter;
2636 for (iter = points.begin(); iter != points.end(); ++iter)
2639 hit->
dEdx = iter->getDEdx();
2640 hit->
primary = iter->getPrimary();
2641 hit->
track = iter->getTrack();
2642 hit->
ptype = iter->getPtype();
2643 hit->
r = iter->getR();
2644 hit->
phi = iter->getPhi();
2645 hit->
t = iter->getT();
2646 const hddm_s::TrackIDList &ids = iter->getTrackIDs();
2647 hit->
itrack = (ids.size())? ids.begin()->getItrack() : 0;
2649 data.push_back(hit);
2652 factory->CopyTo(data);
2659 float locMassTolerance = 0.010;
2660 if (locCharge > 0.1)
2668 else if(locCharge < -0.1)
2693 if (factory == NULL)
return OBJECT_NOT_AVAILABLE;
2694 if (tag !=
"")
return OBJECT_NOT_AVAILABLE;
2696 vector<DFMWPCTruthHit*> data;
2698 const hddm_s::FmwpcTruthHitList &points = record->getFmwpcTruthHits();
2699 hddm_s::FmwpcTruthHitList::iterator iter;
2700 for (iter = points.begin(); iter != points.end(); ++iter) {
2702 hit->
layer = iter->getLayer();
2703 hit->
wire = iter->getWire();
2704 hit->
dE = iter->getDE();
2705 hit->
dx = iter->getDx();
2706 hit->
t = iter->getT();
2707 data.push_back(hit);
2711 factory->CopyTo(data);
2725 if (factory == NULL)
return OBJECT_NOT_AVAILABLE;
2726 if (tag !=
"")
return OBJECT_NOT_AVAILABLE;
2728 vector<DFMWPCHit*> data;
2730 const hddm_s::FmwpcHitList &points = record->getFmwpcHits();
2731 hddm_s::FmwpcHitList::iterator iter;
2732 for (iter = points.begin(); iter != points.end(); ++iter) {
2734 hit->
layer = iter->getLayer();
2735 hit->
wire = iter->getWire();
2736 hit->
dE = iter->getDE();
2737 hit->
t = iter->getT();
2738 data.push_back(hit);
2742 factory->CopyTo(data);
2751 JFactory<DDIRCPmtHit> *factory,
string tag,
2752 JEventLoop* eventLoop)
2758 if (factory == NULL)
2759 return OBJECT_NOT_AVAILABLE;
2761 return OBJECT_NOT_AVAILABLE;
2763 vector<DDIRCPmtHit*> data;
2766 vector<const DDIRCTruthPmtHit*> locDIRCTruthPmtHit;
2767 eventLoop->Get(locDIRCTruthPmtHit);
2769 const hddm_s::DircPmtHitList &hits = record->getDircPmtHits();
2770 hddm_s::DircPmtHitList::iterator iter;
2771 for (iter = hits.begin(); iter != hits.end(); ++iter) {
2772 double time = iter->getT();
2773 int channel = iter->getCh();
2779 for (
auto& iterTruth : locDIRCTruthPmtHit) {
2782 if(channel == iterTruth->ch && fabs(time-iterTruth->t) < 5.0) {
2784 hit->AddAssociatedObject(iterTruth);
2790 data.push_back(hit);
2795 factory->CopyTo(data);
2805 JFactory<DCereHit>* factory,
string tag)
2807 if (factory == NULL)
2808 return OBJECT_NOT_AVAILABLE;
2809 if (tag !=
"" && tag !=
"TRUTH")
2810 return OBJECT_NOT_AVAILABLE;
2812 vector<DCereHit*> data;
2815 const hddm_s::CereHitList &hits = record->getCereHits();
2816 hddm_s::CereHitList::iterator iter;
2817 for (iter = hits.begin(); iter != hits.end(); ++iter) {
2819 hit->
sector = iter->getSector();
2820 hit->
pe = iter->getPe();
2821 hit->
t = iter->getT();
2822 data.push_back(hit);
2825 else if (tag ==
"TRUTH") {
2826 const hddm_s::CereTruthHitList &hits = record->getCereTruthHits();
2827 hddm_s::CereTruthHitList::iterator iter;
2828 for (iter = hits.begin(); iter != hits.end(); ++iter) {
2830 hit->
sector = iter->getSector();
2831 hit->
pe = iter->getPe();
2832 hit->
t = iter->getT();
2833 data.push_back(hit);
2838 factory->CopyTo(data);
2847 JFactory<DDIRCTruthBarHit>* factory,
string tag)
2853 if (factory == NULL)
2854 return OBJECT_NOT_AVAILABLE;
2856 return OBJECT_NOT_AVAILABLE;
2858 vector<DDIRCTruthBarHit*> data;
2860 const hddm_s::DircTruthBarHitList &hits = record->getDircTruthBarHits();
2861 hddm_s::DircTruthBarHitList::iterator iter;
2862 for (iter = hits.begin(); iter != hits.end(); ++iter) {
2864 hit->
x = iter->getX();
2865 hit->
y = iter->getY();
2866 hit->
z = iter->getZ();
2867 hit->
px = iter->getPx();
2868 hit->
py = iter->getPy();
2869 hit->
pz = iter->getPz();
2870 hit->
t = iter->getT();
2871 hit->
E = iter->getE();
2872 hit->
pdg = iter->getPdg();
2873 hit->
bar = iter->getBar();
2874 hit->
track = iter->getTrack();
2875 data.push_back(hit);
2879 factory->CopyTo(data);
2888 JFactory<DDIRCTruthPmtHit>* factory,
string tag)
2894 if (factory == NULL)
2895 return OBJECT_NOT_AVAILABLE;
2897 return OBJECT_NOT_AVAILABLE;
2899 vector<DDIRCTruthPmtHit*> data;
2902 const hddm_s::DircTruthPmtHitList &hits = record->getDircTruthPmtHits();
2903 hddm_s::DircTruthPmtHitList::iterator iter;
2904 for (iter = hits.begin(); iter != hits.end(); ++iter) {
2906 hit->
x = iter->getX();
2907 hit->
y = iter->getY();
2908 hit->
z = iter->getZ();
2909 hit->
t = iter->getT();
2910 hit->
E = iter->getE();
2911 hit->
ch = iter->getCh();
2912 hit->
key_bar = iter->getKey_bar();
2913 hddm_s::DircTruthPmtHitExtraList &hitextras = iter->getDircTruthPmtHitExtras();
2914 if(hitextras.size() > 0) {
2915 hit->
t_fixed = hitextras(0).getT_fixed();
2916 hit->
path = hitextras(0).getPath();
2917 hit->
refl = hitextras(0).getRefl();
2918 hit->
bbrefl = hitextras(0).getBbrefl();
2920 data.push_back(hit);
2924 factory->CopyTo(data);
jerror_t Extract_DMCThrown(hddm_s::HDDM *record, JFactory< DMCThrown > *factory, string tag)
void setMomentum(const DVector3 &aMomentum)
DVector2 positionOnFace(int row, int column) const
void setTime(double locTime)
jerror_t GetTOFTruthHits(hddm_s::HDDM *record, vector< DMCTrackHit * > &data)
jerror_t Extract_DTAGHHit(hddm_s::HDDM *record, JFactory< DTAGHHit > *factory, string tag)
jerror_t Extract_DBCALTruthCell(hddm_s::HDDM *record, JFactory< DBCALTruthCell > *factory, string tag)
jerror_t GetObjects(JEvent &event, JFactory_base *factory)
const DMagneticFieldMap * bfield
jerror_t Extract_DTOFTruth(hddm_s::HDDM *record, JFactory< DTOFTruth > *factory, string tag)
jerror_t Extract_DDIRCTruthBarHit(hddm_s::HDDM *record, JFactory< DDIRCTruthBarHit > *factory, string tag)
static int gPlane(const DFDCHit *h)
DFDCGeometry::gPlane(): Compute the global plane (1-74) number based on module, layer, and plane.
int track
This is the unique number that GEANT has assigned the particle.
jerror_t Extract_DPSCTruthHit(hddm_s::HDDM *record, JFactory< DPSCTruthHit > *factory, string tag)
int itrack
This is the index within the MCThrown structure of this track.
jerror_t Extract_DBCALTDCDigiHit(hddm_s::HDDM *record, JFactory< DBCALTDCDigiHit > *factory, string tag)
jerror_t Extract_DTPOLHit(hddm_s::HDDM *record, JFactory< DTPOLHit > *factory, string tag)
uint32_t nsamples_integral
number of samples used in integral
jerror_t Extract_DFDCHit(hddm_s::HDDM *record, JFactory< DFDCHit > *factory, string tag)
double getEhigh(int arm, int column) const
jerror_t Extract_DMCTrackHit(hddm_s::HDDM *record, JFactory< DMCTrackHit > *factory, string tag)
jerror_t Extract_DDIRCTruthPmtHit(hddm_s::HDDM *record, JFactory< DDIRCTruthPmtHit > *factory, string tag)
int pdgtype
PDG particle type (not used by GEANT)
DVector2 positionOnFace(int row, int column) const
int ptype
This is the particle ID number.
DEventSourceHDDM(const char *source_name)
jerror_t GetFCALTruthHits(hddm_s::HDDM *record, vector< DMCTrackHit * > &data)
DetectorSystem_t system
particle type
uint32_t datasource
0=window raw data, 1=old(pre-Fall16) firmware, 2=Df250PulseData, 3=MC
uint32_t pulse_peak
identified pulse height as returned by FPGA algorithm
jerror_t Extract_DMCTrajectoryPoint(hddm_s::HDDM *record, JFactory< DMCTrajectoryPoint > *factory, string tag)
jerror_t Extract_DFMWPCHit(hddm_s::HDDM *record, JFactory< DFMWPCHit > *factory, string tag)
jerror_t GetCCALTruthHits(hddm_s::HDDM *record, vector< DMCTrackHit * > &data)
jerror_t Extract_DTOFHit(hddm_s::HDDM *record, JFactory< DTOFHit > *factory, JFactory< DTOFHitMC > *factoryMC, string tag)
jerror_t Extract_DSCTruthHit(hddm_s::HDDM *record, JFactory< DSCTruthHit > *factory, string tag)
jerror_t GetBCALTruthHits(hddm_s::HDDM *record, vector< DMCTrackHit * > &data)
uint32_t pulse_integral
identified pulse integral as returned by FPGA algorithm
static int gLayer(const DFDCHit *h)
DFDCGeometry::gLayer(): Compute the global layer (detection layer 1-24) number based on module and la...
map< unsigned int, double > dBeamBunchPeriodMap
int mech
production mechanism of this partcle (generator specific)
float z
coordinates of hit in cm and rad
jerror_t Extract_DBCALTruthShower(hddm_s::HDDM *record, JFactory< DBCALTruthShower > *factory, string tag)
jerror_t Extract_DCCALHit(hddm_s::HDDM *record, JFactory< DCCALHit > *factory, string tag, JEventLoop *eventLoop)
static float getStripR(const DFDCHit *h)
DFDCGeometry::getStripR(): Return coordinate in U or V space of a strip.
uint32_t nsamples_pedestal
number of samples used in pedestal
int parentid
id of parent of this particle from original generator
jerror_t Extract_DCCALTruthShower(hddm_s::HDDM *record, JFactory< DCCALTruthShower > *factory, string tag)
DGeometry * GetDGeometry(unsigned int run_number)
const DPSGeometry * psGeom
jerror_t GetCherenkovTruthHits(hddm_s::HDDM *record, vector< DMCTrackHit * > &data)
File: DTOFHitMC.h Created: Wed Jan 19 14:22:41 EST 2011 Creator: B. Zihlmann Purpose: Container class...
const DBCALGeometry * dBCALGeom
map< unsigned int, double > dTargetCenterZMap
jerror_t Extract_DMCReaction(hddm_s::HDDM *record, JFactory< DMCReaction > *factory, string tag, JEventLoop *loop)
uint32_t QF
Quality Factor from FPGA algorithms.
jerror_t Extract_DTrackTimeBased(hddm_s::HDDM *record, JFactory< DTrackTimeBased > *factory, string tag, int32_t runnumber, JEventLoop *locEventLoop)
void FreeEvent(JEvent &event)
double charge(void) const
float Fill(float x, float weight=1.0)
jerror_t Extract_DPSTruthHit(hddm_s::HDDM *record, JFactory< DPSTruthHit > *factory, string tag)
string StringToTMatrixFSym(string &str_vals, TMatrixFSym *mat, int Nrows, int Ncols)
jerror_t Extract_DBCALSiPMSpectrum(hddm_s::HDDM *record, JFactory< DBCALSiPMSpectrum > *factory, string tag)
void setPID(Particle_t locPID)
jerror_t Extract_DTAGMHit(hddm_s::HDDM *record, JFactory< DTAGMHit > *factory, string tag)
static double ParticleMass(Particle_t p)
jerror_t Extract_DPSCHit(hddm_s::HDDM *record, JFactory< DPSCHit > *factory, string tag)
virtual ~DEventSourceHDDM()
static thread_local shared_ptr< DResourcePool< TMatrixFSym > > dResourcePool_TMatrixFSym
jerror_t Extract_DFCALTruthShower(hddm_s::HDDM *record, JFactory< DFCALTruthShower > *factory, string tag)
jerror_t Extract_DBCALSiPMHit(hddm_s::HDDM *record, JFactory< DBCALSiPMHit > *factory, string tag)
uint32_t pedestal
pedestal info used by FPGA (if any)
int primary
primary track=1 not primary track=0
jerror_t GetFDCTruthHits(hddm_s::HDDM *record, vector< DMCTrackHit * > &data)
jerror_t Extract_DTPOLTruthHit(hddm_s::HDDM *record, JFactory< DTPOLTruthHit > *factory, string tag)
jerror_t Extract_DRFTime(hddm_s::HDDM *record, JFactory< DRFTime > *factory, JEventLoop *locEventLoop)
int sss[NCHANNELS][NOXbins][NOYbins]
bool MCTrackHitSort_C(DMCTrackHit *const &thit1, DMCTrackHit *const &thit2)
jerror_t Extract_DFMWPCTruthHit(hddm_s::HDDM *record, JFactory< DFMWPCTruthHit > *factory, string tag)
int itrack
MC track index.
jerror_t GetCDCTruthHits(hddm_s::HDDM *record, vector< DMCTrackHit * > &data)
jerror_t GetEvent(JEvent &event)
uint32_t pulse_time
identified pulse time as returned by FPGA algorithm
int cellId(int module, int layer, int sector) const
these functions are about encoding/decoding module/layer/sector info in a cellId
File: DTOFHit.h Created: Tue Jan 18 16:15:26 EST 2011 Creator: B. Zihlmann Purpose: Container class t...
jerror_t Extract_DCDCHit(JEventLoop *locEventLoop, hddm_s::HDDM *record, JFactory< DCDCHit > *factory, string tag)
jerror_t Extract_DPSHit(hddm_s::HDDM *record, JFactory< DPSHit > *factory, string tag)
static float getWireR(const DFDCHit *h)
DFDCGeometry::getWireR(): Return X coordinate of a wire.
void setPosition(const DVector3 &aPosition)
bool isBlockActive(int row, int column) const
int type
GEANT particle ID.
bool isBlockActive(int row, int column) const
bool GetTargetZ(double &z_target) const
z-location of center of target
jerror_t Extract_DDIRCPmtHit(hddm_s::HDDM *record, JFactory< DDIRCPmtHit > *factory, string tag, JEventLoop *eventLoop)
Particle_t IDTrack(float locCharge, float locMass) const
jerror_t Extract_DSCHit(hddm_s::HDDM *record, JFactory< DSCHit > *factory, string tag)
jerror_t Extract_DCereHit(hddm_s::HDDM *record, JFactory< DCereHit > *factory, string tag)
jerror_t Extract_DBCALIncidentParticle(hddm_s::HDDM *record, JFactory< DBCALIncidentParticle > *factory, string tag)
int myid
id of this particle from original generator
jerror_t Extract_DBCALDigiHit(hddm_s::HDDM *record, JFactory< DBCALDigiHit > *factory, string tag)
jerror_t Extract_DFCALHit(hddm_s::HDDM *record, JFactory< DFCALHit > *factory, string tag, JEventLoop *eventLoop)
bool operator()(DMCTrackHit *const &thit1, DMCTrackHit *const &thit2) const
class DFDCHit: definition for a basic FDC hit data type.
double getElow(int arm, int column) const
jerror_t GetSCTruthHits(hddm_s::HDDM *record, vector< DMCTrackHit * > &data)