33 TMatrixFSym locTrackingMatrix = *(locTrack->
errorMatrix().get());
34 locTrackingMatrix.ResizeTo(3, 3);
36 TMatrixD locJacobian(1, 3);
38 locJacobian(0, 0) = locUnitP.X();
39 locJacobian(0, 1) = locUnitP.Y();
40 locJacobian(0, 2) = locUnitP.Z();
41 TMatrixDSym locPVariance = locTrackingMatrix.Similarity(locJacobian);
42 return locPVariance(0, 0);
47 double locMass1 = locTrackTimeBased->
mass();
48 double locMass2 = locOriginalTrackTimeBased->
mass();
49 double locEnergy1 = locTrackTimeBased->
energy();
50 double locEnergy2 = locOriginalTrackTimeBased->
energy();
51 double locPSq = locTrackTimeBased->
momentum().Mag2();
54 double locEnergyRatio = locEnergy1/locEnergy2;
55 double locDeltaMassSq = locMass1*locMass1 - locMass2*locMass2;
56 double locDenominator = locEnergy1*locEnergy1*locEnergy1*locEnergy1*locEnergy2*locEnergy2*locEnergy2*locEnergy2;
57 double locRatioVariance = locPVariance*locPSq*locDeltaMassSq*locDeltaMassSq/locDenominator;
59 return pair<double, double>(locEnergyRatio, locRatioVariance);
68 VT_TRACER(
"DDetectorMatches_factory_Combo::evnt()");
72 vector<const DTrackTimeBased*> locTrackTimeBasedVector;
73 locEventLoop->Get(locTrackTimeBasedVector,
"Combo");
77 locEventLoop->GetSingle(locOriginalDetectorMatches);
82 for(
size_t loc_i = 0; loc_i < locTrackTimeBasedVector.size(); ++loc_i)
84 const DTrackTimeBased* locTrackTimeBased = locTrackTimeBasedVector[loc_i];
86 locTrackTimeBased->GetSingleT(locOriginalTrackTimeBased);
88 pair<double, double> locEnergyRatio =
Calc_EnergyRatio(locTrackTimeBased, locOriginalTrackTimeBased);
91 vector<shared_ptr<const DBCALShowerMatchParams>> locBCALShowerMatchParamsVector;
92 locDetectorMatches->
Get_BCALMatchParams(locOriginalTrackTimeBased, locBCALShowerMatchParamsVector);
93 for(
size_t loc_j = 0; loc_j < locBCALShowerMatchParamsVector.size(); ++loc_j)
95 double locDeltaT = locBCALShowerMatchParamsVector[loc_j]->dFlightTime;
96 double locDeltaTVar = locBCALShowerMatchParamsVector[loc_j]->dFlightTimeVariance;
97 auto locNewMatch = std::make_shared<DBCALShowerMatchParams>(*locBCALShowerMatchParamsVector[loc_j]);
98 locNewMatch->dFlightTime *= locEnergyRatio.first;
100 locNewMatch->dFlightTimeVariance = locDeltaTVar*locEnergyRatio.first*locEnergyRatio.first + locEnergyRatio.second*locDeltaT*locDeltaT;
101 locDetectorMatches->
Add_Match(locTrackTimeBased, locBCALShowerMatchParamsVector[loc_j]->dBCALShower, locNewMatch);
105 vector<shared_ptr<const DFCALShowerMatchParams>> locFCALShowerMatchParamsVector;
106 locDetectorMatches->
Get_FCALMatchParams(locOriginalTrackTimeBased, locFCALShowerMatchParamsVector);
107 for(
size_t loc_j = 0; loc_j < locFCALShowerMatchParamsVector.size(); ++loc_j)
109 double locDeltaT = locFCALShowerMatchParamsVector[loc_j]->dFlightTime;
110 double locDeltaTVar = locFCALShowerMatchParamsVector[loc_j]->dFlightTimeVariance;
111 auto locNewMatch = std::make_shared<DFCALShowerMatchParams>(*locFCALShowerMatchParamsVector[loc_j]);
112 locNewMatch->dFlightTime *= locEnergyRatio.first;
114 locNewMatch->dFlightTimeVariance = locDeltaTVar*locEnergyRatio.first*locEnergyRatio.first + locEnergyRatio.second*locDeltaT*locDeltaT;
115 locDetectorMatches->
Add_Match(locTrackTimeBased, locFCALShowerMatchParamsVector[loc_j]->dFCALShower, locNewMatch);
119 vector<shared_ptr<const DTOFHitMatchParams>> locTOFHitMatchParamsVector;
120 locDetectorMatches->
Get_TOFMatchParams(locOriginalTrackTimeBased, locTOFHitMatchParamsVector);
121 for(
size_t loc_j = 0; loc_j < locTOFHitMatchParamsVector.size(); ++loc_j)
123 double locDeltaT = locTOFHitMatchParamsVector[loc_j]->dFlightTime;
124 double locDeltaTVar = locTOFHitMatchParamsVector[loc_j]->dFlightTimeVariance;
125 auto locNewMatch = std::make_shared<DTOFHitMatchParams>(*locTOFHitMatchParamsVector[loc_j]);
126 locNewMatch->dFlightTime *= locEnergyRatio.first;
128 locNewMatch->dFlightTimeVariance = locDeltaTVar*locEnergyRatio.first*locEnergyRatio.first + locEnergyRatio.second*locDeltaT*locDeltaT;
129 locDetectorMatches->
Add_Match(locTrackTimeBased, locTOFHitMatchParamsVector[loc_j]->dTOFPoint, locNewMatch);
133 vector<shared_ptr<const DSCHitMatchParams>> locSCHitMatchParamsVector;
134 locDetectorMatches->
Get_SCMatchParams(locOriginalTrackTimeBased, locSCHitMatchParamsVector);
135 for(
size_t loc_j = 0; loc_j < locSCHitMatchParamsVector.size(); ++loc_j)
137 double locDeltaT = locSCHitMatchParamsVector[loc_j]->dFlightTime;
138 double locDeltaTVar = locSCHitMatchParamsVector[loc_j]->dFlightTimeVariance;
139 auto locNewMatch = std::make_shared<DSCHitMatchParams>(*locSCHitMatchParamsVector[loc_j]);
140 locNewMatch->dFlightTime *= locEnergyRatio.first;
142 locNewMatch->dFlightTimeVariance = locDeltaTVar*locEnergyRatio.first*locEnergyRatio.first + locEnergyRatio.second*locDeltaT*locDeltaT;
143 locDetectorMatches->
Add_Match(locTrackTimeBased, locSCHitMatchParamsVector[loc_j]->dSCHit, locNewMatch);
147 double locFlightTimePCorrelation = 0.0;
158 _data.push_back(locDetectorMatches);
bool Get_TOFMatchParams(const DTrackingData *locTrack, vector< shared_ptr< const DTOFHitMatchParams > > &locMatchParams) const
bool Get_SCMatchParams(const DTrackingData *locTrack, vector< shared_ptr< const DSCHitMatchParams > > &locMatchParams) const
double energy(void) const
bool Get_FCALMatchParams(const DTrackingData *locTrack, vector< shared_ptr< const DFCALShowerMatchParams > > &locMatchParams) const
pair< double, double > Calc_EnergyRatio(const DTrackTimeBased *locTrackTimeBased, const DTrackTimeBased *locOriginalTrackTimeBased) const
DDetectorMatches_factory * dDetectorMatchesFactory
void Add_Match(const DTrackingData *locTrack, const DBCALShower *locBCALShower, const shared_ptr< const DBCALShowerMatchParams > &locShowerMatchParams)
jerror_t init(void)
Called once at program start.
jerror_t fini(void)
Called after last event of last event source has been processed.
bool Get_FlightTimePCorrelation(const DTrackingData *locTrack, DetectorSystem_t locDetectorSystem, double &locCorrelation) const
jerror_t evnt(jana::JEventLoop *locEventLoop, uint64_t eventnumber)
Called every event.
jerror_t erun(void)
Called everytime run number changes, provided brun has been called.
jerror_t brun(jana::JEventLoop *locEventLoop, int32_t runnumber)
Called everytime a new run number is detected.
bool Get_BCALMatchParams(const DTrackingData *locTrack, vector< shared_ptr< const DBCALShowerMatchParams > > &locMatchParams) const
const DVector3 & momentum(void) const
double Calc_PVariance(const DTrackTimeBased *locTrack) const
shared_ptr< const TMatrixFSym > errorMatrix(void) const
void Set_FlightTimePCorrelation(const DTrackingData *locTrack, DetectorSystem_t locDetectorSystem, double locCorrelation)