29 #include "FairRootManager.h"
30 #include "FairRuntimeDb.h"
31 #include "FairRunAna.h"
32 #include "TClonesArray.h"
56 #include "TLorentzVector.h"
58 #include "FairTrackParH.h"
62 #include "RKTrackRep.h"
65 #include "FairGeanePro.h"
71 fMvdBranchName(
""), fCentralTrackerBranchName(
""),
72 fUseGeane(kTRUE), fPropagateToIP(kTRUE), fPropagateDistance(-1.
f), fPerpPlane(kFALSE), fNumIt(1),
fVerbose(0)
80 FairRootManager* ioman= FairRootManager::Instance();
83 Error(
"PndRecoKalmanFit2::Init",
"RootManager not instantiated!");
88 FairRuntimeDb*
rtdb = FairRunAna::Instance()->GetRuntimeDb();
90 TClonesArray *tubeArray = NULL;
98 TClonesArray *ftsTubeArray = NULL;
108 TClonesArray* stripar; TClonesArray* pixelar;
111 stripar=(TClonesArray*) ioman->GetObject(
"MVDHitsStripMix");
115 std::cout <<
"*** PndRecoKalmanFit2::Init" <<
"\t" <<
"MVDHitsStripMix array found" << std::endl;
118 pixelar=(TClonesArray*) ioman->GetObject(
"MVDHitsPixelMix");
122 std::cout <<
"*** PndRecoKalmanFit2::Init" <<
"\t" <<
"MVDHitsPixelMix array found" << std::endl;
127 stripar=(TClonesArray*) ioman->GetObject(
"MVDHitsStrip");
131 std::cout <<
"*** PndRecoKalmanFit2::Init" <<
"\t" <<
"MVDHitsStrip array found" << std::endl;
134 pixelar=(TClonesArray*) ioman->GetObject(
"MVDHitsPixel");
138 std::cout <<
"*** PndRecoKalmanFit2::Init" <<
"\t" <<
"MVDHitsPixel array found" << std::endl;
146 sthit=(TClonesArray*) ioman->GetObject(
"STTHitMix");
150 std::cout <<
"*** PndRecoKalmanFit2::Init" <<
"\t" <<
"STTHitMix array found" << std::endl;
155 sthit=(TClonesArray*) ioman->GetObject(
"STTHit");
159 std::cout <<
"*** PndRecoKalmanFit2::Init" <<
"\t" <<
"SttHit array found" << std::endl;
163 TClonesArray* gemar=(TClonesArray*) ioman->GetObject(
"GEMHit");
167 std::cout <<
"*** PndRecoKalmanFit2::Init" <<
"\t" <<
"GEMHit array found" << std::endl;
170 TClonesArray* mdtar=(TClonesArray*) ioman->GetObject(
"MdtHit");
174 std::cout <<
"*** PndRecoKalmanFit2::Init" <<
"\t" <<
"MdtHit array found" << std::endl;
177 TClonesArray* ftsar=(TClonesArray*) ioman->GetObject(
"FTSHit");
181 std::cout <<
"*** PndRecoKalmanFit2::Init" <<
"\t" <<
"FtsHit array found" << std::endl;
186 fPro =
new FairGeanePro();
191 Error(
"PndRecoKalmanFit2::Init",
"Only GEANE Propagation available!!!");
200 std::cout <<
"===PndRecoKalmanFit2::Init() finished ===================================================" << std::endl;
211 std::cout <<
"PndRecoKalmanFit2::Fit" << std::endl;
215 std::cout <<
"tAfter = tBefore " << tBefore->
GetParamFirst().GetPz()
227 TMatrixDSym covSeed(6);
244 FairTrackParH helix(&par, ierr);
247 fPro0.SetPrintErrors(kFALSE);
255 fPro0.SetPoint(TVector3(0, 0, 0));
256 fPro0.PropagateToPCA(1, -1);
257 Bool_t rc = fPro0.Propagate(&helix, &fRes, PDGCode);
259 StartPos.SetXYZ(fRes.GetX(), fRes.GetY(), fRes.GetZ());
260 StartMom.SetXYZ(fRes.GetPx(), fRes.GetPy(), fRes.GetPz());
262 covSeed(0, 0) = fRes.GetDX() * fRes.GetDX();
263 covSeed(1, 1) = fRes.GetDY() * fRes.GetDY();
264 covSeed(2, 2) = fRes.GetDZ() * fRes.GetDZ();
266 covSeed(3, 3) = fRes.GetDPx() * fRes.GetDPx();
267 covSeed(4, 4) = fRes.GetDPy() * fRes.GetDPy();
268 covSeed(5, 5) = fRes.GetDPz() * fRes.GetDPz();
280 std::cout <<
"PndRekoKalmanFit2::Fit helix: ";
281 helix.GetMomentum().Print();
282 helix.GetPosition().Print();
283 std::cout << std::endl;
284 Bool_t rc = fPro0.Propagate(&helix, &fRes, PDGCode);
286 StartPos.SetXYZ(fRes.GetX(), fRes.GetY(), fRes.GetZ());
287 StartMom.SetXYZ(fRes.GetPx(), fRes.GetPy(), fRes.GetPz());
289 covSeed(0, 0) = fRes.GetDX() * fRes.GetDX();
290 covSeed(1, 1) = fRes.GetDY() * fRes.GetDY();
291 covSeed(2, 2) = fRes.GetDZ() * fRes.GetDZ();
293 covSeed(3, 3) = fRes.GetDPx() * fRes.GetDPx();
294 covSeed(4, 4) = fRes.GetDPy() * fRes.GetDPy();
295 covSeed(5, 5) = fRes.GetDPz() * fRes.GetDPz();
299 TVector3 plane_v1, plane_v2;
301 plane_v1 = StartMom.Orthogonal();
302 plane_v2 = StartPos.Cross(plane_v1);
304 plane_v1.SetXYZ(1., 0., 0.);
305 plane_v2.SetXYZ(0., 1., 0.);
308 if (StartMom.Mag2() == 0) {
310 <<
"*** PndRecoKalmanFit2::Fit\tMomentum seed is ZERO. Cannot fit. ***"
332 std::cout <<
"*** PndRecoKalmanFit2::Fit" <<
"\t"
333 <<
"FITTER EXCEPTION ***" << std::endl;
334 std::cerr << e.
what();
337 std::cout <<
"*** PndRecoKalmanFit2::Fit" <<
"\t" <<
"SUCCESSFULL FIT!"
346 std::cout <<
"*** PndRecoKalmanFit2::Fit" <<
"\t"
347 <<
"CONVERSION EXCEPTION ***" << std::endl;
348 std::cerr << e.
what();
357 std::cout <<
"*** PndRecoKalmanFit2::Fit" <<
"\t" <<
"Fitting done"
static void quiet(bool b=true)
"std::cerr << e.what();" will not write anything.
Track candidate – seed values and indices.
genfit::MeasurementFactory< genfit::AbsMeasurement > * fTheRecoHitFactory
void addProducer(int detID, AbsMeasurementProducer< measurement_T > *hitProd)
Register a producer module to the factory.
static FieldManager * getInstance()
Get singleton instance.
TString fCentralTrackerBranchName
Name of the TCA for MVD.
Int_t fNumIt
Flag to use as initial plane the one perpendicular to the track.
Int_t fVerbose
Number of iterations.
Collection of TrackPoint objects, AbsTrackRep objects and FitStatus objects.
TString fMvdBranchName
Geane Propagator.
Abstract base class for a track representation.
virtual void setMaxIterations(unsigned int n)
Set the maximum number of iterations.
Float_t fPropagateDistance
Flag to propagate to the interaction point.
void processTrack(Track *, bool resortHits=false)
virtual void Print(const Option_t *="") const
genfit::TrackCand * PndTrackCand2Genfit2TrackCand(PndTrackCand *cand)
Bool_t fPerpPlane
Distance in [cm] to back-propagate the parameters, negative number means no backpropagation.
void init(AbsBField *b)
set the magnetic field here. Magnetic field classes must be derived from AbsBField.
AbsMaterialInterface implementation for use with ROOT's TGeoManager.
static MaterialEffects * getInstance()
PndTrackCand GetTrackCand()
FitStatus * getFitStatus(const AbsTrackRep *rep=NULL) const
Get FitStatus for a AbsTrackRep. Per default, return FitStatus for cardinalRep.
PndTrack * Fit(PndTrack *tBefore, Int_t PDG)
TClonesArray * FillTubeArray()
void init(AbsMaterialInterface *matIfc)
set the material interface here. Material interface classes must be derived from AbsMaterialInterface...
friend F32vec4 fabs(const F32vec4 &a)
static PndGeoHandling * Instance()
Bool_t fUseGeane
Name of the TCA for central tracker.
Exception class for error handling in GENFIT (provides storage for diagnostic information) ...
void setPosMomSeedAndPdgCode(const TVector3 &pos, const TVector3 &mom, const int pdgCode)
This function works the same as setPosMomSeed but instead of a charge hypothesis you can set a pdg co...
TClonesArray * FillTubeArray()
this function will be used in PndFtsHitProducesRealFast
genfit::KalmanFitter fGenFitter
PndTrack * Genfit2Track2PndTrack(const genfit::Track *tr)
Bool_t fPropagateToIP
Flag to use Geane.
AbsTrackRep with 5D track parameterization in plane coordinates: (q/p, u', v', u, v) ...
Template class for a measurement producer module.
virtual const char * what() const
Standard error message handling for exceptions. use like "std::cerr << e.what();".
void setCovSeed(const TMatrixDSym &cov6D)
set the covariance matrix seed (6D).
FairTrackParP GetParamFirst()