FairRoot/PandaRoot
Public Member Functions | Private Member Functions | Private Attributes | List of all members
PndRecoDafFit2 Class Reference

#include <PndRecoDafFit2.h>

Inheritance diagram for PndRecoDafFit2:

Public Member Functions

 PndRecoDafFit2 ()
 
 ~PndRecoDafFit2 ()
 
void SetGeane (Bool_t opt=kTRUE)
 
void SetPropagateToIP (Bool_t opt=kTRUE)
 
void SetPropagateDistance (Float_t opt=-1.f)
 
void SetPerpPlane (Bool_t opt=kTRUE)
 
void SetNumIterations (Int_t num)
 
void SetVerbose (Int_t verb)
 
void SetMvdBranchName (const TString &name)
 
void SetCentralTrackerBranchName (const TString &name)
 
Bool_t Init ()
 
PndTrackFit (PndTrack *tBefore, Int_t PDG)
 

Private Member Functions

 ClassDef (PndRecoDafFit2, 0)
 Verbose level. More...
 

Private Attributes

genfit::MeasurementFactory
< genfit::AbsMeasurement > * 
fTheRecoHitFactory
 
genfit::DAF fGenFitter
 
FairGeanePro * fPro
 
TString fMvdBranchName
 Geane Propagator. More...
 
TString fCentralTrackerBranchName
 Name of the TCA for MVD. More...
 
Bool_t fUseGeane
 Name of the TCA for central tracker. More...
 
Bool_t fPropagateToIP
 Flag to use Geane. More...
 
Float_t fPropagateDistance
 Flag to propagate to the interaction point. More...
 
Bool_t fPerpPlane
 Distance in [cm] to back-propagate the parameters, negative number means no backpropagation. More...
 
Int_t fNumIt
 Flag to use as initial plane the one perpendicular to the track. More...
 
Int_t fVerbose
 Number of iterations. More...
 

Detailed Description

Definition at line 31 of file PndRecoDafFit2.h.

Constructor & Destructor Documentation

PndRecoDafFit2::PndRecoDafFit2 ( )

Definition at line 68 of file PndRecoDafFit2.cxx.

References PndGeoHandling::Instance().

68  : TNamed("Genfit", "Fit Tracks"),
70  fUseGeane(kTRUE), fPropagateToIP(kTRUE), fPerpPlane(kFALSE), fNumIt(1), fVerbose(0)
71 {
73 }
TString fCentralTrackerBranchName
Name of the TCA for MVD.
TString fMvdBranchName
Geane Propagator.
Bool_t fPropagateToIP
Flag to use Geane.
static PndGeoHandling * Instance()
Int_t fNumIt
Flag to use as initial plane the one perpendicular to the track.
Int_t fVerbose
Number of iterations.
Bool_t fPerpPlane
Distance in [cm] to back-propagate the parameters, negative number means no backpropagation.
Bool_t fUseGeane
Name of the TCA for central tracker.
PndRecoDafFit2::~PndRecoDafFit2 ( )

Definition at line 187 of file PndRecoDafFit2.cxx.

187 { }

Member Function Documentation

PndRecoDafFit2::ClassDef ( PndRecoDafFit2  ,
 
)
private

Verbose level.

PndTrack * PndRecoDafFit2::Fit ( PndTrack tBefore,
Int_t  PDG 
)

Definition at line 189 of file PndRecoDafFit2.cxx.

References Bool_t, f, fabs(), fGenFitter, fPerpPlane, fPropagateDistance, fPropagateToIP, fTheRecoHitFactory, fVerbose, Genfit2Track2PndTrack(), PndTrack::GetParamFirst(), PndTrack::GetTrackCand(), par, PndTrackCand2Genfit2TrackCand(), genfit::AbsFitter::processTrack(), genfit::TrackCand::setCovSeed(), PndTrack::SetFlag(), Track, trk, and genfit::Exception::what().

Referenced by PndRecoKalmanTask2::Exec().

