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

#include <PndLmdKalmanTask.h>

Inheritance diagram for PndLmdKalmanTask:

Public Member Functions

 PndLmdKalmanTask ()
 
 PndLmdKalmanTask (TString HitBranch, TString TrackBranch)
 
virtual ~PndLmdKalmanTask ()
 
void SetTrackBranchName (const TString &name)
 
void SetPersistence (Bool_t opt=kTRUE)
 
void SetGeaneTrkRep (Bool_t val=kTRUE)
 
void SetRKTrkRep (Bool_t val=kTRUE)
 
void SetScalePError (double sc)
 
void SetScaleMError (double sc)
 
virtual InitStatus Init ()
 
virtual void Exec (Option_t *opt)
 
virtual void SetFilterFlag (bool val)
 

Private Member Functions

 ClassDef (PndLmdKalmanTask, 1)
 

Private Attributes

bool flGEANE
 
bool flRK
 
double fscaleP
 
double fscaleM
 
TClonesArray * fTrackArray
 
TClonesArray * fTrackTmpArray
 
TClonesArray * fTrkOutArray
 
TClonesArray * fTrackParFinal
 
TClonesArray * fSdsHitsArray
 
TString fTrackBranchName
 
TString fSdsHitBranchName
 
Bool_t fPersistence
 
GFRecoHitFactoryfTheRecoHitFactory
 
PndGeoHandlingfGeoH
 
Int_t fTrackcount
 
Int_t fEvent
 
TGeant3 * gMC3
 
FairGeanePro * fPro
 
int fsensType
 
Double_t fPbeam
 
Int_t fPDGCode
 
Double_t fCharge
 
GFFieldManagergfMagField
 
bool flagFilter
 

Detailed Description

Definition at line 39 of file PndLmdKalmanTask.h.

Constructor & Destructor Documentation

PndLmdKalmanTask::PndLmdKalmanTask ( )

Definition at line 67 of file PndLmdKalmanTask.cxx.

References flGEANE, flRK, fscaleM, fscaleP, fSdsHitBranchName, fTrackBranchName, and PndGeoHandling::Instance().

68  : FairTask("Kalman Filter"), fPersistence(kFALSE) {
69  // fTrackBranchName = "GFTrackCandLmd";
70  fTrackBranchName = "LMDTrackCand";
71  // fSdsHitBranchName = "LMDHitsStrip";
72  fSdsHitBranchName = "LMDHitsPixel";
74  // hxpull = new TH1D("hxpull","x/#sigma_{x}",1e2,-10,10.);
75  // hypull = new TH1D("hypull","y/#sigma_{y}",1e2,-10,10.);
76  // hzpull = new TH1D("hzpull","z/#sigma_{z}",1e2,-10,10.);
77  // hpxpull = new TH1D("hpxpull","px/#sigma_{px}",1e2,-10,10.);
78  // hpypull = new TH1D("hpypull","x/#sigma_{py}",1e2,-10,10.);
79  // hpzpull = new TH1D("hpzpull","pz/#sigma_{pz}",1e2,-10,10.);
80  flGEANE = false;
81  flRK = false;
82  fscaleP = 1;
83  fscaleM = 1;
84  // rep = NULL;
85 }
static PndGeoHandling * Instance()
PndLmdKalmanTask::PndLmdKalmanTask ( TString  HitBranch,
TString  TrackBranch 
)

Definition at line 87 of file PndLmdKalmanTask.cxx.

References flGEANE, flRK, fscaleM, fscaleP, fSdsHitBranchName, fTrackBranchName, and PndGeoHandling::Instance().

88  : FairTask("Kalman Filter"), fPersistence(kFALSE) {
89  fTrackBranchName = TrackBranch;
90  fSdsHitBranchName = HitBranch;
92  flGEANE = false;
93  flRK = false;
94  fscaleP = 1;
95  fscaleM = 1;
96  // rep = NULL;
97 }
static PndGeoHandling * Instance()
PndLmdKalmanTask::~PndLmdKalmanTask ( )
virtual

Definition at line 99 of file PndLmdKalmanTask.cxx.

99  {
100  // if(fPH!=NULL)delete fPH;
101  // if(fChi2H!=NULL)delete fChi2H;
102  // delete rep;
103 }

Member Function Documentation

PndLmdKalmanTask::ClassDef ( PndLmdKalmanTask  ,
 
)
private
void PndLmdKalmanTask::Exec ( Option_t *  opt)
virtual

