CbmSttFindTracks.cxx 5.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193
  1. // -------------------------------------------------------------------------
  2. // ----- CbmSttFindTracks source file -----
  3. // ----- Created 02/02/05 by V. Friese -----
  4. // -------------------------------------------------------------------------
  5. #include "TClonesArray.h"
  6. #include "FairHit.h"
  7. #include "FairRootManager.h"
  8. #include "CbmSttFindTracks.h"
  9. #include "CbmSttTrack.h"
  10. #include "CbmSttTrackFinder.h"
  11. #include <iostream>
  12. using namespace std;
  13. // ----- Default constructor -------------------------------------------
  14. CbmSttFindTracks::CbmSttFindTracks()
  15. : FairTask("STT Find Tracks")
  16. {
  17. fFinder = NULL;
  18. fTrackArray = NULL;
  19. fNofTracks = 0;
  20. fVerbose = 1;
  21. fCollectionsComplete = kFALSE;
  22. }
  23. // -------------------------------------------------------------------------
  24. // ----- Standard constructor ------------------------------------------
  25. CbmSttFindTracks::CbmSttFindTracks(CbmSttTrackFinder* finder,
  26. Int_t verbose)
  27. : FairTask("STT Find Tracks")
  28. {
  29. fFinder = finder;
  30. fTrackArray = NULL;
  31. fNofTracks = 0;
  32. fVerbose = verbose;
  33. fCollectionsComplete = kFALSE;
  34. }
  35. // -------------------------------------------------------------------------
  36. // ----- Constructor with name and title -------------------------------
  37. CbmSttFindTracks::CbmSttFindTracks(const char* name, const char* title,
  38. CbmSttTrackFinder* finder,
  39. Int_t verbose)
  40. : FairTask(name)
  41. {
  42. fFinder = finder;
  43. fTrackArray = NULL;
  44. fNofTracks = 0;
  45. fVerbose = verbose;
  46. fCollectionsComplete = kFALSE;
  47. }
  48. // -------------------------------------------------------------------------
  49. // ----- Destructor ----------------------------------------------------
  50. CbmSttFindTracks::~CbmSttFindTracks()
  51. {
  52. fTrackArray->Delete();
  53. fHitCollectionNames.clear();
  54. fPointCollectionNames.clear();
  55. }
  56. // -------------------------------------------------------------------------
  57. // ----- Public method Init (abstract in base class) --------------------
  58. InitStatus CbmSttFindTracks::Init()
  59. {
  60. // Check for Track finder
  61. if (! fFinder) {
  62. cout << "-E- CbmSttFindTracks::Init: No track finder selected!" << endl;
  63. return kERROR;
  64. }
  65. FairRootManager
  66. *ioman = FairRootManager::Instance();
  67. if (!ioman)
  68. {
  69. cout << "-E- CbmSttFindTracks::AddHitCollection: "
  70. << "RootManager not instantised!" << endl;
  71. return kFATAL;
  72. }
  73. // Create and register SttTrack array
  74. fTrackArray = new TClonesArray("CbmSttTrack",100);
  75. ioman->Register("STTTrack", "STT", fTrackArray, kTRUE);
  76. // Set verbosity of track finder
  77. fFinder->SetVerbose(fVerbose);
  78. // Call the Init method of the track finder
  79. fFinder->Init();
  80. return kSUCCESS;
  81. }
  82. // -------------------------------------------------------------------------
  83. void CbmSttFindTracks::AddHitCollectionName(char *hitCollectionName, char *pointCollectionName)
  84. {
  85. string
  86. newPointName(pointCollectionName),
  87. newHitName(hitCollectionName);
  88. fHitCollectionNames.push_back(newHitName);
  89. fPointCollectionNames.push_back(newPointName);
  90. }
  91. void CbmSttFindTracks::AddHitCollection(char const *hitCollectionName, char const *pointCollectionName)
  92. {
  93. // Get and check FairRootManager
  94. FairRootManager
  95. *ioman = FairRootManager::Instance();
  96. if (!ioman)
  97. {
  98. cout << "-E- CbmSttFindTracks::AddHitCollection: "
  99. << "RootManager not instantised!" << endl;
  100. }
  101. // Get hit Array
  102. TClonesArray
  103. *fHitArray = (TClonesArray*) ioman->GetObject(hitCollectionName);
  104. if (!fHitArray)
  105. {
  106. cout << "-W- CbmSttFindTracks::AddHitCollection: No " << hitCollectionName << " STT hit array!"
  107. << endl;
  108. }
  109. // Get point Array
  110. TClonesArray
  111. *fPointArray = (TClonesArray*) ioman->GetObject(pointCollectionName);
  112. if (!fPointArray)
  113. {
  114. cout << "-W- CbmSttFindTracks::AddHitCollection: No " << pointCollectionName << " STT hit array!"
  115. << endl;
  116. }
  117. fFinder->AddHitCollection(fHitArray, fPointArray);
  118. }
  119. void CbmSttFindTracks::AddAllCollections()
  120. {
  121. if (!fCollectionsComplete)
  122. {
  123. for (int counter = 0; counter < fHitCollectionNames.size(); counter++)
  124. {
  125. AddHitCollection(fHitCollectionNames[counter].c_str(), fPointCollectionNames[counter].c_str());
  126. }
  127. fCollectionsComplete = kTRUE;
  128. }
  129. }
  130. // ----- Public method Exec --------------------------------------------
  131. void CbmSttFindTracks::Exec(Option_t* opt)
  132. {
  133. AddAllCollections();
  134. fTrackArray->Clear();
  135. fNofTracks = fFinder->DoFind(fTrackArray);
  136. for (Int_t iTrack=0; iTrack < fTrackArray->GetEntriesFast(); iTrack++)
  137. {
  138. CbmSttTrack* track = (CbmSttTrack*) fTrackArray->At(iTrack);
  139. track->SortHits();
  140. }
  141. }
  142. // -------------------------------------------------------------------------
  143. // ----- Public method Finish ------------------------------------------
  144. void CbmSttFindTracks::Finish()
  145. {
  146. fFinder->Finish();
  147. }
  148. // -------------------------------------------------------------------------
  149. ClassImp(CbmSttFindTracks)