19 #include "TEveBrowser.h"
20 #include "TEveScene.h"
21 #include "TEveTrans.h"
22 #include "TEveTrackPropagator.h"
23 #include "TParticlePDG.h"
27 #include "application/gui/MainWindow.h"
28 #include "application/event/InteractionTree.h"
29 #include "application/Application.h"
33 static const std::string routineName(
"MainWindow::SetMCTruth");
36 COUT(DEBUG) << nPrim <<
" Primary particles " <<
ENDL;
37 if( nPrim == 0 )
return;
39 TEveTrackList* trackList =
new TEveTrackList(
"Primary Particles");
41 TEveTrackPropagator* trkProp = trackList->GetPropagator();
42 trkProp->SetStepper(TEveTrackPropagator::kRungeKutta);
44 TString primString =
"";
47 for(
int iPrim=0; iPrim<nPrim; iPrim++){
52 TParticle* tempPart =
new TParticle();
53 tempPart->SetPdgCode( thisPrim->
PDGCode );
54 tempPart->SetStatusCode(1);
55 tempPart->SetMother(0, 0);
56 COUT(DEBUG) << tempPart->GetMass() <<
" " << tempPart->GetNDaughters() <<
ENDL;
58 TLorentzVector lpos( thisPrim->
pos[0], thisPrim->
pos[1], thisPrim->
pos[2], thisPrim->
time );
60 lmom.SetXYZM(thisPrim->
mom[0], thisPrim->
mom[1], thisPrim->
mom[2], tempPart->GetMass());
62 tempPart->SetProductionVertex( lpos );
63 tempPart->SetMomentum( lmom );
65 primString +=
"Particle: ";
66 primString += tempPart->GetName();
67 primString += Form(
"\nE_{0}: %5.3f GeV", tempPart->Energy() - tempPart->GetMass());
68 primString += Form(
"\ntheta = %5.3f deg - phi = %5.3f deg", 180*(1 - tempPart->Theta()/TMath::Pi()), 180*tempPart->Phi()/TMath::Pi());
70 TEveTrack* thisTrack =
new TEveTrack(tempPart, thisPrim->
trackID, trkProp);
71 thisTrack->SetLineWidth(2);
72 if( tempPart->GetPDG()->Charge() > 0 ) thisTrack->SetMainColor(kCyan);
73 else if( tempPart->GetPDG()->Charge() < 0 ) thisTrack->SetMainColor(kRed);
74 else thisTrack->SetMainColor(kYellow);
76 thisTrack->IncDenyDestroy();
77 thisTrack->SetName(Form(
"Prim Track %d", thisPrim->
trackID));
78 thisTrack->SetStdTitle();
80 trackList->AddElement(thisTrack);
83 trackList->MakeTracks();
84 _MCTruthShortInfo->SetText( primString );
88 _MCTruthList->AddElement( trackList );
92 void MainWindow::CrossPTree(){
93 static const std::string routineName(
"MainWindow::CrossPTree");
99 TEveElementList* trackList =
new TEveElementList(
"Particle tracks");
101 TParticle* tempPart =
new TParticle();
104 TEveLine* line =
new TEveLine();
105 if( !element.second->hits.size() )
continue;
106 tempPart->SetPdgCode( (
int) element.second->hits[0]->particlePdg );
107 if( !element.second->hits[0]->eDep )
continue;
108 for(
size_t ihit=0; ihit<element.second->hits.size(); ihit++){
110 element.second->hits[ihit]->entrancePoint[0],
111 element.second->hits[ihit]->entrancePoint[1],
112 element.second->hits[ihit]->entrancePoint[2]
115 element.second->hits[ihit]->exitPoint[0],
116 element.second->hits[ihit]->exitPoint[1],
117 element.second->hits[ihit]->exitPoint[2]
120 line->SetName( Form(
"trackID %i", element.first) );
121 line->SetTitle( tempPart->GetName() );
123 if( tempPart->GetPDG() ){
124 if( tempPart->GetPDG()->Charge() > 0 ) line->SetMainColor(kCyan);
125 else if( tempPart->GetPDG()->Charge() < 0 ) line->SetMainColor(kRed);
126 else line->SetMainColor(kYellow);
128 line->SetMainColor(kGray);
131 trackList->AddElement( line );
135 trackList->SetRnrState(0);
136 _MCTruthList->AddElement( trackList );
137 _MCPartHitList = trackList;
Float_t mom[3]
Momentum at generation [GeV].
GGSTParticle * GetPrimaryParticle(UInt_t particleNumber)
Returns a primary particle.
#define COUT(level)
Smart log macro. It writes on stdout only if the specified verbosity level is lesser than the maximum...
Int_t PDGCode
PDG code of particle (see http://www3.nd.edu/~avillano/geant4/geant4_pid.html).
Float_t time
Time of generation [ns].
Class for reading output of GGSMCTruthAction.
UInt_t GetNPrimaries()
Returns the number of primaries in current event.
Float_t pos[3]
Point of generation [cm].
Class to store G4 particles.