GEANE track rep --------------——

GEANE track rep (END) -----------------—

Definition at line 188 of file PndLmdKalmanTask.cxx.

References GFTrack::addHitVector(), GFRecoHitFactory::createMany(), fCharge, fGeoH, flGEANE, flRK, fPbeam, fPDGCode, fPro, fscaleM, fscaleP, fSdsHitsArray, fTheRecoHitFactory, fTrackArray, fTrackTmpArray, fTrkOutArray, fVerbose, GenfitTrack2PndTrack(), GFTrack::getCand(), GFTrack::getChiSqu(), PndSdsHit::GetCov(), GFTrackCand::getDirSeed(), GFTrackCand::getHit(), PndTrackCandHit::GetHitId(), PndTrackCand::GetNHits(), GFTrackCand::getNHits(), GFTrack::getNumHits(), PndGeoHandling::GetOUVShortId(), PndGeoHandling::GetPath(), GFTrackCand::getPosSeed(), PndSdsHit::GetSensorID(), PndTrackCand::GetSortedHit(), i, PndTrackCand2GenfitTrackCand(), PndTrack::Print(), GFTrack::Print(), GFKalman::processTrack(), GFTrack::setCandidate(), PndTrack::SetChi2(), GFKalman::setNumIterations(), PndTrack::SetRefIndex(), PndTrack::SetTrackCand(), sqrt(), trk, TString, and GFException::what().

