File indexing completed on 2025-08-05 08:14:50
0001 #include <g4eval/SvtxEvalStack.h>
0002
0003 #include <phool/PHCompositeNode.h>
0004 #include <fun4all/Fun4AllReturnCodes.h>
0005 #include <phool/getClass.h>
0006
0007 #include <g4hough/SvtxVertexMap.h>
0008 #include <g4hough/SvtxVertex.h>
0009 #include <g4hough/SvtxTrackMap.h>
0010 #include <g4hough/SvtxTrack.h>
0011 #include <g4hough/SvtxClusterMap.h>
0012 #include <g4hough/SvtxCluster.h>
0013 #include <g4hough/SvtxHitMap.h>
0014 #include <g4hough/SvtxHit.h>
0015
0016 #include <g4main/PHG4Hit.h>
0017 #include <g4main/PHG4Particle.h>
0018 #include <g4main/PHG4VtxPoint.h>
0019 #include <g4main/PHG4TruthInfoContainer.h>
0020
0021 #include <g4detectors/PHG4Cell.h>
0022
0023 #include <TFile.h>
0024 #include <TNtuple.h>
0025
0026 #include <iostream>
0027 #include <set>
0028 #include <cmath>
0029 #include <cassert>
0030
0031 #include "../../psTOF/psTOFTimezeroEval/psTOFTimezeroEval.h"
0032
0033 using namespace std;
0034
0035 psTOFTimezeroEval::psTOFTimezeroEval(const string &name, const string &filename) :
0036 SubsysReco("psTOFTimezeroEval"),
0037 _ievent(0),
0038 _svtxevalstack(nullptr),
0039 _strict(false),
0040 _errors(0),
0041 _do_vertex_eval(true),
0042 _do_gpoint_eval(true),
0043 _do_g4hit_eval(true),
0044 _do_hit_eval(true),
0045 _do_cluster_eval(true),
0046 _do_gtrack_eval(true),
0047 _do_track_eval(true),
0048 _scan_for_embedded(false),
0049 _ntp_vertex(nullptr),
0050 _ntp_gpoint(nullptr),
0051 _ntp_g4hit(nullptr),
0052 _ntp_hit(nullptr),
0053 _ntp_cluster(nullptr),
0054 _ntp_gtrack(nullptr),
0055 _ntp_track(nullptr),
0056 _filename(filename),
0057 _tfile(nullptr) {
0058 verbosity = 0;
0059 }
0060
0061 int psTOFTimezeroEval::Init(PHCompositeNode *topNode) {
0062
0063 _ievent = 0;
0064
0065 _tfile = new TFile(_filename.c_str(), "RECREATE");
0066
0067 if (_do_vertex_eval) _ntp_vertex = new TNtuple("ntp_vertex","vertex => max truth",
0068 "event:vx:vy:vz:ntracks:"
0069 "gvx:gvy:gvz:gvt:gntracks:"
0070 "nfromtruth");
0071
0072 if (_do_gpoint_eval) _ntp_gpoint = new TNtuple("ntp_gpoint","g4point => best vertex",
0073 "event:gvx:gvy:gvz:gvt:gntracks:"
0074 "vx:vy:vz:ntracks:"
0075 "nfromtruth");
0076
0077 if (_do_g4hit_eval) _ntp_g4hit = new TNtuple("ntp_g4hit","g4hit => best svtxcluster",
0078 "event:g4hitID:gx:gy:gz:gt:gedep:"
0079 "glayer:gtrackID:gflavor:"
0080 "gpx:gpy:gpz:gvx:gvy:gvz:"
0081 "gfpx:gfpy:gfpz:gfx:gfy:gfz:"
0082 "gembed:gprimary:nclusters:"
0083 "clusID:x:y:z:e:adc:layer:size:"
0084 "phisize:zsize:efromtruth");
0085
0086 if (_do_hit_eval) _ntp_hit = new TNtuple("ntp_hit","svtxhit => max truth",
0087 "event:hitID:e:adc:layer:"
0088 "cellID:ecell:"
0089 "g4hitID:gedep:gx:gy:gz:gt:"
0090 "gtrackID:gflavor:"
0091 "gpx:gpy:gpz:gvx:gvy:gvz:"
0092 "gfpx:gfpy:gfpz:gfx:gfy:gfz:"
0093 "gembed:gprimary:efromtruth");
0094
0095 if (_do_cluster_eval) _ntp_cluster = new TNtuple("ntp_cluster","svtxcluster => max truth",
0096 "event:hitID:x:y:z:ex:ey:ez:ephi:"
0097 "e:adc:layer:size:phisize:"
0098 "zsize:trackID:g4hitID:gx:"
0099 "gy:gz:gt:gtrackID:gflavor:"
0100 "gpx:gpy:gpz:gvx:gvy:gvz:"
0101 "gfpx:gfpy:gfpz:gfx:gfy:gfz:"
0102 "gembed:gprimary:efromtruth");
0103
0104 if (_do_gtrack_eval) _ntp_gtrack = new TNtuple("ntp_gtrack","g4particle => best svtxtrack",
0105 "event:gtrackID:gflavor:gnhits:"
0106 "gpx:gpy:gpz:"
0107 "gvx:gvy:gvz:gvt:"
0108 "gfpx:gfpy:gfpz:gfx:gfy:gfz:"
0109 "gembed:gprimary:"
0110 "trackID:px:py:pz:charge:quality:chisq:ndf:nhits:layers:"
0111 "dca2d:dca2dsigma:pcax:pcay:pcaz:nfromtruth:layersfromtruth:"
0112 "nmaps:nintt:ntpc");
0113
0114 if (_do_track_eval) _ntp_track = new TNtuple("ntp_track","svtxtrack => max truth",
0115 "event:trackID:px:py:pz:charge:"
0116 "quality:chisq:ndf:nhits:layers:"
0117 "dca2d:dca2dsigma:pcax:pcay:pcaz:"
0118 "presdphi:presdeta:prese3x3:prese:"
0119 "cemcdphi:cemcdeta:cemce3x3:cemce:"
0120 "hcalindphi:hcalindeta:hcaline3x3:hcaline:"
0121 "hcaloutdphi:hcaloutdeta:hcaloute3x3:hcaloute:"
0122 "gtrackID:gflavor:gnhits:"
0123 "gpx:gpy:gpz:"
0124 "gvx:gvy:gvz:gvt:"
0125 "gfpx:gfpy:gfpz:gfx:gfy:gfz:"
0126 "gembed:gprimary:nfromtruth:layersfromtruth:"
0127 "nmaps:nintt:ntpc");
0128
0129 return Fun4AllReturnCodes::EVENT_OK;
0130 }
0131
0132 int psTOFTimezeroEval::InitRun(PHCompositeNode *topNode) {
0133 return Fun4AllReturnCodes::EVENT_OK;
0134 }
0135
0136 int psTOFTimezeroEval::process_event(PHCompositeNode *topNode) {
0137
0138 if ((verbosity > 0)&&(_ievent%100==0)) {
0139 cout << "psTOFTimezeroEval::process_event - Event = " << _ievent << endl;
0140 }
0141
0142 if (!_svtxevalstack) {
0143 _svtxevalstack = new SvtxEvalStack(topNode);
0144 _svtxevalstack->set_strict(_strict);
0145 _svtxevalstack->set_verbosity(verbosity+1);
0146 } else {
0147 _svtxevalstack->next_event(topNode);
0148 }
0149
0150
0151
0152
0153
0154 printInputInfo(topNode);
0155
0156
0157
0158
0159
0160 fillOutputNtuples(topNode);
0161
0162
0163
0164
0165
0166 printOutputInfo(topNode);
0167
0168 ++_ievent;
0169 return Fun4AllReturnCodes::EVENT_OK;
0170 }
0171
0172 int psTOFTimezeroEval::End(PHCompositeNode *topNode) {
0173
0174 _tfile->cd();
0175
0176 if (_ntp_vertex) _ntp_vertex->Write();
0177 if (_ntp_gpoint) _ntp_gpoint->Write();
0178 if (_ntp_g4hit) _ntp_g4hit->Write();
0179 if (_ntp_hit) _ntp_hit->Write();
0180 if (_ntp_cluster) _ntp_cluster->Write();
0181 if (_ntp_gtrack) _ntp_gtrack->Write();
0182 if (_ntp_track) _ntp_track->Write();
0183
0184 _tfile->Close();
0185
0186 delete _tfile;
0187
0188 if (verbosity > 0) {
0189 cout << "========================= psTOFTimezeroEval::End() ============================" << endl;
0190 cout << " " << _ievent << " events of output written to: " << _filename << endl;
0191 cout << "===========================================================================" << endl;
0192 }
0193
0194 _errors += _svtxevalstack->get_errors();
0195
0196 if (verbosity > -1) {
0197 if ((_errors > 0)||(verbosity > 0)) {
0198 cout << "psTOFTimezeroEval::End() - Error Count: " << _errors << endl;
0199 }
0200 }
0201
0202 delete _svtxevalstack;
0203
0204 return Fun4AllReturnCodes::EVENT_OK;
0205 }
0206
0207 void psTOFTimezeroEval::printInputInfo(PHCompositeNode *topNode) {
0208
0209 if (verbosity > 1) cout << "psTOFTimezeroEval::printInputInfo() entered" << endl;
0210
0211 if (verbosity > 3) {
0212
0213
0214 cout << endl;
0215 cout << PHWHERE << " INPUT FOR EVENT " << _ievent << endl;
0216
0217 cout << endl;
0218 cout << "---PHG4HITS-------------" << endl;
0219 _svtxevalstack->get_truth_eval()->set_strict(_strict);
0220 std::set<PHG4Hit*> g4hits = _svtxevalstack->get_truth_eval()->all_truth_hits();
0221 unsigned int ig4hit = 0;
0222 for(std::set<PHG4Hit*>::iterator iter = g4hits.begin();
0223 iter != g4hits.end();
0224 ++iter) {
0225 PHG4Hit *g4hit = *iter;
0226 cout << ig4hit << " of " << g4hits.size();
0227 cout << ": PHG4Hit: " << endl;
0228 g4hit->identify();
0229 ++ig4hit;
0230 }
0231
0232 cout << "---SVTXCLUSTERS-------------" << endl;
0233 SvtxClusterMap* clustermap = findNode::getClass<SvtxClusterMap>(topNode,"SvtxClusterMap");
0234 if (clustermap) {
0235 unsigned int icluster = 0;
0236 for (SvtxClusterMap::Iter iter = clustermap->begin();
0237 iter != clustermap->end();
0238 ++iter) {
0239 SvtxCluster* cluster = iter->second;
0240 cout << icluster << " of " << clustermap->size();
0241 cout << ": SvtxCluster: " << endl;
0242 cluster->identify();
0243 ++icluster;
0244 }
0245 }
0246
0247 cout << "---SVXTRACKS-------------" << endl;
0248 SvtxTrackMap* trackmap = findNode::getClass<SvtxTrackMap>(topNode,"SvtxTrackMap");
0249 if (trackmap) {
0250 unsigned int itrack = 0;
0251 for (SvtxTrackMap::Iter iter = trackmap->begin();
0252 iter != trackmap->end();
0253 ++iter) {
0254 cout << itrack << " of " << trackmap->size();
0255 SvtxTrack *track = iter->second;
0256 cout << " : SvtxTrack:" << endl;
0257 track->identify();
0258 cout << endl;
0259 }
0260 }
0261
0262 cout << "---SVXVERTEXES-------------" << endl;
0263 SvtxVertexMap* vertexmap = findNode::getClass<SvtxVertexMap>(topNode,"SvtxVertexMap");
0264 if (vertexmap) {
0265 unsigned int ivertex = 0;
0266 for (SvtxVertexMap::Iter iter = vertexmap->begin();
0267 iter != vertexmap->end();
0268 ++iter) {
0269 cout << ivertex << " of " << vertexmap->size();
0270 SvtxVertex *vertex = iter->second;
0271 cout << " : SvtxVertex:" << endl;
0272 vertex->identify();
0273 cout << endl;
0274 }
0275 }
0276 }
0277
0278 return;
0279 }
0280
0281 void psTOFTimezeroEval::printOutputInfo(PHCompositeNode *topNode) {
0282
0283 if (verbosity > 1) cout << "psTOFTimezeroEval::printOutputInfo() entered" << endl;
0284
0285
0286
0287
0288
0289 if (verbosity > 0) {
0290
0291 SvtxTrackEval* trackeval = _svtxevalstack->get_track_eval();
0292 SvtxClusterEval* clustereval = _svtxevalstack->get_cluster_eval();
0293 SvtxTruthEval* trutheval = _svtxevalstack->get_truth_eval();
0294
0295
0296 cout << endl;
0297 cout << PHWHERE << " NEW OUTPUT FOR EVENT " << _ievent << endl;
0298 cout << endl;
0299
0300 PHG4TruthInfoContainer* truthinfo = findNode::getClass<PHG4TruthInfoContainer>(topNode,"G4TruthInfo");
0301
0302 PHG4VtxPoint *gvertex = truthinfo->GetPrimaryVtx( truthinfo->GetPrimaryVertexIndex() );
0303 float gvx = gvertex->get_x();
0304 float gvy = gvertex->get_y();
0305 float gvz = gvertex->get_z();
0306
0307 float vx = NAN;
0308 float vy = NAN;
0309 float vz = NAN;
0310
0311 SvtxVertexMap* vertexmap = findNode::getClass<SvtxVertexMap>(topNode,"SvtxVertexMap");
0312 if (vertexmap) {
0313 if (!vertexmap->empty()) {
0314 SvtxVertex* vertex = (vertexmap->begin()->second);
0315
0316 vx = vertex->get_x();
0317 vy = vertex->get_y();
0318 vz = vertex->get_z();
0319 }
0320 }
0321
0322 cout << "===Vertex Reconstruction=======================" << endl;
0323 cout << "vtrue = (" << gvx << "," << gvy << "," << gvz << ") => vreco = (" << vx << "," << vy << "," << vz << ")" << endl;
0324 cout << endl;
0325
0326 cout << "===Tracking Summary============================" << endl;
0327 unsigned int ng4hits[100] = {0};
0328 std::set<PHG4Hit*> g4hits = trutheval->all_truth_hits();
0329 for (std::set<PHG4Hit*>::iterator iter = g4hits.begin();
0330 iter != g4hits.end();
0331 ++iter) {
0332 PHG4Hit *g4hit = *iter;
0333 ++ng4hits[g4hit->get_layer()];
0334 }
0335
0336 SvtxHitMap* hitmap = findNode::getClass<SvtxHitMap>(topNode,"SvtxHitMap");
0337 unsigned int nhits[100] = {0};
0338 if (hitmap) {
0339 for (SvtxHitMap::Iter iter = hitmap->begin();
0340 iter != hitmap->end();
0341 ++iter) {
0342 SvtxHit* hit = iter->second;
0343 ++nhits[hit->get_layer()];
0344 }
0345 }
0346
0347 SvtxClusterMap* clustermap = findNode::getClass<SvtxClusterMap>(topNode,"SvtxClusterMap");
0348 unsigned int nclusters[100] = {0};
0349 if (clustermap) {
0350 for (SvtxClusterMap::Iter iter = clustermap->begin();
0351 iter != clustermap->end();
0352 ++iter) {
0353 SvtxCluster* cluster = iter->second;
0354 ++nclusters[cluster->get_layer()];
0355 }
0356 }
0357
0358 for (unsigned int ilayer = 0; ilayer < 100; ++ilayer) {
0359 cout << "layer " << ilayer << ": nG4hits = " << ng4hits[ilayer]
0360 << " => nHits = " << nhits[ilayer]
0361 << " => nClusters = " << nclusters[ilayer] << endl;
0362 }
0363
0364 SvtxTrackMap* trackmap = findNode::getClass<SvtxTrackMap>(topNode,"SvtxTrackMap");
0365
0366 cout << "nGtracks = " << std::distance(truthinfo->GetPrimaryParticleRange().first,
0367 truthinfo->GetPrimaryParticleRange().second);
0368 cout << " => nTracks = ";
0369 if (trackmap) cout << trackmap->size() << endl;
0370 else cout << 0 << endl;
0371
0372
0373 if (verbosity > 1) {
0374
0375 for(std::set<PHG4Hit*>::iterator iter = g4hits.begin();
0376 iter != g4hits.end();
0377 ++iter) {
0378 PHG4Hit *g4hit = *iter;
0379
0380 cout << endl;
0381 cout << "===PHG4Hit===================================" << endl;
0382 cout << " PHG4Hit: "; g4hit->identify();
0383
0384 std::set<SvtxCluster*> clusters = clustereval->all_clusters_from(g4hit);
0385
0386 for (std::set<SvtxCluster*>::iterator jter = clusters.begin();
0387 jter != clusters.end();
0388 ++jter) {
0389 SvtxCluster *cluster = *jter;
0390 cout << "===Created-SvtxCluster================" << endl;
0391 cout << "SvtxCluster: "; cluster->identify();
0392 }
0393 }
0394
0395 PHG4TruthInfoContainer::ConstRange range = truthinfo->GetPrimaryParticleRange();
0396 for (PHG4TruthInfoContainer::ConstIterator iter = range.first;
0397 iter != range.second;
0398 ++iter) {
0399
0400 PHG4Particle *particle = iter->second;
0401
0402
0403 cout << endl;
0404
0405 cout << "=== Gtrack ===================================================" << endl;
0406 cout << " PHG4Particle id = " << particle->get_track_id() << endl;
0407 particle->identify();
0408 cout << " ptrue = (";
0409 cout.width(5); cout << particle->get_px();
0410 cout << ",";
0411 cout.width(5); cout << particle->get_py();
0412 cout << ",";
0413 cout.width(5); cout << particle->get_pz();
0414 cout << ")" << endl;
0415
0416 cout << " vtrue = (";
0417 cout.width(5); cout << truthinfo->GetVtx(particle->get_vtx_id())->get_x();
0418 cout << ",";
0419 cout.width(5); cout << truthinfo->GetVtx(particle->get_vtx_id())->get_y();
0420 cout << ",";
0421 cout.width(5); cout << truthinfo->GetVtx(particle->get_vtx_id())->get_z();
0422 cout << ")" << endl;
0423
0424 cout << " pt = " << sqrt(pow(particle->get_px(),2)+pow(particle->get_py(),2)) << endl;
0425 cout << " phi = " << atan2(particle->get_py(),particle->get_px()) << endl;
0426 cout << " eta = " << asinh(particle->get_pz()/sqrt(pow(particle->get_px(),2)+pow(particle->get_py(),2))) << endl;
0427
0428 cout << " embed flag = " << truthinfo->isEmbeded(particle->get_track_id()) << endl;
0429
0430 cout << " ---Associated-PHG4Hits-----------------------------------------" << endl;
0431 std::set<PHG4Hit*> g4hits = trutheval->all_truth_hits(particle);
0432 for(std::set<PHG4Hit*>::iterator jter = g4hits.begin();
0433 jter != g4hits.end();
0434 ++jter) {
0435 PHG4Hit *g4hit = *jter;
0436
0437 float x = 0.5*(g4hit->get_x(0)+g4hit->get_x(1));
0438 float y = 0.5*(g4hit->get_y(0)+g4hit->get_y(1));
0439 float z = 0.5*(g4hit->get_z(0)+g4hit->get_z(1));
0440
0441 cout << " #" << g4hit->get_hit_id() << " xtrue = (";
0442 cout.width(5); cout << x;
0443 cout << ",";
0444 cout.width(5); cout << y;
0445 cout << ",";
0446 cout.width(5); cout << z;
0447 cout << ")";
0448
0449 std::set<SvtxCluster*> clusters = clustereval->all_clusters_from(g4hit);
0450 for (std::set<SvtxCluster*>::iterator kter = clusters.begin();
0451 kter != clusters.end();
0452 ++kter) {
0453
0454 SvtxCluster *cluster = *kter;
0455
0456 float x = cluster->get_x();
0457 float y = cluster->get_y();
0458 float z = cluster->get_z();
0459
0460 cout << " => #" << cluster->get_id();
0461 cout << " xreco = (";
0462 cout.width(5); cout << x;
0463 cout << ",";
0464 cout.width(5); cout << y;
0465 cout << ",";
0466 cout.width(5); cout << z;
0467 cout << ")";
0468 }
0469
0470 cout << endl;
0471 }
0472
0473 if (trackmap&&clustermap) {
0474
0475 std::set<SvtxTrack*> tracks = trackeval->all_tracks_from(particle);
0476 for (std::set<SvtxTrack*>::iterator jter = tracks.begin();
0477 jter != tracks.end();
0478 ++jter) {
0479
0480 SvtxTrack *track = *jter;
0481
0482 float px = track->get_px();
0483 float py = track->get_py();
0484 float pz = track->get_pz();
0485
0486 cout << "===Created-SvtxTrack==========================================" << endl;
0487 cout << " SvtxTrack id = " << track->get_id() << endl;
0488 cout << " preco = (";
0489 cout.width(5); cout << px;
0490 cout << ",";
0491 cout.width(5); cout << py;
0492 cout << ",";
0493 cout.width(5); cout << pz;
0494 cout << ")" << endl;
0495 cout << " quality = " << track->get_quality() << endl;
0496 cout << " nfromtruth = " << trackeval->get_nclusters_contribution(track,particle) << endl;
0497
0498 cout << " ---Associated-SvtxClusters-to-PHG4Hits-------------------------" << endl;
0499
0500 for (SvtxTrack::ConstClusterIter iter = track->begin_clusters();
0501 iter != track->end_clusters();
0502 ++iter) {
0503 unsigned int cluster_id = *iter;
0504 SvtxCluster* cluster = clustermap->get(cluster_id);
0505
0506 float x = cluster->get_x();
0507 float y = cluster->get_y();
0508 float z = cluster->get_z();
0509
0510 cout << " #" << cluster->get_id() << " xreco = (";
0511 cout.width(5); cout << x;
0512 cout << ",";
0513 cout.width(5); cout << y;
0514 cout << ",";
0515 cout.width(5); cout << z;
0516 cout << ") =>";
0517
0518 PHG4Hit* g4hit = clustereval->max_truth_hit_by_energy(cluster);
0519 if ((g4hit) && (g4hit->get_trkid() == particle->get_track_id())) {
0520
0521 x = 0.5*(g4hit->get_x(0)+g4hit->get_x(1));
0522 y = 0.5*(g4hit->get_y(0)+g4hit->get_y(1));
0523 z = 0.5*(g4hit->get_z(0)+g4hit->get_z(1));
0524
0525 cout << " #" << g4hit->get_hit_id()
0526 << " xtrue = (";
0527 cout.width(5); cout << x;
0528 cout << ",";
0529 cout.width(5); cout << y;
0530 cout << ",";
0531 cout.width(5); cout << z;
0532 cout << ") => Gtrack id = " << g4hit->get_trkid();
0533 } else {
0534 cout << " noise hit";
0535 }
0536 }
0537
0538 cout << endl;
0539 }
0540 }
0541 }
0542 }
0543
0544 cout << endl;
0545
0546 }
0547
0548 return;
0549 }
0550
0551 void psTOFTimezeroEval::fillOutputNtuples(PHCompositeNode *topNode) {
0552
0553 if (verbosity > 1) cout << "psTOFTimezeroEval::fillOutputNtuples() entered" << endl;
0554
0555 SvtxVertexEval* vertexeval = _svtxevalstack->get_vertex_eval();
0556 SvtxTrackEval* trackeval = _svtxevalstack->get_track_eval();
0557 SvtxClusterEval* clustereval = _svtxevalstack->get_cluster_eval();
0558 SvtxHitEval* hiteval = _svtxevalstack->get_hit_eval();
0559 SvtxTruthEval* trutheval = _svtxevalstack->get_truth_eval();
0560
0561
0562
0563
0564
0565 if (_ntp_vertex) {
0566
0567 SvtxVertexMap* vertexmap = findNode::getClass<SvtxVertexMap>(topNode,"SvtxVertexMap");
0568 PHG4TruthInfoContainer* truthinfo = findNode::getClass<PHG4TruthInfoContainer>(topNode,"G4TruthInfo");
0569 if (vertexmap && truthinfo) {
0570 for (SvtxVertexMap::Iter iter = vertexmap->begin();
0571 iter != vertexmap->end();
0572 ++iter) {
0573 SvtxVertex* vertex = iter->second;
0574 PHG4VtxPoint* point = vertexeval->max_truth_point_by_ntracks(vertex);
0575
0576 float vx = vertex->get_x();
0577 float vy = vertex->get_y();
0578 float vz = vertex->get_z();
0579 float ntracks = vertex->size_tracks();
0580
0581 float gvx = NAN;
0582 float gvy = NAN;
0583 float gvz = NAN;
0584 float gvt = NAN;
0585 float gntracks = truthinfo->GetNumPrimaryVertexParticles();
0586 float nfromtruth = NAN;
0587
0588 if (point) {
0589 gvx = point->get_x();
0590 gvy = point->get_y();
0591 gvz = point->get_z();
0592 gvt = point->get_t();
0593 gntracks = truthinfo->GetNumPrimaryVertexParticles();
0594 nfromtruth = vertexeval->get_ntracks_contribution(vertex,point);
0595 }
0596
0597 float vertex_data[11] = {(float) _ievent,
0598 vx,
0599 vy,
0600 vz,
0601 ntracks,
0602 gvx,
0603 gvy,
0604 gvz,
0605 gvt,
0606 gntracks,
0607 nfromtruth
0608 };
0609
0610
0611
0612
0613
0614
0615
0616
0617
0618
0619 _ntp_vertex->Fill(vertex_data);
0620 }
0621 }
0622 }
0623
0624
0625
0626
0627
0628 if (_ntp_gpoint) {
0629
0630 SvtxVertexMap* vertexmap = findNode::getClass<SvtxVertexMap>(topNode,"SvtxVertexMap");
0631 PHG4TruthInfoContainer* truthinfo = findNode::getClass<PHG4TruthInfoContainer>(topNode,"G4TruthInfo");
0632
0633 if (vertexmap && truthinfo) {
0634
0635 PHG4VtxPoint* point = truthinfo->GetPrimaryVtx(truthinfo->GetPrimaryVertexIndex());
0636
0637 if (point) {
0638
0639 SvtxVertex* vertex = vertexeval->best_vertex_from(point);
0640
0641 float gvx = point->get_x();
0642 float gvy = point->get_y();
0643 float gvz = point->get_z();
0644 float gvt = point->get_t();
0645 float gntracks = truthinfo->GetNumPrimaryVertexParticles();
0646 float vx = NAN;
0647 float vy = NAN;
0648 float vz = NAN;
0649 float ntracks = NAN;
0650 float nfromtruth = NAN;
0651
0652 if (vertex) {
0653 vx = vertex->get_x();
0654 vy = vertex->get_y();
0655 vz = vertex->get_z();
0656 ntracks = vertex->size_tracks();
0657 nfromtruth = vertexeval->get_ntracks_contribution(vertex,point);
0658 }
0659
0660 float gpoint_data[11] = {(float) _ievent,
0661 gvx,
0662 gvy,
0663 gvz,
0664 gvt,
0665 gntracks,
0666 vx,
0667 vy,
0668 vz,
0669 ntracks,
0670 nfromtruth
0671 };
0672
0673 _ntp_gpoint->Fill(gpoint_data);
0674 }
0675 }
0676 }
0677
0678
0679
0680
0681
0682 if (_ntp_g4hit) {
0683
0684 std::set<PHG4Hit*> g4hits = trutheval->all_truth_hits();
0685 for (std::set<PHG4Hit*>::iterator iter = g4hits.begin();
0686 iter != g4hits.end();
0687 ++iter) {
0688
0689 PHG4Hit *g4hit = *iter;
0690 PHG4Particle *g4particle = trutheval->get_particle(g4hit);
0691
0692 float g4hitID = g4hit->get_hit_id();
0693 float gx = g4hit->get_avg_x();
0694 float gy = g4hit->get_avg_y();
0695 float gz = g4hit->get_avg_z();
0696 float gt = g4hit->get_avg_t();
0697 float gedep = g4hit->get_edep();
0698 float glayer = g4hit->get_layer();
0699
0700 float gtrackID = g4hit->get_trkid();
0701
0702 float gflavor = NAN;
0703 float gpx = NAN;
0704 float gpy = NAN;
0705 float gpz = NAN;
0706
0707 float gvx = NAN;
0708 float gvy = NAN;
0709 float gvz = NAN;
0710
0711 float gembed = NAN;
0712 float gprimary = NAN;
0713
0714 float gfpx = 0.;
0715 float gfpy = 0.;
0716 float gfpz = 0.;
0717 float gfx = 0.;
0718 float gfy = 0.;
0719 float gfz = 0.;
0720
0721 if (g4particle) {
0722
0723 if (_scan_for_embedded) {
0724 if (trutheval->get_embed(g4particle) <= 0) continue;
0725 }
0726
0727 gflavor = g4particle->get_pid();
0728 gpx = g4particle->get_px();
0729 gpy = g4particle->get_py();
0730 gpz = g4particle->get_pz();
0731
0732 PHG4VtxPoint* vtx = trutheval->get_vertex(g4particle);
0733
0734 if (vtx) {
0735 gvx = vtx->get_x();
0736 gvy = vtx->get_y();
0737 gvz = vtx->get_z();
0738 }
0739
0740 PHG4Hit* outerhit = trutheval->get_outermost_truth_hit(g4particle);
0741 if (outerhit) {
0742 gfpx = outerhit->get_px(1);
0743 gfpy = outerhit->get_py(1);
0744 gfpz = outerhit->get_pz(1);
0745 gfx = outerhit->get_x(1);
0746 gfy = outerhit->get_y(1);
0747 gfz = outerhit->get_z(1);
0748 }
0749
0750 gembed = trutheval->get_embed(g4particle);
0751 gprimary = trutheval->is_primary(g4particle);
0752 }
0753
0754 std::set<SvtxCluster*> clusters = clustereval->all_clusters_from(g4hit);
0755 float nclusters = clusters.size();
0756
0757
0758 SvtxCluster* cluster = clustereval->best_cluster_from(g4hit);
0759
0760 float clusID = NAN;
0761 float x = NAN;
0762 float y = NAN;
0763 float z = NAN;
0764 float e = NAN;
0765 float adc = NAN;
0766 float layer = NAN;
0767 float size = NAN;
0768 float phisize = NAN;
0769 float zsize = NAN;
0770 float efromtruth = NAN;
0771
0772 if (cluster) {
0773 clusID = cluster->get_id();
0774 x = cluster->get_x();
0775 y = cluster->get_y();
0776 z = cluster->get_z();
0777 e = cluster->get_e();
0778 adc = cluster->get_adc();
0779 layer = cluster->get_layer();
0780 size = cluster->size_hits();
0781 phisize = cluster->get_phi_size();
0782 zsize = cluster->get_z_size();
0783 if (g4particle) {
0784 efromtruth = clustereval->get_energy_contribution(cluster,g4particle);
0785 }
0786 }
0787
0788 float g4hit_data[36] = {(float) _ievent,
0789 g4hitID,
0790 gx,
0791 gy,
0792 gz,
0793 gt,
0794 gedep,
0795 glayer,
0796 gtrackID,
0797 gflavor,
0798 gpx,
0799 gpy,
0800 gpz,
0801 gvx,
0802 gvy,
0803 gvz,
0804 gfpx,
0805 gfpy,
0806 gfpz,
0807 gfx,
0808 gfy,
0809 gfz,
0810 gembed,
0811 gprimary,
0812 nclusters,
0813 clusID,
0814 x,
0815 y,
0816 z,
0817 e,
0818 adc,
0819 layer,
0820 size,
0821 phisize,
0822 zsize,
0823 efromtruth
0824 };
0825
0826 _ntp_g4hit->Fill(g4hit_data);
0827 }
0828 }
0829
0830
0831
0832
0833
0834 if (_ntp_hit) {
0835
0836
0837 SvtxHitMap* hitmap = findNode::getClass<SvtxHitMap>(topNode,"SvtxHitMap");
0838 if (hitmap) {
0839
0840 for (SvtxHitMap::Iter iter = hitmap->begin();
0841 iter != hitmap->end();
0842 ++iter) {
0843
0844 SvtxHit* hit = iter->second;
0845 PHG4Hit* g4hit = hiteval->max_truth_hit_by_energy(hit);
0846 PHG4Cell* g4cell = hiteval->get_cell(hit);
0847 PHG4Particle* g4particle = trutheval->get_particle(g4hit);
0848
0849 float event = _ievent;
0850 float hitID = hit->get_id();
0851 float e = hit->get_e();
0852 float adc = hit->get_adc();
0853 float layer = hit->get_layer();
0854 float cellID = hit->get_cellid();
0855 float ecell = g4cell->get_edep();
0856
0857 float g4hitID = NAN;
0858 float gedep = NAN;
0859 float gx = NAN;
0860 float gy = NAN;
0861 float gz = NAN;
0862 float gt = NAN;
0863 float gtrackID = NAN;
0864 float gflavor = NAN;
0865 float gpx = NAN;
0866 float gpy = NAN;
0867 float gpz = NAN;
0868 float gvx = NAN;
0869 float gvy = NAN;
0870 float gvz = NAN;
0871 float gfpx = NAN;
0872 float gfpy = NAN;
0873 float gfpz = NAN;
0874 float gfx = NAN;
0875 float gfy = NAN;
0876 float gfz = NAN;
0877 float gembed = NAN;
0878 float gprimary = NAN;
0879
0880 float efromtruth = NAN;
0881
0882 if (g4hit) {
0883 g4hitID = g4hit->get_hit_id();
0884 gedep = g4hit->get_edep();
0885 gx = g4hit->get_avg_x();
0886 gy = g4hit->get_avg_y();
0887 gz = g4hit->get_avg_z();
0888 gt = g4hit->get_avg_t();
0889
0890 if (g4particle) {
0891
0892 if (_scan_for_embedded) {
0893 if (trutheval->get_embed(g4particle) <= 0) continue;
0894 }
0895
0896 gtrackID = g4particle->get_track_id();
0897 gflavor = g4particle->get_pid();
0898 gpx = g4particle->get_px();
0899 gpy = g4particle->get_py();
0900 gpz = g4particle->get_pz();
0901
0902 PHG4VtxPoint* vtx = trutheval->get_vertex(g4particle);
0903
0904 if (vtx) {
0905 gvx = vtx->get_x();
0906 gvy = vtx->get_y();
0907 gvz = vtx->get_z();
0908 }
0909
0910 PHG4Hit* outerhit = trutheval->get_outermost_truth_hit(g4particle);
0911 if (outerhit) {
0912 gfpx = outerhit->get_px(1);
0913 gfpy = outerhit->get_py(1);
0914 gfpz = outerhit->get_pz(1);
0915 gfx = outerhit->get_x(1);
0916 gfy = outerhit->get_y(1);
0917 gfz = outerhit->get_z(1);
0918 }
0919 gembed = trutheval->get_embed(g4particle);
0920 gprimary = trutheval->is_primary(g4particle);
0921 }
0922 }
0923
0924 if (g4particle) {
0925 efromtruth = hiteval->get_energy_contribution(hit,g4particle);
0926 }
0927
0928 float hit_data[33] = {
0929 event,
0930 hitID,
0931 e,
0932 adc,
0933 layer,
0934 cellID,
0935 ecell,
0936 g4hitID,
0937 gedep,
0938 gx,
0939 gy,
0940 gz,
0941 gt,
0942 gtrackID,
0943 gflavor,
0944 gpx,
0945 gpy,
0946 gpz,
0947 gvx,
0948 gvy,
0949 gvz,
0950 gfpx,
0951 gfpy,
0952 gfpz,
0953 gfx,
0954 gfy,
0955 gfz,
0956 gembed,
0957 gprimary,
0958 efromtruth
0959 };
0960
0961 _ntp_hit->Fill(hit_data);
0962 }
0963 }
0964 }
0965
0966
0967
0968
0969
0970
0971
0972 if (_ntp_cluster && !_scan_for_embedded) {
0973
0974
0975 SvtxClusterMap* clustermap = findNode::getClass<SvtxClusterMap>(topNode,"SvtxClusterMap");
0976 if (clustermap) {
0977
0978 for (SvtxClusterMap::Iter iter = clustermap->begin();
0979 iter != clustermap->end();
0980 ++iter) {
0981
0982 SvtxCluster* cluster = iter->second;
0983 SvtxTrack* track = trackeval->best_track_from(cluster);
0984
0985 PHG4Hit *g4hit = clustereval->max_truth_hit_by_energy(cluster);
0986 PHG4Particle *g4particle = trutheval->get_particle(g4hit);
0987
0988 float hitID = cluster->get_id();
0989 float x = cluster->get_x();
0990 float y = cluster->get_y();
0991 float z = cluster->get_z();
0992
0993 float ex = sqrt(cluster->get_error(0,0));
0994 float ey = sqrt(cluster->get_error(1,1));
0995 float ez = cluster->get_z_error();
0996
0997 float ephi = cluster->get_rphi_error();
0998
0999 float e = cluster->get_e();
1000 float adc = cluster->get_adc();
1001 float layer = cluster->get_layer();
1002 float size = cluster->size_hits();
1003 float phisize = cluster->get_phi_size();
1004 float zsize = cluster->get_z_size();
1005
1006 float trackID = NAN;
1007 if (track) trackID = track->get_id();
1008
1009 float g4hitID = NAN;
1010 float gx = NAN;
1011 float gy = NAN;
1012 float gz = NAN;
1013 float gt = NAN;
1014 float gtrackID = NAN;
1015 float gflavor = NAN;
1016 float gpx = NAN;
1017 float gpy = NAN;
1018 float gpz = NAN;
1019 float gvx = NAN;
1020 float gvy = NAN;
1021 float gvz = NAN;
1022 float gfpx = NAN;
1023 float gfpy = NAN;
1024 float gfpz = NAN;
1025 float gfx = NAN;
1026 float gfy = NAN;
1027 float gfz = NAN;
1028 float gembed = NAN;
1029 float gprimary = NAN;
1030
1031 float efromtruth = NAN;
1032
1033 if (g4hit) {
1034 g4hitID = g4hit->get_hit_id();
1035 gx = g4hit->get_avg_x();
1036 gy = g4hit->get_avg_y();
1037 gz = g4hit->get_avg_z();
1038 gt = g4hit->get_avg_t();
1039
1040 if (g4particle) {
1041
1042 gtrackID = g4particle->get_track_id();
1043 gflavor = g4particle->get_pid();
1044 gpx = g4particle->get_px();
1045 gpy = g4particle->get_py();
1046 gpz = g4particle->get_pz();
1047
1048 PHG4VtxPoint* vtx = trutheval->get_vertex(g4particle);
1049 if (vtx) {
1050 gvx = vtx->get_x();
1051 gvy = vtx->get_y();
1052 gvz = vtx->get_z();
1053 }
1054
1055 PHG4Hit* outerhit = trutheval->get_outermost_truth_hit(g4particle);
1056 if (outerhit) {
1057 gfpx = outerhit->get_px(1);
1058 gfpy = outerhit->get_py(1);
1059 gfpz = outerhit->get_pz(1);
1060 gfx = outerhit->get_x(1);
1061 gfy = outerhit->get_y(1);
1062 gfz = outerhit->get_z(1);
1063 }
1064
1065 gembed = trutheval->get_embed(g4particle);
1066 gprimary = trutheval->is_primary(g4particle);
1067 }
1068 }
1069
1070 if (g4particle){
1071 efromtruth = clustereval->get_energy_contribution(cluster,g4particle);
1072 }
1073
1074 float cluster_data[38] = {(float) _ievent,
1075 hitID,
1076 x,
1077 y,
1078 z,
1079 ex,
1080 ey,
1081 ez,
1082 ephi,
1083 e,
1084 adc,
1085 layer,
1086 size,
1087 phisize,
1088 zsize,
1089 trackID,
1090 g4hitID,
1091 gx,
1092 gy,
1093 gz,
1094 gt,
1095 gtrackID,
1096 gflavor,
1097 gpx,
1098 gpy,
1099 gpz,
1100 gvx,
1101 gvy,
1102 gvz,
1103 gfpx,
1104 gfpy,
1105 gfpz,
1106 gfx,
1107 gfy,
1108 gfz,
1109 gembed,
1110 gprimary,
1111 efromtruth};
1112
1113 _ntp_cluster->Fill(cluster_data);
1114 }
1115 }
1116
1117 } else if (_ntp_cluster && _scan_for_embedded) {
1118
1119
1120
1121
1122
1123
1124
1125
1126 SvtxTrackMap* trackmap = findNode::getClass<SvtxTrackMap>(topNode,"SvtxTrackMap");
1127 SvtxClusterMap* clustermap = findNode::getClass<SvtxClusterMap>(topNode,"SvtxClusterMap");
1128 if (trackmap) {
1129
1130 for (SvtxTrackMap::Iter iter = trackmap->begin();
1131 iter != trackmap->end();
1132 ++iter) {
1133
1134 SvtxTrack* track = iter->second;
1135 PHG4Particle* truth = trackeval->max_truth_particle_by_nclusters(track);
1136 if (truth) {
1137 if (trutheval->get_embed(truth) <= 0) continue;
1138 }
1139
1140 for (SvtxTrack::ConstClusterIter iter = track->begin_clusters();
1141 iter != track->end_clusters();
1142 ++iter) {
1143
1144 unsigned int cluster_id = *iter;
1145 SvtxCluster* cluster = clustermap->get(cluster_id);
1146
1147 PHG4Hit *g4hit = clustereval->max_truth_hit_by_energy(cluster);
1148 PHG4Particle *g4particle = trutheval->get_particle(g4hit);
1149
1150 float hitID = cluster->get_id();
1151 float x = cluster->get_x();
1152 float y = cluster->get_y();
1153 float z = cluster->get_z();
1154
1155 float ex = sqrt(cluster->get_error(0,0));
1156 float ey = sqrt(cluster->get_error(1,1));
1157 float ez = cluster->get_z_error();
1158
1159 float ephi = cluster->get_rphi_error();
1160
1161 float e = cluster->get_e();
1162 float adc = cluster->get_adc();
1163 float layer = cluster->get_layer();
1164 float size = cluster->size_hits();
1165 float phisize = cluster->get_phi_size();
1166 float zsize = cluster->get_z_size();
1167
1168 float trackID = NAN;
1169 if (track) trackID = track->get_id();
1170
1171 float g4hitID = NAN;
1172 float gx = NAN;
1173 float gy = NAN;
1174 float gz = NAN;
1175 float gt = NAN;
1176 float gtrackID = NAN;
1177 float gflavor = NAN;
1178 float gpx = NAN;
1179 float gpy = NAN;
1180 float gpz = NAN;
1181 float gvx = NAN;
1182 float gvy = NAN;
1183 float gvz = NAN;
1184 float gfpx = NAN;
1185 float gfpy = NAN;
1186 float gfpz = NAN;
1187 float gfx = NAN;
1188 float gfy = NAN;
1189 float gfz = NAN;
1190 float gembed = NAN;
1191 float gprimary = NAN;
1192
1193 float efromtruth = NAN;
1194
1195 if (g4hit) {
1196 g4hitID = g4hit->get_hit_id();
1197 gx = g4hit->get_avg_x();
1198 gy = g4hit->get_avg_y();
1199 gz = g4hit->get_avg_z();
1200 gt = g4hit->get_avg_t();
1201
1202 if (g4particle) {
1203
1204 gtrackID = g4particle->get_track_id();
1205 gflavor = g4particle->get_pid();
1206 gpx = g4particle->get_px();
1207 gpy = g4particle->get_py();
1208 gpz = g4particle->get_pz();
1209
1210 PHG4VtxPoint* vtx = trutheval->get_vertex(g4particle);
1211 if (vtx) {
1212 gvx = vtx->get_x();
1213 gvy = vtx->get_y();
1214 gvz = vtx->get_z();
1215 }
1216
1217 PHG4Hit* outerhit = trutheval->get_outermost_truth_hit(g4particle);
1218 if (outerhit) {
1219 gfpx = outerhit->get_px(1);
1220 gfpy = outerhit->get_py(1);
1221 gfpz = outerhit->get_pz(1);
1222 gfx = outerhit->get_x(1);
1223 gfy = outerhit->get_y(1);
1224 gfz = outerhit->get_z(1);
1225 }
1226
1227 gembed = trutheval->get_embed(g4particle);
1228 gprimary = trutheval->is_primary(g4particle);
1229 }
1230 }
1231
1232 if (g4particle){
1233 efromtruth = clustereval->get_energy_contribution(cluster,g4particle);
1234 }
1235
1236 float cluster_data[38] = {(float) _ievent,
1237 hitID,
1238 x,
1239 y,
1240 z,
1241 ex,
1242 ey,
1243 ez,
1244 ephi,
1245 e,
1246 adc,
1247 layer,
1248 size,
1249 phisize,
1250 zsize,
1251 trackID,
1252 g4hitID,
1253 gx,
1254 gy,
1255 gz,
1256 gt,
1257 gtrackID,
1258 gflavor,
1259 gpx,
1260 gpy,
1261 gpz,
1262 gvx,
1263 gvy,
1264 gvz,
1265 gfpx,
1266 gfpy,
1267 gfpz,
1268 gfx,
1269 gfy,
1270 gfz,
1271 gembed,
1272 gprimary,
1273 efromtruth};
1274
1275 _ntp_cluster->Fill(cluster_data);
1276 }
1277 }
1278 }
1279 }
1280
1281
1282
1283
1284
1285
1286
1287
1288
1289 if (_ntp_gtrack) {
1290
1291
1292 PHG4TruthInfoContainer* truthinfo = findNode::getClass<PHG4TruthInfoContainer>(topNode,"G4TruthInfo");
1293 SvtxClusterMap* clustermap = findNode::getClass<SvtxClusterMap>(topNode,"SvtxClusterMap");
1294 if (truthinfo) {
1295
1296 PHG4TruthInfoContainer::ConstRange range = truthinfo->GetPrimaryParticleRange();
1297 for (PHG4TruthInfoContainer::ConstIterator iter = range.first;
1298 iter != range.second;
1299 ++iter) {
1300
1301 PHG4Particle* g4particle = iter->second;
1302
1303 if (_scan_for_embedded) {
1304 if (trutheval->get_embed(g4particle) <= 0) continue;
1305 }
1306
1307 float gtrackID = g4particle->get_track_id();
1308 float gflavor = g4particle->get_pid();
1309
1310 std::set<PHG4Hit*> g4hits = trutheval->all_truth_hits(g4particle);
1311 float ng4hits = g4hits.size();
1312 float gpx = g4particle->get_px();
1313 float gpy = g4particle->get_py();
1314 float gpz = g4particle->get_pz();
1315
1316 PHG4VtxPoint* vtx = trutheval->get_vertex(g4particle);
1317 float gvx = vtx->get_x();
1318 float gvy = vtx->get_y();
1319 float gvz = vtx->get_z();
1320 float gvt = vtx->get_t();
1321
1322 float gfpx = 0.;
1323 float gfpy = 0.;
1324 float gfpz = 0.;
1325 float gfx = 0.;
1326 float gfy = 0.;
1327 float gfz = 0.;
1328
1329 PHG4Hit* outerhit = trutheval->get_outermost_truth_hit(g4particle);
1330 if (outerhit) {
1331 gfpx = outerhit->get_px(1);
1332 gfpy = outerhit->get_py(1);
1333 gfpz = outerhit->get_pz(1);
1334 gfx = outerhit->get_x(1);
1335 gfy = outerhit->get_y(1);
1336 gfz = outerhit->get_z(1);
1337 }
1338
1339 float gembed = trutheval->get_embed(g4particle);
1340 float gprimary = trutheval->is_primary(g4particle);
1341
1342 SvtxTrack* track = trackeval->best_track_from(g4particle);
1343
1344 float trackID = NAN;
1345 float charge = NAN;
1346 float quality = NAN;
1347 float chisq = NAN;
1348 float ndf = NAN;
1349 float nhits = NAN;
1350 unsigned int layers = 0x0;
1351 float dca2d = NAN;
1352 float dca2dsigma = NAN;
1353 float px = NAN;
1354 float py = NAN;
1355 float pz = NAN;
1356 float pcax = NAN;
1357 float pcay = NAN;
1358 float pcaz = NAN;
1359
1360 float nfromtruth = NAN;
1361 float layersfromtruth = NAN;
1362
1363 float nmaps = 0;
1364 float nintt = 0;
1365 float ntpc = 0;
1366
1367 if (track) {
1368 trackID = track->get_id();
1369 charge = track->get_charge();
1370 quality = track->get_quality();
1371 chisq = track->get_chisq();
1372 ndf = track->get_ndf();
1373 nhits = track->size_clusters();
1374
1375 for (SvtxTrack::ConstClusterIter iter = track->begin_clusters();
1376 iter != track->end_clusters();
1377 ++iter) {
1378 unsigned int cluster_id = *iter;
1379 SvtxCluster* cluster = clustermap->get(cluster_id);
1380 unsigned int layer = cluster->get_layer();
1381 if (layer < 32) layers |= (0x1 << layer);
1382
1383
1384 if(layer >= 0 and layer <= 2) ++nmaps;
1385 if(layer >= 3 and layer <= 6) ++nintt;
1386 if(layer >= 7 and layer <= 66) ++ntpc;
1387 }
1388
1389 dca2d = track->get_dca2d();
1390 dca2dsigma = track->get_dca2d_error();
1391 px = track->get_px();
1392 py = track->get_py();
1393 pz = track->get_pz();
1394 pcax = track->get_x();
1395 pcay = track->get_y();
1396 pcaz = track->get_z();
1397
1398 nfromtruth = trackeval->get_nclusters_contribution(track,g4particle);
1399 layersfromtruth = trackeval->get_nclusters_contribution_by_layer(track,g4particle);
1400 }
1401
1402 float gtrack_data[39] = {(float) _ievent,
1403 gtrackID,
1404 gflavor,
1405 ng4hits,
1406 gpx,
1407 gpy,
1408 gpz,
1409 gvx,
1410 gvy,
1411 gvz,
1412 gvt,
1413 gfpx,
1414 gfpy,
1415 gfpz,
1416 gfx,
1417 gfy,
1418 gfz,
1419 gembed,
1420 gprimary,
1421 trackID,
1422 px,
1423 py,
1424 pz,
1425 charge,
1426 quality,
1427 chisq,
1428 ndf,
1429 nhits,
1430 (float) layers,
1431 dca2d,
1432 dca2dsigma,
1433 pcax,
1434 pcay,
1435 pcaz,
1436 nfromtruth,
1437 layersfromtruth,
1438 nmaps,
1439 nintt,
1440 ntpc
1441 };
1442
1443
1444
1445
1446
1447
1448
1449
1450
1451 _ntp_gtrack->Fill(gtrack_data);
1452
1453 }
1454 }
1455 }
1456
1457
1458
1459
1460
1461
1462
1463 if (_ntp_track) {
1464
1465
1466
1467 SvtxTrackMap* trackmap = findNode::getClass<SvtxTrackMap>(topNode,"SvtxTrackMap");
1468 SvtxClusterMap* clustermap = findNode::getClass<SvtxClusterMap>(topNode,"SvtxClusterMap");
1469 if (trackmap) {
1470
1471 for (SvtxTrackMap::Iter iter = trackmap->begin();
1472 iter != trackmap->end();
1473 ++iter) {
1474
1475 SvtxTrack* track = iter->second;
1476
1477 float trackID = track->get_id();
1478 float charge = track->get_charge();
1479 float quality = track->get_quality();
1480 float chisq = track->get_chisq();
1481 float ndf = track->get_ndf();
1482 float nhits = track->size_clusters();
1483
1484 float nmaps = 0;
1485 float nintt = 0;
1486 float ntpc = 0;
1487
1488 unsigned int layers = 0x0;
1489 for (SvtxTrack::ConstClusterIter iter = track->begin_clusters();
1490 iter != track->end_clusters();
1491 ++iter) {
1492 unsigned int cluster_id = *iter;
1493 SvtxCluster* cluster = clustermap->get(cluster_id);
1494 unsigned int layer = cluster->get_layer();
1495 if (layer < 31) layers |= (0x1 << layer);
1496
1497 if(layer >= 0 and layer <= 2) ++nmaps;
1498 if(layer >= 3 and layer <= 6) ++nintt;
1499 if(layer >= 7 and layer <= 66) ++ntpc;
1500 }
1501
1502 float dca2d = track->get_dca2d();
1503 float dca2dsigma = track->get_dca2d_error();
1504 float px = track->get_px();
1505 float py = track->get_py();
1506 float pz = track->get_pz();
1507 float pcax = track->get_x();
1508 float pcay = track->get_y();
1509 float pcaz = track->get_z();
1510
1511 float presdphi = track->get_cal_dphi(SvtxTrack::PRES);
1512 float presdeta = track->get_cal_deta(SvtxTrack::PRES);
1513 float prese3x3 = track->get_cal_energy_3x3(SvtxTrack::PRES);
1514 float prese = track->get_cal_cluster_e(SvtxTrack::PRES);
1515
1516 float cemcdphi = track->get_cal_dphi(SvtxTrack::CEMC);
1517 float cemcdeta = track->get_cal_deta(SvtxTrack::CEMC);
1518 float cemce3x3 = track->get_cal_energy_3x3(SvtxTrack::CEMC);
1519 float cemce = track->get_cal_cluster_e(SvtxTrack::CEMC);
1520
1521 float hcalindphi = track->get_cal_dphi(SvtxTrack::HCALIN);
1522 float hcalindeta = track->get_cal_deta(SvtxTrack::HCALIN);
1523 float hcaline3x3 = track->get_cal_energy_3x3(SvtxTrack::HCALIN);
1524 float hcaline = track->get_cal_cluster_e(SvtxTrack::HCALIN);
1525
1526 float hcaloutdphi = track->get_cal_dphi(SvtxTrack::HCALOUT);
1527 float hcaloutdeta = track->get_cal_deta(SvtxTrack::HCALOUT);
1528 float hcaloute3x3 = track->get_cal_energy_3x3(SvtxTrack::HCALOUT);
1529 float hcaloute = track->get_cal_cluster_e(SvtxTrack::HCALOUT);
1530
1531 float gtrackID = NAN;
1532 float gflavor = NAN;
1533 float ng4hits = NAN;
1534 float gpx = NAN;
1535 float gpy = NAN;
1536 float gpz = NAN;
1537 float gvx = NAN;
1538 float gvy = NAN;
1539 float gvz = NAN;
1540 float gvt = NAN;
1541 float gfpx = NAN;
1542 float gfpy = NAN;
1543 float gfpz = NAN;
1544 float gfx = NAN;
1545 float gfy = NAN;
1546 float gfz = NAN;
1547 float gembed = NAN;
1548 float gprimary = NAN;
1549
1550 float nfromtruth = NAN;
1551 float layersfromtruth = NAN;
1552
1553 PHG4Particle* g4particle = trackeval->max_truth_particle_by_nclusters(track);
1554
1555 if (g4particle) {
1556
1557 if (_scan_for_embedded) {
1558 if (trutheval->get_embed(g4particle) <= 0) continue;
1559 }
1560
1561 gtrackID = g4particle->get_track_id();
1562 gflavor = g4particle->get_pid();
1563
1564 std::set<PHG4Hit*> g4hits = trutheval->all_truth_hits(g4particle);
1565 ng4hits = g4hits.size();
1566 gpx = g4particle->get_px();
1567 gpy = g4particle->get_py();
1568 gpz = g4particle->get_pz();
1569
1570 PHG4VtxPoint* vtx = trutheval->get_vertex(g4particle);
1571 gvx = vtx->get_x();
1572 gvy = vtx->get_y();
1573 gvz = vtx->get_z();
1574 gvt = vtx->get_t();
1575
1576 PHG4Hit* outerhit = trutheval->get_outermost_truth_hit(g4particle);
1577 if (outerhit) {
1578 gfpx = outerhit->get_px(1);
1579 gfpy = outerhit->get_py(1);
1580 gfpz = outerhit->get_pz(1);
1581 gfx = outerhit->get_x(1);
1582 gfy = outerhit->get_y(1);
1583 gfz = outerhit->get_z(1);
1584 }
1585 gembed = trutheval->get_embed(g4particle);
1586 gprimary = trutheval->is_primary(g4particle);
1587
1588 nfromtruth = trackeval->get_nclusters_contribution(track,g4particle);
1589 layersfromtruth = trackeval->get_nclusters_contribution_by_layer(track,g4particle);
1590 }
1591
1592 float track_data[55] = {(float) _ievent,
1593 trackID,
1594 px,
1595 py,
1596 pz,
1597 charge,
1598 quality,
1599 chisq,
1600 ndf,
1601 nhits,
1602 (float) layers,
1603 dca2d,
1604 dca2dsigma,
1605 pcax,
1606 pcay,
1607 pcaz,
1608 presdphi,
1609 presdeta,
1610 prese3x3,
1611 prese,
1612 cemcdphi,
1613 cemcdeta,
1614 cemce3x3,
1615 cemce,
1616 hcalindphi,
1617 hcalindeta,
1618 hcaline3x3,
1619 hcaline,
1620 hcaloutdphi,
1621 hcaloutdeta,
1622 hcaloute3x3,
1623 hcaloute,
1624 gtrackID,
1625 gflavor,
1626 ng4hits,
1627 gpx,
1628 gpy,
1629 gpz,
1630 gvx,
1631 gvy,
1632 gvz,
1633 gvt,
1634 gfpx,
1635 gfpy,
1636 gfpz,
1637 gfx,
1638 gfy,
1639 gfz,
1640 gembed,
1641 gprimary,
1642 nfromtruth,
1643 layersfromtruth,
1644 nmaps,
1645 nintt,
1646 ntpc
1647 };
1648
1649
1650
1651
1652
1653
1654
1655
1656
1657
1658
1659
1660 _ntp_track->Fill(track_data);
1661 }
1662 }
1663 }
1664
1665 return;
1666 }