From cc4162e58a840aa03b5ba1d4d7e608d690f65d5f Mon Sep 17 00:00:00 2001 From: staylorjlab Date: Thu, 3 Sep 2026 17:16:29 -0400 Subject: [PATCH 1/6] Add SumU and SumV moment data. --- src/libraries/ECAL/DECALShower.h | 4 ++ src/libraries/ECAL/DECALShower_factory.cc | 51 ++++++++++++++++++++++- src/libraries/ECAL/DECALShower_factory.h | 6 +++ 3 files changed, 60 insertions(+), 1 deletion(-) diff --git a/src/libraries/ECAL/DECALShower.h b/src/libraries/ECAL/DECALShower.h index a834098c3a..ae532a0e54 100644 --- a/src/libraries/ECAL/DECALShower.h +++ b/src/libraries/ECAL/DECALShower.h @@ -24,6 +24,7 @@ struct DECALShower : public JObject { TMatrixFSym ExyztCovariance; bool isNearBorder; int nBlocks; + double sumU,sumV,docaToTrack; float EErr() const { return sqrt(ExyztCovariance(0,0)); } float xErr() const { return sqrt(ExyztCovariance(1,1)); } @@ -79,6 +80,9 @@ struct DECALShower : public JObject { summary.add(ZTcorr(), "ZTcorr", "%5.3f"); summary.add(nBlocks,"Number of blocks","%d"); summary.add(isNearBorder,"Near border?","%d"); + summary.add(sumU,"U moment","%5.3f"); + summary.add(sumV,"V moment","%5.3f"); + summary.add(docaToTrack,"Distance to nearest track","%5.3f"); } }; diff --git a/src/libraries/ECAL/DECALShower_factory.cc b/src/libraries/ECAL/DECALShower_factory.cc index e12366ba64..9941ce7ab8 100644 --- a/src/libraries/ECAL/DECALShower_factory.cc +++ b/src/libraries/ECAL/DECALShower_factory.cc @@ -15,6 +15,7 @@ #include #include #include +#include #include //------------------ @@ -53,6 +54,9 @@ void DECALShower_factory::BeginRun(const std::shared_ptr& event) auto geom = geo_manager->GetDGeometry(runnumber); geom->GetECALZ(mECALz); mECALzBack=mECALz+20.; + if (geom->HaveInsert()){ + event->GetSingle(dECALGeom); + } // Get calibration constant auto jcalib = app->GetService()->GetJCalibration(runnumber); @@ -76,6 +80,7 @@ void DECALShower_factory::Process(const std::shared_ptr& event) { vectorclusters; event->Get(clusters); + auto wbtracks=event->Get(); for (size_t i=0;i& event) cov(3,0)=cov(0,3)=X0_over_E*cov(0,0); shower->ExyztCovariance.ResizeTo(5,5); shower->ExyztCovariance=cov; - + + // Find position of closest track to the shower + double min_distance=1e6; + DVector3 proj_pos_for_shower_shape(0,0,shower->pos.z()); + for (const auto& wbtrack:wbtracks){ + DVector3 proj_pos,proj_mom; + if (!wbtrack->GetProjection(SYS_ECAL,proj_pos,&proj_mom)) continue; + proj_pos+=((shower->pos.z()-proj_pos.z())/proj_mom.z())*proj_mom; + DVector3 diff=shower->pos-proj_pos; + double d=diff.Perp(); + if (dpos,proj_pos_for_shower_shape,shower->sumU, + shower->sumV); + shower->docaToTrack=min_distance; shower->AddAssociatedObject(cluster); Insert(shower); @@ -148,3 +171,29 @@ double DECALShower_factory::GetCorrectedZ(double E) const { return mECALz+dZmax; } + +// Compute the energy-weighted second moment of the shower along and +// perpendicular to an axis formed by pointing from the shower to nearest +// track. This code mimics similar code in DFCALShower_factory. +void DECALShower_factory::GetUV(const DECALCluster *cluster, + const DVector3 &showerPos, + const DVector3 &trackPos,double &sumU, + double &sumV) const{ + DVector3 u = ( showerPos-trackPos).Unit(); + DVector3 zhat(0,0,1 ); + DVector3 v = u.Cross(zhat); + sumU=0.; + sumV=0.; + double sumE=0.; + + auto hits=cluster->Get(); + for (const auto& hit:hits){ + DVector2 blockPos=dECALGeom->positionOnFace(hit->row,hit->column); + DVector3 diff(blockPos.X()-showerPos.x(),blockPos.Y()-showerPos.y(),0.); + sumU+=hit->E*pow(u.Dot(diff),2); + sumV+=hit->E*pow(v.Dot(diff),2); + sumE+=hit->E; + } + sumU/=sumE; + sumV/=sumE; +} diff --git a/src/libraries/ECAL/DECALShower_factory.h b/src/libraries/ECAL/DECALShower_factory.h index 72d8423f27..3b10d7cc49 100644 --- a/src/libraries/ECAL/DECALShower_factory.h +++ b/src/libraries/ECAL/DECALShower_factory.h @@ -11,6 +11,8 @@ #include #include "DECALCluster.h" #include "DECALShower.h" +#include "DECALHit.h" +#include "DECALGeometry.h" class DECALShower_factory:public JFactoryT{ public: @@ -26,6 +28,8 @@ class DECALShower_factory:public JFactoryT{ double GetCorrectedEnergy(double E) const; double GetCorrectedZ(double E) const; + void GetUV(const DECALCluster *cluster,const DVector3 &showerPos, + const DVector3 &trackPos,double &sumU,double &sumV) const; double mECALz,mECALzBack; double SHOWER_ENERGY_THRESHOLD,ECAL_C_EFFECTIVE; @@ -33,6 +37,8 @@ class DECALShower_factory:public JFactoryT{ double E_CORRECTION_PAR1,E_CORRECTION_PAR2,E_CORRECTION_PAR3; double E_CORRECTION_PAR4; bool ENABLE_ENERGY_CORRECTION; + + const DECALGeometry *dECALGeom=NULL; }; #endif // _DECALShower_factory_ From b45ed38cf7ec2c2d08676f46de5d768276da78d9 Mon Sep 17 00:00:00 2001 From: staylorjlab Date: Tue, 8 Sep 2026 15:41:42 -0400 Subject: [PATCH 2/6] add sumU, sumV, and docaTrack to REST for ECAL --- src/libraries/ECAL/DECALShower.h | 4 ++-- src/libraries/ECAL/DECALShower_factory.cc | 2 +- src/libraries/HDDM/DEventSourceREST.cc | 10 ++++++++++ src/libraries/HDDM/DEventWriterREST.cc | 4 ++++ src/libraries/HDDM/rest.xml | 2 ++ 5 files changed, 19 insertions(+), 3 deletions(-) diff --git a/src/libraries/ECAL/DECALShower.h b/src/libraries/ECAL/DECALShower.h index ae532a0e54..51da0492e2 100644 --- a/src/libraries/ECAL/DECALShower.h +++ b/src/libraries/ECAL/DECALShower.h @@ -24,7 +24,7 @@ struct DECALShower : public JObject { TMatrixFSym ExyztCovariance; bool isNearBorder; int nBlocks; - double sumU,sumV,docaToTrack; + double sumU,sumV,docaTrack; float EErr() const { return sqrt(ExyztCovariance(0,0)); } float xErr() const { return sqrt(ExyztCovariance(1,1)); } @@ -82,7 +82,7 @@ struct DECALShower : public JObject { summary.add(isNearBorder,"Near border?","%d"); summary.add(sumU,"U moment","%5.3f"); summary.add(sumV,"V moment","%5.3f"); - summary.add(docaToTrack,"Distance to nearest track","%5.3f"); + summary.add(docaTrack,"Distance to nearest track","%5.3f"); } }; diff --git a/src/libraries/ECAL/DECALShower_factory.cc b/src/libraries/ECAL/DECALShower_factory.cc index 9941ce7ab8..fa26779ee6 100644 --- a/src/libraries/ECAL/DECALShower_factory.cc +++ b/src/libraries/ECAL/DECALShower_factory.cc @@ -132,7 +132,7 @@ void DECALShower_factory::Process(const std::shared_ptr& event) // Compute a couple of shower shaper parameters GetUV(cluster,shower->pos,proj_pos_for_shower_shape,shower->sumU, shower->sumV); - shower->docaToTrack=min_distance; + shower->docaTrack=min_distance; shower->AddAssociatedObject(cluster); Insert(shower); diff --git a/src/libraries/HDDM/DEventSourceREST.cc b/src/libraries/HDDM/DEventSourceREST.cc index dce30c4916..c8ee7a8679 100644 --- a/src/libraries/HDDM/DEventSourceREST.cc +++ b/src/libraries/HDDM/DEventSourceREST.cc @@ -1167,6 +1167,16 @@ bool DEventSourceREST::Extract_DECALShower(hddm_r::HDDM *record, shower->E1E9=locEcalShowerPropertiesIterator->getE1E9(); shower->E9E25=locEcalShowerPropertiesIterator->getE9E25(); } + const hddm_r::EcalShowerMorePropertiesList& locEcalShowerMorePropertiesList = iter->getEcalShowerMorePropertiesList(); + hddm_r::EcalShowerMorePropertiesList::iterator locEcalShowerMorePropertiesIterator = locEcalShowerMorePropertiesList.begin(); + shower->sumU=0.; + shower->sumV=0.; + shower->docaTrack=0.; + if(locEcalShowerMorePropertiesIterator != locEcalShowerMorePropertiesList.end()) { + shower->sumU=locEcalShowerMorePropertiesIterator->getSumU(); + shower->sumV=locEcalShowerMorePropertiesIterator->getSumV(); + shower->docaTrack=locEcalShowerMorePropertiesIterator->getDocaTrack(); + } data.push_back(shower); } diff --git a/src/libraries/HDDM/DEventWriterREST.cc b/src/libraries/HDDM/DEventWriterREST.cc index ddc6c27801..b9dffc5125 100644 --- a/src/libraries/HDDM/DEventWriterREST.cc +++ b/src/libraries/HDDM/DEventWriterREST.cc @@ -282,6 +282,10 @@ bool DEventWriterREST::Write_RESTEvent(const std::shared_ptr& locE hddm_r::EcalShowerPropertiesList locEcalShowerPropertiesList = ecal().addEcalShowerPropertiesList(1); locEcalShowerPropertiesList().setE1E9(ecalshowers[i]->E1E9); locEcalShowerPropertiesList().setE9E25(ecalshowers[i]->E9E25); + hddm_r::EcalShowerMorePropertiesList locEcalShowerMorePropertiesList = ecal().addEcalShowerMorePropertiesList(1); + locEcalShowerMorePropertiesList().setSumU(ecalshowers[i]->sumU); + locEcalShowerMorePropertiesList().setSumV(ecalshowers[i]->sumV); + locEcalShowerMorePropertiesList().setDocaTrack(ecalshowers[i]->docaTrack); } // push any DFCALShower objects to the output record for (size_t i=0; i < fcalshowers.size(); i++) diff --git a/src/libraries/HDDM/rest.xml b/src/libraries/HDDM/rest.xml index 7023011c7f..667ee2041b 100644 --- a/src/libraries/HDDM/rest.xml +++ b/src/libraries/HDDM/rest.xml @@ -36,6 +36,8 @@ lunit="cm" tunit="ns" Eunit="GeV"> + Date: Tue, 8 Sep 2026 17:01:03 -0400 Subject: [PATCH 3/6] Add more missing doca-to-track data for ECAL --- src/libraries/HDDM/DEventSourceREST.cc | 9 +++++++++ src/libraries/HDDM/DEventWriterREST.cc | 11 +++++++++++ src/libraries/HDDM/rest.xml | 3 +++ 3 files changed, 23 insertions(+) diff --git a/src/libraries/HDDM/DEventSourceREST.cc b/src/libraries/HDDM/DEventSourceREST.cc index c8ee7a8679..bdd84da23f 100644 --- a/src/libraries/HDDM/DEventSourceREST.cc +++ b/src/libraries/HDDM/DEventSourceREST.cc @@ -2104,6 +2104,15 @@ bool DEventSourceREST::Extract_DDetectorMatches(const std::shared_ptrSet_DistanceToNearestTrack(locBCALShowers[locShowerIndex], locDeltaPhi, locDeltaZ); } + const hddm_r::EcalDOCAtoTrackList &ecaldocaList = iter->getEcalDOCAtoTracks(); + hddm_r::EcalDOCAtoTrackList::iterator ecaldocaIter = ecaldocaList.begin(); + for(; ecaldocaIter != ecaldocaList.end(); ++ecaldocaIter) + { + size_t locShowerIndex = ecaldocaIter->getShower(); + double locDOCA = ecaldocaIter->getDoca(); + locDetectorMatches->Set_DistanceToNearestTrack(locECALShowers[locShowerIndex], locDOCA); + } + const hddm_r::FcalDOCAtoTrackList &fcaldocaList = iter->getFcalDOCAtoTracks(); hddm_r::FcalDOCAtoTrackList::iterator fcaldocaIter = fcaldocaList.begin(); for(; fcaldocaIter != fcaldocaList.end(); ++fcaldocaIter) diff --git a/src/libraries/HDDM/DEventWriterREST.cc b/src/libraries/HDDM/DEventWriterREST.cc index b9dffc5125..f146735182 100644 --- a/src/libraries/HDDM/DEventWriterREST.cc +++ b/src/libraries/HDDM/DEventWriterREST.cc @@ -998,6 +998,17 @@ bool DEventWriterREST::Write_RESTEvent(const std::shared_ptr& locE fcalDocaList().setShower(loc_j); fcalDocaList().setDoca(locDistance); } + + for(size_t loc_j = 0; loc_j < ecalshowers.size(); ++loc_j) + { + double locDistance = 0.0; + if(!locDetectorMatches[loc_i]->Get_DistanceToNearestTrack(ecalshowers[loc_j], locDistance)) + continue; + + hddm_r::EcalDOCAtoTrackList ecalDocaList = matches().addEcalDOCAtoTracks(1); + ecalDocaList().setShower(loc_j); + ecalDocaList().setDoca(locDistance); + } } // write the resulting record to the output stream diff --git a/src/libraries/HDDM/rest.xml b/src/libraries/HDDM/rest.xml index 667ee2041b..192eaaf916 100644 --- a/src/libraries/HDDM/rest.xml +++ b/src/libraries/HDDM/rest.xml @@ -199,6 +199,9 @@ + From 43cfe3986741c1d583fa646d5a34eaf6901117dd Mon Sep 17 00:00:00 2001 From: staylorjlab Date: Mon, 14 Sep 2026 16:54:37 -0400 Subject: [PATCH 4/6] add timeTrack to shower object to be consistent with DFCALShower --- src/libraries/ECAL/DECALShower.h | 3 ++- src/libraries/ECAL/DECALShower_factory.cc | 8 ++++++-- src/libraries/ECAL/DECALShower_factory.h | 1 + 3 files changed, 9 insertions(+), 3 deletions(-) diff --git a/src/libraries/ECAL/DECALShower.h b/src/libraries/ECAL/DECALShower.h index 51da0492e2..43e0fefcb9 100644 --- a/src/libraries/ECAL/DECALShower.h +++ b/src/libraries/ECAL/DECALShower.h @@ -24,7 +24,7 @@ struct DECALShower : public JObject { TMatrixFSym ExyztCovariance; bool isNearBorder; int nBlocks; - double sumU,sumV,docaTrack; + double sumU,sumV,docaTrack,timeTrack; float EErr() const { return sqrt(ExyztCovariance(0,0)); } float xErr() const { return sqrt(ExyztCovariance(1,1)); } @@ -83,6 +83,7 @@ struct DECALShower : public JObject { summary.add(sumU,"U moment","%5.3f"); summary.add(sumV,"V moment","%5.3f"); summary.add(docaTrack,"Distance to nearest track","%5.3f"); + summary.add(timeTrack,"Time for nearest track","%5.3f"); } }; diff --git a/src/libraries/ECAL/DECALShower_factory.cc b/src/libraries/ECAL/DECALShower_factory.cc index fa26779ee6..1d16598566 100644 --- a/src/libraries/ECAL/DECALShower_factory.cc +++ b/src/libraries/ECAL/DECALShower_factory.cc @@ -57,6 +57,7 @@ void DECALShower_factory::BeginRun(const std::shared_ptr& event) if (geom->HaveInsert()){ event->GetSingle(dECALGeom); } + geom->GetTargetZ(mVertexZ); // Get calibration constant auto jcalib = app->GetService()->GetJCalibration(runnumber); @@ -116,23 +117,26 @@ void DECALShower_factory::Process(const std::shared_ptr& event) shower->ExyztCovariance=cov; // Find position of closest track to the shower - double min_distance=1e6; + double min_distance=1e6,timeTrack=1e6; DVector3 proj_pos_for_shower_shape(0,0,shower->pos.z()); for (const auto& wbtrack:wbtracks){ DVector3 proj_pos,proj_mom; - if (!wbtrack->GetProjection(SYS_ECAL,proj_pos,&proj_mom)) continue; + double flight_time=0.; + if (!wbtrack->GetProjection(SYS_ECAL,proj_pos,&proj_mom,&flight_time)) continue; proj_pos+=((shower->pos.z()-proj_pos.z())/proj_mom.z())*proj_mom; DVector3 diff=shower->pos-proj_pos; double d=diff.Perp(); if (dposition().z()-mVertexZ)/SPEED_OF_LIGHT+flight_time; } } // Compute a couple of shower shaper parameters GetUV(cluster,shower->pos,proj_pos_for_shower_shape,shower->sumU, shower->sumV); shower->docaTrack=min_distance; + shower->timeTrack=timeTrack; shower->AddAssociatedObject(cluster); Insert(shower); diff --git a/src/libraries/ECAL/DECALShower_factory.h b/src/libraries/ECAL/DECALShower_factory.h index 3b10d7cc49..8cc36a9cfe 100644 --- a/src/libraries/ECAL/DECALShower_factory.h +++ b/src/libraries/ECAL/DECALShower_factory.h @@ -39,6 +39,7 @@ class DECALShower_factory:public JFactoryT{ bool ENABLE_ENERGY_CORRECTION; const DECALGeometry *dECALGeom=NULL; + double mVertexZ; // assume center of target, so it does not vary event by event }; #endif // _DECALShower_factory_ From 28f647803c6c7c78a50972f0fe6a50f79c3ef0b2 Mon Sep 17 00:00:00 2001 From: staylorjlab Date: Mon, 14 Sep 2026 21:32:40 -0400 Subject: [PATCH 5/6] add timeTrack to ECAL rest output --- src/libraries/HDDM/DEventSourceREST.cc | 2 ++ src/libraries/HDDM/DEventWriterREST.cc | 1 + src/libraries/HDDM/rest.xml | 3 ++- 3 files changed, 5 insertions(+), 1 deletion(-) diff --git a/src/libraries/HDDM/DEventSourceREST.cc b/src/libraries/HDDM/DEventSourceREST.cc index bdd84da23f..bcdc660673 100644 --- a/src/libraries/HDDM/DEventSourceREST.cc +++ b/src/libraries/HDDM/DEventSourceREST.cc @@ -1172,10 +1172,12 @@ bool DEventSourceREST::Extract_DECALShower(hddm_r::HDDM *record, shower->sumU=0.; shower->sumV=0.; shower->docaTrack=0.; + shower->timeTrack=0.; if(locEcalShowerMorePropertiesIterator != locEcalShowerMorePropertiesList.end()) { shower->sumU=locEcalShowerMorePropertiesIterator->getSumU(); shower->sumV=locEcalShowerMorePropertiesIterator->getSumV(); shower->docaTrack=locEcalShowerMorePropertiesIterator->getDocaTrack(); + shower->timeTrack=locEcalShowerMorePropertiesIterator->getTimeTrack(); } data.push_back(shower); diff --git a/src/libraries/HDDM/DEventWriterREST.cc b/src/libraries/HDDM/DEventWriterREST.cc index f146735182..9f182aa18c 100644 --- a/src/libraries/HDDM/DEventWriterREST.cc +++ b/src/libraries/HDDM/DEventWriterREST.cc @@ -286,6 +286,7 @@ bool DEventWriterREST::Write_RESTEvent(const std::shared_ptr& locE locEcalShowerMorePropertiesList().setSumU(ecalshowers[i]->sumU); locEcalShowerMorePropertiesList().setSumV(ecalshowers[i]->sumV); locEcalShowerMorePropertiesList().setDocaTrack(ecalshowers[i]->docaTrack); + locEcalShowerMorePropertiesList().setTimeTrack(ecalshowers[i]->timeTrack); } // push any DFCALShower objects to the output record for (size_t i=0; i < fcalshowers.size(); i++) diff --git a/src/libraries/HDDM/rest.xml b/src/libraries/HDDM/rest.xml index 192eaaf916..e3b9eef222 100644 --- a/src/libraries/HDDM/rest.xml +++ b/src/libraries/HDDM/rest.xml @@ -37,7 +37,8 @@ + docaTrack="float" timeTrack="float" + sumU="float" sumV="float"/> Date: Tue, 15 Sep 2026 08:27:14 -0400 Subject: [PATCH 6/6] Add SumU, SumV, docaTrack, and timeTrack for ECAL to tree --- src/libraries/ANALYSIS/DEventWriterROOT.cc | 77 +++++++++++++++++++++- 1 file changed, 74 insertions(+), 3 deletions(-) diff --git a/src/libraries/ANALYSIS/DEventWriterROOT.cc b/src/libraries/ANALYSIS/DEventWriterROOT.cc index deaa335bcb..c31e280f65 100644 --- a/src/libraries/ANALYSIS/DEventWriterROOT.cc +++ b/src/libraries/ANALYSIS/DEventWriterROOT.cc @@ -768,12 +768,19 @@ void DEventWriterROOT::Create_Branches_ChargedHypotheses(DTreeBranchRegister& lo locBranchRegister.Register_FundamentalArray(Build_BranchName(locParticleBranchName, "Energy_ECAL"), locArraySizeString, dInitNumNeutralArraySize); locBranchRegister.Register_FundamentalArray(Build_BranchName(locParticleBranchName, "NumBlocks_ECAL"), locArraySizeString, dInitNumNeutralArraySize); + locBranchRegister.Register_FundamentalArray(Build_BranchName(locParticleBranchName, "E1E9_ECAL"), locArraySizeString, dInitNumNeutralArraySize); + locBranchRegister.Register_FundamentalArray(Build_BranchName(locParticleBranchName, "E9E25_ECAL"), locArraySizeString, dInitNumNeutralArraySize); + locBranchRegister.Register_FundamentalArray(Build_BranchName(locParticleBranchName, "SumU_ECAL"), locArraySizeString, dInitNumNeutralArraySize); + locBranchRegister.Register_FundamentalArray(Build_BranchName(locParticleBranchName, "SumV_ECAL"), locArraySizeString, dInitNumNeutralArraySize); + //SHOWER MATCHING: locBranchRegister.Register_FundamentalArray(Build_BranchName(locParticleBranchName, "TrackBCAL_DeltaPhi"), locArraySizeString, dInitNumTrackArraySize); locBranchRegister.Register_FundamentalArray(Build_BranchName(locParticleBranchName, "TrackBCAL_DeltaZ"), locArraySizeString, dInitNumTrackArraySize); locBranchRegister.Register_FundamentalArray(Build_BranchName(locParticleBranchName, "TrackFCAL_DOCA"), locArraySizeString, dInitNumTrackArraySize); locBranchRegister.Register_FundamentalArray(Build_BranchName(locParticleBranchName, "TrackFCAL_DeltaT"), locArraySizeString, dInitNumTrackArraySize); + locBranchRegister.Register_FundamentalArray(Build_BranchName(locParticleBranchName, "TrackECAL_DOCA"), locArraySizeString, dInitNumTrackArraySize); + locBranchRegister.Register_FundamentalArray(Build_BranchName(locParticleBranchName, "TrackECAL_DeltaT"), locArraySizeString, dInitNumTrackArraySize); //DIRC: if(DIRC_OUTPUT) { @@ -857,13 +864,20 @@ void DEventWriterROOT::Create_Branches_NeutralHypotheses(DTreeBranchRegister& lo locBranchRegister.Register_FundamentalArray(Build_BranchName(locParticleBranchName, "Energy_CCAL"), locArraySizeString, dInitNumNeutralArraySize); locBranchRegister.Register_FundamentalArray(Build_BranchName(locParticleBranchName, "Energy_ECAL"), locArraySizeString, dInitNumNeutralArraySize); if(ECAL_VERBOSE_OUTPUT) { + locBranchRegister.Register_FundamentalArray(Build_BranchName(locParticleBranchName, "E1E9_ECAL"), locArraySizeString, dInitNumNeutralArraySize); + locBranchRegister.Register_FundamentalArray(Build_BranchName(locParticleBranchName, "E9E25_ECAL"), locArraySizeString, dInitNumNeutralArraySize); + locBranchRegister.Register_FundamentalArray(Build_BranchName(locParticleBranchName, "SumU_ECAL"), locArraySizeString, dInitNumNeutralArraySize); + locBranchRegister.Register_FundamentalArray(Build_BranchName(locParticleBranchName, "SumV_ECAL"), locArraySizeString, dInitNumNeutralArraySize); locBranchRegister.Register_FundamentalArray(Build_BranchName(locParticleBranchName, "NumBlocks_ECAL"), locArraySizeString, dInitNumNeutralArraySize); + } //NEARBY TRACKS locBranchRegister.Register_FundamentalArray(Build_BranchName(locParticleBranchName, "TrackBCAL_DeltaPhi"), locArraySizeString, dInitNumNeutralArraySize); locBranchRegister.Register_FundamentalArray(Build_BranchName(locParticleBranchName, "TrackBCAL_DeltaZ"), locArraySizeString, dInitNumNeutralArraySize); locBranchRegister.Register_FundamentalArray(Build_BranchName(locParticleBranchName, "TrackFCAL_DOCA"), locArraySizeString, dInitNumNeutralArraySize); locBranchRegister.Register_FundamentalArray(Build_BranchName(locParticleBranchName, "TrackFCAL_DeltaT"), locArraySizeString, dInitNumNeutralArraySize); + locBranchRegister.Register_FundamentalArray(Build_BranchName(locParticleBranchName, "TrackECAL_DOCA"), locArraySizeString, dInitNumNeutralArraySize); + locBranchRegister.Register_FundamentalArray(Build_BranchName(locParticleBranchName, "TrackECAL_DeltaT"), locArraySizeString, dInitNumNeutralArraySize); //PHOTON PID INFO //Computed using DVertex (best estimate of reaction vertex using all "good" tracks) @@ -1884,8 +1898,8 @@ void DEventWriterROOT::Fill_ChargedHypo(DTreeFillData* locTreeFillData, unsigned locECALShower = locECALShowerMatchParams->dECALShower; } - //shared_ptr locECALSingleHitMatchParams - // = locChargedTrackHypothesis->Get_ECALSingleHitMatchParams(); + shared_ptr locECALSingleHitMatchParams + = locChargedTrackHypothesis->Get_ECALSingleHitMatchParams(); //IDENTIFIERS locTreeFillData->Fill_Array(Build_BranchName(locParticleBranchName, "TrackID"), locTrackTimeBased->candidateid, locArrayIndex); @@ -2007,6 +2021,16 @@ void DEventWriterROOT::Fill_ChargedHypo(DTreeFillData* locTreeFillData, unsigned locTreeFillData->Fill_Array(Build_BranchName(locParticleBranchName, "NumBlocks_FCAL"), locNumBlocksFCAL, locArrayIndex); double locNumBlocksECAL = (locECALShower != NULL) ? locECALShower->nBlocks : 0.0; + + double locE1E9ECAL = (locECALShower != NULL) ? locECALShower->E1E9 : 0.0; + double locE9E25ECAL = (locECALShower != NULL) ? locECALShower->E9E25 : 0.0; + double locSumUECAL = (locECALShower != NULL) ? locECALShower->sumU : 0.0; + double locSumVECAL = (locECALShower != NULL) ? locECALShower->sumV : 0.0; + locTreeFillData->Fill_Array(Build_BranchName(locParticleBranchName, "E1E9_ECAL"), locE1E9ECAL, locArrayIndex); + locTreeFillData->Fill_Array(Build_BranchName(locParticleBranchName, "E9E25_ECAL"), locE9E25ECAL, locArrayIndex); + locTreeFillData->Fill_Array(Build_BranchName(locParticleBranchName, "SumU_ECAL"), locSumUECAL, locArrayIndex); + locTreeFillData->Fill_Array(Build_BranchName(locParticleBranchName, "SumV_ECAL"), locSumVECAL, locArrayIndex); + if (locECALSingleHitMatchParams!=nullptr) locNumBlocksECAL=1.; locTreeFillData->Fill_Array(Build_BranchName(locParticleBranchName, "NumBlocks_ECAL"), locNumBlocksECAL, locArrayIndex); //TIMING INFO @@ -2030,6 +2054,31 @@ void DEventWriterROOT::Fill_ChargedHypo(DTreeFillData* locTreeFillData, unsigned locTreeFillData->Fill_Array(Build_BranchName(locParticleBranchName, "TrackBCAL_DeltaPhi"), locTrackBCAL_DeltaPhi, locArrayIndex); locTreeFillData->Fill_Array(Build_BranchName(locParticleBranchName, "TrackBCAL_DeltaZ"), locTrackBCAL_DeltaZ, locArrayIndex); + //SHOWER MATCHING: ECAL + double locDOCAToShower_ECAL = 999.0; + double locDeltaT_TrackToShower_ECAL = 999.0; + if(locECALShowerMatchParams!=nullptr) { + locDOCAToShower_ECAL = locECALShowerMatchParams->dDOCAToShower; + locDeltaT_TrackToShower_ECAL = locECALShower->t + -(locChargedTrackHypothesis->t0() + + locECALShowerMatchParams->dFlightTime); + } + locTreeFillData->Fill_Array(Build_BranchName(locParticleBranchName, "TrackECAL_DOCA"), locDOCAToShower_ECAL, locArrayIndex); + locTreeFillData->Fill_Array(Build_BranchName(locParticleBranchName, "TrackECAL_DeltaT"), locDeltaT_TrackToShower_ECAL, locArrayIndex); + + // Single hit matching: ECAL + if(locECALSingleHitMatchParams!=nullptr){ + double locDOCAToECALHit = locECALSingleHitMatchParams->dDOCAToHit; + locTreeFillData->Fill_Array(Build_BranchName(locParticleBranchName, "TrackECAL_DOCA"), locDOCAToECALHit, locArrayIndex); + + locDeltaT_TrackToShower_ECAL = locECALSingleHitMatchParams->dTHit + - ( locChargedTrackHypothesis->t0() + + locECALSingleHitMatchParams->dFlightTime); + locTreeFillData->Fill_Array(Build_BranchName(locParticleBranchName, "TrackECAL_DeltaT"), locDeltaT_TrackToShower_ECAL, locArrayIndex); + + } + + //SHOWER MATCHING: FCAL double locDOCAToShower_FCAL = 999.0; double locDeltaT_TrackToShower_FCAL = 999.0; @@ -2217,7 +2266,7 @@ void DEventWriterROOT::Fill_NeutralHypo(DTreeFillData* locTreeFillData, unsigned double locE9E25FCAL = (locFCALShower != NULL) ? locFCALShower->getE9E25() : 0.0; double locSumUFCAL = (locFCALShower != NULL) ? locFCALShower->getSumU() : 0.0; double locSumVFCAL = (locFCALShower != NULL) ? locFCALShower->getSumV() : 0.0; - double locNumBlocksFCAL = (locFCALShower != NULL) ? locFCALShower->getNumBlocks() : 0.0; + double locNumBlocksFCAL = (locFCALShower != NULL) ? locFCALShower->getNumBlocks() : 0.0; locTreeFillData->Fill_Array(Build_BranchName(locParticleBranchName, "E1E9_FCAL"), locE1E9FCAL, locArrayIndex); locTreeFillData->Fill_Array(Build_BranchName(locParticleBranchName, "E9E25_FCAL"), locE9E25FCAL, locArrayIndex); locTreeFillData->Fill_Array(Build_BranchName(locParticleBranchName, "SumU_FCAL"), locSumUFCAL, locArrayIndex); @@ -2227,6 +2276,14 @@ void DEventWriterROOT::Fill_NeutralHypo(DTreeFillData* locTreeFillData, unsigned if(ECAL_VERBOSE_OUTPUT) { double locNumBlocksECAL = (locECALShower != NULL) ? locECALShower->nBlocks : 0.0; + double locE1E9ECAL = (locECALShower != NULL) ? locECALShower->E1E9 : 0.0; + double locE9E25ECAL = (locECALShower != NULL) ? locECALShower->E9E25 : 0.0; + double locSumUECAL = (locECALShower != NULL) ? locECALShower->sumU : 0.0; + double locSumVECAL = (locECALShower != NULL) ? locECALShower->sumV : 0.0; + locTreeFillData->Fill_Array(Build_BranchName(locParticleBranchName, "E1E9_ECAL"), locE1E9ECAL, locArrayIndex); + locTreeFillData->Fill_Array(Build_BranchName(locParticleBranchName, "E9E25_ECAL"), locE9E25ECAL, locArrayIndex); + locTreeFillData->Fill_Array(Build_BranchName(locParticleBranchName, "SumU_ECAL"), locSumUECAL, locArrayIndex); + locTreeFillData->Fill_Array(Build_BranchName(locParticleBranchName, "SumV_ECAL"), locSumVECAL, locArrayIndex); locTreeFillData->Fill_Array(Build_BranchName(locParticleBranchName, "NumBlocks_ECAL"), locNumBlocksECAL, locArrayIndex); } @@ -2248,6 +2305,20 @@ void DEventWriterROOT::Fill_NeutralHypo(DTreeFillData* locTreeFillData, unsigned locTreeFillData->Fill_Array(Build_BranchName(locParticleBranchName, "TrackBCAL_DeltaPhi"), locNearestTrackBCALDeltaPhi, locArrayIndex); locTreeFillData->Fill_Array(Build_BranchName(locParticleBranchName, "TrackBCAL_DeltaZ"), locNearestTrackBCALDeltaZ, locArrayIndex); + //Track DOCA to Shower - FCAL + double locDistanceToNearestTrack_ECAL = 999.0; + double locDeltaT_TrackToShower_ECAL = 999.0; + if(locECALShower != NULL) + { + if(!locDetectorMatches->Get_DistanceToNearestTrack(locECALShower, locDistanceToNearestTrack_ECAL)) + locDistanceToNearestTrack_ECAL = 999.0; + if(locDistanceToNearestTrack_ECAL > 999.0) + locDistanceToNearestTrack_ECAL = 999.0; + locDeltaT_TrackToShower_ECAL = locECALShower->t - ( locNeutralParticleHypothesis->t0() + locECALShower->timeTrack ); + } + locTreeFillData->Fill_Array(Build_BranchName(locParticleBranchName, "TrackECAL_DOCA"), locDistanceToNearestTrack_ECAL, locArrayIndex); + locTreeFillData->Fill_Array(Build_BranchName(locParticleBranchName, "TrackECAL_DeltaT"), locDeltaT_TrackToShower_ECAL, locArrayIndex); + //Track DOCA to Shower - FCAL double locDistanceToNearestTrack_FCAL = 999.0; double locDeltaT_TrackToShower_FCAL = 999.0;