188  {
189  fTrackTmpArray->Delete();
190  fTrkOutArray->Delete();
191  if (fVerbose > 1)
192  std::cout
193  << "((((((((((((((((((((( PndLmdKalmanTask::Exec )))))))))))))))))))))"
194  << std::endl;
195  Int_t counterGeaneTrk = 0;
196  Int_t rec_tkr_count = 0;
197  Int_t ntracks = fTrackArray->GetEntriesFast();
198 
199  // Detailed output
200  if (fVerbose > 1)
201  std::cout << " -I- PndLmdKalmanTask: contains " << ntracks << " Tracks."
202  << std::endl;
203  GFKalman fitter;
204  int numIttr = 1;
205  fitter.setNumIterations(numIttr);
206  for (Int_t itr = 0; itr < ntracks; ++itr) {
207  if (fVerbose > 1) std::cout << "starting track" << itr << std::endl;
208 
209  PndTrackCand* trackCand = (PndTrackCand*)fTrackArray->At(itr);
210  const int Ntrkcandhits = trackCand->GetNHits();
211  // Read info about 1st plane(sensor)
212  PndTrackCandHit theHit = trackCand->GetSortedHit(0); // get 1st hit
213  Int_t hitID = theHit.GetHitId();
214  PndSdsHit* myHit = (PndSdsHit*)(fSdsHitsArray->At(hitID));
215  TMatrixD hitCov = myHit->GetCov();
216  if (fVerbose > 1) std::cout << "hitCov:" << std::endl;
217  if (fVerbose > 1) hitCov.Print();
218  Int_t id = myHit->GetSensorID();
219  TString path = fGeoH->GetPath(id);
220  TVector3 oo, uu, vv;
221  fGeoH->GetOUVShortId(id, oo, uu, vv);
222  if (fVerbose > 1) {
223  std::cout << "oo:" << std::endl;
224  oo.Print();
225  std::cout << "uu:" << std::endl;
226  uu.Print();
227  std::cout << "vv:" << std::endl;
228  vv.Print();
229  }
230 
231  GFTrackCand* GFtrkCand = PndTrackCand2GenfitTrackCand(trackCand);
232  TVector3 StartPos = GFtrkCand->getPosSeed();
233  TVector3 StartDir = GFtrkCand->getDirSeed();
234  // //shift start point out of plane on 300 mkm
235  // double xShift = StartPos.X() - StartDir.X()*0.0300;
236  // double yShift = StartPos.Y() - StartDir.Y()*0.0300;
237  // double zShift = StartPos.Z() - StartDir.Z()*0.0300;
238  // StartPos.SetXYZ(xShift,yShift,zShift);
239  TVector3 StartMom = fPbeam * StartDir;
240  TVector3 StartPosErr(sqrt(hitCov[0][0]), sqrt(hitCov[1][1]),
241  sqrt(hitCov[2][2]));
242  TVector3 StartDirErr(
243  0.1 * (sqrt(hitCov[0][0])), 0.1 * (sqrt(hitCov[1][1])),
244  0.1 *
245  sqrt(hitCov[2]
246  [2])); // TODO: check this assumption (2*sigma_{x}/20cm)
247  TVector3 StartMomErr = fPbeam * StartDirErr;
248  // initial errors for Kalman must be large: this is usually done in order to
249  // give a low weight to the prefit
250  StartPosErr *= fscaleP;
251  StartMomErr *= fscaleM;
252  // StartMomErr *=1;
253  if (fVerbose > 2) {
254  unsigned int detid = 12345, index = 12345;
255  std::cout << "GFTrackCand no. " << itr << " has " << GFtrkCand->getNHits()
256  << " hits." << std::endl;
257  std::cout << "[ ihit | detid | index";
258  for (unsigned int ihit = 0; ihit < GFtrkCand->getNHits(); ihit++) {
259  GFtrkCand->getHit(ihit, detid,
260  index); // detid and index are written here
261  std::cout << " ]\n[ " << ihit << " | " << detid << " | " << index;
262  }
263  std::cout << " ]" << std::endl;
264  }
265 
266  if (fVerbose > 1) {
267  std::cout << "*** BEFORE ***" << std::endl;
268  std::cout << "StartPos:" << std::endl;
269  StartPos.Print();
270  std::cout << "StartPosErr:" << std::endl;
271  StartPosErr.Print();
272  std::cout << "StartMom:" << std::endl;
273  StartMom.Print();
274  std::cout << "StartMomErr:" << std::endl;
275  StartMomErr.Print();
276  }
277 
278  GFAbsTrackRep* rep;
279  // // /// The Runge Kutta trk rep ---------------
280  if (flRK) {
281  if (fVerbose > 1)
282  std::cout << "RKTrackRep will be used for track representation"
283  << std::endl;
284  rep = new RKTrackRep(StartPos, StartMom, StartPosErr, StartMomErr,
285  fPDGCode);
286  }
287  // // /// The Runge Kutta trk rep (END) ---------
288 
289  // /// LinTrk rep ------------------
290  // // TVector3 StartPos = GFtrkCand->getPosSeed();
291  // // TVector3 StartDir = GFtrkCand->getDirSeed();
292  // // TVector3 StartMom = fPbeam*StartDir;
293  // LSLTrackRep* rep = new
294  // LSLTrackRep(StartPos.Z(),StartPos.X(),StartPos.Y(),StartDir.X(),StartDir.Y(),1/fPbeam,
295  // StartPosErr.X(),StartPosErr.Y(),StartDirErr.X(),StartDirErr.Y(),
296  // 1e-23,magFieldConst);
297  // //TODO: double siginvp = 1/1e-4 is it correct???
298 
299  // /// LinTrk rep (END) ------------------
300 
302  if (flGEANE) {
303  GFDetPlane start_pl(StartPos, uu, vv); //
304  rep = new GeaneTrackRep(fPro, start_pl, StartMom, StartPosErr,
305  StartMomErr, fCharge, fPDGCode);
306  }
308 
309  GFTrack* trk = new GFTrack(rep);
310  trk->setCandidate(*GFtrkCand);
311 
312  // Load RecoHits
313  try {
315  if (fVerbose > 1) {
316  std::cout << trk->getNumHits() << " hits in track " << itr << std::endl;
317  }
318  } catch (GFException& e) {
319  std::cout << " *** PndLmdKalmanTask::Exec "
320  << "\t"
321  << "Genfit Exception: trk->addHitVector " << e.what()
322  << std::endl;
323  throw e;
324  }
325 
326  // Start Fitter
327  try {
328  if (fVerbose > 1) {
329  std::cout << " ... GFtrk BEFORE ..." << std::endl;
330  trk->Print();
331  }
332  fitter.processTrack(trk);
333  if (fVerbose > 1) {
334  std::cout << " ... GFtrk AFTER ..." << std::endl;
335  trk->Print();
336  }
337  } catch (GFException e) {
338  std::cout << "*** FITTER EXCEPTION ***" << std::endl;
339  std::cout << e.what() << std::endl;
340  }
341  if (fVerbose > 1) std::cout << "successful FIT!" << std::endl;
342 
343  // --- Get trk in PndTrack format ---
344  PndTrack* trkPnd = GenfitTrack2PndTrack(trk);
345  if (fVerbose > 1) {
346  std::cout << "trkPnd AFTER GenFit " << std::endl;
347  trkPnd->Print();
348  std::cout << "Number of hits in trk-cand: " << trackCand->GetNHits()
349  << std::endl;
350  }
351  trkPnd->SetTrackCand(*trackCand);
352  trkPnd->SetRefIndex(
353  itr); // TODO: check is it correct set RefIn like ID of trk-cand???
354  trkPnd->SetChi2(trk->getChiSqu());
355  // --- Save as PndTrack---
356  TClonesArray& clref = *fTrackTmpArray;
357  Int_t size = clref.GetEntriesFast();
358  PndTrack* trackfit = new (clref[size]) PndTrack(*trkPnd);
359 
360  delete trkPnd;
361  delete GFtrkCand;
362  delete trk;
363  // delete rep;
364  }
365 
366  // //filter trks based on chi2 and hit comparision --------------
367  // const unsigned int gll = fTrackTmpArray->GetEntriesFast();
368  // int rec_trk=0;
369  // if(flagFilter){
370  // // fTrkOutArray->Delete();
371  // if(fVerbose>4)
372  // cout<<"trk filter switched on!"<<endl;
373  // //go through all tracks
374  // vector<int> trksH0(gll);//hits on pl#0
375  // vector<int> trksH1(gll);//hits on pl#1
376  // vector<int> trksH2(gll);//hits on pl#2
377  // vector<int> trksH3(gll);//hits on pl#3
378  // vector<unsigned int> trkHn;//number of hits in trk
379  // vector<bool> trk_accept;
380  // vector<double> vchi2;
381  // for (unsigned int i = 0; i<gll;i++){
382  // trksH0[i]=-1;
383  // trksH1[i]=-1;
384  // trksH2[i]=-1;
385  // trksH3[i]=-1;
386  // }
387  // //fill vectors with trks hits
388  // for (unsigned int i = 0; i<gll;i++){
389  // PndTrack* trkpnd = (PndTrack*)(fTrackTmpArray->At(i));
390  // double chi2 = trkpnd->GetChi2();
391  // vchi2.push_back(chi2);
392  // trk_accept.push_back(true);
393  // int candID = trkpnd->GetRefIndex();
394  // PndTrackCand *trkcand = (PndTrackCand*)fTrackArray->At(candID);
395  // const unsigned int Ntrkcandhits= trkcand->GetNHits();
396  // trkHn.push_back(Ntrkcandhits);
397  // for (Int_t iHit = 0; iHit < Ntrkcandhits; iHit++){ // loop over
398  // rec.hits
399  // PndTrackCandHit candhit =
400  // (PndTrackCandHit)(trkcand->GetSortedHit(iHit));
401  // Int_t hitID = candhit.GetHitId();
402  // PndSdsHit* myHit = (PndSdsHit*)(fSdsHitsArray->At(hitID));
403  // Int_t sensid = myHit->GetSensorID();
404  // int ihalf,iplane,imodule,iside,idie,isensor;
405  // lmddim->Get_sensor_by_id(sensid,ihalf,iplane,imodule,iside,idie,isensor);
406  // if(fVerbose>4){
407  // cout<<"trk# "<<i<<" plane#"<<iplane<<endl;
408  // }
409  // switch(iplane)
410  // {
411  // case 0:
412  // trksH0[i]=hitID;
413  // case 1:
414  // trksH1[i]=hitID;
415  // case 2:
416  // trksH2[i]=hitID;
417  // case 3:
418  // trksH3[i]=hitID;
419  // }
420  // }
421  // }
422  // //compare trks on hit level
423  // for (unsigned int i = 0; i<gll;i++){
424  // for (unsigned int j = i+1; j<gll;j++){
425  // int coundduphit=4;//count dublicate hits
426  // if(trksH0[i]!=trksH0[j]) coundduphit--;
427  // if(trksH1[i]!=trksH1[j]) coundduphit--;
428  // if(trksH2[i]!=trksH2[j]) coundduphit--;
429  // if(trksH3[i]!=trksH3[j]) coundduphit--;
430  // if(fVerbose>4){
431  // cout<<" trk#"<<i<<":"<<trksH0[i]<<" trk#"<<j<<":"<<trksH0[j]<<endl;
432  // cout<<" trk#"<<i<<":"<<trksH1[i]<<" trk#"<<j<<":"<<trksH1[j]<<endl;
433  // cout<<" trk#"<<i<<":"<<trksH2[i]<<" trk#"<<j<<":"<<trksH2[j]<<endl;
434  // cout<<" trk#"<<i<<":"<<trksH3[i]<<" trk#"<<j<<":"<<trksH3[j]<<endl;
435  // cout<<" dublicate: "<<coundduphit<<endl;
436  // cout<<""<<endl;
437  // }
438  // if(coundduphit>2){// if 3 and more hits are similar
439  // if(vchi2[i]>vchi2[j]){
440  // if(fVerbose>4){
441  // cout<<" trk#"<<i<<": has "<<trkHn[i]<<"hits; trk#"<<j<<": has
442  // "<<trkHn[j]<<" hits"<<endl;
443  // cout<<" trk#"<<i<<" has chi2="<<vchi2[i]<<" "<<" trk#"<<j<<" has
444  // chi2="<<vchi2[j]<<endl;
445  // }
446  // trk_accept[i]=false;
447  // trk_accept[j]=true;
448  // }
449  // else{
450  // if(fVerbose>4){
451  // cout<<" trk#"<<i<<": has "<<trkHn[i]<<"hits; trk#"<<j<<": has
452  // "<<trkHn[j]<<" hits"<<endl;
453  // cout<<" trk#"<<i<<" has chi2="<<vchi2[i]<<" "<<" trk#"<<j<<" has
454  // chi2="<<vchi2[j]<<endl;
455  // }
456  // trk_accept[i]=true;
457  // trk_accept[j]=false;
458  // }
459  // }
460  // }
461  // }
462  // //save good trks
463  // int rec_trk=0;
464  // for (unsigned int i = 0; i<gll;i++){
465  // if(trk_accept[i]){
466  // PndTrack* trkpnd = (PndTrack*)(fTrackTmpArray->At(i));
467  // new((*fTrkOutArray)[rec_trk]) PndTrack(*(trkpnd)); //save Track
468  // rec_trk++;
469  // }
470  // }
471  // cout<<rec_trk<<" trks saved out of "<<gll<<endl;
472  // }
473  // else{
474  // if(fVerbose>4)
475  // cout<<"trk filter switched off!"<<endl;
476  // for (unsigned int i = 0; i<gll;i++){
477  // PndTrack* trkpnd = (PndTrack*)(fTrackTmpArray->At(i));
478  // new((*fTrkOutArray)[rec_trk]) PndTrack(*(trkpnd)); //save Track
479  // rec_trk++;
480  // }
481  // }
482  // //filter end ------------------------------------------------------------
483  for (unsigned int i = 0; i < fTrackTmpArray->GetEntriesFast(); i++) {
484  PndTrack* trkpnd = (PndTrack*)(fTrackTmpArray->At(i));
485  TClonesArray& clref = *fTrkOutArray;
486  Int_t size = clref.GetEntriesFast();
487  new (clref[size]) PndTrack(*(trkpnd)); // save Track
488  }
489  if (fVerbose > 1)
490  std::cout << "Fitting done, result is " << fTrkOutArray->GetEntriesFast()
491  << " fitted trks" << std::endl;
492  // rep = NULL;
493  return;
494 }
Base Class for genfit track representations. Defines interface for track parameterizations.
Definition: GFAbsTrackRep.h:80
int fVerbose
Definition: poormantracks.C:24
unsigned int getNumHits() const
Definition: GFTrack.h:148
void SetRefIndex(TString branch, Int_t i)
Definition: PndTrack.h:41
void Print()
Definition: GFTrack.cxx:217
void GetOUVShortId(Int_t shortId, TVector3 &o, TVector3 &u, TVector3 &v)
Int_t i
Definition: run_full.C:25
Detector plane genfit geometry class.
Definition: GFDetPlane.h:59
friend F32vec4 sqrt(const F32vec4 &a)
Definition: P4_F32vec4.h:29
Track object for genfit. genfit algorithms work on these objects.
Definition: GFTrack.h:60
std::vector< GFAbsRecoHit * > createMany(const GFTrackCand &cand)
Creat a collection of RecoHits.
double getChiSqu() const
Get chi2.
Definition: GFTrack.h:252
Generic Kalman Filter implementation.
Definition: GFKalman.h:50
PndTrackCandHit GetSortedHit(UInt_t i)
Definition: PndTrackCand.h:54
virtual const char * what() const
standard error message handling for exceptions. use like "std::cerr << e.what();" ...
Definition: GFException.cxx:47
unsigned int getNHits() const
Definition: GFTrackCand.h:113
void SetChi2(Double_t d)
Definition: PndTrack.h:39
void addHitVector(std::vector< GFAbsRecoHit * > hits)
Add collection of hits.
Definition: GFTrack.h:310
void setCandidate(const GFTrackCand &cand, bool doreset=false)
set track candidate
Definition: GFTrack.cxx:148
TString GetPath(Int_t shortID)
for a given shortID the path is returned
TClonesArray * fTrackTmpArray
TVector3 getPosSeed() const
get the seed value for track: pos
Definition: GFTrackCand.h:131
TMatrixD GetCov() const
Definition: PndSdsHit.h:98
TVector3 getDirSeed() const
get the seed value for track: direction
Definition: GFTrackCand.h:133
Track Representation module based on a Runge-Kutta algorithm including a full material model...
TClonesArray * fSdsHitsArray
void getHit(unsigned int i, unsigned int &detId, unsigned int &hitId) const
Get detector ID and cluster index (hitId) for hit number i.
Definition: GFTrackCand.h:84
Track candidate – a list of cluster indices.
Definition: GFTrackCand.h:55
GFTrackCand * PndTrackCand2GenfitTrackCand(PndTrackCand *cand)
void processTrack(GFTrack *trk)
Performs fit on a GFTrack.
Definition: GFKalman.cxx:40
PndGeoHandling * fGeoH
GFTrack * trk
Definition: checkgenfit.C:13
const GFTrackCand & getCand() const
Definition: GFTrack.h:142
Exception class for error handling in GENFIT (provides storage for diagnostic information) ...
Definition: GFException.h:45
TClonesArray * fTrackArray
PndTrack * GenfitTrack2PndTrack(const GFTrack *tr)
UInt_t GetNHits() const
Definition: PndTrackCand.h:59
FairGeanePro * fPro
void Print()
Definition: PndTrack.cxx:39
Int_t GetSensorID() const
Definition: PndSdsHit.h:90
Int_t GetHitId() const
void setNumIterations(Int_t i)
Set number of iterations for Kalman Filter.
Definition: GFKalman.h:86
void SetTrackCand(const PndTrackCand &cand)
Definition: PndTrack.h:43
TMatrixT< double > TMatrixD
Definition: PndLmdDim.h:52
TClonesArray * fTrkOutArray
GFRecoHitFactory * fTheRecoHitFactory
InitStatus PndLmdKalmanTask::Init ( )
virtual

