13 #include <JANA/JFactory_base.h>
14 #include <JANA/JEventLoop.h>
15 #include <JANA/JEvent.h>
25 : JEventSource(source_name)
28 ifs =
new std::ifstream(source_name);
29 if (
ifs &&
ifs->is_open()) {
33 fin =
new hddm_r::istream(*
ifs);
42 "Turn on/off cleaning up multiple tracks with the same hypothesis from the same candidate. Set to \"0\" to turn off (it's on by default)");
45 gPARMS->SetDefaultParameter(
"REST:DIRC_CALC_LUT",
RECO_DIRC_CALC_LUT,
"Turn on/off DIRC LUT reconstruction (it's off by default)");
71 return EVENT_SOURCE_NOT_OPEN;
82 return NO_MORE_EVENTS_IN_SOURCE;
85 #if HDDM_SETPOSITION_EXAMPLE
86 static std::ifstream fevlist(
"events.list");
87 static int events_to_go = 0;
88 if (events_to_go-- == 0 && fevlist.good()) {
90 uint32_t offset, status;
91 fevlist >> start >> offset >> status >> events_to_go;
93 fin->setPosition(hddm_r::streamposition(start, offset, status));
97 #if HDDM_GETPOSITION_EXAMPLE
98 hddm_r::streamposition pos(
fin->getPosition());
106 hddm_r::HDDM *record =
new hddm_r::HDDM();
108 if (! (*
fin >> *record)) {
113 return NO_MORE_EVENTS_IN_SOURCE;
115 }
catch(std::runtime_error &
e){
116 cerr <<
"Exception caught while trying to read REST file!" << endl;
117 cerr << e.what() << endl;
119 return NO_MORE_EVENTS_IN_SOURCE;
124 hddm_r::ReconstructedPhysicsEvent &re
125 = record->getReconstructedPhysicsEvent();
126 int runno = re.getRunNo();
127 int eventno = re.getEventNo();
128 if (runno == 0 && eventno == 0) {
130 const hddm_r::CommentList &comments = re.getComments();
131 hddm_r::CommentList::iterator iter;
132 for (iter = comments.begin(); iter != comments.end(); ++iter) {
133 std::cout <<
" | " << iter->getText() << std::endl;
137 const hddm_r::DataVersionStringList& locVersionStrings = re.getDataVersionStrings();
138 hddm_r::DataVersionStringList::iterator Versioniter;
139 for (Versioniter = locVersionStrings.begin(); Versioniter != locVersionStrings.end(); ++Versioniter) {
140 string HDDM_DATA_VERSION_STRING = Versioniter->getText();
141 if(gPARMS->Exists(
"REST:DATAVERSIONSTRING"))
142 gPARMS->SetParameter(
"REST:DATAVERSIONSTRING", HDDM_DATA_VERSION_STRING);
144 gPARMS->SetDefaultParameter(
"REST:DATAVERSIONSTRING", HDDM_DATA_VERSION_STRING);
149 const hddm_r::CcdbContextList& locContextStrings = re.getCcdbContexts();
150 hddm_r::CcdbContextList::iterator Contextiter;
151 for (Contextiter = locContextStrings.begin(); Contextiter != locContextStrings.end(); ++Contextiter) {
152 string REST_JANA_CALIB_CONTEXT = Contextiter->getText();
153 gPARMS->SetDefaultParameter(
"REST:JANACALIBCONTEXT", REST_JANA_CALIB_CONTEXT);
156 if (! (*
fin >> *record)) {
161 return NO_MORE_EVENTS_IN_SOURCE;
166 event.SetEventNumber(re.getEventNo());
167 event.SetRunNumber(re.getRunNo());
168 event.SetJEventSource(
this);
169 event.SetRef(record);
186 hddm_r::HDDM *record = (hddm_r::HDDM*)event.GetRef();
202 throw RESOURCE_UNAVAILABLE;
206 hddm_r::HDDM *record = (hddm_r::HDDM*)event.GetRef();
208 throw RESOURCE_UNAVAILABLE;
211 JEventLoop* locEventLoop =
event.GetJEventLoop();
212 string dataClassName = factory->GetDataClassName();
216 bool locNewRunNumber =
false;
217 unsigned int locRunNumber =
event.GetRunNumber();
227 double locTargetCenterZ = 0.0;
230 vector<double> locBeamPeriodVector;
231 if(locEventLoop->GetCalib(
"PHOTON_BEAM/RF/beam_period", locBeamPeriodVector))
232 throw JException(
"Could not load CCDB table: PHOTON_BEAM/RF/beam_period");
233 double locBeamBunchPeriod = locBeamPeriodVector[0];
235 vector< vector <int> > locDIRCChannelStatus;
237 locDIRCChannelStatus.push_back(new_dirc_status);
238 locDIRCChannelStatus.push_back(new_dirc_status);
240 if (locEventLoop->GetCalib(
"/DIRC/North/channel_status", locDIRCChannelStatus[0]))
241 jout <<
"Error loading /DIRC/North/channel_status !" << endl;
242 if (locEventLoop->GetCalib(
"/DIRC/South/channel_status", locDIRCChannelStatus[1]))
243 jout <<
"Error loading /DIRC/South/channel_status !" << endl;
255 if (dataClassName ==
"DMCReaction") {
257 dynamic_cast<JFactory<DMCReaction>*
>(factory), locEventLoop);
259 if (dataClassName ==
"DRFTime") {
261 dynamic_cast<JFactory<DRFTime>*
>(factory), locEventLoop);
263 if (dataClassName ==
"DBeamPhoton") {
265 dynamic_cast<JFactory<DBeamPhoton>*
>(factory),
268 if (dataClassName ==
"DMCThrown") {
270 dynamic_cast<JFactory<DMCThrown>*
>(factory));
272 if (dataClassName ==
"DTOFPoint") {
274 dynamic_cast<JFactory<DTOFPoint>*
>(factory));
276 if (dataClassName ==
"DSCHit") {
278 dynamic_cast<JFactory<DSCHit>*
>(factory));
280 if (dataClassName ==
"DFCALShower") {
282 dynamic_cast<JFactory<DFCALShower>*
>(factory));
284 if (dataClassName ==
"DBCALShower") {
286 dynamic_cast<JFactory<DBCALShower>*
>(factory));
288 if (dataClassName ==
"DTrackTimeBased") {
290 dynamic_cast<JFactory<DTrackTimeBased>*
>(factory), locEventLoop);
292 if (dataClassName ==
"DTrigger") {
294 dynamic_cast<JFactory<DTrigger>*
>(factory));
296 if (dataClassName ==
"DDIRCPmtHit") {
298 dynamic_cast<JFactory<DDIRCPmtHit>*
>(factory), locEventLoop);
300 if (dataClassName ==
"DDetectorMatches") {
302 dynamic_cast<JFactory<DDetectorMatches>*
>(factory));
306 return OBJECT_NOT_AVAILABLE;
313 JFactory<DMCReaction> *factory, JEventLoop* locEventLoop)
320 return OBJECT_NOT_AVAILABLE;
322 std::string tag = (factory->Tag())? factory->Tag() :
"";
324 double locTargetCenterZ = 0.0;
325 int locRunNumber = locEventLoop->GetJEvent().GetRunNumber();
331 DVector3 locPosition(0.0, 0.0, locTargetCenterZ);
333 vector<DMCReaction*> dmcreactions;
336 const hddm_r::ReactionList &reactions = record->getReactions();
337 hddm_r::ReactionList::iterator iter;
338 for (iter = reactions.begin(); iter != reactions.end(); ++iter) {
339 if (iter->getJtag() != tag) {
343 dmcreactions.push_back(mcreaction);
344 mcreaction->
type = iter->getType();
345 mcreaction->
weight = iter->getWeight();
346 double Ebeam = iter->getEbeam();
348 hddm_r::Origin &origin = iter->getVertex().getOrigin();
349 double torig = origin.getT();
350 double zorig = origin.getVz();
354 mcreaction->
beam.
setTime(torig - (zorig - locTargetCenterZ)/29.9792458);
360 mcreaction->
target.
setTime(torig - (zorig - locTargetCenterZ)/29.9792458);
364 factory->CopyTo(dmcreactions);
373 JFactory<DRFTime> *factory, JEventLoop* locEventLoop)
376 return OBJECT_NOT_AVAILABLE;
377 string tag = (factory->Tag())? factory->Tag() :
"";
379 vector<DRFTime*> locRFTimes;
382 const hddm_r::RFtimeList &rftimes = record->getRFtimes();
383 hddm_r::RFtimeList::iterator iter;
384 for (iter = rftimes.begin(); iter != rftimes.end(); ++iter)
386 if (iter->getJtag() != tag)
389 locRFTime->
dTime = iter->getTsync();
391 locRFTimes.push_back(locRFTime);
394 if(!locRFTimes.empty())
397 factory->CopyTo(locRFTimes);
405 vector<const DBeamPhoton*> locMCGENPhotons;
406 locEventLoop->Get(locMCGENPhotons,
"MCGEN");
407 if(locMCGENPhotons.empty())
408 return OBJECT_NOT_AVAILABLE;
417 locRFTime->
dTime = locMCGENPhotons[0]->time();
419 locRFTimes.push_back(locRFTime);
423 double locBeamBunchPeriod = 0.0;
424 int locRunNumber = locEventLoop->GetJEvent().GetRunNumber();
432 double locTime = locMCGENPhotons[0]->time();
433 int locNumRFBuckets = int(locTime/locBeamBunchPeriod);
434 locTime -= double(locNumRFBuckets)*locBeamBunchPeriod;
435 while(locTime > 0.5*locBeamBunchPeriod)
436 locTime -= locBeamBunchPeriod;
437 while(locTime < -0.5*locBeamBunchPeriod)
438 locTime += locBeamBunchPeriod;
440 locRFTime->
dTime = locTime;
442 locRFTimes.push_back(locRFTime);
446 factory->CopyTo(locRFTimes);
455 JFactory<DBeamPhoton> *factory,
456 JEventLoop *eventLoop)
463 return OBJECT_NOT_AVAILABLE;
464 string tag = (factory->Tag())? factory->Tag() :
"";
466 vector<DBeamPhoton*> dbeam_photons;
469 vector<const DTAGHGeometry*> taghGeomVect;
470 eventLoop->Get(taghGeomVect);
471 if (taghGeomVect.empty())
472 return OBJECT_NOT_AVAILABLE;
476 vector<const DTAGMGeometry*> tagmGeomVect;
477 eventLoop->Get(tagmGeomVect);
478 if (tagmGeomVect.empty())
479 return OBJECT_NOT_AVAILABLE;
484 vector<const DMCReaction*> dmcreactions;
485 eventLoop->Get(dmcreactions);
487 for(
size_t loc_i = 0; loc_i < dmcreactions.size(); ++loc_i)
497 dbeam_photons.push_back(beamphoton);
501 factory->CopyTo(dbeam_photons);
506 double locTargetCenterZ = 0.0;
507 int locRunNumber = eventLoop->GetJEvent().GetRunNumber();
514 DVector3 pos(0.0, 0.0, locTargetCenterZ);
517 const hddm_r::TagmBeamPhotonList &locTagmBeamPhotonList = record->getTagmBeamPhotons();
518 hddm_r::TagmBeamPhotonList::iterator locTAGMiter;
519 for(locTAGMiter = locTagmBeamPhotonList.begin(); locTAGMiter != locTagmBeamPhotonList.end(); ++locTAGMiter)
521 if (locTAGMiter->getJtag() != tag)
526 DVector3 mom(0.0, 0.0, locTAGMiter->getE());
530 gamma->
setTime(locTAGMiter->getT());
534 locCovarianceMatrix->ResizeTo(7, 7);
535 locCovarianceMatrix->Zero();
539 dbeam_photons.push_back(gamma);
542 const hddm_r::TaghBeamPhotonList &locTaghBeamPhotonList = record->getTaghBeamPhotons();
543 hddm_r::TaghBeamPhotonList::iterator locTAGHiter;
544 for(locTAGHiter = locTaghBeamPhotonList.begin(); locTAGHiter != locTaghBeamPhotonList.end(); ++locTAGHiter)
546 if (locTAGHiter->getJtag() != tag)
551 DVector3 mom(0.0, 0.0, locTAGHiter->getE());
555 gamma->
setTime(locTAGHiter->getT());
559 locCovarianceMatrix->ResizeTo(7, 7);
560 locCovarianceMatrix->Zero();
564 dbeam_photons.push_back(gamma);
567 if((tag ==
"TAGGEDMCGEN") && dbeam_photons.empty())
568 return OBJECT_NOT_AVAILABLE;
571 factory->CopyTo(dbeam_photons);
580 JFactory<DMCThrown> *factory)
587 return OBJECT_NOT_AVAILABLE;
589 string tag = (factory->Tag())? factory->Tag() :
"";
591 vector<DMCThrown*> data;
594 hddm_r::VertexList vertices = record->getVertices();
595 hddm_r::VertexList::iterator iter;
596 for (iter = vertices.begin(); iter != vertices.end(); ++iter) {
597 if (iter->getJtag() != tag) {
600 const hddm_r::Origin &orig = iter->getOrigin();
601 double vx = orig.getVx();
602 double vy = orig.getVy();
603 double vz = orig.getVz();
604 double vt = orig.getT();
605 const hddm_r::ProductList &products = iter->getProducts();
606 hddm_r::ProductList::iterator piter;
607 for (piter = products.begin(); piter != products.end(); ++piter) {
608 double E = piter->getMomentum().getE();
609 double px = piter->getMomentum().getPx();
610 double py = piter->getMomentum().getPy();
611 double pz = piter->getMomentum().getPz();
612 double mass =
sqrt(E*E - (px*px + py*py + pz*pz));
613 if (!isfinite(mass)) {
617 int pdgtype = piter->getPdgtype();
619 mcthrown->
type = ptype;
621 mcthrown->
myid = piter->getId();
622 mcthrown->
parentid = piter->getParentId();
628 data.push_back(mcthrown);
633 factory->CopyTo(data);
642 JFactory<DTOFPoint>* factory)
649 return OBJECT_NOT_AVAILABLE;
651 string tag = (factory->Tag())? factory->Tag() :
"";
653 vector<DTOFPoint*> data;
656 const hddm_r::TofPointList &tofs = record->getTofPoints();
657 hddm_r::TofPointList::iterator iter;
658 for (iter = tofs.begin(); iter != tofs.end(); ++iter) {
659 if (iter->getJtag() != tag) {
663 tofpoint->
pos =
DVector3(iter->getX(),iter->getY(),iter->getZ());
664 tofpoint->
t = iter->getT();
665 tofpoint->
dE = iter->getDE();
666 tofpoint->
tErr = iter->getTerr();
669 const hddm_r::TofStatusList& locTofStatusList = iter->getTofStatuses();
670 hddm_r::TofStatusList::iterator locStatusIterator = locTofStatusList.begin();
671 if(locStatusIterator == locTofStatusList.end())
680 for(; locStatusIterator != locTofStatusList.end(); ++locStatusIterator)
682 int locStatus = locStatusIterator->getStatus();
684 locStatus %= 45*45*4;
692 data.push_back(tofpoint);
696 factory->CopyTo(data);
705 JFactory<DSCHit>* factory)
712 return OBJECT_NOT_AVAILABLE;
714 string tag = (factory->Tag())? factory->Tag() :
"";
716 vector<DSCHit*> data;
719 const hddm_r::StartHitList &starts = record->getStartHits();
720 hddm_r::StartHitList::iterator iter;
721 for (iter = starts.begin(); iter != starts.end(); ++iter) {
722 if (iter->getJtag() != tag) {
726 start->
sector = iter->getSector();
727 start->
dE = iter->getDE();
728 start->
t = iter->getT();
729 data.push_back(start);
733 factory->CopyTo(data);
748 return OBJECT_NOT_AVAILABLE;
749 string tag = (factory->Tag())? factory->Tag() :
"";
751 vector<DTrigger*> data;
754 const hddm_r::TriggerList &triggers = record->getTriggers();
755 hddm_r::TriggerList::iterator iter;
756 for (iter = triggers.begin(); iter != triggers.end(); ++iter)
758 if (iter->getJtag() != tag)
764 data.push_back(locTrigger);
768 factory->CopyTo(data);
777 JFactory<DFCALShower>* factory)
784 return OBJECT_NOT_AVAILABLE;
786 string tag = (factory->Tag())? factory->Tag() :
"";
788 vector<DFCALShower*> data;
791 const hddm_r::FcalShowerList &showers =
792 record->getFcalShowers();
793 hddm_r::FcalShowerList::iterator iter;
794 for (iter = showers.begin(); iter != showers.end(); ++iter) {
795 if (iter->getJtag() != tag)
803 TMatrixFSym covariance(5);
804 covariance(0,0) = iter->getEerr()*iter->getEerr();
805 covariance(1,1) = iter->getXerr()*iter->getXerr();
806 covariance(2,2) = iter->getYerr()*iter->getYerr();
807 covariance(3,3) = iter->getZerr()*iter->getZerr();
808 covariance(4,4) = iter->getTerr()*iter->getTerr();
809 covariance(1,2) = covariance(2,1) = iter->getXycorr()*iter->getXerr()*iter->getYerr();
810 covariance(1,3) = covariance(3,1) = iter->getXzcorr()*iter->getXerr()*iter->getZerr();
811 covariance(2,3) = covariance(3,2) = iter->getYzcorr()*iter->getYerr()*iter->getZerr();
812 covariance(0,3) = covariance(3,0) = iter->getEzcorr()*iter->getEerr()*iter->getZerr();
813 covariance(3,4) = covariance(4,3) = iter->getTzcorr()*iter->getTerr()*iter->getZerr();
816 const hddm_r::FcalCorrelationsList& locFcalCorrelationsList = iter->getFcalCorrelationses();
817 hddm_r::FcalCorrelationsList::iterator locFcalCorrelationsIterator = locFcalCorrelationsList.begin();
818 if(locFcalCorrelationsIterator != locFcalCorrelationsList.end()) {
819 covariance(0,4) = covariance(4,0) = locFcalCorrelationsIterator->getEtcorr()*iter->getEerr()*iter->getTerr();
820 covariance(0,1) = covariance(1,0) = locFcalCorrelationsIterator->getExcorr()*iter->getEerr()*iter->getXerr();
821 covariance(0,2) = covariance(2,0) = locFcalCorrelationsIterator->getEycorr()*iter->getEerr()*iter->getYerr();
822 covariance(1,4) = covariance(4,1) = locFcalCorrelationsIterator->getTxcorr()*iter->getTerr()*iter->getXerr();
823 covariance(2,4) = covariance(4,2) = locFcalCorrelationsIterator->getTycorr()*iter->getTerr()*iter->getYerr();
835 const hddm_r::FcalShowerPropertiesList& locFcalShowerPropertiesList = iter->getFcalShowerPropertiesList();
836 hddm_r::FcalShowerPropertiesList::iterator locFcalShowerPropertiesIterator = locFcalShowerPropertiesList.begin();
837 if(locFcalShowerPropertiesIterator != locFcalShowerPropertiesList.end()) {
838 shower->
setDocaTrack(locFcalShowerPropertiesIterator->getDocaTrack());
839 shower->
setTimeTrack(locFcalShowerPropertiesIterator->getTimeTrack());
840 shower->
setSumU(locFcalShowerPropertiesIterator->getSumU());
841 shower->
setSumV(locFcalShowerPropertiesIterator->getSumV());
842 shower->
setE1E9(locFcalShowerPropertiesIterator->getE1E9());
843 shower->
setE9E25(locFcalShowerPropertiesIterator->getE9E25());
846 const hddm_r::FcalShowerNBlocksList& locFcalShowerNBlocksList = iter->getFcalShowerNBlockses();
847 hddm_r::FcalShowerNBlocksList::iterator locFcalShowerNBlocksIterator = locFcalShowerNBlocksList.begin();
848 if(locFcalShowerNBlocksIterator != locFcalShowerNBlocksList.end()) {
849 shower->
setNumBlocks(locFcalShowerNBlocksIterator->getNumBlocks());
851 data.push_back(shower);
855 factory->CopyTo(data);
864 JFactory<DBCALShower>* factory)
871 return OBJECT_NOT_AVAILABLE;
873 string tag = (factory->Tag())? factory->Tag() :
"";
875 vector<DBCALShower*> data;
878 const hddm_r::BcalShowerList &showers =
879 record->getBcalShowers();
880 hddm_r::BcalShowerList::iterator iter;
881 for (iter = showers.begin(); iter != showers.end(); ++iter) {
882 if (iter->getJtag() != tag)
886 shower->
E = iter->getE();
888 shower->
x = iter->getX();
889 shower->
y = iter->getY();
890 shower->
z = iter->getZ();
891 shower->
t = iter->getT();
893 TMatrixFSym covariance(5);
894 covariance(0,0) = iter->getEerr()*iter->getEerr();
895 covariance(1,1) = iter->getXerr()*iter->getXerr();
896 covariance(2,2) = iter->getYerr()*iter->getYerr();
897 covariance(3,3) = iter->getZerr()*iter->getZerr();
898 covariance(4,4) = iter->getTerr()*iter->getTerr();
899 covariance(1,2) = covariance(2,1) = iter->getXycorr()*iter->getXerr()*iter->getYerr();
900 covariance(1,3) = covariance(3,1) = iter->getXzcorr()*iter->getXerr()*iter->getZerr();
901 covariance(2,3) = covariance(3,2) = iter->getYzcorr()*iter->getYerr()*iter->getZerr();
902 covariance(0,3) = covariance(3,0) = iter->getEzcorr()*iter->getEerr()*iter->getZerr();
903 covariance(3,4) = covariance(4,3) = iter->getTzcorr()*iter->getTerr()*iter->getZerr();
906 const hddm_r::BcalCorrelationsList& locBcalCorrelationsList = iter->getBcalCorrelationses();
907 hddm_r::BcalCorrelationsList::iterator locBcalCorrelationsIterator = locBcalCorrelationsList.begin();
908 if(locBcalCorrelationsIterator != locBcalCorrelationsList.end()) {
909 covariance(0,4) = covariance(4,0) = locBcalCorrelationsIterator->getEtcorr()*iter->getEerr()*iter->getTerr();
910 covariance(0,1) = covariance(1,0) = locBcalCorrelationsIterator->getExcorr()*iter->getEerr()*iter->getXerr();
911 covariance(0,2) = covariance(2,0) = locBcalCorrelationsIterator->getEycorr()*iter->getEerr()*iter->getYerr();
912 covariance(1,4) = covariance(4,1) = locBcalCorrelationsIterator->getTxcorr()*iter->getTerr()*iter->getXerr();
913 covariance(2,4) = covariance(4,2) = locBcalCorrelationsIterator->getTycorr()*iter->getTerr()*iter->getYerr();
918 const hddm_r::PreshowerList& locPreShowerList = iter->getPreshowers();
919 hddm_r::PreshowerList::iterator locPreShowerIterator = locPreShowerList.begin();
920 if(locPreShowerIterator == locPreShowerList.end())
924 for(; locPreShowerIterator != locPreShowerList.end(); ++locPreShowerIterator)
925 shower->
E_preshower = locPreShowerIterator->getPreshowerE();
929 const hddm_r::WidthList& locWidthList = iter->getWidths();
930 hddm_r::WidthList::iterator locWidthIterator = locWidthList.begin();
931 if(locWidthIterator == locWidthList.end()) {
932 shower->sigLong = -1.;
933 shower->sigTrans = -1.;
934 shower->sigTheta = -1.;
938 for(; locWidthIterator != locWidthList.end(); ++locWidthIterator) {
939 shower->sigLong = locWidthIterator->getSigLong();
940 shower->sigTrans = locWidthIterator->getSigTrans();
941 shower->sigTheta = locWidthIterator->getSigTheta();
945 const hddm_r::BcalClusterList& locBcalClusterList = iter->getBcalClusters();
946 hddm_r::BcalClusterList::iterator locBcalClusterIterator = locBcalClusterList.begin();
947 if(locBcalClusterIterator == locBcalClusterList.end())
951 for(; locBcalClusterIterator != locBcalClusterList.end(); ++locBcalClusterIterator)
952 shower->N_cell = locBcalClusterIterator->getNcell();
955 const hddm_r::BcalLayersList& locBcalLayersList = iter->getBcalLayerses();
956 hddm_r::BcalLayersList::iterator locBcalLayersIterator = locBcalLayersList.begin();
957 if(locBcalLayersIterator == locBcalLayersList.end()) {
961 shower->rmsTime = -1;
965 for(; locBcalLayersIterator != locBcalLayersList.end(); ++locBcalLayersIterator) {
966 shower->rmsTime = locBcalLayersIterator->getRmsTime();
967 shower->E_L2 = locBcalLayersIterator->getE_L2();
968 shower->E_L3 = locBcalLayersIterator->getE_L3();
969 shower->E_L4 = locBcalLayersIterator->getE_L4();
973 data.push_back(shower);
977 factory->CopyTo(data);
986 JFactory<DTrackTimeBased>* factory, JEventLoop* locEventLoop)
993 return OBJECT_NOT_AVAILABLE;
995 string tag = (factory->Tag())? factory->Tag() :
"";
997 vector<DTrackTimeBased*> data;
1000 const hddm_r::ChargedTrackList &tracks = record->getChargedTracks();
1001 hddm_r::ChargedTrackList::iterator iter;
1002 for (iter = tracks.begin(); iter != tracks.end(); ++iter) {
1003 if (iter->getJtag() != tag) {
1012 const hddm_r::TrackFit &fit = iter->getTrackFit();
1013 tra->
Ndof = fit.getNdof();
1014 tra->
chisq = fit.getChisq();
1017 DVector3 track_pos(fit.getX0(),fit.getY0(),fit.getZ0());
1018 DVector3 track_mom(fit.getPx(),fit.getPy(),fit.getPz());
1023 loc5x5ErrorMatrix->ResizeTo(5, 5);
1024 (*loc5x5ErrorMatrix)(0,0) = fit.getE11();
1025 (*loc5x5ErrorMatrix)(0,1) = (*loc5x5ErrorMatrix)(1,0) = fit.getE12();
1026 (*loc5x5ErrorMatrix)(0,2) = (*loc5x5ErrorMatrix)(2,0) = fit.getE13();
1027 (*loc5x5ErrorMatrix)(0,3) = (*loc5x5ErrorMatrix)(3,0) = fit.getE14();
1028 (*loc5x5ErrorMatrix)(0,4) = (*loc5x5ErrorMatrix)(4,0) = fit.getE15();
1029 (*loc5x5ErrorMatrix)(1,1) = fit.getE22();
1030 (*loc5x5ErrorMatrix)(1,2) = (*loc5x5ErrorMatrix)(2,1) = fit.getE23();
1031 (*loc5x5ErrorMatrix)(1,3) = (*loc5x5ErrorMatrix)(3,1) = fit.getE24();
1032 (*loc5x5ErrorMatrix)(1,4) = (*loc5x5ErrorMatrix)(4,1) = fit.getE25();
1033 (*loc5x5ErrorMatrix)(2,2) = fit.getE33();
1034 (*loc5x5ErrorMatrix)(2,3) = (*loc5x5ErrorMatrix)(3,2) = fit.getE34();
1035 (*loc5x5ErrorMatrix)(2,4) = (*loc5x5ErrorMatrix)(4,2) = fit.getE35();
1036 (*loc5x5ErrorMatrix)(3,3) = fit.getE44();
1037 (*loc5x5ErrorMatrix)(3,4) = (*loc5x5ErrorMatrix)(4,3) = fit.getE45();
1038 (*loc5x5ErrorMatrix)(4,4) = fit.getE55();
1043 vect[2]=tan(M_PI_2 - track_mom.Theta());
1044 vect[1]=track_mom.Phi();
1045 double sinphi=
sin(vect[1]);
1046 double cosphi=cos(vect[1]);
1047 vect[0]=tra->
charge()/track_mom.Perp();
1048 vect[4]=track_pos.Z();
1049 vect[3]=track_pos.Perp();
1051 if ((track_pos.X() > 0 && sinphi>0) || (track_pos.Y() <0 && cosphi>0) || (track_pos.Y() >0 && cosphi<0) || (track_pos.X() <0 && sinphi<0))
1057 loc7x7ErrorMatrix->ResizeTo(7, 7);
1060 (*loc7x7ErrorMatrix)(6, 6) = fit.getT0err()*fit.getT0err();
1063 const hddm_r::ExpectedhitsList& locExpectedhitsList = iter->getExpectedhitses();
1064 hddm_r::ExpectedhitsList::iterator locExpectedhitsIterator = locExpectedhitsList.begin();
1065 if(locExpectedhitsIterator == locExpectedhitsList.end())
1076 for(; locExpectedhitsIterator != locExpectedhitsList.end(); ++locExpectedhitsIterator)
1088 const hddm_r::HitlayersList& locHitlayersList = iter->getHitlayerses();
1089 hddm_r::HitlayersList::iterator locHitlayersIterator = locHitlayersList.begin();
1090 if(locHitlayersIterator == locHitlayersList.end())
1097 for(; locHitlayersIterator != locHitlayersList.end(); ++locHitlayersIterator)
1099 tra->
dCDCRings = locHitlayersIterator->getCDCrings();
1100 tra->
dFDCPlanes = locHitlayersIterator->getFDCplanes();
1105 const hddm_r::McmatchList& locMCMatchesList = iter->getMcmatchs();
1106 hddm_r::McmatchList::iterator locMcmatchIterator = locMCMatchesList.begin();
1107 if(locMcmatchIterator == locMCMatchesList.end())
1114 for(; locMcmatchIterator != locMCMatchesList.end(); ++locMcmatchIterator)
1122 const hddm_r::DEdxDCList &el = iter->getDEdxDCs();
1123 hddm_r::DEdxDCList::iterator diter = el.begin();
1124 if (diter != el.end()) {
1129 tra->
ddx_FDC = diter->getDxFDC();
1130 tra->
ddx_CDC = diter->getDxCDC();
1131 const hddm_r::CDCAmpdEdxList &el2 = diter->getCDCAmpdEdxs();
1132 hddm_r::CDCAmpdEdxList::iterator diter2 = el2.begin();
1133 if (diter2 != el2.end()){
1153 data.push_back(tra);
1157 vector< int > indices_to_erase;
1158 vector<DTrackTimeBased*>::iterator it = data.begin();
1160 for(
unsigned int i=0; i<data.size()-1; i++ ) {
1161 for(
unsigned int j=i+1; j<data.size(); j++ ) {
1162 if(find(indices_to_erase.begin(), indices_to_erase.end(), j) != indices_to_erase.end())
1168 if( (data[i]->candidateid == data[j]->candidateid)
1169 && (data[i]->PID() == data[j]->PID()) ) {
1170 if(data[i]->chisq < data[j]->chisq) {
1171 indices_to_erase.push_back(j);
1173 indices_to_erase.push_back(i);
1180 vector<DTrackTimeBased*> new_data;
1181 for(
unsigned int i=0; i<data.size(); i++ ) {
1182 if(find(indices_to_erase.begin(), indices_to_erase.end(), i) != indices_to_erase.end())
1185 new_data.push_back(data[i]);
1191 factory->CopyTo(data);
1206 return OBJECT_NOT_AVAILABLE;
1208 string tag = (factory->Tag())? factory->Tag() :
"";
1209 vector<DDetectorMatches*> data;
1211 vector<const DTrackTimeBased*> locTrackTimeBasedVector;
1212 locEventLoop->Get(locTrackTimeBasedVector);
1214 vector<const DSCHit*> locSCHits;
1215 locEventLoop->Get(locSCHits);
1217 vector<const DTOFPoint*> locTOFPoints;
1218 locEventLoop->Get(locTOFPoints);
1220 vector<const DBCALShower*> locBCALShowers;
1221 locEventLoop->Get(locBCALShowers);
1223 vector<const DFCALShower*> locFCALShowers;
1224 locEventLoop->Get(locFCALShowers);
1227 vector<const DDIRCPmtHit*> locDIRCHits;
1228 vector<const DDIRCTruthBarHit*> locDIRCBarHits;
1230 locEventLoop->GetSingle(locParticleID);
1231 locEventLoop->Get(locDIRCHits);
1232 locEventLoop->Get(locDIRCBarHits);
1235 const hddm_r::DetectorMatchesList &detectormatches = record->getDetectorMatcheses();
1238 hddm_r::DetectorMatchesList::iterator iter;
1239 for(iter = detectormatches.begin(); iter != detectormatches.end(); ++iter)
1241 if(iter->getJtag() != tag)
1246 const hddm_r::DircMatchParamsList &dircList = iter->getDircMatchParamses();
1247 hddm_r::DircMatchParamsList::iterator dircIter = dircList.begin();
1248 const hddm_r::DircMatchHitList &dircMatchHitList = iter->getDircMatchHits();
1250 for(; dircIter != dircList.end(); ++dircIter)
1252 size_t locTrackIndex = dircIter->getTrack();
1254 auto locDIRCMatchParams = std::make_shared<DDIRCMatchParams>();
1255 map<shared_ptr<const DDIRCMatchParams> ,vector<const DDIRCPmtHit*> > locDIRCTrackMatchParams;
1259 TVector3 locProjPos(dircIter->getX(),dircIter->getY(),dircIter->getZ());
1260 TVector3 locProjMom(dircIter->getPx(),dircIter->getPy(),dircIter->getPz());
1261 double locFlightTime = dircIter->getT();
1263 if( locParticleID->
Get_DIRCLut()->
CalcLUT(locProjPos, locProjMom, locDIRCHits, locFlightTime, locTrackTimeBasedVector[locTrackIndex]->PID(), locDIRCMatchParams, locDIRCBarHits, locDIRCTrackMatchParams) )
1264 locDetectorMatches->
Add_Match(locTrackTimeBasedVector[locTrackIndex], std::const_pointer_cast<const DDIRCMatchParams>(locDIRCMatchParams));
1268 hddm_r::DircMatchHitList::iterator dircMatchHitIter = dircMatchHitList.begin();
1269 for(; dircMatchHitIter != dircMatchHitList.end(); ++dircMatchHitIter) {
1270 size_t locMatchHitTrackIndex = dircMatchHitIter->getTrack();
1271 if(locMatchHitTrackIndex == locTrackIndex) {
1272 size_t locMatchHitIndex = dircMatchHitIter->getHit();
1273 locDIRCTrackMatchParams[locDIRCMatchParams].push_back(locDIRCHits[locMatchHitIndex]);
1277 locDIRCMatchParams->dExtrapolatedPos =
DVector3(dircIter->getX(),dircIter->getY(),dircIter->getZ());
1278 locDIRCMatchParams->dExtrapolatedMom =
DVector3(dircIter->getPx(),dircIter->getPy(),dircIter->getPz());
1279 locDIRCMatchParams->dExtrapolatedTime = dircIter->getT();
1280 locDIRCMatchParams->dExpectedThetaC = dircIter->getExpectthetac();
1281 locDIRCMatchParams->dThetaC = dircIter->getThetac();
1282 locDIRCMatchParams->dDeltaT = dircIter->getDeltat();
1283 locDIRCMatchParams->dLikelihoodElectron = dircIter->getLele();
1284 locDIRCMatchParams->dLikelihoodPion = dircIter->getLpi();
1285 locDIRCMatchParams->dLikelihoodKaon = dircIter->getLk();
1286 locDIRCMatchParams->dLikelihoodProton = dircIter->getLp();
1287 locDIRCMatchParams->dNPhotons = dircIter->getNphotons();
1288 locDetectorMatches->
Add_Match(locTrackTimeBasedVector[locTrackIndex], std::const_pointer_cast<const DDIRCMatchParams>(locDIRCMatchParams));
1292 const hddm_r::BcalMatchParamsList &bcalList = iter->getBcalMatchParamses();
1293 hddm_r::BcalMatchParamsList::iterator bcalIter = bcalList.begin();
1294 for(; bcalIter != bcalList.end(); ++bcalIter)
1296 size_t locShowerIndex = bcalIter->getShower();
1297 size_t locTrackIndex = bcalIter->getTrack();
1299 auto locShowerMatchParams = std::make_shared<DBCALShowerMatchParams>();
1300 locShowerMatchParams->dBCALShower = locBCALShowers[locShowerIndex];
1301 locShowerMatchParams->dx = bcalIter->getDx();
1302 locShowerMatchParams->dFlightTime = bcalIter->getTflight();
1303 locShowerMatchParams->dFlightTimeVariance = bcalIter->getTflightvar();
1304 locShowerMatchParams->dPathLength = bcalIter->getPathlength();
1305 locShowerMatchParams->dDeltaPhiToShower = bcalIter->getDeltaphi();
1306 locShowerMatchParams->dDeltaZToShower = bcalIter->getDeltaz();
1308 locDetectorMatches->
Add_Match(locTrackTimeBasedVector[locTrackIndex], locBCALShowers[locShowerIndex], std::const_pointer_cast<const DBCALShowerMatchParams>(locShowerMatchParams));
1311 const hddm_r::FcalMatchParamsList &fcalList = iter->getFcalMatchParamses();
1312 hddm_r::FcalMatchParamsList::iterator fcalIter = fcalList.begin();
1313 for(; fcalIter != fcalList.end(); ++fcalIter)
1315 size_t locShowerIndex = fcalIter->getShower();
1316 size_t locTrackIndex = fcalIter->getTrack();
1318 auto locShowerMatchParams = std::make_shared<DFCALShowerMatchParams>();
1319 locShowerMatchParams->dFCALShower = locFCALShowers[locShowerIndex];
1320 locShowerMatchParams->dx = fcalIter->getDx();
1321 locShowerMatchParams->dFlightTime = fcalIter->getTflight();
1322 locShowerMatchParams->dFlightTimeVariance = fcalIter->getTflightvar();
1323 locShowerMatchParams->dPathLength = fcalIter->getPathlength();
1324 locShowerMatchParams->dDOCAToShower = fcalIter->getDoca();
1326 locDetectorMatches->
Add_Match(locTrackTimeBasedVector[locTrackIndex], locFCALShowers[locShowerIndex], std::const_pointer_cast<const DFCALShowerMatchParams>(locShowerMatchParams));
1329 const hddm_r::ScMatchParamsList &scList = iter->getScMatchParamses();
1330 hddm_r::ScMatchParamsList::iterator scIter = scList.begin();
1331 for(; scIter != scList.end(); ++scIter)
1333 size_t locHitIndex = scIter->getHit();
1334 size_t locTrackIndex = scIter->getTrack();
1336 auto locSCHitMatchParams = std::make_shared<DSCHitMatchParams>();
1337 locSCHitMatchParams->dSCHit = locSCHits[locHitIndex];
1338 locSCHitMatchParams->dEdx = scIter->getDEdx();
1339 locSCHitMatchParams->dHitTime = scIter->getThit();
1340 locSCHitMatchParams->dHitTimeVariance = scIter->getThitvar();
1341 locSCHitMatchParams->dHitEnergy = scIter->getEhit();
1342 locSCHitMatchParams->dFlightTime = scIter->getTflight();
1343 locSCHitMatchParams->dFlightTimeVariance = scIter->getTflightvar();
1344 locSCHitMatchParams->dPathLength = scIter->getPathlength();
1345 locSCHitMatchParams->dDeltaPhiToHit = scIter->getDeltaphi();
1347 locDetectorMatches->
Add_Match(locTrackTimeBasedVector[locTrackIndex], locSCHits[locHitIndex], std::const_pointer_cast<const DSCHitMatchParams>(locSCHitMatchParams));
1350 const hddm_r::TofMatchParamsList &tofList = iter->getTofMatchParamses();
1351 hddm_r::TofMatchParamsList::iterator tofIter = tofList.begin();
1352 for(; tofIter != tofList.end(); ++tofIter)
1354 size_t locHitIndex = tofIter->getHit();
1355 size_t locTrackIndex = tofIter->getTrack();
1357 auto locTOFHitMatchParams = std::make_shared<DTOFHitMatchParams>();
1358 locTOFHitMatchParams->dTOFPoint = locTOFPoints[locHitIndex];
1360 locTOFHitMatchParams->dHitTime = tofIter->getThit();
1361 locTOFHitMatchParams->dHitTimeVariance = tofIter->getThitvar();
1362 locTOFHitMatchParams->dHitEnergy = tofIter->getEhit();
1364 locTOFHitMatchParams->dEdx = tofIter->getDEdx();
1365 locTOFHitMatchParams->dFlightTime = tofIter->getTflight();
1366 locTOFHitMatchParams->dFlightTimeVariance = tofIter->getTflightvar();
1367 locTOFHitMatchParams->dPathLength = tofIter->getPathlength();
1368 locTOFHitMatchParams->dDeltaXToHit = tofIter->getDeltax();
1369 locTOFHitMatchParams->dDeltaYToHit = tofIter->getDeltay();
1371 locDetectorMatches->
Add_Match(locTrackTimeBasedVector[locTrackIndex], locTOFPoints[locHitIndex], std::const_pointer_cast<const DTOFHitMatchParams>(locTOFHitMatchParams));
1374 const hddm_r::BcalDOCAtoTrackList &bcaldocaList = iter->getBcalDOCAtoTracks();
1375 hddm_r::BcalDOCAtoTrackList::iterator bcaldocaIter = bcaldocaList.begin();
1376 for(; bcaldocaIter != bcaldocaList.end(); ++bcaldocaIter)
1378 size_t locShowerIndex = bcaldocaIter->getShower();
1379 double locDeltaPhi = bcaldocaIter->getDeltaphi();
1380 double locDeltaZ = bcaldocaIter->getDeltaz();
1384 const hddm_r::FcalDOCAtoTrackList &fcaldocaList = iter->getFcalDOCAtoTracks();
1385 hddm_r::FcalDOCAtoTrackList::iterator fcaldocaIter = fcaldocaList.begin();
1386 for(; fcaldocaIter != fcaldocaList.end(); ++fcaldocaIter)
1388 size_t locShowerIndex = fcaldocaIter->getShower();
1389 double locDOCA = fcaldocaIter->getDoca();
1393 const hddm_r::TflightPCorrelationList &correlationList = iter->getTflightPCorrelations();
1394 hddm_r::TflightPCorrelationList::iterator correlationIter = correlationList.begin();
1395 for(; correlationIter != correlationList.end(); ++correlationIter)
1397 size_t locTrackIndex = correlationIter->getTrack();
1399 double locCorrelation = correlationIter->getCorrelation();
1403 data.push_back(locDetectorMatches);
1407 factory->CopyTo(data);
1420 double q_over_pt=vec[0];
1425 double pt=1./fabs(q_over_pt);
1427 double cosphi=cos(phi);
1428 double sinphi=
sin(phi);
1429 double q=(q_over_pt>0)?1.:-1.;
1431 J(0, 0)=-q*pt_sq*cosphi;
1434 J(1, 0)=-q*pt_sq*sinphi;
1437 J(2, 0)=-q*pt_sq*tanl;
1449 TMatrixFSym locTempMatrix(*C5x5);
1450 *loc7x7ErrorMatrix=locTempMatrix.Similarity(J);
1460 if(locSignedInt >= 0)
1461 return uint32_t(locSignedInt);
1463 return uint32_t(0x80000000);
1464 return uint32_t(-1*locSignedInt) + uint32_t(0x80000000);
1471 JFactory<DDIRCPmtHit>* factory, JEventLoop* locEventLoop)
1477 if (factory==NULL) {
1478 return OBJECT_NOT_AVAILABLE;
1480 string tag = (factory->Tag())? factory->Tag() :
"";
1482 vector<DDIRCPmtHit*> data;
1485 const hddm_r::DircHitList &hits =
1486 record->getDircHits();
1487 hddm_r::DircHitList::iterator iter;
1488 for (iter = hits.begin(); iter != hits.end(); ++iter) {
1489 if (iter->getJtag() != tag)
1493 int locRunNumber = locEventLoop->GetJEvent().GetRunNumber();
1497 if ( (status==
BAD) || (status==
NOISY) ) {
1504 hit->
setTOT(iter->getTot());
1506 data.push_back(hit);
1510 factory->CopyTo(data);
void setDocaTrack(const double docaTrack)
void setTOT(double timeOverThreshold)
void setMomentum(const DVector3 &aMomentum)
void setTimeTrack(const double tTrack)
jerror_t Extract_DTOFPoint(hddm_r::HDDM *record, JFactory< DTOFPoint > *factory)
void setTime(double locTime)
virtual ~DEventSourceREST()
void FreeEvent(JEvent &event)
DEventSourceREST(const char *source_name)
float chisq
Chi-squared for the track (not chisq/dof!)
void setTime(double time)
bool Get_DIRCTrackMatchParamsMap(map< shared_ptr< const DDIRCMatchParams >, vector< const DDIRCPmtHit * > > &locDIRCTrackMatchParamsMap)
void setE9E25(const double e9e25)
void Get7x7ErrorMatrix(double mass, const double vec[5], const TMatrixFSym *C5x5, TMatrixFSym *loc7x7ErrorMatrix)
double energy(void) const
uint32_t Convert_SignedIntToUnsigned(int32_t locSignedInt) const
jerror_t Extract_DBeamPhoton(hddm_r::HDDM *record, JFactory< DBeamPhoton > *factory, JEventLoop *eventLoop)
TMatrixFSym ExyztCovariance
jerror_t GetObjects(JEvent &event, JFactory_base *factory)
oid_t trackid
id of DTrackWireBased corresponding to this track
jerror_t Extract_DRFTime(hddm_r::HDDM *record, JFactory< DRFTime > *factory, JEventLoop *locEventLoop)
jerror_t Extract_DFCALShower(hddm_r::HDDM *record, JFactory< DFCALShower > *factory)
void setTrackingErrorMatrix(const shared_ptr< const TMatrixFSym > &aMatrix)
static Particle_t PDGtoPType(int locPDG_PID)
unsigned int potential_cdc_hits_on_track
void setTime(const double time)
jerror_t Extract_DMCThrown(hddm_r::HDDM *record, JFactory< DMCThrown > *factory)
jerror_t Extract_DSCHit(hddm_r::HDDM *record, JFactory< DSCHit > *factory)
jerror_t Extract_DTrackTimeBased(hddm_r::HDDM *record, JFactory< DTrackTimeBased > *factory, JEventLoop *locEventLoop)
void setSumU(const double sumU)
map< unsigned int, vector< vector< int > > > dDIRCChannelStatusMap
int pdgtype
PDG particle type (not used by GEANT)
oid_t candidateid
id of DTrackCandidate corresponding to this track
void setChannel(int channel)
jerror_t Extract_DTrigger(hddm_r::HDDM *record, JFactory< DTrigger > *factory)
jerror_t Extract_DDIRCPmtHit(hddm_r::HDDM *record, JFactory< DDIRCPmtHit > *factory, JEventLoop *locEventLoop)
void setPosition(const DVector3 &aPosition)
void Add_Match(const DTrackingData *locTrack, const DBCALShower *locBCALShower, const shared_ptr< const DBCALShowerMatchParams > &locShowerMatchParams)
static thread_local shared_ptr< DResourcePool< TMatrixFSym > > dResourcePool_TMatrixFSym
jerror_t Extract_DMCReaction(hddm_r::HDDM *record, JFactory< DMCReaction > *factory, JEventLoop *locEventLoop)
void setTrackingStateVector(double a1, double a2, double a3, double a4, double a5)
void setErrorMatrix(const shared_ptr< const TMatrixFSym > &aMatrix)
int mech
production mechanism of this partcle (generator specific)
bool PRUNE_DUPLICATE_TRACKS
TMatrixFSym ExyztCovariance
jerror_t Extract_DBCALShower(hddm_r::HDDM *record, JFactory< DBCALShower > *factory)
void Set_L1FrontPanelTriggerBits(uint32_t locL1FrontPanelTriggerBits)
int parentid
id of parent of this particle from original generator
void Set_DistanceToNearestTrack(const DBCALShower *locBCALShower, double locDeltaPhi, double locDeltaZ)
map< unsigned int, double > dBeamBunchPeriodMap
DGeometry * GetDGeometry(unsigned int run_number)
jerror_t Extract_DDetectorMatches(JEventLoop *locEventLoop, hddm_r::HDDM *record, JFactory< DDetectorMatches > *factory)
bool E_to_column(double E, unsigned int &column) const
void setEnergy(const double energy)
unsigned int potential_fdc_hits_on_track
int Ndof
Number of degrees of freedom in the fit.
double charge(void) const
void setE1E9(const double e1e9)
void setPID(Particle_t locPID)
const DDIRCLut * Get_DIRCLut() const
void Set_L1TriggerBits(uint32_t locL1TriggerBits)
unsigned int measured_cdc_hits_on_track
bool CalcLUT(TVector3 locProjPos, TVector3 locProjMom, const vector< const DDIRCPmtHit * > locDIRCHits, double locFlightTime, Particle_t locPID, shared_ptr< DDIRCMatchParams > &locDIRCMatchParams, const vector< const DDIRCTruthBarHit * > locDIRCBarHits, map< shared_ptr< const DDIRCMatchParams >, vector< const DDIRCPmtHit * > > &locDIRCTrackMatchParams) const
jerror_t GetEvent(JEvent &event)
int dNumHitsMatchedToThrown
map< unsigned int, double > dTargetCenterZMap
void setPosition(const DVector3 &aPosition)
int type
GEANT particle ID.
void setSumV(const double sumV)
unsigned int dNumHitsUsedFordEdx_FDC
bool E_to_counter(double E, unsigned int &counter) const
bool GetTargetZ(double &z_target) const
z-location of center of target
unsigned int measured_fdc_hits_on_track
int myid
id of this particle from original generator
unsigned int dNumHitsUsedFordEdx_CDC
void Set_FlightTimePCorrelation(const DTrackingData *locTrack, DetectorSystem_t locDetectorSystem, double locCorrelation)
void setNumBlocks(const int numBlocks)