9 #include "FairRootManager.h"
11 #include "FairRuntimeDb.h"
12 #include "TClonesArray.h"
22 : FairTask(
"LMD Hit Merging Task"), fHitArray(0), fMergedHitArray(0) {
24 hdxdy =
new TH2D(
"hdxdy",
"; #deltax, #mum; #deltay, #mum", 4e2, -100, 100,
26 hdz =
new TH1D(
"hdz",
";#deltaz, #mum", 2e3, -1000, 1000);
31 : FairTask(name), fHitArray(0), fMergedHitArray(0) {
33 hdxdy =
new TH2D(
"hdxdy",
"; #deltax, #mum; #deltay, #mum", 4e2, -100, 100,
35 hdz =
new TH1D(
"hdz",
";#deltaz, #mum", 2e3, -1000, 1000);
44 FairRootManager* ioman = FairRootManager::Instance();
46 std::cout <<
"-E- PndLmdHitMergeTask::Init: "
47 <<
"RootManager not instantiated!" << std::endl;
55 std::cout <<
"-W- PndLmdHitMergeTask::Init: "
56 <<
"No LmdHitsPixel array!" << std::endl;
64 Info(
"Init",
"Initialisation successfull");
72 std::cout <<
" **Starting PndLmdHitMergeTask::Exec()**" << std::endl;
81 (TClonesArray*)FairRootManager::Instance()->GetObject(
fHitBranchName);
83 std::cout <<
"-W- PndLmdHitMergeTask::Init: "
84 <<
"No Hit array!" << std::endl;
89 if (
fHitArray->GetEntriesFast() == 0)
return;
92 std::vector<unsigned int> mergewithIDs, mergedHits;
96 unsigned int newHits = 0;
97 for (Int_t iHit = 0; iHit <
fHitArray->GetEntriesFast(); iHit++) {
99 if (iHit == 0) std::cout <<
"#### NEW event ####" << std::endl;
102 for (
unsigned int ijk = 0; ijk < mergedHits.size();
104 if (iHit == (
int)mergedHits.at(ijk)) skip =
true;
106 mergewithIDs.clear();
109 for (Int_t jHit = iHit + 1; jHit <
fHitArray->GetEntriesFast();
113 double dz = (myHit1->GetZ()) - (myHit2->GetZ());
117 double dx = (myHit1->GetX()) - (myHit2->GetX());
118 double dy = (myHit1->GetY()) - (myHit2->GetY());
120 if (
fabs(dx) < 0.0075 &&
122 hdxdy->Fill(1e4 * dx, 1e4 * dy);
125 if (dz < 0.01 || dz > 0.1)
continue;
126 mergewithIDs.push_back(jHit);
127 mergedHits.push_back(jHit);
131 if (mergewithIDs.size() > 0) {
133 std::cout <<
"hit merged with: " << mergewithIDs.size() <<
" hits"
136 tmphit =
new ((*fMergedHitArray)[newHits])
PndSdsMergedHit(*myHit1, 0);
138 double x = tmphit->GetX(),
y = tmphit->GetY(),
z = tmphit->GetZ();
139 for (
unsigned int iMerge = 0; iMerge < mergewithIDs.size();
147 myHit2->GetRefIndex());
150 x /= (mergewithIDs.size() + 1);
151 y /= (mergewithIDs.size() + 1);
152 z /= (mergewithIDs.size() + 1);
157 std::cout <<
"!!! Merged hit !!!" << std::endl;
162 tmphit =
new ((*fMergedHitArray)[newHits])
PndSdsMergedHit(*myHit1, -1);
170 std::cout <<
"-I- PndLmdHitMergeTask: out of "
171 <<
fHitArray->GetEntriesFast() <<
" Hits "
virtual void Print(const Option_t *opt=0) const
void SetSecondMCHit(Int_t secMChit)
virtual ~PndLmdHitMergeTask()
virtual InitStatus Init()
TClonesArray * fMergedHitArray
void SetIsMerged(bool fflag)
friend F32vec4 fabs(const F32vec4 &a)
virtual void Exec(Option_t *opt)