FairRoot/PandaRoot
Public Member Functions | Protected Member Functions | Protected Attributes | List of all members
PndLmdHitMergeTask Class Reference

#include <PndLmdHitMergeTask.h>

Inheritance diagram for PndLmdHitMergeTask:

Public Member Functions

 PndLmdHitMergeTask ()
 
 PndLmdHitMergeTask (const char *name)
 
virtual ~PndLmdHitMergeTask ()
 
virtual InitStatus Init ()
 
virtual void Exec (Option_t *opt)
 

Protected Member Functions

 ClassDef (PndLmdHitMergeTask, 0)
 

Protected Attributes

TClonesArray * fHitArray
 
TClonesArray * fMergedHitArray
 
TString fHitBranchName
 
TH2 * hdxdy
 
TH1 * hdz
 

Detailed Description

Definition at line 17 of file PndLmdHitMergeTask.h.

Constructor & Destructor Documentation

PndLmdHitMergeTask::PndLmdHitMergeTask ( )

Default constructor

Definition at line 21 of file PndLmdHitMergeTask.cxx.

References fHitBranchName, hdxdy, and hdz.

22  : FairTask("LMD Hit Merging Task"), fHitArray(0), fMergedHitArray(0) {
23  fHitBranchName = "LMDHitsPixel";
24  hdxdy = new TH2D("hdxdy", "; #deltax, #mum; #deltay, #mum", 4e2, -100, 100,
25  4e2, -100, 100);
26  hdz = new TH1D("hdz", ";#deltaz, #mum", 2e3, -1000, 1000);
27 }
TClonesArray * fHitArray
TClonesArray * fMergedHitArray
PndLmdHitMergeTask::PndLmdHitMergeTask ( const char *  name)

Definition at line 30 of file PndLmdHitMergeTask.cxx.

References fHitBranchName, hdxdy, and hdz.

31  : FairTask(name), fHitArray(0), fMergedHitArray(0) {
32  fHitBranchName = "LMDHitsPixel";
33  hdxdy = new TH2D("hdxdy", "; #deltax, #mum; #deltay, #mum", 4e2, -100, 100,
34  4e2, -100, 100);
35  hdz = new TH1D("hdz", ";#deltaz, #mum", 2e3, -1000, 1000);
36 }
TClonesArray * fHitArray
TClonesArray * fMergedHitArray
TString name
PndLmdHitMergeTask::~PndLmdHitMergeTask ( )
virtual

Destructor

Definition at line 39 of file PndLmdHitMergeTask.cxx.

39 {}

Member Function Documentation

PndLmdHitMergeTask::ClassDef ( PndLmdHitMergeTask  ,
 
)
protected
void PndLmdHitMergeTask::Exec ( Option_t *  opt)
virtual

Virtual method Exec

!! works only in case merging 2 hits

Definition at line 70 of file PndLmdHitMergeTask.cxx.

References dx, dy, dz, fabs(), fHitArray, fHitBranchName, fMergedHitArray, fVerbose, hdxdy, hdz, PndSdsHit::Print(), PndSdsMergedHit::SetIsMerged(), PndSdsMergedHit::SetSecondMCHit(), x, y, and z.