190 {
191  PndTrack* tAfter = NULL;
192  if (fVerbose>0) std::cout<<"PndRecoDafFit2::Fit"<<std::endl;
193  if (fabs(tBefore->GetParamFirst().GetPz())<1e-9)
194  {
195  tAfter = tBefore;
196  tAfter->SetFlag(-10);
197  return tAfter; // flag -10 : pz==0
198  }
199 
200  //Int_t fCharge= tBefore->GetParamFirst().GetQ(); //[R.K. 01/2017] unused variable?
201  Int_t PDGCode= PDG;
202  TVector3 StartPos(tBefore->GetParamFirst().GetX(),tBefore->GetParamFirst().GetY(),tBefore->GetParamFirst().GetZ());
203  TVector3 StartMom(tBefore->GetParamFirst().GetPx(),tBefore->GetParamFirst().GetPy(),tBefore->GetParamFirst().GetPz());
204 
205  TMatrixDSym covSeed(6);
206  covSeed(0,0) = tBefore->GetParamFirst().GetDX()*tBefore->GetParamFirst().GetDX();
207  covSeed(1,1) = tBefore->GetParamFirst().GetDY()*tBefore->GetParamFirst().GetDY();
208  covSeed(2,2) = tBefore->GetParamFirst().GetDZ()*tBefore->GetParamFirst().GetDZ();
209 
210  covSeed(3,3) = tBefore->GetParamFirst().GetDPx()*tBefore->GetParamFirst().GetDPx();
211  covSeed(4,4) = tBefore->GetParamFirst().GetDPy()*tBefore->GetParamFirst().GetDPy();
212  covSeed(5,5) = tBefore->GetParamFirst().GetDPz()*tBefore->GetParamFirst().GetDPz();
213 
214  if (fPropagateToIP)
215  {
216  // Calculating params at PCA to Origin
217  FairTrackParP par = tBefore->GetParamFirst();
218  Int_t ierr = 0;
219  FairTrackParH *helix = new FairTrackParH(&par, ierr);
220  FairGeanePro *fPro0 = new FairGeanePro();
221  FairTrackParH *fRes= new FairTrackParH();
222  fPro0->SetPoint(TVector3(0,0,0));
223  fPro0->PropagateToPCA(1, -1);
224  Bool_t rc = fPro0->Propagate(helix, fRes, PDGCode);
225  if (rc)
226  {
227  StartPos.SetXYZ(fRes->GetX(), fRes->GetY(), fRes->GetZ());
228  StartMom.SetXYZ(fRes->GetPx(), fRes->GetPy(), fRes->GetPz());
229 
230  covSeed(0,0) = fRes->GetDX()*fRes->GetDX();
231  covSeed(1,1) = fRes->GetDY()*fRes->GetDY();
232  covSeed(2,2) = fRes->GetDZ()*fRes->GetDZ();
233 
234  covSeed(3,3) = fRes->GetDPx()*fRes->GetDPx();
235  covSeed(4,4) = fRes->GetDPy()*fRes->GetDPy();
236  covSeed(5,5) = fRes->GetDPz()*fRes->GetDPz();
237  }
238  }
239  else if (fPropagateDistance>0.f)
240  {
241  // Calculating params at fPropagateDistance cm before the first hit
242  FairTrackParP par = tBefore->GetParamFirst();
243  Int_t ierr = 0;
244  FairTrackParH *helix = new FairTrackParH(&par, ierr);
245  FairGeanePro *fPro0 = new FairGeanePro();
246  if (fVerbose==0) fPro0->SetPrintErrors(kFALSE);
247  FairTrackParH *fRes= new FairTrackParH();
248  fPro0->PropagateToLength(-fPropagateDistance);
249  Bool_t rc = fPro0->Propagate(helix, fRes, PDGCode);
250  if (rc)
251  {
252  StartPos.SetXYZ(fRes->GetX(), fRes->GetY(), fRes->GetZ());
253  StartMom.SetXYZ(fRes->GetPx(), fRes->GetPy(), fRes->GetPz());
254 
255  covSeed(0,0) = fRes->GetDX()*fRes->GetDX();
256  covSeed(1,1) = fRes->GetDY()*fRes->GetDY();
257  covSeed(2,2) = fRes->GetDZ()*fRes->GetDZ();
258 
259  covSeed(3,3) = fRes->GetDPx()*fRes->GetDPx();
260  covSeed(4,4) = fRes->GetDPy()*fRes->GetDPy();
261  covSeed(5,5) = fRes->GetDPz()*fRes->GetDPz();
262  }
263  }
264 
265  TVector3 plane_v1, plane_v2;
266  if (fPerpPlane)
267  {
268  plane_v1 = StartMom.Orthogonal();
269  plane_v2 = StartPos.Cross(plane_v1);
270  }
271  else
272  {
273  plane_v1.SetXYZ(1.,0.,0.);
274  plane_v2.SetXYZ(0.,1.,0.);
275  }
276 
277  PndTrackCand trackCand = tBefore->GetTrackCand();
278 
279  genfit::AbsTrackRep *rep = new genfit::RKTrackRep(PDGCode);
280  // PndTrackCand does not store seed, then PndTrackCand2Genfit2TrackCand cannot convert the seed.
281  // You need to set the seed afterwards, taking it from PndTrack (setCovSeed/setPosMomSeedAndPdgCode)
282  genfit::TrackCand* gfCand = PndTrackCand2Genfit2TrackCand(&trackCand);
283  gfCand->setCovSeed(covSeed);
284  genfit::Track* trk= new genfit::Track(*gfCand, *fTheRecoHitFactory, rep);
285 
286 
287  // Start Fitter
288  try
289  {
291  }
292  catch (genfit::Exception& e)
293  {
294  std::cout<<"*** PndRecoDafFit2::Fit" << "\t" << "FITTER EXCEPTION ***"<<std::endl;
295  std::cout<<e.what()<<std::endl;
296  }
297 
298  if (fVerbose>0) std::cout<<"** PndRecoDafFit2::Fit" << "\t" << "SUCCESSFULL FIT!"<<std::endl;
299 
300  try
301  {
302  tAfter = (PndTrack*)Genfit2Track2PndTrack(trk);
303  }
304  catch (genfit::Exception& e)
305  {
306  std::cout<<"*** PndRecoDafFit2::Fit" << "\t" << "CONVERSION EXCEPTION ***"<<std::endl;
307  std::cout<<e.what()<<std::endl;
308  tAfter = tBefore;
309  tAfter->SetFlag(-2); // flag -2: conversion failed
310  }
311 
312  if (fVerbose>0) std::cout<<"*** PndRecoDafFit2::Fit" << "\t" << "Fitting done"<<std::endl;
313 
314  return tAfter;
315 }
Track candidate – seed values and indices.
Definition: TrackCand.h:69
genfit::MeasurementFactory< genfit::AbsMeasurement > * fTheRecoHitFactory
Collection of TrackPoint objects, AbsTrackRep objects and FitStatus objects.
Definition: Track.h:71
Abstract base class for a track representation.
Definition: AbsTrackRep.h:66
Double_t par[3]
genfit::DAF fGenFitter
void processTrack(Track *, bool resortHits=false)
genfit::TrackCand * PndTrackCand2Genfit2TrackCand(PndTrackCand *cand)
Float_t fPropagateDistance
Flag to propagate to the interaction point.
FairMCTracks * Track
Definition: drawEveTracks.C:8
PndTrackCand GetTrackCand()
Definition: PndTrack.h:47
TFile * f
Definition: bump_analys.C:12
Bool_t fPropagateToIP
Flag to use Geane.
friend F32vec4 fabs(const F32vec4 &a)
Definition: P4_F32vec4.h:47
GFTrack * trk
Definition: checkgenfit.C:13
Int_t fVerbose
Number of iterations.
Exception class for error handling in GENFIT (provides storage for diagnostic information) ...
Definition: Exception.h:48
void SetFlag(Int_t i)
Definition: PndTrack.h:38
PndTrack * Genfit2Track2PndTrack(const genfit::Track *tr)
AbsTrackRep with 5D track parameterization in plane coordinates: (q/p, u&#39;, v&#39;, u, v) ...
Bool_t fPerpPlane
Distance in [cm] to back-propagate the parameters, negative number means no backpropagation.
virtual const char * what() const
Standard error message handling for exceptions. use like &quot;std::cerr &lt;&lt; e.what();&quot;.
void setCovSeed(const TMatrixDSym &cov6D)
set the covariance matrix seed (6D).
Definition: TrackCand.h:175
FairTrackParP GetParamFirst()
Definition: PndTrack.h:49
Bool_t PndRecoDafFit2::Init ( )

Definition at line 75 of file PndRecoDafFit2.cxx.

References genfit::MeasurementFactory< measurement_T >::addProducer(), fCentralTrackerBranchName, fGenFitter, PndSttMapCreator::FillTubeArray(), fMvdBranchName, fNumIt, fPro, fTheRecoHitFactory, fUseGeane, fVerbose, PndGeoSttPar::GetGeometryType(), genfit::MaterialEffects::getInstance(), genfit::FieldManager::getInstance(), genfit::MaterialEffects::init(), genfit::FieldManager::init(), genfit::Exception::quiet(), rtdb, and genfit::DAF::setMaxIterations().

Referenced by PndRecoKalmanTask2::Init().

76 {
77  //Get ROOT Manager
78  FairRootManager* ioman= FairRootManager::Instance();
79  if(ioman==0)
80  {
81  Error("PndRecoDafFit2::Init","RootManager not instantiated!");
82  return kFALSE;
83  }
84 
85  // STT map loading
86  FairRuntimeDb* rtdb = FairRunAna::Instance()->GetRuntimeDb();
87  PndGeoSttPar *sttParameters = (PndGeoSttPar*) rtdb->getContainer("PndGeoSttPar");
88  TClonesArray *tubeArray = NULL;
89  if(sttParameters->GetGeometryType() != -1) {
90  PndSttMapCreator *mapper = new PndSttMapCreator(sttParameters);
91  tubeArray = mapper->FillTubeArray();
92  }
93 
94  // Build hit factory -----------------------------
97 
98  TClonesArray* stripar; TClonesArray* pixelar;
99  if (fMvdBranchName == "Mix")
100  {
101  stripar=(TClonesArray*) ioman->GetObject("MVDHitsStripMix");
102  if(stripar!=0)
103  {
104  fTheRecoHitFactory->addProducer(FairRootManager::Instance()->GetBranchId("MVDHitsStripMix"),new genfit::MeasurementProducer<PndSdsHit,PndSdsRecoHit2>(stripar));
105  std::cout << "*** PndRecoDafFit2::Init" << "\t" << "MVDHitsStripMix array found" << std::endl;
106  }
107 
108  pixelar=(TClonesArray*) ioman->GetObject("MVDHitsPixelMix");
109  if(pixelar!=0)
110  {
111  fTheRecoHitFactory->addProducer(FairRootManager::Instance()->GetBranchId("MVDHitsPixelMix"),new genfit::MeasurementProducer<PndSdsHit,PndSdsRecoHit2>(pixelar));
112  std::cout << "*** PndRecoDafFit2::Init" << "\t" << "MVDHitsPixelMix array found" << std::endl;
113  }
114  }
115  else
116  {
117  stripar=(TClonesArray*) ioman->GetObject("MVDHitsStrip");
118  if(stripar!=0)
119  {
120  fTheRecoHitFactory->addProducer(FairRootManager::Instance()->GetBranchId("MVDHitsStrip"),new genfit::MeasurementProducer<PndSdsHit,PndSdsRecoHit2>(stripar));
121  std::cout << "*** PndRecoDafFit2::Init" << "\t" << "MVDHitsStrip array found" << std::endl;
122  }
123 
124  pixelar=(TClonesArray*) ioman->GetObject("MVDHitsPixel");
125  if(pixelar!=0)
126  {
127  fTheRecoHitFactory->addProducer(FairRootManager::Instance()->GetBranchId("MVDHitsPixel"),new genfit::MeasurementProducer<PndSdsHit,PndSdsRecoHit2>(pixelar));
128  std::cout << "*** PndRecoDafFit2::Init" << "\t" << "MVDHitsPixel array found" << std::endl;
129  }
130  }
131 
132  TClonesArray* sthit; //TClonesArray *sttr; //[R.K. 01/2017] unused variable?
133 
134  if (fCentralTrackerBranchName == "Mix")
135  {
136  sthit=(TClonesArray*) ioman->GetObject("STTHitMix");
137  if(sthit!=0)
138  {
139  fTheRecoHitFactory->addProducer(FairRootManager::Instance()->GetBranchId("STTHitMix"),new PndSttRecoHitProducer2<PndSttHit,PndSttRecoHit2>(sthit, tubeArray));
140  std::cout << "*** PndRecoDafFit2::Init" << "\t" << "STTHitMix array found" << std::endl;
141  }
142  }
143  else
144  {
145  sthit=(TClonesArray*) ioman->GetObject("STTHit");
146  if(sthit!=0)
147  {
148  fTheRecoHitFactory->addProducer(FairRootManager::Instance()->GetBranchId("STTHit"),new PndSttRecoHitProducer2<PndSttHit,PndSttRecoHit2>(sthit, tubeArray));
149  std::cout << "*** PndRecoDafFit2::Init" << "\t" << "SttHit array found" << std::endl;
150  }
151  }
152 
153  TClonesArray* gemar=(TClonesArray*) ioman->GetObject("GEMHit");
154  if(gemar!=0)
155  {
156  fTheRecoHitFactory->addProducer(FairRootManager::Instance()->GetBranchId("GEMHit"),new genfit::MeasurementProducer<PndGemHit,PndGemRecoHit2>(gemar));
157  std::cout << "*** PndRecoDafFit2::Init" << "\t" << "GEMHit array found" << std::endl;
158  }
159 
160  TClonesArray* mdtar=(TClonesArray*) ioman->GetObject("MdtHit");
161  if(mdtar!=0)
162  {
163  fTheRecoHitFactory->addProducer(FairRootManager::Instance()->GetBranchId("MdtHit"),new genfit::MeasurementProducer<PndMdtHit,PndMdtRecoHit2>(mdtar));
164  std::cout << "*** PndRecoDafFit2::Init" << "\t" << "MdtHit array found" << std::endl;
165  }
166 
167  if (fUseGeane)
168  {
169  fPro = new FairGeanePro();
170  }
171  else
172  {
173  Error("PndRecoDafFit2::Init","Only GEANE Propagation available!!!");
174  return kFALSE;
175  }
176 
180 
181  std::cout << "===PndRecoDafFit2::Init() finished ===================================================" << std::endl;
182 
183  return kTRUE;
184 }
static void quiet(bool b=true)
&quot;std::cerr &lt;&lt; e.what();&quot; will not write anything.
Definition: Exception.h:78
void addProducer(int detID, AbsMeasurementProducer< measurement_T > *hitProd)
Register a producer module to the factory.
genfit::MeasurementFactory< genfit::AbsMeasurement > * fTheRecoHitFactory
TString fCentralTrackerBranchName
Name of the TCA for MVD.
static FieldManager * getInstance()
Get singleton instance.
Definition: FieldManager.h:112
Magnetic field.
void setMaxIterations(unsigned int n)
Set the maximum number of iterations.
Definition: DAF.h:100
FairGeanePro * fPro
genfit::DAF fGenFitter
TString fMvdBranchName
Geane Propagator.
Int_t GetGeometryType()
Definition: PndGeoSttPar.h:28
void init(AbsBField *b)
set the magnetic field here. Magnetic field classes must be derived from AbsBField.
Definition: FieldManager.h:78
AbsMaterialInterface implementation for use with ROOT&#39;s TGeoManager.
static MaterialEffects * getInstance()
FairRuntimeDb * rtdb
Definition: hit_dirc.C:66
TClonesArray * FillTubeArray()
void init(AbsMaterialInterface *matIfc)
set the material interface here. Material interface classes must be derived from AbsMaterialInterface...
Int_t fNumIt
Flag to use as initial plane the one perpendicular to the track.
Int_t fVerbose
Number of iterations.
Bool_t fUseGeane
Name of the TCA for central tracker.
Template class for a measurement producer module.
void PndRecoDafFit2::SetCentralTrackerBranchName ( const TString name)
inline

Definition at line 47 of file PndRecoDafFit2.h.

References fCentralTrackerBranchName, and name.

Referenced by PndRecoKalmanTask2::Init().

TString fCentralTrackerBranchName
Name of the TCA for MVD.
TString name
void PndRecoDafFit2::SetGeane ( Bool_t  opt = kTRUE)
inline

Definition at line 40 of file PndRecoDafFit2.h.

References fUseGeane.

Referenced by PndRecoKalmanTask2::Init().

40 { fUseGeane = opt; }
Bool_t fUseGeane
Name of the TCA for central tracker.
void PndRecoDafFit2::SetMvdBranchName ( const TString name)
inline

Definition at line 46 of file PndRecoDafFit2.h.

References fMvdBranchName, and name.

Referenced by PndRecoKalmanTask2::Init().

46 { fMvdBranchName = name; }
TString fMvdBranchName
Geane Propagator.
TString name
void PndRecoDafFit2::SetNumIterations ( Int_t  num)
inline

Definition at line 44 of file PndRecoDafFit2.h.

References fNumIt, and num.

44 { fNumIt = num; }
int num[96]
Definition: ranlxd.cxx:381
Int_t fNumIt
Flag to use as initial plane the one perpendicular to the track.
void PndRecoDafFit2::SetPerpPlane ( Bool_t  opt = kTRUE)
inline

Definition at line 43 of file PndRecoDafFit2.h.

References fPerpPlane.

Referenced by PndRecoKalmanTask2::Init().

43 { fPerpPlane = opt; }
Bool_t fPerpPlane
Distance in [cm] to back-propagate the parameters, negative number means no backpropagation.
void PndRecoDafFit2::SetPropagateDistance ( Float_t  opt = -1.f)
inline

Definition at line 42 of file PndRecoDafFit2.h.

References fPropagateDistance.

Referenced by PndRecoKalmanTask2::Init().

42 { fPropagateDistance = opt;}
Float_t fPropagateDistance
Flag to propagate to the interaction point.
void PndRecoDafFit2::SetPropagateToIP ( Bool_t  opt = kTRUE)
inline

Definition at line 41 of file PndRecoDafFit2.h.

References fPropagateToIP.

Referenced by PndRecoKalmanTask2::Init().

41 { fPropagateToIP = opt;}
Bool_t fPropagateToIP
Flag to use Geane.
void PndRecoDafFit2::SetVerbose ( Int_t  verb)
inline

Definition at line 45 of file PndRecoDafFit2.h.

References fVerbose.

Referenced by PndRecoKalmanTask2::Init().

45 { fVerbose = verb; }
Int_t fVerbose
Number of iterations.

Member Data Documentation

TString PndRecoDafFit2::fCentralTrackerBranchName
private

Name of the TCA for MVD.

Definition at line 61 of file PndRecoDafFit2.h.

Referenced by Init(), and SetCentralTrackerBranchName().

genfit::DAF PndRecoDafFit2::fGenFitter
private

Definition at line 56 of file PndRecoDafFit2.h.

Referenced by Fit(), and Init().

TString PndRecoDafFit2::fMvdBranchName
private

Geane Propagator.

Definition at line 60 of file PndRecoDafFit2.h.

Referenced by Init(), and SetMvdBranchName().

Int_t PndRecoDafFit2::fNumIt
private

Flag to use as initial plane the one perpendicular to the track.

Definition at line 67 of file PndRecoDafFit2.h.

Referenced by Init(), and SetNumIterations().

Bool_t PndRecoDafFit2::fPerpPlane
private

Distance in [cm] to back-propagate the parameters, negative number means no backpropagation.

Definition at line 66 of file PndRecoDafFit2.h.

Referenced by Fit(), and SetPerpPlane().

FairGeanePro* PndRecoDafFit2::fPro
private

Definition at line 58 of file PndRecoDafFit2.h.

Referenced by Init().

Float_t PndRecoDafFit2::fPropagateDistance
private

Flag to propagate to the interaction point.

Definition at line 65 of file PndRecoDafFit2.h.

Referenced by Fit(), and SetPropagateDistance().

Bool_t PndRecoDafFit2::fPropagateToIP
private

Flag to use Geane.

Definition at line 64 of file PndRecoDafFit2.h.

Referenced by Fit(), and SetPropagateToIP().

genfit::MeasurementFactory<genfit::AbsMeasurement>* PndRecoDafFit2::fTheRecoHitFactory
private

Definition at line 55 of file PndRecoDafFit2.h.

Referenced by Fit(), and Init().

Bool_t PndRecoDafFit2::fUseGeane
private

Name of the TCA for central tracker.

Definition at line 63 of file PndRecoDafFit2.h.

Referenced by Init(), and SetGeane().

Int_t PndRecoDafFit2::fVerbose
private

Number of iterations.

Definition at line 68 of file PndRecoDafFit2.h.

Referenced by Fit(), Init(), and SetVerbose().


The documentation for this class was generated from the following files: