FairRoot/PandaRoot
PndGeoHitList.cxx
Go to the documentation of this file.
1 #include "PndGeoHitList.h"
2 #include <sstream>
3 
4 
6 
8  fGroupName(""),
9  fVolName(""),
10  fNodeList(),
11  fGroupVolume(NULL),
12  fTopVolume(NULL),
13  fBaseVolume(NULL)
14 {
15 }
16 
17 PndGeoHitList::PndGeoHitList(TString groupName, TString topNodeName, TGeoVolume* baseVolume) :
18  fGroupName(""),
19  fVolName(""),
20  fNodeList(),
21  fGroupVolume(NULL),
22  fTopVolume(NULL),
23  fBaseVolume(NULL)
24 {
25  CreateNewGroup(groupName, topNodeName, baseVolume);
26 }
27 
29 {
30 }
31 
32 void PndGeoHitList::CreateNewGroup(TString groupName, TString topNodeName, TGeoVolume* baseVolume)
33 {
34  fGroupName = groupName;
35  fBaseVolume = baseVolume;
36  fVolName = baseVolume->GetName();
37 
38 
39  fGroupVolume = new TGeoVolumeAssembly(fGroupName.Data());
40  fTopVolume = gGeoManager->GetVolume(topNodeName.Data());
41  fTopVolume->AddNode(fGroupVolume,1);
42 
43  std::cout << "GroupName: " << fGroupName << " " << fGroupVolume << std::endl;
44  std::cout << "BaseVolume: " << fVolName << " " << fBaseVolume << std::endl;
45  std::cout << "TopVolum: " << topNodeName << " " << fTopVolume << std::endl;
46 
47 }
48 
49 void PndGeoHitList::AddHit(FairHit* hit, Bool_t vis)
50 {
51  AddHit(hit->GetX(), hit->GetY(), hit->GetZ(), vis);
52 }
53 
55 {
56  CreateGeoHits(1);
57  TGeoTranslation *tr = (TGeoTranslation*)fNodeList[fNodeList.size()-1]->GetMatrix();
58  tr->SetTranslation(x, y, z);
59  fNodeList[fNodeList.size()-1]->SetVisibility(vis);
60 
61 }
62 
63 void PndGeoHitList::AddHit(TGeoMatrix* mat, Bool_t vis)
64 {
65  CreateGeoHit(mat);
66  fNodeList[fNodeList.size()-1]->SetVisibility(vis);
67 }
68 
69 void PndGeoHitList::AddHits(TClonesArray* hitList, Bool_t vis)
70 {
71  Int_t start = fNodeList.size();
72  CreateGeoHits(hitList->GetEntries());
73 
74  for (Int_t i = 0; i < hitList->GetEntries(); i++){
75  FairHit* myHit = (FairHit*)hitList->At(i);
76  TGeoTranslation *tr = (TGeoTranslation*)fNodeList[start+i]->GetMatrix();
77  tr->SetTranslation(myHit->GetX(), myHit->GetY(), myHit->GetZ());
78  fNodeList[start+i]->SetVisibility(vis);
79  }
80 }
81 
82 
83 void PndGeoHitList::SetHits(TClonesArray* hitList, Bool_t vis)
84 {
85  if ((unsigned int)hitList->GetEntries() > fNodeList.size()){
86  CreateGeoHits(hitList->GetEntries() - fNodeList.size());
87  std::cout << "hitList: " << hitList->GetEntries() << "fNodeList: " << fNodeList.size() << std::endl;
88  }
89  else
90  RemoveGeoHits(hitList->GetEntries());
91 
92  for (Int_t i = 0; i < hitList->GetEntries(); i++){
93  FairHit* myHit = (FairHit*)hitList->At(i);
94  TGeoTranslation *tr = (TGeoTranslation*)fNodeList[i]->GetMatrix();
95  tr->SetTranslation(myHit->GetX(), myHit->GetY(), myHit->GetZ());
96  fNodeList[i]->SetVisibility(vis);
97  }
98 }
99 
100 void PndGeoHitList::CreateGeoHit(TGeoMatrix* mat)
101 {
102  TGeoHMatrix* matCopy = new TGeoHMatrix(*mat);
103  Int_t startNumber = fNodeList.size();
104  std::string volumeName = fVolName.Data();
105  std::stringstream nodeName;
106  matCopy->RegisterYourself();
107  fGroupVolume->AddNode(fBaseVolume,startNumber, matCopy);
108  nodeName << volumeName << "_" << startNumber;
109  TGeoNode* myNode = fGroupVolume->FindNode(nodeName.str().c_str());
110  std::cout << "Node: " << nodeName.str() << " " << myNode << std::endl;
111  fNodeList.push_back(myNode);
112  nodeName.str("");
113 }
114 
116 {
117 /* Int_t startNumber = fNodeList.size();
118  std::string volumeName = fVolName.Data();
119  std::stringstream nodeName;
120  std::cout << "StartNumber: " << fNodeList.size() << " anz: " << number << std::endl;
121  for (Int_t i = 0; i < number; i++){
122  TGeoTranslation *tr = new TGeoTranslation(1,1,i);
123  fGroupVolume->AddNode(fBaseVolume,startNumber+i, tr);
124  nodeName << volumeName << "_" << startNumber+i;
125  TGeoNode* myNode = fGroupVolume->FindNode(nodeName.str().c_str());
126  std::cout << "Node: " << nodeName.str() << " " << myNode << std::endl;
127  fNodeList.push_back(myNode);
128  nodeName.str("");
129  }*/
130 
131  for (Int_t i = 0; i < number; i++){
132  TGeoTranslation *tr = new TGeoTranslation(1,1,i);
133  CreateGeoHit(tr);
134  }
135 
136 }
137 
139 {
140  std::cout << "Old RecoList size: " << fNodeList.size() << std::endl;
141  for(UInt_t i = from; i < fNodeList.size(); i++){
142  fGroupVolume->RemoveNode(fNodeList[i]);
143  }
144  fNodeList.erase(fNodeList.begin()+from, fNodeList.end());
145 
146  std::cout << "New RecoList size: " << fNodeList.size() << std::endl;
147 }
148 
150 {
151  for (UInt_t i = from; i < fNodeList.size(); i++)
152  fNodeList[i]->SetVisibility(kFALSE);
153 
154 }
155 
156 void PndGeoHitList::SetVisibility(TString NodeName, bool value)
157 {
158  Int_t id = GetNodeId(NodeName);
159  if (id < 0)
160  std::cout << "-E- PndGeoHitList: Not a valid NodeName!" << std::endl;
161  else
162  SetVisibility(id, value);
163 }
164 
165 void PndGeoHitList::SetVisibility(TGeoHMatrix pos, bool value)
166 {
167  Int_t id = GetNodeId(pos);
168  if (id < 0)
169  std::cout << "-E- PndGeoHitList: Not a valid NodeName!" << std::endl;
170  else
171  SetVisibility(id, value);
172 }
173 
174 void PndGeoHitList::SetVisibility(Int_t id, bool value)
175 {
176  if ((unsigned int)id < fNodeList.size())
177  fNodeList[id]->SetVisibility(value);
178  else
179  std::cout << "-E- PndGeoHitList: Not a valid id!" << std::endl;
180 }
181 
183 {
185 }
186 
188 {
189  for(UInt_t i = 0; i < fNodeList.size(); i++){
190  std::cout << "NodeNames: " << fNodeList[i]->GetName() << std::endl;
191  if (fNodeList[i]->GetName() == NodeName)
192  return i;
193  }
194  return -1;
195 }
196 
197 Int_t PndGeoHitList::GetNodeId(TGeoHMatrix pos)
198 {
199 // std::cout << "pos: " << std::endl;
200 // pos.Print();
201 
202  for(UInt_t i = 0; i < fNodeList.size(); i++){
203 // std::cout << "NodeMatrix: " << std::endl;
204 // fNodeList[i]->GetMatrix()->Print();
205 
206  if (*(fNodeList[i]->GetMatrix()) == pos)
207  return i;
208  }
209  return -1;
210 }
TVector3 pos
void SetVisibility(TString NodeName, bool value)
TGeoVolume * fTopVolume
Definition: PndGeoHitList.h:49
Int_t i
Definition: run_full.C:25
virtual ~PndGeoHitList()
TString fVolName
Definition: PndGeoHitList.h:46
void SetAllInvisible()
void AddHit(FairHit *hit, Bool_t vis=kTRUE)
TGeoManager * gGeoManager
void AddHits(TClonesArray *hitList, Bool_t vis=kTRUE)
void CreateGeoHit(TGeoMatrix *mat)
void RemoveGeoHits(Int_t from)
TString fGroupName
Definition: PndGeoHitList.h:45
Double_t
TGeoVolume * fGroupVolume
Definition: PndGeoHitList.h:48
TGeoVolume * fBaseVolume
Definition: PndGeoHitList.h:50
Int_t GetNodeId(TString NodeName)
Double_t z
std::vector< CbmEmcHit * > hitList
Definition: digi_analys.C:26
void SetHits(TClonesArray *hitList, Bool_t vis=kTRUE)
TString GetName() const
Definition: PndGeoHitList.h:34
Double_t x
void CreateGeoHits(Int_t number)
ClassImp(PndAnaContFact)
void SetGeoHitsInvisible(Int_t from)
std::vector< TGeoNode * > fNodeList
Definition: PndGeoHitList.h:47
PndSdsMCPoint * hit
Definition: anasim.C:70
Double_t y
void CreateNewGroup(TString groupName, TString topNodeName, TGeoVolume *baseVolume)