Hall-D Software  alpha
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Macros Groups Pages
DDetectorMatches_factory_Combo.cc
Go to the documentation of this file.
1 // $Id$
2 //
3 // File: DDetectorMatches_factory_Combo.cc
4 // Created: Tue Aug 9 14:29:24 EST 2011
5 // Creator: pmatt (on Linux ifarml6 2.6.18-128.el5 x86_64)
6 //
7 
8 #ifdef VTRACE
9 #include "vt_user.h"
10 #endif
11 
13 
14 //------------------
15 // init
16 //------------------
18 {
19  return NOERROR;
20 }
21 
22 //------------------
23 // brun
24 //------------------
25 jerror_t DDetectorMatches_factory_Combo::brun(jana::JEventLoop *locEventLoop, int32_t runnumber)
26 {
27  dDetectorMatchesFactory = static_cast<DDetectorMatches_factory*>(locEventLoop->GetFactory("DDetectorMatches"));
28  return NOERROR;
29 }
30 
32 {
33  TMatrixFSym locTrackingMatrix = *(locTrack->errorMatrix().get());
34  locTrackingMatrix.ResizeTo(3, 3);
35 
36  TMatrixD locJacobian(1, 3);
37  DVector3 locUnitP = locTrack->momentum().Unit();
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);
43 }
44 
45 pair<double, double> DDetectorMatches_factory_Combo::Calc_EnergyRatio(const DTrackTimeBased* locTrackTimeBased, const DTrackTimeBased* locOriginalTrackTimeBased) const
46 {
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();
52  double locPVariance = Calc_PVariance(locTrackTimeBased);
53 
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;
58 
59  return pair<double, double>(locEnergyRatio, locRatioVariance);
60 }
61 
62 //------------------
63 // evnt
64 //------------------
65 jerror_t DDetectorMatches_factory_Combo::evnt(jana::JEventLoop* locEventLoop, uint64_t eventnumber)
66 {
67 #ifdef VTRACE
68  VT_TRACER("DDetectorMatches_factory_Combo::evnt()");
69 #endif
70 
71  //get new DTrackTimeBased objects
72  vector<const DTrackTimeBased*> locTrackTimeBasedVector;
73  locEventLoop->Get(locTrackTimeBasedVector, "Combo");
74 
75  //get and import original results (will also update bcal/fcal shower distance-to-track results)
76  const DDetectorMatches* locOriginalDetectorMatches = NULL;
77  locEventLoop->GetSingle(locOriginalDetectorMatches);
78 
79  DDetectorMatches* locDetectorMatches = new DDetectorMatches(*locOriginalDetectorMatches);
80 
81  //add new time-based tracks: get results from original time based track and clone
82  for(size_t loc_i = 0; loc_i < locTrackTimeBasedVector.size(); ++loc_i)
83  {
84  const DTrackTimeBased* locTrackTimeBased = locTrackTimeBasedVector[loc_i];
85  const DTrackTimeBased* locOriginalTrackTimeBased = NULL;
86  locTrackTimeBased->GetSingleT(locOriginalTrackTimeBased);
87 
88  pair<double, double> locEnergyRatio = Calc_EnergyRatio(locTrackTimeBased, locOriginalTrackTimeBased); //2nd is variance, not error!
89 
90  //BCAL
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)
94  {
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;
99  //assumes correlation between delta-t and E-ratio is negligible
100  locNewMatch->dFlightTimeVariance = locDeltaTVar*locEnergyRatio.first*locEnergyRatio.first + locEnergyRatio.second*locDeltaT*locDeltaT;
101  locDetectorMatches->Add_Match(locTrackTimeBased, locBCALShowerMatchParamsVector[loc_j]->dBCALShower, locNewMatch);
102  }
103 
104  //FCAL
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)
108  {
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;
113  //assumes correlation between delta-t and E-ratio is negligible
114  locNewMatch->dFlightTimeVariance = locDeltaTVar*locEnergyRatio.first*locEnergyRatio.first + locEnergyRatio.second*locDeltaT*locDeltaT;
115  locDetectorMatches->Add_Match(locTrackTimeBased, locFCALShowerMatchParamsVector[loc_j]->dFCALShower, locNewMatch);
116  }
117 
118  //TOF
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)
122  {
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;
127  //assumes correlation between delta-t and E-ratio is negligible
128  locNewMatch->dFlightTimeVariance = locDeltaTVar*locEnergyRatio.first*locEnergyRatio.first + locEnergyRatio.second*locDeltaT*locDeltaT;
129  locDetectorMatches->Add_Match(locTrackTimeBased, locTOFHitMatchParamsVector[loc_j]->dTOFPoint, locNewMatch);
130  }
131 
132  //SC
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)
136  {
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;
141  //assumes correlation between delta-t and E-ratio is negligible
142  locNewMatch->dFlightTimeVariance = locDeltaTVar*locEnergyRatio.first*locEnergyRatio.first + locEnergyRatio.second*locDeltaT*locDeltaT;
143  locDetectorMatches->Add_Match(locTrackTimeBased, locSCHitMatchParamsVector[loc_j]->dSCHit, locNewMatch);
144  }
145 
146  //Flight-Time/P Correlations
147  double locFlightTimePCorrelation = 0.0;
148  if(locDetectorMatches->Get_FlightTimePCorrelation(locOriginalTrackTimeBased, SYS_BCAL, locFlightTimePCorrelation))
149  locDetectorMatches->Set_FlightTimePCorrelation(locTrackTimeBased, SYS_BCAL, locFlightTimePCorrelation);
150  if(locDetectorMatches->Get_FlightTimePCorrelation(locOriginalTrackTimeBased, SYS_FCAL, locFlightTimePCorrelation))
151  locDetectorMatches->Set_FlightTimePCorrelation(locTrackTimeBased, SYS_FCAL, locFlightTimePCorrelation);
152  if(locDetectorMatches->Get_FlightTimePCorrelation(locOriginalTrackTimeBased, SYS_TOF, locFlightTimePCorrelation))
153  locDetectorMatches->Set_FlightTimePCorrelation(locTrackTimeBased, SYS_TOF, locFlightTimePCorrelation);
154  if(locDetectorMatches->Get_FlightTimePCorrelation(locOriginalTrackTimeBased, SYS_START, locFlightTimePCorrelation))
155  locDetectorMatches->Set_FlightTimePCorrelation(locTrackTimeBased, SYS_START, locFlightTimePCorrelation);
156  }
157 
158  _data.push_back(locDetectorMatches);
159 
160  return NOERROR;
161 }
162 
163 //------------------
164 // erun
165 //------------------
167 {
168  return NOERROR;
169 }
170 
171 //------------------
172 // fini
173 //------------------
175 {
176  return NOERROR;
177 }
178 
179 
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
TVector3 DVector3
Definition: DVector3.h:14
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
Definition: GlueX.h:19
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.
Definition: GlueX.h:20
Definition: GlueX.h:22
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)
double mass(void) const