70  {
71  if (fVerbose > 2)
72  std::cout << " **Starting PndLmdHitMergeTask::Exec()**" << std::endl;
73 
74  // Reset output array
75  // fMergedHitArray = FairRootManager::Instance()->GetTClonesArray("LmdHits");
76  // if ( ! fMergedHitArray ) Fatal("Exec", "No OutputArray");
77  fMergedHitArray->Delete();
78 
79  // Get input array
80  fHitArray =
81  (TClonesArray*)FairRootManager::Instance()->GetObject(fHitBranchName);
82  if (!fHitArray) {
83  std::cout << "-W- PndLmdHitMergeTask::Init: "
84  << "No Hit array!" << std::endl;
85  return;
86  }
87 
88  // when we have no hits, we can end the event here.
89  if (fHitArray->GetEntriesFast() == 0) return;
90 
91  // ------- SEARCH Close Hits ------
92  std::vector<unsigned int> mergewithIDs, mergedHits;
93  // std::map<unsigned int, std::vector<unsigned int>> backmap;
94  // PndSdsHit* tmphit;
95  PndSdsMergedHit* tmphit;
96  unsigned int newHits = 0;
97  for (Int_t iHit = 0; iHit < fHitArray->GetEntriesFast(); iHit++) {
98  if (fVerbose > 2) {
99  if (iHit == 0) std::cout << "#### NEW event ####" << std::endl;
100  }
101  bool skip = false;
102  for (unsigned int ijk = 0; ijk < mergedHits.size();
103  ijk++) // check if already merged
104  if (iHit == (int)mergedHits.at(ijk)) skip = true;
105  if (skip) continue;
106  mergewithIDs.clear();
107  PndSdsHit* myHit1 = (PndSdsHit*)(fHitArray->At(iHit));
108 
109  for (Int_t jHit = iHit + 1; jHit < fHitArray->GetEntriesFast();
110  jHit++) { // check other hits
111  PndSdsHit* myHit2 = (PndSdsHit*)(fHitArray->At(jHit));
112 
113  double dz = (myHit1->GetZ()) - (myHit2->GetZ());
114  // if(fabs(dz)<0.1 ){ //actually same Hit: merge
115  // if(fabs((myHit1->GetX())-(myHit2->GetX()))<0.016 &&
116  //fabs((myHit1->GetY())-(myHit2->GetY()))<0.016){
117  double dx = (myHit1->GetX()) - (myHit2->GetX());
118  double dy = (myHit1->GetY()) - (myHit2->GetY());
119 
120  if (fabs(dx) < 0.0075 &&
121  fabs(dy) < 0.0075) { // 3*sigma_dx, sigma_dx=25mkm
122  hdxdy->Fill(1e4 * dx, 1e4 * dy);
123  hdz->Fill(1e4 * dz);
124 
125  if (dz < 0.01 || dz > 0.1) continue;
126  mergewithIDs.push_back(jHit);
127  mergedHits.push_back(jHit);
128  }
129  }
130 
131  if (mergewithIDs.size() > 0) { // merge hits
132  if (fVerbose > 4)
133  std::cout << "hit merged with: " << mergewithIDs.size() << " hits"
134  << std::endl;
135  // tmphit = new((*fMergedHitArray)[newHits]) PndSdsHit(*myHit1);
136  tmphit = new ((*fMergedHitArray)[newHits]) PndSdsMergedHit(*myHit1, 0);
137 
138  double x = tmphit->GetX(), y = tmphit->GetY(), z = tmphit->GetZ();
139  for (unsigned int iMerge = 0; iMerge < mergewithIDs.size();
140  iMerge++) { // loop over hits to merge in
141  PndSdsHit* myHit2 =
142  (PndSdsHit*)(fHitArray->At(mergewithIDs.at(iMerge)));
143  x += myHit2->GetX();
144  y += myHit2->GetY();
145  z += myHit2->GetZ();
146  tmphit->SetSecondMCHit(
147  myHit2->GetRefIndex());
148  tmphit->SetIsMerged(true);
149  }
150  x /= (mergewithIDs.size() + 1);
151  y /= (mergewithIDs.size() + 1);
152  z /= (mergewithIDs.size() + 1);
153  tmphit->SetX(x);
154  tmphit->SetY(y);
155  tmphit->SetZ(z);
156  if (fVerbose > 4) {
157  std::cout << "!!! Merged hit !!!" << std::endl;
158  tmphit->Print();
159  }
160  } else { // dont merge, just use original hit
161  // tmphit = new((*fMergedHitArray)[newHits]) PndSdsHit(*myHit1);
162  tmphit = new ((*fMergedHitArray)[newHits]) PndSdsMergedHit(*myHit1, -1);
163  tmphit->SetIsMerged(false);
164  }
165 
166  newHits++;
167  }
168 
169  if (fVerbose > 1)
170  std::cout << "-I- PndLmdHitMergeTask: out of "
171  << fHitArray->GetEntriesFast() << " Hits "
172  << fMergedHitArray->GetEntriesFast() << " Hits merged."
173  << std::endl;
174  return;
175 }
int fVerbose
Definition: poormantracks.C:24
double dy
virtual void Print(const Option_t *opt=0) const
Definition: PndSdsHit.cxx:66
TClonesArray * fHitArray
void SetSecondMCHit(Int_t secMChit)
TClonesArray * fMergedHitArray
void SetIsMerged(bool fflag)
Double_t z
friend F32vec4 fabs(const F32vec4 &a)
Definition: P4_F32vec4.h:47
double dx
Double_t x
Double_t y
InitStatus PndLmdHitMergeTask::Init ( )
virtual

Virtual method Init

Definition at line 43 of file PndLmdHitMergeTask.cxx.

References fHitArray, fHitBranchName, and fMergedHitArray.

Referenced by runLumi2bHitMerge(), and runLumiPixel2bHitMerge().

43  {
44  FairRootManager* ioman = FairRootManager::Instance();
45  if (!ioman) {
46  std::cout << "-E- PndLmdHitMergeTask::Init: "
47  << "RootManager not instantiated!" << std::endl;
48  return kFATAL;
49  }
50 
51  // Get input array
52  fHitArray = (TClonesArray*)ioman->GetObject(fHitBranchName);
53  //
54  if (!fHitArray) {
55  std::cout << "-W- PndLmdHitMergeTask::Init: "
56  << "No LmdHitsPixel array!" << std::endl;
57  return kERROR;
58  }
59 
60  // set output arrays
61  // fMergedHitArray = new TClonesArray("PndSdsHit");
62  fMergedHitArray = new TClonesArray("PndSdsMergedHit");
63  ioman->Register("LMDHitsMerged", "PndLmd", fMergedHitArray, true);
64  Info("Init", "Initialisation successfull");
65  return kSUCCESS;
66 }
TClonesArray * fHitArray
TClonesArray * fMergedHitArray

Member Data Documentation

TClonesArray* PndLmdHitMergeTask::fHitArray
protected

Definition at line 34 of file PndLmdHitMergeTask.h.

Referenced by Exec(), and Init().

TString PndLmdHitMergeTask::fHitBranchName
protected

Definition at line 37 of file PndLmdHitMergeTask.h.

Referenced by Exec(), Init(), and PndLmdHitMergeTask().

TClonesArray* PndLmdHitMergeTask::fMergedHitArray
protected

Definition at line 35 of file PndLmdHitMergeTask.h.

Referenced by Exec(), and Init().

TH2* PndLmdHitMergeTask::hdxdy
protected

Definition at line 39 of file PndLmdHitMergeTask.h.

Referenced by Exec(), and PndLmdHitMergeTask().

TH1* PndLmdHitMergeTask::hdz
protected

Definition at line 40 of file PndLmdHitMergeTask.h.

Referenced by Exec(), and PndLmdHitMergeTask().


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