From 868e8114c582e5b2fdff0f8be38c46fd190a998d Mon Sep 17 00:00:00 2001 From: Akio Ogawa Date: Wed, 27 Jul 2022 11:02:06 -0400 Subject: [PATCH 1/7] Adding g2t track info to StFcsHit, and adding code to trace back to primary in StFcsDb --- StRoot/StEvent/StEventLinkDef.h | 3 + StRoot/StEvent/StFcsHit.cxx | 19 +++ StRoot/StEvent/StFcsHit.h | 11 +- .../StFcsClusterMaker/StFcsClusterMaker.cxx | 43 +++++++ StRoot/StFcsDbMaker/StFcsDb.cxx | 116 ++++++++++++++++++ StRoot/StFcsDbMaker/StFcsDb.h | 8 ++ .../StFcsFastSimulatorMaker.cxx | 5 + 7 files changed, 202 insertions(+), 3 deletions(-) diff --git a/StRoot/StEvent/StEventLinkDef.h b/StRoot/StEvent/StEventLinkDef.h index 827ad617a34..81dbcee0c73 100644 --- a/StRoot/StEvent/StEventLinkDef.h +++ b/StRoot/StEvent/StEventLinkDef.h @@ -238,5 +238,8 @@ #pragma link C++ function operator<<(ostream&, const StFmsHit&); #pragma link C++ class vector+; +#pragma link C++ class pair+; +#pragma link C++ class vector>+; + #endif diff --git a/StRoot/StEvent/StFcsHit.cxx b/StRoot/StEvent/StFcsHit.cxx index 79d13f47a0d..c29b1cc4819 100644 --- a/StRoot/StEvent/StFcsHit.cxx +++ b/StRoot/StEvent/StFcsHit.cxx @@ -15,8 +15,10 @@ * **************************************************************************/ #include "StFcsHit.h" +#include ClassImp(StFcsHit) +using namespace std; StFcsHit::StFcsHit() { /* no operation */} @@ -139,3 +141,20 @@ void StFcsHit::print(Option_t *option) const { } cout << endl; } + +void StFcsHit::addGeantTrack(unsigned int id, float e){ + unsigned int n=mGeantTracks.size(); + for(unsigned int i=0; i&a, const pair&b){ + return b.second < a.second; + }); +} + diff --git a/StRoot/StEvent/StFcsHit.h b/StRoot/StEvent/StFcsHit.h index 0b9bec9bb60..6908b8e9c15 100644 --- a/StRoot/StEvent/StFcsHit.h +++ b/StRoot/StEvent/StFcsHit.h @@ -87,9 +87,13 @@ class StFcsHit : public StObject { void setCluster(StFcsCluster* clu) {mCluster = clu;} StFcsCluster *cluster() {return mCluster;} + const vector>& getGeantTracks() const {return mGeantTracks;} + void addGeantTrack(unsigned int id, float e); + void sortGeantTracks(); + void print(Option_t *option="") const; -protected: + protected: UShort_t mDetId=0; // 1 bit ZS, 3 bits DetectorId, 12 bits id UShort_t mDepCh=0; // 1 bit for NS, 2 bits for EHP, 5 bits for DEP, 8 bits for channal UInt_t mAdcSum=0; // ADC sum @@ -100,9 +104,10 @@ class StFcsHit : public StObject { Float_t mEnergy=0.0; // corrected energy StFcsCluster* mCluster=0; // pointer to cluster this hit belongs TArrayS* mData=0; // 12bit ADC values + flag at highest 4 bits, array of timebin - - ClassDef(StFcsHit,5) + vector> mGeantTracks; // parent G2T track id and dE + + ClassDef(StFcsHit,6) }; #endif diff --git a/StRoot/StFcsClusterMaker/StFcsClusterMaker.cxx b/StRoot/StFcsClusterMaker/StFcsClusterMaker.cxx index f49f262b933..7d02cd4541d 100644 --- a/StRoot/StFcsClusterMaker/StFcsClusterMaker.cxx +++ b/StRoot/StFcsClusterMaker/StFcsClusterMaker.cxx @@ -68,6 +68,7 @@ #include "StEvent/StFcsHit.h" #include "StEvent/StFcsCluster.h" #include "StFcsDbMaker/StFcsDb.h" +#include "tables/St_g2t_track_Table.h" #include "StMuDSTMaker/COMMON/StMuTypes.hh" #include "StMuDSTMaker/COMMON/StMuDst.h" @@ -217,6 +218,48 @@ int StFcsClusterMaker::makeCluster(int det) { if(ret==kStErr) ret=clusterMomentAnalysis(clu,0.0); //Redo with 0 threshold categorization(clu); } + + //debug MC info + if(GetDebug()>=5){ + g2t_track_st* g2ttrk=0; + St_g2t_track* trackTable = static_cast(GetDataSet("g2t_track")); + if(!trackTable) { + LOG_INFO << "g2t_track Table not found" << endm; + }else{ + const int nTrk = trackTable->GetNRows(); + LOG_INFO << Form("g2t_track table has %d tracks",nTrk) << endm; + if(nTrk>0){ + g2ttrk = trackTable->GetTable(); + if(!g2ttrk){ + LOG_INFO << "g2t_track GetTable failed" << endm; + } + } + } + if(g2ttrk){ + float frc=0; + int nh = hits.size(); + for(int i=0; igetParentG2tTrack(hit,g2ttrk,frc); + printf("Det=%1d Id=%3d E=%8.3f Parent Id=%4d Pid=%4d E=%8.3f Frc=%6.3f\n", + det,hit->id(),hit->energy(),trk->id,trk->ge_pid,trk->e,frc); + g2t_track_st* ptrk = mDb->getPrimaryG2tTrack(hit,g2ttrk,frc); + printf("Det=%1d Id=%3d E=%8.3f Primary Id=%4d Pid=%4d E=%8.3f Frc=%6.3f\n", + det,hit->id(),hit->energy(),ptrk->id,ptrk->ge_pid,ptrk->e,frc); + } + int nc = clusters.size(); + for(int j=0; jgetParentG2tTrack(clu,g2ttrk,frc); + printf("Det=%1d C#=%3d E=%8.3f Parent Id=%4d Pid=%4d E=%8.3f Frc=%6.3f\n", + det,j,clu->energy(),trk->id,trk->ge_pid,trk->e,frc); + g2t_track_st* ptrk = mDb->getPrimaryG2tTrack(clu,g2ttrk,frc); + printf("Det=%1d C#=%3d E=%8.3f Primary Id=%4d Pid=%4d E=%8.3f Frc=%6.3f\n", + det,j,clu->energy(),ptrk->id,ptrk->ge_pid,ptrk->e,frc); + } + } + } + return kStOk; } diff --git a/StRoot/StFcsDbMaker/StFcsDb.cxx b/StRoot/StFcsDbMaker/StFcsDb.cxx index cb4f486787d..9fad0c6cb5d 100644 --- a/StRoot/StFcsDbMaker/StFcsDb.cxx +++ b/StRoot/StFcsDbMaker/StFcsDb.cxx @@ -1979,3 +1979,119 @@ void StFcsDb::readGainCorrFromText(){ } fclose(F); } + +//g2t track info +unsigned int StFcsDb::backTraceG2tTrack(unsigned int id, g2t_track_st* g2ttrk){ + int i = id - 1; + while(g2ttrk[i].next_parent_p !=0){ + if(mDebug>3) + LOG_INFO<3) LOG_INFO<>& gt = h->getGeantTracks(); + int ntrk=gt.size(); + float detot=0; + if(order > gt.size()) {fraction=0; return 0;} + for(int itrk=0; itrk>& gt = h->getGeantTracks(); + vector> primary; + int ntrk=gt.size(); + float detot=0; + for(int itrk=0; itrk primary.size()) {fraction=0; return 0;} + std::sort(primary.begin(), primary.end(), + [](const pair&a, const pair&b){ + return b.second < a.second; + }); + if(order > primary.size()) {fraction=0; return 0;} + fraction = primary[order].second / detot; + return &g2ttrk[primary[order].first-1]; +} + +g2t_track_st* StFcsDb::getParentG2tTrack(StFcsCluster* c, g2t_track_st* g2ttrk, float& fraction, unsigned int order){ + float detot=0; + vector> parents; + StPtrVecFcsHit& hits = c->hits(); + int nhit = hits.size(); + for(int ihit=0; ihit>& gt = hits[ihit]->getGeantTracks(); + int ntrk=gt.size(); + for(int itrk=0; itrk parents.size()) {fraction=0; return 0;} + std::sort(parents.begin(), parents.end(), + [](const pair&a, const pair&b){ + return b.second < a.second; + }); + fraction = parents[order].second / detot; + return &g2ttrk[parents[order].first-1]; +} + +g2t_track_st* StFcsDb::getPrimaryG2tTrack(StFcsCluster* c, g2t_track_st* g2ttrk, float& fraction, unsigned int order){ + float detot=0; + vector> primary; + StPtrVecFcsHit& hits = c->hits(); + int nhit = hits.size(); + for(int ihit=0; ihit>& gt = hits[ihit]->getGeantTracks(); + int ntrk=gt.size(); + for(int itrk=0; itrk primary.size()) {fraction=0; return 0;} + std::sort(primary.begin(), primary.end(), + [](const pair&a, const pair&b){ + return b.second < a.second; + }); + if(mDebug>3){ + unsigned int np=primary.size(); + for(unsigned int jtrk=0; jtrksetEnergy(fcshit->energy() + de); } + fcshit->addGeantTrack(hit->track_p,de); hit++; } } @@ -200,6 +201,7 @@ void StFcsFastSimulatorMaker::fillStEvent(StEvent* event) { fcshit = mHcalMap[ns][id]; fcshit->setEnergy(fcshit->energy() + de); } + fcshit->addGeantTrack(hit->track_p,de); hit++; }else{ //leaky hcal with up to 4 WLSP getting lights from a tower float de[4]; @@ -234,6 +236,7 @@ void StFcsFastSimulatorMaker::fillStEvent(StEvent* event) { fcshit = mHcalMap[ns][id2]; fcshit->setEnergy(fcshit->energy() + de[j]); } + fcshit->addGeantTrack(hit->track_p,de[j]); } hit++; } @@ -291,6 +294,7 @@ void StFcsFastSimulatorMaker::fillStEvent(StEvent* event) { fcshit->setEnergy(fcshit->energy() + de); } hit++; + fcshit->addGeantTrack(hit->track_p,de); } } } @@ -318,6 +322,7 @@ void StFcsFastSimulatorMaker::fillStEvent(StEvent* event) { int ehp = mFcsDb->ecalHcalPres(det); hits[i]->setAdc(0,adc); hits[i]->setEnergy(digi_energy); + hits[i]->sortGeantTracks(); fcscollection->addHit(det,hits[i]); etot[ehp] += digi_energy; nhit[ehp]++; From bcdf46f1a2a17efb24ea3b21201694260037a0ab Mon Sep 17 00:00:00 2001 From: Akio Ogawa Date: Thu, 28 Jul 2022 22:10:54 -0400 Subject: [PATCH 2/7] Update based on feedbacks on PR#379 --- StRoot/StEvent/StFcsHit.cxx | 18 +++++--- StRoot/StEvent/StFcsHit.h | 2 +- .../StFcsClusterMaker/StFcsClusterMaker.cxx | 27 ++++++------ StRoot/StFcsDbMaker/StFcsDb.cxx | 42 +++++++++++-------- StRoot/StFcsDbMaker/StFcsDb.h | 16 ++++--- 5 files changed, 63 insertions(+), 42 deletions(-) diff --git a/StRoot/StEvent/StFcsHit.cxx b/StRoot/StEvent/StFcsHit.cxx index c29b1cc4819..6df49d7a01e 100644 --- a/StRoot/StEvent/StFcsHit.cxx +++ b/StRoot/StEvent/StFcsHit.cxx @@ -142,13 +142,19 @@ void StFcsHit::print(Option_t *option) const { cout << endl; } -void StFcsHit::addGeantTrack(unsigned int id, float e){ - unsigned int n=mGeantTracks.size(); - for(unsigned int i=0; isecond += e; } - mGeantTracks.push_back(make_pair(id,e)); - return; + // Old way + //for(unsigned int i=0; i>& getGeantTracks() const {return mGeantTracks;} - void addGeantTrack(unsigned int id, float e); + void addGeantTrack(const unsigned int id, float e); void sortGeantTracks(); void print(Option_t *option="") const; diff --git a/StRoot/StFcsClusterMaker/StFcsClusterMaker.cxx b/StRoot/StFcsClusterMaker/StFcsClusterMaker.cxx index 7d02cd4541d..1df540d88f8 100644 --- a/StRoot/StFcsClusterMaker/StFcsClusterMaker.cxx +++ b/StRoot/StFcsClusterMaker/StFcsClusterMaker.cxx @@ -236,26 +236,29 @@ int StFcsClusterMaker::makeCluster(int det) { } } if(g2ttrk){ + int ntrk=0; float frc=0; int nh = hits.size(); for(int i=0; igetParentG2tTrack(hit,g2ttrk,frc); - printf("Det=%1d Id=%3d E=%8.3f Parent Id=%4d Pid=%4d E=%8.3f Frc=%6.3f\n", - det,hit->id(),hit->energy(),trk->id,trk->ge_pid,trk->e,frc); - g2t_track_st* ptrk = mDb->getPrimaryG2tTrack(hit,g2ttrk,frc); - printf("Det=%1d Id=%3d E=%8.3f Primary Id=%4d Pid=%4d E=%8.3f Frc=%6.3f\n", - det,hit->id(),hit->energy(),ptrk->id,ptrk->ge_pid,ptrk->e,frc); + const g2t_track_st* trk = mDb->getParentG2tTrack(hit,g2ttrk,frc,ntrk); + //const g2t_track_st* trk=0; + //std::tie(trk,frc,ntrk) = mDb->getParentG2tTrack(hit,g2ttrk); + LOG_INFO << Form("Det=%1d Id=%3d E=%8.3f Parent Id=%4d Pid=%4d E=%8.3f Frc=%6.3f N=%d", + det,hit->id(),hit->energy(),trk->id,trk->ge_pid,trk->e,frc,ntrk)<getPrimaryG2tTrack(hit,g2ttrk,frc,ntrk); + LOG_INFO << Form("Det=%1d Id=%3d E=%8.3f Primary Id=%4d Pid=%4d E=%8.3f Frc=%6.3f N=%d", + det,hit->id(),hit->energy(),ptrk->id,ptrk->ge_pid,ptrk->e,frc,ntrk)<getParentG2tTrack(clu,g2ttrk,frc); - printf("Det=%1d C#=%3d E=%8.3f Parent Id=%4d Pid=%4d E=%8.3f Frc=%6.3f\n", - det,j,clu->energy(),trk->id,trk->ge_pid,trk->e,frc); - g2t_track_st* ptrk = mDb->getPrimaryG2tTrack(clu,g2ttrk,frc); - printf("Det=%1d C#=%3d E=%8.3f Primary Id=%4d Pid=%4d E=%8.3f Frc=%6.3f\n", - det,j,clu->energy(),ptrk->id,ptrk->ge_pid,ptrk->e,frc); + const g2t_track_st* trk = mDb->getParentG2tTrack(clu,g2ttrk,frc,ntrk); + LOG_INFO << Form("Det=%1d C#=%3d E=%8.3f Parent Id=%4d Pid=%4d E=%8.3f Frc=%6.3f N=%d", + det,j,clu->energy(),trk->id,trk->ge_pid,trk->e,frc,ntrk)<getPrimaryG2tTrack(clu,g2ttrk,frc,ntrk); + LOG_INFO << Form("Det=%1d C#=%3d E=%8.3f Primary Id=%4d Pid=%4d E=%8.3f Frc=%6.3f N=%d", + det,j,clu->energy(),ptrk->id,ptrk->ge_pid,ptrk->e,frc,ntrk)<>& gt = h->getGeantTracks(); - int ntrk=gt.size(); + ntrk=gt.size(); float detot=0; if(order > gt.size()) {fraction=0; return 0;} for(int itrk=0; itrk3){ + for(unsigned int jtrk=0; jtrk>& gt = h->getGeantTracks(); vector> primary; - int ntrk=gt.size(); + int n=gt.size(); float detot=0; - for(int itrk=0; itrk primary.size()) {fraction=0; return 0;} + ntrk = primary.size(); + if(order > ntrk) {fraction=0; return 0;} std::sort(primary.begin(), primary.end(), [](const pair&a, const pair&b){ return b.second < a.second; }); - if(order > primary.size()) {fraction=0; return 0;} fraction = primary[order].second / detot; return &g2ttrk[primary[order].first-1]; } -g2t_track_st* StFcsDb::getParentG2tTrack(StFcsCluster* c, g2t_track_st* g2ttrk, float& fraction, unsigned int order){ +const g2t_track_st* StFcsDb::getParentG2tTrack(StFcsCluster* c, g2t_track_st* g2ttrk, float& fraction, int& ntrk, unsigned int order){ float detot=0; vector> parents; StPtrVecFcsHit& hits = c->hits(); int nhit = hits.size(); for(int ihit=0; ihit>& gt = hits[ihit]->getGeantTracks(); - int ntrk=gt.size(); - for(int itrk=0; itrk parents.size()) {fraction=0; return 0;} + ntrk=parents.size(); + if(order > ntrk) {fraction=0; return 0;} std::sort(parents.begin(), parents.end(), [](const pair&a, const pair&b){ return b.second < a.second; @@ -2061,15 +2067,15 @@ g2t_track_st* StFcsDb::getParentG2tTrack(StFcsCluster* c, g2t_track_st* g2ttrk, return &g2ttrk[parents[order].first-1]; } -g2t_track_st* StFcsDb::getPrimaryG2tTrack(StFcsCluster* c, g2t_track_st* g2ttrk, float& fraction, unsigned int order){ +const g2t_track_st* StFcsDb::getPrimaryG2tTrack(StFcsCluster* c, g2t_track_st* g2ttrk, float& fraction, int& ntrk, unsigned int order){ float detot=0; vector> primary; StPtrVecFcsHit& hits = c->hits(); int nhit = hits.size(); for(int ihit=0; ihit>& gt = hits[ihit]->getGeantTracks(); - int ntrk=gt.size(); - for(int itrk=0; itrk primary.size()) {fraction=0; return 0;} + ntrk=primary.size(); + if(order > ntrk) {fraction=0; return 0;} std::sort(primary.begin(), primary.end(), [](const pair&a, const pair&b){ return b.second < a.second; }); if(mDebug>3){ - unsigned int np=primary.size(); - for(unsigned int jtrk=0; jtrk Date: Fri, 29 Jul 2022 09:25:30 -0400 Subject: [PATCH 3/7] Change StFcsHit::addGeantTrack to do reverse search for speed --- StRoot/StEvent/StFcsHit.cxx | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/StRoot/StEvent/StFcsHit.cxx b/StRoot/StEvent/StFcsHit.cxx index 6df49d7a01e..1b703facc44 100644 --- a/StRoot/StEvent/StFcsHit.cxx +++ b/StRoot/StEvent/StFcsHit.cxx @@ -145,9 +145,9 @@ void StFcsHit::print(Option_t *option) const { void StFcsHit::addGeantTrack(const unsigned int id, float e){ // auto cmp = [](auto t){ return t.first == id; }; //c++20 auto cmp = [id](decltype(mGeantTracks)::value_type t){ return t.first == id; }; - auto trk = find_if(begin(mGeantTracks), end(mGeantTracks), cmp); - if(trk == end(mGeantTracks)){ - mGeantTracks.insert(trk, make_pair(id, e)); + auto trk = find_if(mGeantTracks.rbegin(), mGeantTracks.rend(), cmp); + if(trk == mGeantTracks.rend()){ + mGeantTracks.push_back(make_pair(id, e)); }else{ trk->second += e; } From d853257a2469cfca98b74fb1554e2e7c4b14000d Mon Sep 17 00:00:00 2001 From: Akio Ogawa Date: Fri, 26 Aug 2022 11:02:48 -0400 Subject: [PATCH 4/7] StFcsHit::addGeantTrack() - const taken out from passing by value StFcsDb - "using namespace std;" added - doxygen-style (///) comment, including what "order" means - std::sort => std::nth_element --- StRoot/StEvent/StFcsHit.cxx | 2 +- StRoot/StEvent/StFcsHit.h | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/StRoot/StEvent/StFcsHit.cxx b/StRoot/StEvent/StFcsHit.cxx index 1b703facc44..6a42d2e4abb 100644 --- a/StRoot/StEvent/StFcsHit.cxx +++ b/StRoot/StEvent/StFcsHit.cxx @@ -142,7 +142,7 @@ void StFcsHit::print(Option_t *option) const { cout << endl; } -void StFcsHit::addGeantTrack(const unsigned int id, float e){ +void StFcsHit::addGeantTrack(unsigned int id, float e){ // auto cmp = [](auto t){ return t.first == id; }; //c++20 auto cmp = [id](decltype(mGeantTracks)::value_type t){ return t.first == id; }; auto trk = find_if(mGeantTracks.rbegin(), mGeantTracks.rend(), cmp); diff --git a/StRoot/StEvent/StFcsHit.h b/StRoot/StEvent/StFcsHit.h index 8720878e405..6908b8e9c15 100644 --- a/StRoot/StEvent/StFcsHit.h +++ b/StRoot/StEvent/StFcsHit.h @@ -88,7 +88,7 @@ class StFcsHit : public StObject { StFcsCluster *cluster() {return mCluster;} const vector>& getGeantTracks() const {return mGeantTracks;} - void addGeantTrack(const unsigned int id, float e); + void addGeantTrack(unsigned int id, float e); void sortGeantTracks(); void print(Option_t *option="") const; From dc2c6600331c8d7be1c5e2be1a7e85e4b8988342 Mon Sep 17 00:00:00 2001 From: Akio Ogawa Date: Sat, 27 Aug 2022 10:51:41 -0400 Subject: [PATCH 5/7] Making a private getG2tTrack() to avoid duplicate logic/code. --- StRoot/StFcsDbMaker/StFcsDb.cxx | 52 +++++++++++---------------------- StRoot/StFcsDbMaker/StFcsDb.h | 16 ++++++---- 2 files changed, 28 insertions(+), 40 deletions(-) diff --git a/StRoot/StFcsDbMaker/StFcsDb.cxx b/StRoot/StFcsDbMaker/StFcsDb.cxx index 1ec1117e5ee..7fc1b5528c4 100644 --- a/StRoot/StFcsDbMaker/StFcsDb.cxx +++ b/StRoot/StFcsDbMaker/StFcsDb.cxx @@ -2029,7 +2029,7 @@ const g2t_track_st* StFcsDb::getPrimaryG2tTrack(StFcsHit* h, g2t_track_st* g2ttr } ntrk = primary.size(); if(order > ntrk) {fraction=0; return 0;} - std::sort(primary.begin(), primary.end(), + std::nth_element(primary.begin(), primary.begin() + order, primary.end(), [](const pair&a, const pair&b){ return b.second < a.second; }); @@ -2038,6 +2038,14 @@ const g2t_track_st* StFcsDb::getPrimaryG2tTrack(StFcsHit* h, g2t_track_st* g2ttr } const g2t_track_st* StFcsDb::getParentG2tTrack(StFcsCluster* c, g2t_track_st* g2ttrk, float& fraction, int& ntrk, unsigned int order){ + getG2tTrack(c,g2ttrk,fraction,ntrk,order,0); +} + +const g2t_track_st* StFcsDb::getPrimaryG2tTrack(StFcsCluster* c, g2t_track_st* g2ttrk, float& fraction, int& ntrk, unsigned int order){ + getG2tTrack(c,g2ttrk,fraction,ntrk,order,1); +} + +const g2t_track_st* StFcsDb::getG2tTrack(StFcsCluster* c, g2t_track_st* g2ttrk, float& fraction, int& ntrk, unsigned int order, int mode){ float detot=0; vector> parents; StPtrVecFcsHit& hits = c->hits(); @@ -2046,7 +2054,11 @@ const g2t_track_st* StFcsDb::getParentG2tTrack(StFcsCluster* c, g2t_track_st* g2 const vector>& gt = hits[ihit]->getGeantTracks(); int n=gt.size(); for(int itrk=0; itrk ntrk) {fraction=0; return 0;} - std::sort(parents.begin(), parents.end(), + std::nth_element(parents.begin(), parents.begin()+order, parents.end(), [](const pair&a, const pair&b){ return b.second < a.second; }); fraction = parents[order].second / detot; - return &g2ttrk[parents[order].first-1]; -} - -const g2t_track_st* StFcsDb::getPrimaryG2tTrack(StFcsCluster* c, g2t_track_st* g2ttrk, float& fraction, int& ntrk, unsigned int order){ - float detot=0; - vector> primary; - StPtrVecFcsHit& hits = c->hits(); - int nhit = hits.size(); - for(int ihit=0; ihit>& gt = hits[ihit]->getGeantTracks(); - int n=gt.size(); - for(int itrk=0; itrk ntrk) {fraction=0; return 0;} - std::sort(primary.begin(), primary.end(), - [](const pair&a, const pair&b){ - return b.second < a.second; - }); if(mDebug>3){ for(unsigned int jtrk=0; jtrk Date: Mon, 29 Aug 2022 12:11:58 -0400 Subject: [PATCH 6/7] Remove sorting of geant tracks in StFcsFastSimulatorMaker.cxx Make use of getG2tTrack for StFcsHit as well using dummy cluster Changing to range loop instead of index loop in getG2tTrack. --- StRoot/StEvent/StFcsHit.cxx | 8 --- StRoot/StEvent/StFcsHit.h | 1 - StRoot/StFcsDbMaker/StFcsDb.cxx | 66 +++++-------------- .../StFcsFastSimulatorMaker.cxx | 2 +- 4 files changed, 17 insertions(+), 60 deletions(-) diff --git a/StRoot/StEvent/StFcsHit.cxx b/StRoot/StEvent/StFcsHit.cxx index 6a42d2e4abb..259d0e4240c 100644 --- a/StRoot/StEvent/StFcsHit.cxx +++ b/StRoot/StEvent/StFcsHit.cxx @@ -156,11 +156,3 @@ void StFcsHit::addGeantTrack(unsigned int id, float e){ // if(mGeantTracks[i].first == id) {mGeantTracks[i].second += e; return;} //mGeantTracks.push_back(make_pair(id,e)); } - -void StFcsHit::sortGeantTracks(){ //Sort Geant Track by descending order of energy - std::sort(mGeantTracks.begin(), mGeantTracks.end(), - [](const pair&a, const pair&b){ - return b.second < a.second; - }); -} - diff --git a/StRoot/StEvent/StFcsHit.h b/StRoot/StEvent/StFcsHit.h index 6908b8e9c15..ed02d5e1df0 100644 --- a/StRoot/StEvent/StFcsHit.h +++ b/StRoot/StEvent/StFcsHit.h @@ -89,7 +89,6 @@ class StFcsHit : public StObject { const vector>& getGeantTracks() const {return mGeantTracks;} void addGeantTrack(unsigned int id, float e); - void sortGeantTracks(); void print(Option_t *option="") const; diff --git a/StRoot/StFcsDbMaker/StFcsDb.cxx b/StRoot/StFcsDbMaker/StFcsDb.cxx index 7fc1b5528c4..09a5b488e80 100644 --- a/StRoot/StFcsDbMaker/StFcsDb.cxx +++ b/StRoot/StFcsDbMaker/StFcsDb.cxx @@ -1997,80 +1997,46 @@ unsigned int StFcsDb::backTraceG2tTrack(unsigned int id, g2t_track_st* g2ttrk){ } const g2t_track_st* StFcsDb::getParentG2tTrack(StFcsHit* h, g2t_track_st* g2ttrk, float& fraction, int& ntrk, unsigned int order){ - const vector>& gt = h->getGeantTracks(); - ntrk=gt.size(); - float detot=0; - if(order > gt.size()) {fraction=0; return 0;} - for(int itrk=0; itrk3){ - for(unsigned int jtrk=0; jtrk>& gt = h->getGeantTracks(); - vector> primary; - int n=gt.size(); - float detot=0; - for(int itrk=0; itrk ntrk) {fraction=0; return 0;} - std::nth_element(primary.begin(), primary.begin() + order, primary.end(), - [](const pair&a, const pair&b){ - return b.second < a.second; - }); - fraction = primary[order].second / detot; - return &g2ttrk[primary[order].first-1]; + StFcsCluster c; + c.hits().push_back(h); //dummy cluster with 1 hit + return getG2tTrack(&c,g2ttrk,fraction,ntrk,order,1); } const g2t_track_st* StFcsDb::getParentG2tTrack(StFcsCluster* c, g2t_track_st* g2ttrk, float& fraction, int& ntrk, unsigned int order){ - getG2tTrack(c,g2ttrk,fraction,ntrk,order,0); + return getG2tTrack(c,g2ttrk,fraction,ntrk,order,0); } const g2t_track_st* StFcsDb::getPrimaryG2tTrack(StFcsCluster* c, g2t_track_st* g2ttrk, float& fraction, int& ntrk, unsigned int order){ - getG2tTrack(c,g2ttrk,fraction,ntrk,order,1); + return getG2tTrack(c,g2ttrk,fraction,ntrk,order,1); } const g2t_track_st* StFcsDb::getG2tTrack(StFcsCluster* c, g2t_track_st* g2ttrk, float& fraction, int& ntrk, unsigned int order, int mode){ float detot=0; vector> parents; - StPtrVecFcsHit& hits = c->hits(); - int nhit = hits.size(); - for(int ihit=0; ihit>& gt = hits[ihit]->getGeantTracks(); - int n=gt.size(); - for(int itrk=0; itrkhits()) { + for(const pair & gt : hit->getGeantTracks()){ unsigned int id=0; switch(mode){ - case 0: id=gt[itrk].first; break; - case 1: id=backTraceG2tTrack(gt[itrk].first,g2ttrk); break; + case 0: id=gt.first; break; + case 1: id=backTraceG2tTrack(gt.first,g2ttrk); break; } - float de=gt[itrk].second; + float de=gt.second; int found=0; - unsigned int np=parents.size(); - for(unsigned int jtrk=0; jtrk& p : parents){ + if(p.first == id) {p.second += de; found=1; break;} } if(found==0) parents.push_back(make_pair(id,de)); detot+=de; } } ntrk=parents.size(); - if(order > ntrk) {fraction=0; return 0;} + if(order >= ntrk) {fraction=0; return 0;} std::nth_element(parents.begin(), parents.begin()+order, parents.end(), [](const pair&a, const pair&b){ return b.second < a.second; diff --git a/StRoot/StFcsFastSimulatorMaker/StFcsFastSimulatorMaker.cxx b/StRoot/StFcsFastSimulatorMaker/StFcsFastSimulatorMaker.cxx index 1aa0ac63d6d..1a4cd591e80 100644 --- a/StRoot/StFcsFastSimulatorMaker/StFcsFastSimulatorMaker.cxx +++ b/StRoot/StFcsFastSimulatorMaker/StFcsFastSimulatorMaker.cxx @@ -1,3 +1,4 @@ + // $Id: StFcsFastSimulatorMaker.cxx,v 1.2 2021/03/30 13:40:09 akio Exp $ // // $Log: StFcsFastSimulatorMaker.cxx,v $ @@ -322,7 +323,6 @@ void StFcsFastSimulatorMaker::fillStEvent(StEvent* event) { int ehp = mFcsDb->ecalHcalPres(det); hits[i]->setAdc(0,adc); hits[i]->setEnergy(digi_energy); - hits[i]->sortGeantTracks(); fcscollection->addHit(det,hits[i]); etot[ehp] += digi_energy; nhit[ehp]++; From 33b61154e6a99f05f63c003e05e27b13e517cf83 Mon Sep 17 00:00:00 2001 From: Dmitri Smirnov Date: Tue, 6 Sep 2022 11:19:32 -0400 Subject: [PATCH 7/7] Changes in white space only [skip ci] --- StRoot/StEvent/StFcsHit.cxx | 2 +- StRoot/StEvent/StFcsHit.h | 4 +- .../StFcsClusterMaker/StFcsClusterMaker.cxx | 40 +++++++++---------- StRoot/StFcsDbMaker/StFcsDb.cxx | 16 ++++---- StRoot/StFcsDbMaker/StFcsDb.h | 2 +- .../StFcsFastSimulatorMaker.cxx | 1 - 6 files changed, 32 insertions(+), 33 deletions(-) diff --git a/StRoot/StEvent/StFcsHit.cxx b/StRoot/StEvent/StFcsHit.cxx index 14887793dfa..307be54ca04 100644 --- a/StRoot/StEvent/StFcsHit.cxx +++ b/StRoot/StEvent/StFcsHit.cxx @@ -155,4 +155,4 @@ void StFcsHit::addGeantTrack(unsigned int id, float e){ //for(unsigned int i=0; i> mGeantTracks; // parent G2T track id and dE - + ClassDef(StFcsHit,6) }; diff --git a/StRoot/StFcsClusterMaker/StFcsClusterMaker.cxx b/StRoot/StFcsClusterMaker/StFcsClusterMaker.cxx index 1df540d88f8..d021a68be53 100644 --- a/StRoot/StFcsClusterMaker/StFcsClusterMaker.cxx +++ b/StRoot/StFcsClusterMaker/StFcsClusterMaker.cxx @@ -229,10 +229,10 @@ int StFcsClusterMaker::makeCluster(int det) { const int nTrk = trackTable->GetNRows(); LOG_INFO << Form("g2t_track table has %d tracks",nTrk) << endm; if(nTrk>0){ - g2ttrk = trackTable->GetTable(); - if(!g2ttrk){ - LOG_INFO << "g2t_track GetTable failed" << endm; - } + g2ttrk = trackTable->GetTable(); + if(!g2ttrk){ + LOG_INFO << "g2t_track GetTable failed" << endm; + } } } if(g2ttrk){ @@ -240,25 +240,25 @@ int StFcsClusterMaker::makeCluster(int det) { float frc=0; int nh = hits.size(); for(int i=0; igetParentG2tTrack(hit,g2ttrk,frc,ntrk); - //const g2t_track_st* trk=0; - //std::tie(trk,frc,ntrk) = mDb->getParentG2tTrack(hit,g2ttrk); - LOG_INFO << Form("Det=%1d Id=%3d E=%8.3f Parent Id=%4d Pid=%4d E=%8.3f Frc=%6.3f N=%d", - det,hit->id(),hit->energy(),trk->id,trk->ge_pid,trk->e,frc,ntrk)<getPrimaryG2tTrack(hit,g2ttrk,frc,ntrk); - LOG_INFO << Form("Det=%1d Id=%3d E=%8.3f Primary Id=%4d Pid=%4d E=%8.3f Frc=%6.3f N=%d", - det,hit->id(),hit->energy(),ptrk->id,ptrk->ge_pid,ptrk->e,frc,ntrk)<getParentG2tTrack(hit,g2ttrk,frc,ntrk); + //const g2t_track_st* trk=0; + //std::tie(trk,frc,ntrk) = mDb->getParentG2tTrack(hit,g2ttrk); + LOG_INFO << Form("Det=%1d Id=%3d E=%8.3f Parent Id=%4d Pid=%4d E=%8.3f Frc=%6.3f N=%d", + det,hit->id(),hit->energy(),trk->id,trk->ge_pid,trk->e,frc,ntrk)<getPrimaryG2tTrack(hit,g2ttrk,frc,ntrk); + LOG_INFO << Form("Det=%1d Id=%3d E=%8.3f Primary Id=%4d Pid=%4d E=%8.3f Frc=%6.3f N=%d", + det,hit->id(),hit->energy(),ptrk->id,ptrk->ge_pid,ptrk->e,frc,ntrk)<getParentG2tTrack(clu,g2ttrk,frc,ntrk); - LOG_INFO << Form("Det=%1d C#=%3d E=%8.3f Parent Id=%4d Pid=%4d E=%8.3f Frc=%6.3f N=%d", - det,j,clu->energy(),trk->id,trk->ge_pid,trk->e,frc,ntrk)<getPrimaryG2tTrack(clu,g2ttrk,frc,ntrk); - LOG_INFO << Form("Det=%1d C#=%3d E=%8.3f Primary Id=%4d Pid=%4d E=%8.3f Frc=%6.3f N=%d", - det,j,clu->energy(),ptrk->id,ptrk->ge_pid,ptrk->e,frc,ntrk)<getParentG2tTrack(clu,g2ttrk,frc,ntrk); + LOG_INFO << Form("Det=%1d C#=%3d E=%8.3f Parent Id=%4d Pid=%4d E=%8.3f Frc=%6.3f N=%d", + det,j,clu->energy(),trk->id,trk->ge_pid,trk->e,frc,ntrk)<getPrimaryG2tTrack(clu,g2ttrk,frc,ntrk); + LOG_INFO << Form("Det=%1d C#=%3d E=%8.3f Primary Id=%4d Pid=%4d E=%8.3f Frc=%6.3f N=%d", + det,j,clu->energy(),ptrk->id,ptrk->ge_pid,ptrk->e,frc,ntrk)<3) LOG_INFO<3) LOG_INFO<& p : parents){ - if(p.first == id) {p.second += de; found=1; break;} + if(p.first == id) {p.second += de; found=1; break;} } if(found==0) parents.push_back(make_pair(id,de)); detot+=de; @@ -2038,9 +2038,9 @@ const g2t_track_st* StFcsDb::getG2tTrack(StFcsCluster* c, g2t_track_st* g2ttrk, ntrk=parents.size(); if(order >= ntrk) {fraction=0; return 0;} std::nth_element(parents.begin(), parents.begin()+order, parents.end(), - [](const pair&a, const pair&b){ - return b.second < a.second; - }); + [](const pair&a, const pair&b){ + return b.second < a.second; + }); fraction = parents[order].second / detot; if(mDebug>3){ for(unsigned int jtrk=0; jtrk