Definition at line 105 of file PndLmdKalmanTask.cxx.

References GFRecoHitFactory::addProducer(), fCharge, fGeoH, flGEANE, flRK, fPbeam, fPDGCode, fPro, fRun, fSdsHitBranchName, fSdsHitsArray, fsensType, fTheRecoHitFactory, fTrackArray, fTrackBranchName, fTrackcount, fTrackTmpArray, fTrkOutArray, GFFieldManager::getInstance(), GFFieldManager::init(), PndGeoHandling::Instance(), par, and rtdb.

105  {
106  fTrackcount = 0;
107  fsensType = 0;
108  // Get ROOT Manager
109  FairRootManager* ioman = FairRootManager::Instance();
110 
111  if (ioman == 0) {
112  Error("PndLmdKalmanTask::Init", "RootManager not instantiated!");
113  return kERROR;
114  }
115 
116  // Get input collection
117  fTrackArray = (TClonesArray*)ioman->GetObject(fTrackBranchName);
118 
119  if (fTrackArray == 0) {
120  Error("PndLmdKalmanTask::Init", "GFTrackCandLmd array not found!");
121  return kERROR;
122  }
123 
124  fSdsHitsArray = (TClonesArray*)ioman->GetObject(fSdsHitBranchName);
125 
126  // Set output collection
127  // fTrackTmpArray = new TClonesArray("PndLinTrack");
128  // ioman->Register("LMDTrack", "PndLmd", fTrackTmpArray, kTRUE);
129  fTrackTmpArray = new TClonesArray("PndTrack");
130  fTrkOutArray = new TClonesArray("PndTrack");
131  ioman->Register("LMDPndTrackFilt", "PndLmd", fTrkOutArray, kTRUE);
132 
133  // Build hit factory -----------------------------
135 
136  TClonesArray* stripar = (TClonesArray*)ioman->GetObject(fSdsHitBranchName);
137  if (stripar == 0) { // TODO Convention on detector number needed
138  Error("PndLmdKalmanTask::Init", "LMDHitsPixel array not found");
139  } else {
140  int detID = ioman->GetBranchId(fSdsHitBranchName);
141  std::cout << "detID = " << detID << std::endl;
142  // fTheRecoHitFactory->addProducer(ioman->GetBranchId(fSdsHitBranchName),new
143  // GFRecoHitProducer<PndSdsHit,PndSdsRecoHit>(stripar));
146  std::cout << "*** PndLmdKalmanTask::Init"
147  << "\t"
148  << "fSdsHitBranchName array found" << std::endl;
149  }
150 
151  // read beam momentum from base
152  FairRun* fRun = FairRun::Instance();
153  FairRuntimeDb* rtdb = fRun->GetRuntimeDb();
154  FairBaseParSet* par =
155  (FairBaseParSet*)(rtdb->findContainer("FairBaseParSet"));
156  fPbeam = par->GetBeamMom();
157  // fPbeam -=8.77e-5;//TEST!!! energy loss for 11.91 GeV/c
158  // fPbeam -=1e-4;//TEST!!! energy loss for 1.5 GeV/c
159  std::cout << "Beam Momentum for this run is " << fPbeam << std::endl;
160  fPDGCode = -2212; // barp
161  fCharge = -1; // barp
162 
164  fPro = new FairGeanePro();
165  if (flRK) {
166  std::cout << "RKTrackRep will be used for track representation"
167  << std::endl;
168  // GFFieldManager::getInstance()->init(new GFPandaField());
170  }
171  if (flGEANE) {
172  std::cout << "GeaneTrackRep will be used for track representation"
173  << std::endl;
174  fPro = new FairGeanePro();
175  }
176 
177  // //for test purpose
178  // fMCHits = (TClonesArray*) ioman->GetObject("LMDPoint");
179  // if ( !fMCHits) {
180  // std::cout << "-W- PndLmdGeaneTask::Init: "<< "No LMDPoint"<<" array!" <<
181  // std::endl;
182  // return kERROR;
183  // }
184 
185  return kSUCCESS;
186 }
void addProducer(int detID, GFAbsRecoHitProducer *hitProd)
Register a producer module to the factory.
Double_t par[3]
Template class for a hit producer module.
TClonesArray * fTrackTmpArray
Magnetic field.
FairRunAna * fRun
Definition: hit_dirc.C:58
Factory object to create RecoHits from digitized and clustered data.
TClonesArray * fSdsHitsArray
FairRuntimeDb * rtdb
Definition: hit_dirc.C:66
static PndGeoHandling * Instance()
PndGeoHandling * fGeoH
void init(GFAbsBField *b)
set the magntic field here. Magnetic field classes must be derived from GFAbsBField ...
TClonesArray * fTrackArray
static GFFieldManager * getInstance()
FairGeanePro * fPro
TClonesArray * fTrkOutArray
GFRecoHitFactory * fTheRecoHitFactory
virtual void PndLmdKalmanTask::SetFilterFlag ( bool  val)
inlinevirtual

