10 #include "CLHEP/Units/PhysicalConstants.h" 11 using namespace CLHEP;
65 hitList =
new QTreeWidget();
69 hitData =
new QTreeWidget();
73 QSplitter *dataSplitter =
new QSplitter(
this);
75 dataSplitter->addWidget(hitList);
77 dataSplitter->addWidget(hitData);
81 graphView =
new graph(
this);
85 graphView->
setAxis(40, 310, 465, 300, 5, 5);
91 QSplitter *vMainsplitter =
new QSplitter(
this);
92 vMainsplitter->setOrientation(Qt::Vertical);
94 vMainsplitter->addWidget(dataSplitter);
95 vMainsplitter->addWidget(graphView);
96 vMainsplitter->setMinimumSize(545, 595);
97 graphView->setMinimumSize(545, 450);
101 HitGrad = QLinearGradient(QPointF(1, 100), QPointF(180, 20));
102 HitGrad.setColorAt(0, QColor(255, 80, 80));
103 HitGrad.setColorAt(1, QColor(245, 245, 245));
104 HitBrush = QBrush(HitGrad);
113 hitList->setSelectionMode(QAbstractItemView::SingleSelection);
114 hitList->setHeaderLabels(QStringList(
"Hits List"));
116 for(map<string, sensitiveDetector*>::iterator it =
SeDe_Map.begin(); it!=
SeDe_Map.end(); it++)
120 if(MHC) nhits = MHC->GetSize();
123 if(it->first !=
"mirror")
125 QTreeWidgetItem *newItem =
new QTreeWidgetItem(hitList);
126 newItem->setText(0, QString(it->first.c_str()));
130 newItem->setBackground(0, HitBrush );
131 string snhits = it->first +
" " +
stringify(nhits) +
" hit";
132 if(nhits>1) snhits +=
"s";
133 newItem->setText(0, QString(snhits.c_str()));
138 for(
int h=0; h<nhits; h++)
140 MHit *aHit = (*MHC)[h];
142 int nsteps = aHit->
GetPos().size();
143 QTreeWidgetItem *newHit =
new QTreeWidgetItem(newItem);
147 if(!it->second->SDID.identifiers.size())
148 cout <<
" !!! Error: no identifiers found for SD >" << it->second->SDID.name <<
"<" << endl;
151 if(it->second->SDID.identifiers.back().find(
"nphe") != string::npos)
154 newHit->setText(0, QString(hitindex.c_str()));
159 connect(hitList, SIGNAL(itemSelectionChanged() ),
this, SLOT(
createSignalsTree() ) );
176 hitData->setSelectionMode(QAbstractItemView::SingleSelection);
177 hitData->setHeaderLabels(QStringList(
"Data"));
182 QList<QTreeWidgetItem *> list = hitList->selectedItems();
185 QTreeWidgetItem *item = list.first();
193 string itext = item->text(0).toStdString();
195 stringstream sitext(itext);
200 sitext >> a >> b >> c;
201 index = atoi(c.c_str());
214 stringstream mtext(item->parent()->text(0).toStdString());
218 SD +=
" Hit n. " + c;
221 QTreeWidgetItem * newHit =
new QTreeWidgetItem(hitData);
222 newHit->setText(0, QString(SD.c_str()));
223 newHit->setExpanded(1);
228 if(index>0 && index<=MHC->GetSize())
230 MHit* aHit = (*MHC)[index-1];
231 int nsteps = aHit->
GetPos().size();
239 newHit->setText(0, QString(SD.c_str()));
241 vector<double> ene = aHit->
GetEs();
242 vector<double> time = aHit->
GetTime();
243 vector<int> pid = aHit->
GetPIDs();
245 vector<double> lambda;
247 for(
unsigned int i=0; i<ene.size(); i++)
248 lambda.push_back(1240.0/(ene[i]/eV));
251 vector<identifier> identi = aHit->
GetId();
253 for(
unsigned int i=0; i<identi.size(); i++)
254 title += identi[i].name +
" " +
stringify(identi[i].
id) +
" " ;
256 QTreeWidgetItem * EneI =
new QTreeWidgetItem(newHit);
257 EneI->setText(0, QString(
" Wavelenght[nm] pid Time[ns] "));
258 EneI->setExpanded(1);
260 QTreeWidgetItem * EneItems;
261 for(
int i=0; i<nsteps; i++)
263 EneItems =
new QTreeWidgetItem(EneI);
265 sprintf(etext,
" %4.1f %d %5.4f ", lambda[i], pid[i], time[i]);
266 EneItems->setText(0, QString(etext));
267 EneItems->setTextAlignment(1, Qt::AlignJustify);
268 EneItems->setTextAlignment(2, Qt::AlignJustify);
270 graphView->
plots_bg(
"time [ns]",
"Wavelenght [nm]", time, lambda, title);
275 vector<double> signal;
276 vector<double> time = aHit->
GetTime();
277 vector<int> pid = aHit->
GetPIDs();
295 vector<int> trks = aHit->
GetTIds();
296 for(
unsigned int i=0; i<trks.size(); i++)
297 signal.push_back(-1.0);
303 vector<G4ThreeVector> pos = aHit->
GetPos();
304 for(
unsigned int i=0; i<pos.size(); i++)
305 signal.push_back(pos[i].x());
309 vector<G4ThreeVector> pos = aHit->
GetPos();
310 for(
unsigned int i=0; i<pos.size(); i++)
311 signal.push_back(pos[i].y());
315 vector<G4ThreeVector> pos = aHit->
GetPos();
316 for(
unsigned int i=0; i<pos.size(); i++)
317 signal.push_back(pos[i].z());
321 vector<G4ThreeVector> pos = aHit->
GetLPos();
322 for(
unsigned int i=0; i<pos.size(); i++)
323 signal.push_back(pos[i].x());
327 vector<G4ThreeVector> pos = aHit->
GetLPos();
328 for(
unsigned int i=0; i<pos.size(); i++)
329 signal.push_back(pos[i].y());
333 vector<G4ThreeVector> pos = aHit->
GetLPos();
334 for(
unsigned int i=0; i<pos.size(); i++)
335 signal.push_back(pos[i].z());
339 vector<G4ThreeVector> pos = aHit->
GetVerts();
340 for(
unsigned int i=0; i<pos.size(); i++)
341 signal.push_back(pos[i].x());
345 vector<G4ThreeVector> pos = aHit->
GetVerts();
346 for(
unsigned int i=0; i<pos.size(); i++)
347 signal.push_back(pos[i].y());
351 vector<G4ThreeVector> pos = aHit->
GetVerts();
352 for(
unsigned int i=0; i<pos.size(); i++)
353 signal.push_back(pos[i].z());
359 vector<G4ThreeVector> pos = aHit->
GetmVerts();
360 for(
unsigned int i=0; i<pos.size(); i++)
361 signal.push_back(pos[i].x());
365 vector<int> trks = aHit->
GetTIds();
366 for(
unsigned int i=0; i<trks.size(); i++)
367 signal.push_back(0.0);
374 vector<G4ThreeVector> pos = aHit->
GetmVerts();
375 for(
unsigned int i=0; i<pos.size(); i++)
376 signal.push_back(pos[i].y());
380 vector<int> trks = aHit->
GetTIds();
381 for(
unsigned int i=0; i<trks.size(); i++)
382 signal.push_back(0.0);
389 vector<G4ThreeVector> pos = aHit->
GetmVerts();
390 for(
unsigned int i=0; i<pos.size(); i++)
391 signal.push_back(pos[i].z());
395 vector<int> trks = aHit->
GetTIds();
396 for(
unsigned int i=0; i<trks.size(); i++)
397 signal.push_back(0.0);
403 vector<G4ThreeVector> mom = aHit->
GetMoms();
404 for(
unsigned int i=0; i<mom.size(); i++)
405 signal.push_back(mom[i].mag());
411 nsteps = time.size();
415 for(
unsigned int i=0; i<time.size(); i++)
420 newHit->setText(0, QString(SD.c_str()));
422 vector<identifier> identi = aHit->
GetId();
425 for(
unsigned int i=0; i<identi.size(); i++)
426 title += identi[i].name +
" " +
stringify(identi[i].
id) +
" " ;
428 QTreeWidgetItem * signalI =
new QTreeWidgetItem(newHit);
430 sprintf(ttext,
"%s pid Time[ns] ",
signalChoice.c_str());
431 signalI->setText(0, QString(ttext));
432 signalI->setExpanded(1);
434 QTreeWidgetItem * signalItems;
435 for(
int i=0; i<nsteps; i++)
437 signalItems =
new QTreeWidgetItem(signalI);
439 sprintf(etext,
"%6.5f %d %5.4f", signal[i], pid[i], time[i]);
440 signalItems->setText(0, QString(etext));
441 signalItems->setTextAlignment(1, Qt::AlignJustify);
442 signalItems->setTextAlignment(2, Qt::AlignJustify);
460 cout << hd_msg <<
" Signal Widget Deleted." << endl;
map< string, sensitiveDetector * > SeDe_Map
sensitiveID SDID
sensitiveID used for identification, hit properties and digitization
vector< double > getSignalT()
vector< double > convertVintVdouble(vector< int > input)
vector< G4ThreeVector > GetMoms()
vector< identifier > GetId()
void setAxis(int a, int b, int c, int d, int e, int f)
vector< double > getSignalV()
void setInside(double a, double b, double c)
string replaceCharWithChars(string input, string x, string y)
vector< G4ThreeVector > GetLPos()
vector< string > availableSignals
string stringify(double x)
vector< G4ThreeVector > GetPos()
map< string, aopt > optMap
Options map.
vector< G4ThreeVector > GetmVerts()
G4THitsCollection< MHit > MHitCollection
vector< double > GetTime()
void plot_graph(vector< double > x, vector< double > y, vector< int > pid)
gsignal(QWidget *parent, goptions *, map< string, sensitiveDetector * >)
vector< string > identifiers
vector of strings that uniquely identify the detector element
vector< double > GetEdep()
vector< int > GetoTrackIds()
vector< G4ThreeVector > GetVerts()
void plots_bg(string xtit, string ytit, vector< double > x, vector< double > y, string title)
MHitCollection * GetMHitCollection()
returns hit collection