8 #include <FairRootManager.h> 
    9 #include <FairRunAna.h> 
   10 #include <FairRuntimeDb.h> 
   14 #include <TClonesArray.h> 
   20   fSttParameters = NULL;
 
   30   fsectorPatternTree = NULL;
 
   31   ftrackPatternTree = NULL;
 
   33   foutputFilename = 
"patternDB.root";
 
   36   nMultipleMCTrackLinks = 0;
 
   43   FairRuntimeDb *
rtdb = FairRunAna::Instance()->GetRuntimeDb();
 
   47   std::cout << 
"Filename for pattern DB: " << 
foutputFilename << std::endl;
 
   55   FairRootManager *ioman = FairRootManager::Instance();
 
   57     std::cout << 
"-E- PndPatternDBGenerator::Init: FairRootManager not instantiated!" << std::endl;
 
   62   fEventHeader = (TClonesArray*) ioman->GetObject(
"EventHeader.");
 
   64     std::cout << 
"-E- PndPatternDBGenerator::Init: EventHeader not loaded!" << std::endl;
 
   69   fSttHitArray = (TClonesArray*) ioman->GetObject(
"STTHit");
 
   78   mcTrackID = ioman->GetBranchId(
"MCTrack");
 
   81   trackCands = (TClonesArray*) ioman->GetObject(
"SttMvdGemIdealTrackCand");
 
   83   std::cout << 
"-I- PndPatternDBGenerator: Initialisation successful" << std::endl;
 
   94   std::cout << 
"Total number of tracks found: " << 
nTotalTracks << std::endl;
 
   97   std::cout << 
"Ratio: " << ratio << 
"%" << std::endl;
 
  104   FairRootManager *ioman = FairRootManager::Instance();
 
  107   short nTrackCands = 
trackCands->GetEntriesFast();
 
  108   for (
int iTrackCand = 0; iTrackCand < nTrackCands; ++iTrackCand) {
 
  112     FairMultiLinkedData sttLinks = cand->GetLinksWithType(
sttBranchID);
 
  116     for (
int iLink = 0; iLink < sttLinks.GetNLinks(); ++iLink) {
 
  117       FairLink sttLink = sttLinks.GetLink(iLink);
 
  119       sttHitArray.push_back(sttHit);
 
  122     FairMultiLinkedData mcTrackLinks = cand->GetLinksWithType(
mcTrackID);
 
  125     if (mcTrackLinks.GetNLinks() == 0) {
 
  126       std::cout << 
"WARNING: PndPatternDBGenerator::GenerateTrackPatterns: No MCTrackfound, skipping event!" << std::endl;
 
  129     if (mcTrackLinks.GetNLinks() > 1) {
 
  131       std::cout << 
"WARNING: PndPatternDBGenerator::GenerateTrackPatterns: Found more than one MCTrack link!!!" << std::endl;
 
  134     FairLink mcTrackLink = mcTrackLinks.GetLink(0);
 
  145   for (
auto const& sttHit : sttHitArray) {
 
  146     short tubeID = sttHit->GetTubeID();
 
  149     hitMap.insert(std::make_pair(sectorID, tubeID));
 
  157   for (
int iSector = 0; iSector < 6; ++iSector) {
 
  158     auto hitMapSectorRange = hitMap.equal_range(iSector);
 
  162     for (
auto iter = hitMapSectorRange.first; iter != hitMapSectorRange.second; ++iter) {
 
  163       int tubeID = iter->second;
 
  168       patterns.push_back(pattern);
 
  180   for (
auto const& sttHit: sttHitArray) {
 
  181     int tubeID = sttHit->GetTubeID();
 
  186     patterns.push_back(pattern);
 
  192   for (
auto pattern: patterns) {
 
virtual InitStatus Init()
std::vector< PndPattern > PndPatterns
TClonesArray * trackCands
virtual ~PndPatternDBGenerator()
TVector3 GetMomentum() const 
HitSectorMap FillSectorHitMap(HitArray sttHitArray)
std::multimap< int, int > HitSectorMap
PndPatterns FillTrackPatterns(HitArray hitArray, PndMCTrack *mcTrack)
int nMultipleMCTrackLinks
TClonesArray * fEventHeader
TClonesArray * fMCTrackArray
void GenerateTrackPatterns()
TTree * ftrackPatternTree
void SetSectorID(int sectorID)
TClonesArray * FillTubeArray()
virtual void Exec(Option_t *opt)
TTree * fsectorPatternTree
void AddMomentum(TVector3 momentum)
void AddPatternsToTree(PndPatterns patterns, TTree *tree)
PndGeoSttPar * fSttParameters
void AddTubeID(int tubeID)
TClonesArray * fSttHitArray
TClonesArray * fTubeArray
PndPatterns FillSectorPatterns(HitArray hitArray, PndMCTrack *mcTrack)
std::vector< PndSttHit * > HitArray
virtual void FinishTask()
virtual void SetParContainers()