Definition at line 64 of file PndLmdKalmanTask.h.

References flagFilter, and val.

64 { flagFilter = val; };
Double_t val[nBoxes][nFEBox]
Definition: createCalib.C:11
void PndLmdKalmanTask::SetGeaneTrkRep ( Bool_t  val = kTRUE)
inline

Definition at line 54 of file PndLmdKalmanTask.h.

References flGEANE, and val.

Referenced by runLumi4KalmanFitter().

54 { flGEANE = val; }
Double_t val[nBoxes][nFEBox]
Definition: createCalib.C:11
void PndLmdKalmanTask::SetPersistence ( Bool_t  opt = kTRUE)
inline

Definition at line 52 of file PndLmdKalmanTask.h.

References fPersistence.

52 { fPersistence = opt; }
void PndLmdKalmanTask::SetRKTrkRep ( Bool_t  val = kTRUE)
inline

Definition at line 55 of file PndLmdKalmanTask.h.

References flRK, and val.

Referenced by runLumi4KalmanFitter().

55 { flRK = val; }
Double_t val[nBoxes][nFEBox]
Definition: createCalib.C:11
void PndLmdKalmanTask::SetScaleMError ( double  sc)
inline

Definition at line 58 of file PndLmdKalmanTask.h.

References fscaleM.

