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()