Hall-D Software  alpha
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Macros Groups Pages
residFDCCathode.cc
Go to the documentation of this file.
1 // residFDCCathode: class to calculate drift distance, distance of closest
2 // approach, point of closest approach, residual and error on residual
3 // for the FDC anode wires for a given set of track parameters
4 
5 #include "residFDCCathode.h"
6 
7 using namespace std;
8 
9 const double velDrift = 55.e-4; // cm/ns
10 const double c = 29.9792548; // speed of light, cm/ns
11 
12 // constructor, takes pointer to vector of trackhits and a pointer
13 // to a trajectory
14 residFDCCathode::residFDCCathode(vector<const DFDCPseudo*> *pseudopoints,
15  const MyTrajectory *trajectory, int level) :
16  n_fdca(pseudopoints->size()), pseudopointVectorPtr(pseudopoints), trajPtr(trajectory),
17  debug_level(level), errorFDCA(0.018)
18 {}
19 
21  const DFDCPseudo* pseudopointPtr;
22  DLine line;
23  double docaThis, distThis, residThis, errorThis;
24  HepLorentzVector pocaThis;
25  HepVector posWireThis;
26  doca.clear();
27  dist.clear();
28  poca.clear();
29  posWire.clear();
30  error.clear();
31  resid.clear();
32  for (unsigned int j = 0; j < n_fdca; j++) {
33  pseudopointPtr = (*pseudopointVectorPtr)[j];
34  line = pseudopoint2line(*pseudopointPtr);
35  docaThis = trajPtr->doca(line, pocaThis);
36  distThis = velDrift*(pseudopointPtr->time - pocaThis.getT()/c);
37  if (docaThis > distThis) {
38  residThis = (distThis - docaThis)/errorFDCA;
39  } else {
40  residThis = innerResidFrac*(distThis - docaThis)/errorFDCA;
41  }
42  posWireThis = line.poca(pocaThis);
43  if (debug_level > 2) cout << "residFDCCathode: j = " << j
44  << " dist = " << distThis
45  << " doca = " << docaThis
46  << " poca xyzt = " << pocaThis.getX()
47  << ' ' << pocaThis.getY()
48  << ' ' << pocaThis.getZ()
49  << ' ' << pocaThis.getT()/c
50  << " resid = " << residThis << endl;
51  errorThis = errorFDCA;
52  doca.push_back(docaThis);
53  dist.push_back(distThis);
54  poca.push_back(pocaThis);
55  posWire.push_back(posWireThis);
56  resid.push_back(residThis);
57  error.push_back(errorThis);
58  }
59 };
60 
62  const DFDCWire *wire = pseudopoint.wire;
63  double x = wire->origin.X();
64  double y = wire->origin.Y();
65  double z = wire->origin.Z();
66  double theta = acos(wire->udir.z());
67  double phi = atan2(wire->udir.y(), wire->udir.x());
68  if (debug_level >= 4) cout << setprecision(14) << "residFDCCathode::pseudopoint2line: x = " << x << " y = " << y << " z = " << z << " theta " << theta << " phi " << phi << endl;
69  DLine line(x, y, z, theta, phi, debug_level);
70  return line;
71 }
72 
73 void residFDCCathode::setInnerResidFrac(double innerResidFracIn) {
74  innerResidFrac = innerResidFracIn;
75 }
76 
77 void residFDCCathode::getResids(vector<double> &residsRef) {
78  residsRef = resid;
79  return;
80 }
81 
82 void residFDCCathode::getDetails(vector<double> &docasRef, vector<double> &distsRef,
83  vector<double> &errorsRef,
84  vector<HepLorentzVector> &pocasRef,
85  vector<HepVector> &posWiresRef) {
86  docasRef = doca;
87  distsRef = dist;
88  errorsRef = error;
89  pocasRef = poca;
90  posWiresRef = posWire;
91  return;
92 }
Double_t x[NCHANNELS]
Definition: st_tw_resols.C:39
#define c
#define y
const DFDCWire * wire
DFDCWire for this wire.
Definition: DFDCPseudo.h:92
vector< HepVector > posWire
double doca(C &spaceObject, HepLorentzVector &poca) const
Definition: MyTrajectory.h:48
class DFDCPseudo: definition for a reconstructed point in the FDC
Definition: DFDCPseudo.h:74
vector< double > doca
void setInnerResidFrac(double innerResidFracIn)
unsigned int n_fdca
HepVector poca(HepVector point)
Definition: DLine.cc:37
Definition: DLine.h:8
void getDetails(vector< double > &docasRef, vector< double > &distsRef, vector< double > &errorsRef, vector< HepLorentzVector > &pocasRef, vector< HepVector > &posWiresRef)
void getResids(vector< double > &residsRef)
double time
time corresponding to this pseudopoint.
Definition: DFDCPseudo.h:93
vector< HepLorentzVector > poca
residFDCCathode(vector< const DFDCPseudo * > *pseudopoints, const MyTrajectory *trajectory, int level=1)
vector< double > error
vector< double > dist
DLine pseudopoint2line(const DFDCPseudo &pseudopoint)
const double velDrift
vector< double > resid
const MyTrajectory * trajPtr