Referenced by runLumi4KalmanFitter().

58 { fscaleM = sc; }
void PndLmdKalmanTask::SetScalePError ( double  sc)
inline

Definition at line 57 of file PndLmdKalmanTask.h.

References fscaleP.

Referenced by runLumi4KalmanFitter().

57 { fscaleP = sc; }
void PndLmdKalmanTask::SetTrackBranchName ( const TString name)
inline

Definition at line 51 of file PndLmdKalmanTask.h.

References fTrackBranchName, and name.

TString name

Member Data Documentation

Double_t PndLmdKalmanTask::fCharge
private

Definition at line 108 of file PndLmdKalmanTask.h.

Referenced by Exec(), and Init().

Int_t PndLmdKalmanTask::fEvent
private

Definition at line 102 of file PndLmdKalmanTask.h.

PndGeoHandling* PndLmdKalmanTask::fGeoH
private

Definition at line 92 of file PndLmdKalmanTask.h.

Referenced by Exec(), and Init().

bool PndLmdKalmanTask::flagFilter
private

Definition at line 111 of file PndLmdKalmanTask.h.

Referenced by SetFilterFlag().

bool PndLmdKalmanTask::flGEANE
private

Definition at line 64 of file PndLmdKalmanTask.h.

Referenced by Exec(), Init(), PndLmdKalmanTask(), and SetGeaneTrkRep().

