23 #include "TPrincipal.h" 24 #include "TDatabasePDG.h" 71 const double* xyz1 = h1->
XYZ();
72 const double* xyz2 = h2->
XYZ();
73 return xyz1[2] < xyz2[2];
77 const double* xyz1 = h1->
XYZ();
78 const double* xyz2 = h2->
XYZ();
79 return xyz1[1] < xyz2[1];
83 const double* xyz1 = h1->
XYZ();
84 const double* xyz2 = h2->
XYZ();
85 return xyz1[0] < xyz2[0];
90 const unsigned int s1 = h1.
size();
91 const unsigned int s2 = h2.
size();
115 void rotationCov(TMatrixT<Double_t> &cov,
const TVector3 &u,
const TVector3 &v);
227 produces< std::vector<recob::Track> >();
228 produces<art::Assns<recob::Track, recob::Cluster> >();
229 produces<art::Assns<recob::Track, recob::SpacePoint> >();
230 produces<art::Assns<recob::Track, recob::Hit> >();
242 fPosErr = pset.
get< std::vector < double > >(
"PosErr3");
243 fMomErr = pset.
get< std::vector < double > >(
"MomErr3");
244 fMomStart = pset.
get< std::vector < double > >(
"MomStart3");
246 fDoFit = pset.
get<
bool >(
"DoFit",
true);
258 fPdg = pset.
get<
int >(
"PdgCode", -13);
260 fSortDim = pset.
get< std::string> (
"SortDirection",
"z");
265 <<
"Parameter 'GenfPRINT' has been deprecated.\n" 266 "Please use the standard message facility to enable GenFit debug output.";
289 const double charge(1.0);
290 const double mEE(188.);
291 const double matZ(18.);
292 const double matA(40.);
293 const double matDensity(1.4);
294 const double me(0.000511);
296 double beta = p/std::sqrt(mass*mass+p*p);
297 double gammaSquare = 1./(1.0 - beta*
beta);
299 double dedx = 0.307075*matDensity*matZ/matA/(beta*
beta)*charge*charge;
300 double massRatio = me/mass;
302 double argument = gammaSquare*beta*beta*me*1.E3*2./((1.E-6*mEE) * std::sqrt(1+2*std::sqrt(gammaSquare)*massRatio + massRatio*massRatio));
304 if (mass==0.0)
return(0.0);
305 if (argument <= exp(beta*beta))
310 dedx *= (log(argument)-beta*
beta);
312 if (dedx<0.) dedx = 0.;
319 TVector3 xhat(1.0,0.0,0.0);
320 TVector3 yhat(0.0,1.0,0.0);
321 TVector3 zhat(0.0,0.0,1.0);
322 TVector3
w(u.Cross(v));
324 TVector3 vprime(
w.Cross(xhat));
325 Double_t angle(v.Angle(vprime));
327 uprime.Rotate(angle,
w);
330 uprime.Rotate(TMath::Pi(),
w);
331 vprime.Rotate(TMath::Pi(),
w);
335 double c = TMath::Cos(angle),
s = TMath::Sin(angle);
336 TMatrixT<Double_t> rot(5,5);
359 std::vector <double> v;
363 double mindist(100.0);
364 auto spptminIt(sppt);
365 while (sppt != s.
end())
367 if (((**sppt).XYZ() - loc).Mag() < mindist)
369 double dist = ((**sppt).XYZ() - loc).Mag();
376 if (mindist < 0.01)
break;
382 unsigned int ind(std::distance(s.
begin(),spptminIt));
386 std::vector< art::Ptr<recob::Hit> > hitlist = h.at(ind);
388 double wirePitch = 0.;
389 double angleToVert = 0;
395 ihit != hitlist.end(); ++ihit)
402 plane1 = hit1WireID.
Plane;
405 angleToVert = geom->
Plane(plane1).
Wire(0).
ThetaZ(
false) - 0.5*TMath::Pi();
408 double cosgamma = TMath::Abs(TMath::Sin(angleToVert)*dir.Y() +
409 TMath::Cos(angleToVert)*dir.Z());
413 v.push_back(charge/wirePitch/cosgamma);
427 stMCT =
new TMatrixT<Double_t>(5,1);
428 covMCT =
new TMatrixT<Double_t>(5,5);
429 stREC =
new TMatrixT<Double_t>(5,1);
430 covREC =
new TMatrixT<Double_t>(5,5);
434 fpREC =
new Float_t[4];
437 fCov0 =
new Float_t[25];
458 fPC1 =
new Float_t[3];
459 fPC2 =
new Float_t[3];
460 fPC3 =
new Float_t[3];
468 tree = tfs->
make<TTree>(
"GENFITttree",
"GENFITttree");
473 tree->Branch(
"covMCT",
"TMatrixD",&covMCT,64000,0);
476 tree->Branch(
"covREC",
fCov0,
"covREC[25]/F");
481 tree->Branch(
"chi2",&
chi2,
"chi2/F");
483 tree->Branch(
"ndf",&
ndf,
"ndf/I");
484 tree->Branch(
"evtNo",&
evtt,
"evtNo/I");
491 tree->Branch(
"shx",
fshx,
"shx[ptsNo]/F");
492 tree->Branch(
"shy",
fshy,
"shy[ptsNo]/F");
493 tree->Branch(
"shz",
fshz,
"shz[ptsNo]/F");
494 tree->Branch(
"sep",
fsep,
"sep[ptsNo]/F");
495 tree->Branch(
"dQdx",
fdQdx,
"dQdx[ptsNo]/F");
496 tree->Branch(
"eshx",
feshx,
"eshx[ptsNo]/F");
497 tree->Branch(
"eshy",
feshy,
"eshy[ptsNo]/F");
498 tree->Branch(
"eshz",
feshz,
"eshz[ptsNo]/F");
499 tree->Branch(
"eshyz",
feshyz,
"eshyz[ptsNo]/F");
502 tree->Branch(
"th",
fth,
"th[ptsNo]/F");
503 tree->Branch(
"eth",
feth,
"eth[ptsNo]/F");
504 tree->Branch(
"edudw",
fedudw,
"edudw[ptsNo]/F");
505 tree->Branch(
"edvdw",
fedvdw,
"edvdw[ptsNo]/F");
506 tree->Branch(
"eu",
feu,
"eu[ptsNo]/F");
507 tree->Branch(
"ev",
fev,
"ev[ptsNo]/F");
513 tree->Branch(
"pcEvec1",
fPC1,
"pcEvec1[3]/F");
514 tree->Branch(
"pcEvec2",
fPC2,
"pcEvec2[3]/F");
515 tree->Branch(
"pcEvec3",
fPC3,
"pcEvec3[3]/F");
518 tree->Branch(
"pMCMom",fpMCMom,
"pMCMom[4]/F");
520 tree->Branch(
"pRECKalF",
fpREC,
"pRECKalF[4]/F");
521 tree->Branch(
"pRECKalL",
fpRECL,
"pRECKalL[4]/F");
590 std::unique_ptr<std::vector<recob::Track> > tcol(
new std::vector<recob::Track>);
594 unsigned int tcnt = 0;
620 for (
unsigned int ii = 0; ii < mctruthListHandle->size(); ++ii)
634 std::vector < art::PtrVector<recob::SpacePoint> > spptIn(spptListHandle->begin(),spptListHandle->end());
659 for(
unsigned int ii = 0; ii < mclist.
size(); ++ii )
669 <<
"FROM MC TRUTH, the particle's pdg code is: "<<
part.PdgCode()<<
" with energy = "<<
part.E() <<
", with energy = "<<
part.E()
672 <<
"\n (both in Global (not volTPC) coords)";
688 LOG_DEBUG(
"Track3DKalmanSPS_GenFit") <<
" repMC, covMC are ... \n" 694 TParticlePDG *
part = TDatabasePDG::Instance()->GetParticle(
fPdg);
695 Double_t mass = part->Mass();
699 while (sppt!=spptIn.end())
709 unsigned int nTailPoints = 0;
710 if (spacepoints.
size()<5)
711 { sppt++; rePass0 = 3;
continue;}
714 <<
"\n\t found "<<spacepoints.
size()<<
" 3D spacepoint(s) for this element of std::vector<art:PtrVector> spacepoints. \n";
724 TPrincipal* principal =
new TPrincipal(3,
"ND");
735 for (
unsigned int point=0;point<spacepointss.
size();++point)
738 if (point<(spacepointss.
size()-nTailPoints))
740 principal->AddRow(spacepointss[point]->XYZ());
743 principal->MakePrincipals();
749 const TVectorD* evals = principal->GetEigenValues();
750 const TMatrixD* evecs = principal->GetEigenVectors();
751 const TVectorD* means = principal->GetMeanValues();
752 const TVectorD* sigmas = principal->GetSigmas();
763 Double_t
tmp[3], tmp2[3];
764 principal->X2P((Double_t *)(means->GetMatrixArray()),tmp);
765 principal->X2P((Double_t *)(sigmas->GetMatrixArray()),tmp2);
766 for (
unsigned int ii=0;ii<3;++ii)
770 fPCevals[ii] = (Float_t )(evals->GetMatrixArray())[ii];
775 evecs->ExtractRow(ii,0,w);
780 Double_t tmp3[3], tmp4[3], tmp5[3];
781 principal->X2P((Double_t *)
fPC1,tmp3);
782 principal->X2P((Double_t *)
fPC2,tmp4);
783 principal->X2P((Double_t *)
fPC3,tmp5);
788 fMomStart[0] = spacepointss[spacepointss.
size()-1]->XYZ()[0] - spacepointss[0]->XYZ()[0];
789 fMomStart[1] = spacepointss[spacepointss.
size()-1]->XYZ()[1] - spacepointss[0]->XYZ()[1];
790 fMomStart[2] = spacepointss[spacepointss.
size()-1]->XYZ()[2] - spacepointss[0]->XYZ()[2];
794 TVector3 mom(dEdx*
fMomStart[0],dEdx*fMomStart[1],dEdx*fMomStart[2]);
795 double pmag2 = pow(mom.Mag()+mass, 2. - mass*mass);
796 mom.SetMag(std::sqrt(pmag2));
798 mom.SetMag(1.0 * mom.Mag());
806 bool uncontained(
false);
808 double epsMag(0.001);
813 spacepointss[spacepointss.
size()-1]->XYZ()[0] > (2.*geom->
DetHalfWidth(0,0)-
close) || spacepointss[spacepointss.
size()-1]->XYZ()[0] < close ||
814 spacepointss[0]->XYZ()[0] > (2.*geom->
DetHalfWidth(0,0)-
close) || spacepointss[0]->XYZ()[0] < close ||
817 spacepointss[spacepointss.
size()-1]->XYZ()[2] > (geom->
DetLength(0,0)-
close) || spacepointss[spacepointss.
size()-1]->XYZ()[2] < close ||
818 spacepointss[0]->XYZ()[2] > (geom->
DetLength(0,0)-
close) || spacepointss[0]->XYZ()[2] <
close 829 mom.SetMag(2.0 * mom.Mag());
830 LOG_DEBUG(
"Track3DKalmanSPS_GenFit")<<
"Uncontained track ... ";
836 LOG_DEBUG(
"Track3DKalmanSPS_GenFit")<<
"Contained track ... Run "<<evt.
run()<<
" Event "<<evt.
id().
event();
843 fcont = (int) (!uncontained);
846 unsigned short rePass = rePass0;
848 unsigned short tcnt1(0);
849 while (rePass<=maxPass)
853 TVector3 momErrFit(momM[0]/3.0,
864 (TVector3)(spacepointss[0]->XYZ()),
879 std::vector <unsigned int> spptSurvivedIndex;
880 std::vector <unsigned int> spptSkippedIndex;
881 unsigned int ppoint(0);
882 for (
unsigned int point=0;point<spacepointss.
size();++point)
889 principal->X2P((Double_t *)(spacepointss[point]->XYZ()),tmp);
891 if ((std::abs(sep) >
fPerpLim) && (point<(spacepointss.
size()-nTailPoints)) && rePass<=1)
894 spptSkippedIndex.push_back(point);
899 TVector3 one(spacepointss[point]->XYZ());
900 TVector3 two(spacepointss[ppoint]->XYZ());
901 if (rePass==2 && uncontained)
905 fErrScaleMHere = 0.1;
913 else if (rePass==2 && !uncontained)
921 (one-two).Mag()<epsMag ||
922 ((one-two).Mag()>8.0&&rePass==1) ||
923 std::abs(spacepointss[point]->XYZ()[2]-spacepointss[ppoint]->XYZ()[2])<epsZ ||
924 std::abs(spacepointss[point]->XYZ()[0]-spacepointss[ppoint]->XYZ()[0])>epsX
930 spptSkippedIndex.push_back(point);
934 if (point%fDecimateHere && rePass<=1)
944 TVector3 spt3 = (TVector3)(spacepointss[point]->XYZ());
945 std::vector <double> err3;
946 err3.push_back(spacepointss[point]->ErrXYZ()[0]);
947 err3.push_back(spacepointss[point]->ErrXYZ()[2]);
948 err3.push_back(spacepointss[point]->ErrXYZ()[4]);
949 err3.push_back(spacepointss[point]->ErrXYZ()[5]);
965 fth[
fptsNo] = (pointer.Unit()).Angle(pointerPrev.Unit());
976 LOG_DEBUG(
"Track3DKalmanSPS_GenFit") <<
"ihit xyz..." << spt3[0]<<
","<< spt3[1]<<
","<< spt3[2];
982 spptSurvivedIndex.push_back(point);
988 LOG_DEBUG(
"Track3DKalmanSPS_GenFit") <<
"Bailing cuz only " <<
fptsNo <<
" spacepoints.";
992 LOG_DEBUG(
"Track3DKalmanSPS_GenFit") <<
"Fitting on " <<
fptsNo <<
" spacepoints.";
1005 bool skipFill =
false;
1007 std::vector < TMatrixT<double> > hitMeasCov;
1008 std::vector < TMatrixT<double> > hitUpdate;
1009 std::vector < TMatrixT<double> > hitCov;
1010 std::vector < TMatrixT<double> > hitCov7x7;
1011 std::vector < TMatrixT<double> > hitState;
1012 std::vector < double > hitChi2;
1013 std::vector <TVector3> hitPlaneXYZ;
1014 std::vector <TVector3> hitPlaneUxUyUz;
1015 std::vector <TVector3> hitPlaneU;
1016 std::vector <TVector3> hitPlaneV;
1025 LOG_ERROR(
"Track3DKalmanSPS") <<
"just caught a cet::exception: " << e.what()
1026 <<
"\nExceptions won't be further handled; skip filling big chunks of the TTree.";
1035 std::ostringstream dbgmsg;
1036 dbgmsg <<
"Original plane:";
1037 planeG.
Print(dbgmsg);
1039 dbgmsg <<
"Current (fit) reference Plane:";
1042 dbgmsg <<
"Last reference Plane:";
1046 dbgmsg <<
" => original hit plane (not surprisingly) not current reference Plane!";
1048 LOG_DEBUG(
"Track3DKalmanSPS_GenFit") << dbgmsg.str();
1062 unsigned int totHits = hitState.size();
1066 unsigned int jhit=0;
1067 for (
unsigned int ihit=totHits-2*totHits/(2*
fNumIt); ihit<(totHits-totHits/(2*
fNumIt)); ihit++)
1069 feth[jhit] = (Float_t ) (hitMeasCov.at(ihit)[0][0]);
1070 fedudw[jhit] = (Float_t ) (hitMeasCov.at(ihit)[1][1]);
1071 fedvdw[jhit] = (Float_t ) (hitMeasCov.at(ihit)[2][2]);
1072 feu[jhit] = (Float_t ) (hitMeasCov.at(ihit)[3][3]);
1073 fev[jhit] = (Float_t ) (hitMeasCov.at(ihit)[4][4]);
1074 fupdate[jhit] = (Float_t ) (hitUpdate.at(ihit)[0][0]);
1075 fchi2hit[jhit] = (Float_t ) (hitChi2.at(ihit));
1085 for (
unsigned int ii=0;ii<5;ii++)
1087 stREC->ExtractRow(ii,0,dum);
1089 covREC->ExtractRow(ii,0,dum2);
1090 for (
unsigned int jj=0;jj<5;jj++)
1092 fCov0[ii*5+jj] = dum2[jj];
1102 ispptvec=1+std::distance(spptB, sppt);
1106 LOG_DEBUG(
"Track3DKalmanSPS_GenFit") <<
"Track3DKalmanSPS about to do tree->Fill(). Chi2/ndf is " <<
chi2/
ndf <<
".";
1107 fpMCMom[3] = MCMomentum.Mag();
1108 for (
int ii=0;ii<3;++ii)
1112 fpREC[ii] = hitPlaneUxUyUz.at(totHits-2*totHits/(2*
fNumIt))[ii];
1113 fpRECL[ii] = hitPlaneUxUyUz.at(totHits-totHits/(2*
fNumIt)-1)[ii];
1117 nspptvec = (
unsigned int) spptListHandle->size();
1120 std::vector < std::vector <double> > dQdx;
1122 std::vector < TMatrixT<double> > hitCovLFP;
1123 std::vector <TVector3> hitPlaneXYZLFP;
1124 std::vector <TVector3> hitPlaneUxUyUzLFP;
1125 std::vector <TVector3> hitPlaneULFP;
1126 std::vector <TVector3> hitPlaneVLFP;
1127 std::vector <double> pLFP;
1128 std::vector < TMatrixT<double> > c7x7LFP;
1131 for (
unsigned int ii=0; ii<totHits/(2*
fNumIt); ii++)
1133 pLFP.push_back(1./hitState.at(totHits-2*totHits/(2*
fNumIt)+ii)[0][0]);
1135 c7x7LFP.push_back(hitCov7x7.at(totHits-2*totHits/(2*
fNumIt)+ii));
1136 hitCovLFP.push_back(hitCov.at(totHits-2*totHits/(2*
fNumIt)+ii));
1137 hitPlaneXYZLFP.push_back(hitPlaneXYZ.at(totHits-2*totHits/(2*
fNumIt)+ii));
1138 hitPlaneUxUyUzLFP.push_back(hitPlaneUxUyUz.at(totHits-2*totHits/(2*
fNumIt)+ii));
1139 hitPlaneULFP.push_back(hitPlaneU.at(totHits-2*totHits/(2*
fNumIt)+ii));
1140 hitPlaneVLFP.push_back(hitPlaneV.at(totHits-2*totHits/(2*
fNumIt)+ii));
1147 hitPlaneULFP.back(),
1152 hitPlaneUxUyUzLFP.back(),
1153 hitPlaneXYZLFP.back()
1156 fdQdx[ii] = dQdx.back().back();
1168 hitCovLFP,dQdx,pLFP, tcnt++
1170 if (rePass==1) tcnt1++;
1171 if (rePass!=1 && tcnt1) tcol->pop_back();
1172 tcol->push_back(the3DTrack);
1175 for (
unsigned int ii=0; ii < spacepointss.
size(); ++ii)
1179 hits.
insert(hits.
end(),hitAssns.at(ii).begin(),hitAssns.at(ii).end());
1191 for (
unsigned int ind=0;ind<spptSurvivedIndex.size();++ind)
1195 (!uncontained&&
fchi2hit[ind]>1.e9) ||
1209 for (
unsigned int ind=0;ind<spptSkippedIndex.size();++ind)
1216 std::stable_sort(spacepointss.
begin(),spacepointss.
end());
1217 std::stable_sort(spacepointssExcise.
begin(),spacepointssExcise.
end());
1218 std::set_union(spacepointssExcise.
begin(),spacepointssExcise.
end(),
1219 spacepointssExcise.
begin(),spacepointssExcise.
end(),
1220 spacepointssExcise.
begin()
1224 std::set_difference(spacepointss.
begin(),spacepointss.
end(),
1225 spacepointssExcise.
begin(),spacepointssExcise.
end(),
1226 spacepointss.
begin()
1228 spacepointss.
erase(diffSpptIt,spacepointss.
end());
1241 if (uncontained) kick = 0.5;
1242 for (
int ii=0;ii<3;++ii)
1245 mom[ii] = momM[ii]*kick;
1248 else if (uncontained)
1250 double unstick(1.0);
1252 for (
int ii=0;ii<3;++ii)
1254 mom[ii] = momM[ii]*unstick;
1258 for (
int ii=0;ii<3;++ii)
1260 mom[ii] = 1.1*momM[ii];
1273 evt.
put(std::move(tcol));
1275 evt.
put(std::move(tspassn));
1278 evt.
put(std::move(thassn));
TMatrixT< Double_t > * stREC
unsigned int getNDF() const
std::vector< double > fMomErr
void setMomLow(Double_t f)
std::vector< TVector3 > getHitPlaneUxUyUz()
void setMaxUpdate(Double_t f)
std::vector< TMatrixT< Double_t > > getHitUpdate()
geo::SigType_t SignalType() const
Signal type for the plane of the hit.
TMatrixT< Double_t > * stMCT
static bool sp_sort_3dz(const art::Ptr< recob::SpacePoint > &h1, const art::Ptr< recob::SpacePoint > &h2)
PlaneGeo const & Plane(unsigned int const p, unsigned int const tpc=0, unsigned int const cstat=0) const
Returns the specified wire.
geo::Length_t DetHalfWidth(geo::TPCID const &tpcid) const
Returns the half width of the active volume of the specified TPC.
const GFDetPlane & getReferencePlane() const
std::string fG4ModuleLabel
GFDetPlane getLastPlane() const
void rotationCov(TMatrixT< Double_t > &cov, const TVector3 &u, const TVector3 &v)
WireGeo const & Wire(unsigned int iwire) const
std::vector< TMatrixT< Double_t > > getHitState()
geo::WireID WireID() const
Initial tdc tick for hit.
Declaration of signal hit object.
genf::GFAbsTrackRep * rep
void setMomHigh(Double_t f)
iterator erase(iterator position)
std::string fGenieGenModuleLabel
float Integral() const
Integral under the calibrated signal waveform of the hit, in tick x ADC units.
std::vector< double > fPosErr
void Print(std::ostream &out=std::cout) const
const TMatrixT< Double_t > & getState() const
virtual ~Track3DKalmanSPS()
std::vector< TVector3 > getHitPlaneXYZ()
std::vector< TMatrixT< Double_t > > getHitCov()
std::string fSpptModuleLabel
static bool sp_sort_3dy(const art::Ptr< recob::SpacePoint > &h1, const art::Ptr< recob::SpacePoint > &h2)
std::string fClusterModuleLabel
void produce(art::Event &evt)
double ThetaZ() const
Returns angle of wire with respect to z axis in the Y-Z plane in radians.
geo::Length_t WirePitch(geo::PlaneID const &planeid) const
Returns the distance between two consecutive wires.
Base Class for genfit track representations. Defines interface for track parameterizations.
#define LOG_ERROR(category)
ProductID put(std::unique_ptr< PROD > &&product)
auto vector(Vector const &v)
Returns a manipulator which will print the specified array.
geo::Length_t DetHalfHeight(geo::TPCID const &tpcid) const
Returns the half height of the active volume of the specified TPC.
std::vector< double > fMomStart
#define DEFINE_ART_MODULE(klass)
std::vector< TVector3 > getHitPlaneV()
void push_back(Ptr< U > const &p)
virtual TVector3 getMom(const GFDetPlane &pl)=0
std::vector< Double_t > getHitChi2()
static bool sp_sort_3dx(const art::Ptr< recob::SpacePoint > &h1, const art::Ptr< recob::SpacePoint > &h2)
enum geo::_plane_sigtype SigType_t
Enumerate the possible plane projections.
void setBlowUpFactor(double f)
Set the blowup factor (see blowUpCovs() )
static bool sp_sort_nsppts(const art::PtrVector< recob::SpacePoint > &h1, const art::PtrVector< recob::SpacePoint > &h2)
T get(std::string const &key) const
double energyLossBetheBloch(const double &mass, const double p)
void setNumIterations(Int_t i)
Set number of iterations for Kalman Filter.
int getFailedHits(int repId=-1)
return the number of failed Hits in track fit repId == -1 will use cardinal rep
TMatrixT< Double_t > * covREC
void processTrack(GFTrack *)
Performs fit on a GFTrack.
geo::Length_t DetLength(geo::TPCID const &tpcid) const
Returns the length of the active volume of the specified TPC.
bool get_if_present(std::string const &key, T &value) const
static GFFieldManager * getInstance()
TMatrixT< Double_t > * covMCT
bool CreateAssn(PRODUCER const &prod, art::Event &evt, std::vector< T > const &a, art::Ptr< U > const &b, art::Assns< U, T > &assn, std::string a_instance, size_t indx=UINT_MAX)
Creates a single one-to-one association.
PlaneID_t Plane
Index of the plane within its TPC.
Declaration of cluster object.
const TMatrixT< Double_t > & getCov() const
std::vector< TVector3 > getHitPlaneU()
Provides recob::Track data product.
data_t::iterator iterator
std::string ROOTobjectToString(const ROOTOBJ &obj)
Shortcut to write one ROOT object into a string.
#define LOG_WARNING(category)
Encapsulate the geometry of a wire.
data_t::const_iterator const_iterator
std::vector< TMatrixT< Double_t > > getHitCov7x7()
const simb::MCParticle & GetParticle(int i) const
iterator insert(iterator position, Ptr< U > const &p)
T * make(ARGS...args) const
const double * XYZ() const
std::vector< double > dQdxCalc(const art::FindManyP< recob::Hit > &h, const art::PtrVector< recob::SpacePoint > &s, const TVector3 &p, const TVector3 &d)
Utility object to perform functions of association.
Encapsulate the construction of a single detector plane.
genf::GFAbsTrackRep * repMC
bool getByLabel(std::string const &label, std::string const &productInstanceName, Handle< PROD > &result) const
void setInitialDirection(int d)
Sets the inital direction of the track fit (1 for inner to outer, or -1 for outer to inner)...
void init(GFAbsBField *b)
set the magntic field here. Magnetic field classes must be derived from GFAbsBField ...
EventNumber_t event() const
void setErrorScaleSTh(Double_t f)
2D representation of charge deposited in the TDC/wire plane
void addHit(GFAbsRecoHit *theHit)
deprecated!
Track3DKalmanSPS(fhicl::ParameterSet const &pset)
Algorithm for generating space points from hits.
void reconfigure(fhicl::ParameterSet const &p)
art framework interface to geometry description
Track from a non-cascading particle.A recob::Track consists of a recob::TrackTrajectory, plus additional members relevant for a "fitted" track:
void setErrorScaleMTh(Double_t f)
cet::coded_exception< error, detail::translate > exception
std::vector< TMatrixT< Double_t > > getHitMeasuredCov()
std::string GetLArTPCVolumeName(geo::TPCID const &tpcid) const
Return the name of specified LAr TPC volume.
Signal from collection planes.