bool PndLmdKalmanTask::flRK
private

Definition at line 69 of file PndLmdKalmanTask.h.

Referenced by Exec(), Init(), PndLmdKalmanTask(), and SetRKTrkRep().

Double_t PndLmdKalmanTask::fPbeam
private

Definition at line 106 of file PndLmdKalmanTask.h.

Referenced by Exec(), and Init().

Int_t PndLmdKalmanTask::fPDGCode
private

Definition at line 107 of file PndLmdKalmanTask.h.

Referenced by Exec(), and Init().

Bool_t PndLmdKalmanTask::fPersistence
private

Definition at line 89 of file PndLmdKalmanTask.h.

Referenced by SetPersistence().

FairGeanePro* PndLmdKalmanTask::fPro
private

Definition at line 104 of file PndLmdKalmanTask.h.

Referenced by Exec(), and Init().

double PndLmdKalmanTask::fscaleM
private

Definition at line 72 of file PndLmdKalmanTask.h.

Referenced by Exec(), PndLmdKalmanTask(), and SetScaleMError().

double PndLmdKalmanTask::fscaleP
private

Definition at line 71 of file PndLmdKalmanTask.h.

Referenced by Exec(), PndLmdKalmanTask(), and SetScalePError().

TString PndLmdKalmanTask::fSdsHitBranchName
private

Definition at line 88 of file PndLmdKalmanTask.h.

Referenced by Init(), and PndLmdKalmanTask().

TClonesArray* PndLmdKalmanTask::fSdsHitsArray
private

Definition at line 86 of file PndLmdKalmanTask.h.

Referenced by Exec(), and Init().

int PndLmdKalmanTask::fsensType
private

Definition at line 105 of file PndLmdKalmanTask.h.

Referenced by Init().

GFRecoHitFactory* PndLmdKalmanTask::fTheRecoHitFactory
private

Definition at line 91 of file PndLmdKalmanTask.h.

Referenced by Exec(), and Init().

TClonesArray* PndLmdKalmanTask::fTrackArray
private

Definition at line 81 of file PndLmdKalmanTask.h.

Referenced by Exec(), and Init().

TString PndLmdKalmanTask::fTrackBranchName
private

Definition at line 87 of file PndLmdKalmanTask.h.

Referenced by Init(), PndLmdKalmanTask(), and SetTrackBranchName().

Int_t PndLmdKalmanTask::fTrackcount
private

Definition at line 100 of file PndLmdKalmanTask.h.

Referenced by Init().

TClonesArray* PndLmdKalmanTask::fTrackParFinal
private

Definition at line 85 of file PndLmdKalmanTask.h.

TClonesArray* PndLmdKalmanTask::fTrackTmpArray
private

Definition at line 83 of file PndLmdKalmanTask.h.

Referenced by Exec(), and Init().

TClonesArray* PndLmdKalmanTask::fTrkOutArray
private

Definition at line 84 of file PndLmdKalmanTask.h.

Referenced by Exec(), and Init().

GFFieldManager* PndLmdKalmanTask::gfMagField
private

Definition at line 110 of file PndLmdKalmanTask.h.

TGeant3* PndLmdKalmanTask::gMC3
private

Definition at line 103 of file PndLmdKalmanTask.h.


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