int PHG4TrackGhostRejection::process_event(PHCompositeNode *topNode) { if(verbosity > 0) cout << "PHG4TrackGhostRejection::process_event -- entered" << endl; //--------------------------------- // Get Objects off of the Node Tree //--------------------------------- // Pull the reconstructed track information off the node tree... _g4tracks = findNode::getClass<SvtxTrackMap>(topNode, "SvtxTrackMap"); if(!_g4tracks) { cerr << PHWHERE << " ERROR: Can't find SvtxTrackMap." << endl; return Fun4AllReturnCodes::ABORTEVENT; } if (verbosity > 1) { _g4tracks->identify(); for (SvtxTrackMap::Iter iter = _g4tracks->begin(); iter != _g4tracks->end(); ++iter) { SvtxTrack *track = iter->second; track->identify(); } } //---------------------------- // Sort the hits on each track //---------------------------- _candidates.clear(); for (SvtxTrackMap::Iter iter = _g4tracks->begin(); iter != _g4tracks->end(); ++iter) { SvtxTrack* track = iter->second; PHG4TrackCandidate combo; combo.trackid = track->get_id(); combo.nhits = track->size_clusters(); for (SvtxTrack::ConstClusterIter iter = track->begin_clusters(); iter != track->end_clusters(); ++iter) { unsigned int cluster_id = *iter; combo.hitids.push_back(cluster_id); } if (track->get_ndf() != 0) { combo.chisq = track->get_chisq()/track->get_ndf(); } combo.keep = true; // sort the hits by index stable_sort(combo.hitids.begin(),combo.hitids.end(),hit_sort); _candidates.push_back(combo); } //--------------------- // Fill the overlap map //--------------------- _overlapping.clear(); for(unsigned int i = 0; i < _candidates.size(); i++) { for(unsigned int j = i+1; j < _candidates.size(); j++) { // determine the maximum length of the anticipated storage unsigned maxhits = _candidates[i].hitids.size(); if(_candidates[j].hitids.size() > maxhits) { maxhits = _candidates[j].hitids.size(); } // create the difference storage std::vector<unsigned int> diff; diff.assign(maxhits,0); // run the difference algorithm std::vector<unsigned int>::iterator it = diff.begin(); it = std::set_difference(_candidates[i].hitids.begin(),_candidates[i].hitids.end(), _candidates[j].hitids.begin(),_candidates[j].hitids.end(), diff.begin()); // calculate the overlap unsigned int overlap = maxhits - int(it - diff.begin()); // insert an overlapping pair into the map if(overlap > _max_shared_hits) _overlapping.insert(std::make_pair(i,j)); } } //---------------------- // Flag the ghost tracks //---------------------- std::multimap<unsigned,unsigned int>::iterator iter; for (iter = _overlapping.begin(); iter != _overlapping.end(); iter++) { unsigned int key = iter->first; unsigned int value = iter->second; if (_candidates[key].nhits > _candidates[value].nhits) { // prefer longer track _candidates[value].keep = false; } else if (_candidates[key].nhits < _candidates[value].nhits) { // prefer longer track _candidates[key].nhits = false; } else { // choose between equal length tracks by chisq/dof if (_candidates[key].chisq < _candidates[value].chisq) { _candidates[value].keep = false; } else { _candidates[key].keep = false; } } } //------------------------ // Remove the ghost tracks //------------------------ SvtxVertexMap* vertexmap = findNode::getClass<SvtxVertexMap>(topNode, "SvtxVertexMap"); int initial_size = _g4tracks->size(); // loop over container and delete! for (unsigned int i = 0; i < _candidates.size(); i++) { if (!_candidates[i].keep) { // look for the track to delete if (_g4tracks->find(_candidates[i].trackid) != _g4tracks->end()) { _g4tracks->erase(_candidates[i].trackid); // also remove the track id from any vertex that contains this track if (!vertexmap) continue; for (SvtxVertexMap::Iter iter = vertexmap->begin(); iter != vertexmap->end(); ++iter) { SvtxVertex* vertex = iter->second; vertex->erase_track(_candidates[i].trackid); } } } } if (verbosity > 1) { _g4tracks->identify(); for (SvtxTrackMap::Iter iter = _g4tracks->begin(); iter != _g4tracks->end(); ++iter) { SvtxTrack *track = iter->second; track->identify(); } } if(verbosity > 0) cout << "PHG4TrackGhostRejection - rejected and removed " << initial_size - _g4tracks->size() << " tracks" << endl;; if(verbosity > 0) cout << "PHG4TrackGhostRejection::process_event -- exited" << endl; return Fun4AllReturnCodes::EVENT_OK; }
void SvtxEvaluator::fillOutputNtuples(PHCompositeNode *topNode) { if (verbosity > 1) cout << "SvtxEvaluator::fillOutputNtuples() entered" << endl; SvtxVertexEval* vertexeval = _svtxevalstack->get_vertex_eval(); SvtxTrackEval* trackeval = _svtxevalstack->get_track_eval(); SvtxClusterEval* clustereval = _svtxevalstack->get_cluster_eval(); SvtxHitEval* hiteval = _svtxevalstack->get_hit_eval(); SvtxTruthEval* trutheval = _svtxevalstack->get_truth_eval(); //----------------------- // fill the Vertex NTuple //----------------------- if (_ntp_vertex) { //cout << "Filling ntp_vertex " << endl; SvtxVertexMap* vertexmap = findNode::getClass<SvtxVertexMap>(topNode,"SvtxVertexMap"); PHG4TruthInfoContainer* truthinfo = findNode::getClass<PHG4TruthInfoContainer>(topNode,"G4TruthInfo"); if (vertexmap && truthinfo) { for (SvtxVertexMap::Iter iter = vertexmap->begin(); iter != vertexmap->end(); ++iter) { SvtxVertex* vertex = iter->second; PHG4VtxPoint* point = vertexeval->max_truth_point_by_ntracks(vertex); float vx = vertex->get_x(); float vy = vertex->get_y(); float vz = vertex->get_z(); float ntracks = vertex->size_tracks(); float gvx = NAN; float gvy = NAN; float gvz = NAN; float gvt = NAN; float gntracks = truthinfo->GetNumPrimaryVertexParticles(); float nfromtruth = NAN; if (point) { gvx = point->get_x(); gvy = point->get_y(); gvz = point->get_z(); gvt = point->get_t(); gntracks = truthinfo->GetNumPrimaryVertexParticles(); nfromtruth = vertexeval->get_ntracks_contribution(vertex,point); } float vertex_data[11] = {(float) _ievent, vx, vy, vz, ntracks, gvx, gvy, gvz, gvt, gntracks, nfromtruth }; /* cout << "vertex: " << " ievent " << vertex_data[0] << " vx " << vertex_data[1] << " vy " << vertex_data[2] << " vz " << vertex_data[3] << endl; */ _ntp_vertex->Fill(vertex_data); } } } //----------------------- // fill the gpoint NTuple //----------------------- if (_ntp_gpoint) { //cout << "Filling ntp_gpoint " << endl; SvtxVertexMap* vertexmap = findNode::getClass<SvtxVertexMap>(topNode,"SvtxVertexMap"); PHG4TruthInfoContainer* truthinfo = findNode::getClass<PHG4TruthInfoContainer>(topNode,"G4TruthInfo"); if (vertexmap && truthinfo) { PHG4VtxPoint* point = truthinfo->GetPrimaryVtx(truthinfo->GetPrimaryVertexIndex()); if (point) { SvtxVertex* vertex = vertexeval->best_vertex_from(point); float gvx = point->get_x(); float gvy = point->get_y(); float gvz = point->get_z(); float gvt = point->get_t(); float gntracks = truthinfo->GetNumPrimaryVertexParticles(); float vx = NAN; float vy = NAN; float vz = NAN; float ntracks = NAN; float nfromtruth = NAN; if (vertex) { vx = vertex->get_x(); vy = vertex->get_y(); vz = vertex->get_z(); ntracks = vertex->size_tracks(); nfromtruth = vertexeval->get_ntracks_contribution(vertex,point); } float gpoint_data[11] = {(float) _ievent, gvx, gvy, gvz, gvt, gntracks, vx, vy, vz, ntracks, nfromtruth }; _ntp_gpoint->Fill(gpoint_data); } } } //--------------------- // fill the G4hit NTuple //--------------------- if (_ntp_g4hit) { //cout << "Filling ntp_g4hit " << endl; std::set<PHG4Hit*> g4hits = trutheval->all_truth_hits(); for (std::set<PHG4Hit*>::iterator iter = g4hits.begin(); iter != g4hits.end(); ++iter) { PHG4Hit *g4hit = *iter; PHG4Particle *g4particle = trutheval->get_particle(g4hit); float g4hitID = g4hit->get_hit_id(); float gx = g4hit->get_avg_x(); float gy = g4hit->get_avg_y(); float gz = g4hit->get_avg_z(); float gt = g4hit->get_avg_t(); float gedep = g4hit->get_edep(); float glayer = g4hit->get_layer(); float gtrackID = g4hit->get_trkid(); float gflavor = NAN; float gpx = NAN; float gpy = NAN; float gpz = NAN; float gvx = NAN; float gvy = NAN; float gvz = NAN; float gembed = NAN; float gprimary = NAN; float gfpx = 0.; float gfpy = 0.; float gfpz = 0.; float gfx = 0.; float gfy = 0.; float gfz = 0.; if (g4particle) { if (_scan_for_embedded) { if (trutheval->get_embed(g4particle) == 0) continue; } gflavor = g4particle->get_pid(); gpx = g4particle->get_px(); gpy = g4particle->get_py(); gpz = g4particle->get_pz(); PHG4VtxPoint* vtx = trutheval->get_vertex(g4particle); if (vtx) { gvx = vtx->get_x(); gvy = vtx->get_y(); gvz = vtx->get_z(); } PHG4Hit* outerhit = trutheval->get_outermost_truth_hit(g4particle); if (outerhit) { gfpx = outerhit->get_px(1); gfpy = outerhit->get_py(1); gfpz = outerhit->get_pz(1); gfx = outerhit->get_x(1); gfy = outerhit->get_y(1); gfz = outerhit->get_z(1); } gembed = trutheval->get_embed(g4particle); gprimary = trutheval->is_primary(g4particle); } // if (g4particle) std::set<SvtxCluster*> clusters = clustereval->all_clusters_from(g4hit); float nclusters = clusters.size(); // best cluster reco'd SvtxCluster* cluster = clustereval->best_cluster_from(g4hit); float clusID = NAN; float x = NAN; float y = NAN; float z = NAN; float e = NAN; float adc = NAN; float layer = NAN; float size = NAN; float phisize = NAN; float zsize = NAN; float efromtruth = NAN; if (cluster) { clusID = cluster->get_id(); x = cluster->get_x(); y = cluster->get_y(); z = cluster->get_z(); e = cluster->get_e(); adc = cluster->get_adc(); layer = cluster->get_layer(); size = cluster->size_hits(); phisize = cluster->get_phi_size(); zsize = cluster->get_z_size(); if (g4particle) { efromtruth = clustereval->get_energy_contribution(cluster,g4particle); } } float g4hit_data[36] = {(float) _ievent, g4hitID, gx, gy, gz, gt, gedep, glayer, gtrackID, gflavor, gpx, gpy, gpz, gvx, gvy, gvz, gfpx, gfpy, gfpz, gfx, gfy, gfz, gembed, gprimary, nclusters, clusID, x, y, z, e, adc, layer, size, phisize, zsize, efromtruth }; _ntp_g4hit->Fill(g4hit_data); } } //-------------------- // fill the Hit NTuple //-------------------- if (_ntp_hit) { //cout << "Filling ntp_hit " << endl; // need things off of the DST... SvtxHitMap* hitmap = findNode::getClass<SvtxHitMap>(topNode,"SvtxHitMap"); if (hitmap) { for (SvtxHitMap::Iter iter = hitmap->begin(); iter != hitmap->end(); ++iter) { SvtxHit* hit = iter->second; PHG4Hit* g4hit = hiteval->max_truth_hit_by_energy(hit); PHG4CylinderCell* g4cell = hiteval->get_cell(hit); PHG4Particle* g4particle = trutheval->get_particle(g4hit); float event = _ievent; float hitID = hit->get_id(); float e = hit->get_e(); float adc = hit->get_adc(); float layer = hit->get_layer(); float cellID = hit->get_cellid(); float ecell = g4cell->get_edep(); float g4hitID = NAN; float gedep = NAN; float gx = NAN; float gy = NAN; float gz = NAN; float gt = NAN; float gtrackID = NAN; float gflavor = NAN; float gpx = NAN; float gpy = NAN; float gpz = NAN; float gvx = NAN; float gvy = NAN; float gvz = NAN; float gfpx = NAN; float gfpy = NAN; float gfpz = NAN; float gfx = NAN; float gfy = NAN; float gfz = NAN; float gembed = NAN; float gprimary = NAN; float efromtruth = NAN; if (g4hit) { g4hitID = g4hit->get_hit_id(); gedep = g4hit->get_edep(); gx = g4hit->get_avg_x(); gy = g4hit->get_avg_y(); gz = g4hit->get_avg_z(); gt = g4hit->get_avg_t(); if (g4particle) { if (_scan_for_embedded) { if (trutheval->get_embed(g4particle) == 0) continue; } gtrackID = g4particle->get_track_id(); gflavor = g4particle->get_pid(); gpx = g4particle->get_px(); gpy = g4particle->get_py(); gpz = g4particle->get_pz(); PHG4VtxPoint* vtx = trutheval->get_vertex(g4particle); if (vtx) { gvx = vtx->get_x(); gvy = vtx->get_y(); gvz = vtx->get_z(); } PHG4Hit* outerhit = trutheval->get_outermost_truth_hit(g4particle); if (outerhit) { gfpx = outerhit->get_px(1); gfpy = outerhit->get_py(1); gfpz = outerhit->get_pz(1); gfx = outerhit->get_x(1); gfy = outerhit->get_y(1); gfz = outerhit->get_z(1); } gembed = trutheval->get_embed(g4particle); gprimary = trutheval->is_primary(g4particle); } // if (g4particle){ } if (g4particle) { efromtruth = hiteval->get_energy_contribution(hit,g4particle); } float hit_data[33] = { event, hitID, e, adc, layer, cellID, ecell, g4hitID, gedep, gx, gy, gz, gt, gtrackID, gflavor, gpx, gpy, gpz, gvx, gvy, gvz, gfpx, gfpy, gfpz, gfx, gfy, gfz, gembed, gprimary, efromtruth }; _ntp_hit->Fill(hit_data); } } } //------------------------ // fill the Cluster NTuple //------------------------ //cout << "check for ntp_cluster" << endl; if (_ntp_cluster && !_scan_for_embedded) { //cout << "Filling ntp_cluster 1 " << endl; // need things off of the DST... SvtxClusterMap* clustermap = findNode::getClass<SvtxClusterMap>(topNode,"SvtxClusterMap"); if (clustermap) { for (SvtxClusterMap::Iter iter = clustermap->begin(); iter != clustermap->end(); ++iter) { SvtxCluster* cluster = iter->second; SvtxTrack* track = trackeval->best_track_from(cluster); PHG4Hit *g4hit = clustereval->max_truth_hit_by_energy(cluster); PHG4Particle *g4particle = trutheval->get_particle(g4hit); float hitID = cluster->get_id(); float x = cluster->get_x(); float y = cluster->get_y(); float z = cluster->get_z(); float ex = sqrt(cluster->get_error(0,0)); float ey = sqrt(cluster->get_error(1,1)); float ez = cluster->get_z_error(); float ephi = cluster->get_phi_error(); float e = cluster->get_e(); float adc = cluster->get_adc(); float layer = cluster->get_layer(); float size = cluster->size_hits(); float phisize = cluster->get_phi_size(); float zsize = cluster->get_z_size(); float trackID = NAN; if (track) trackID = track->get_id(); float g4hitID = NAN; float gx = NAN; float gy = NAN; float gz = NAN; float gt = NAN; float gtrackID = NAN; float gflavor = NAN; float gpx = NAN; float gpy = NAN; float gpz = NAN; float gvx = NAN; float gvy = NAN; float gvz = NAN; float gfpx = NAN; float gfpy = NAN; float gfpz = NAN; float gfx = NAN; float gfy = NAN; float gfz = NAN; float gembed = NAN; float gprimary = NAN; float efromtruth = NAN; if (g4hit) { g4hitID = g4hit->get_hit_id(); gx = g4hit->get_avg_x(); gy = g4hit->get_avg_y(); gz = g4hit->get_avg_z(); gt = g4hit->get_avg_t(); if (g4particle) { gtrackID = g4particle->get_track_id(); gflavor = g4particle->get_pid(); gpx = g4particle->get_px(); gpy = g4particle->get_py(); gpz = g4particle->get_pz(); PHG4VtxPoint* vtx = trutheval->get_vertex(g4particle); if (vtx) { gvx = vtx->get_x(); gvy = vtx->get_y(); gvz = vtx->get_z(); } PHG4Hit* outerhit = trutheval->get_outermost_truth_hit(g4particle); if (outerhit) { gfpx = outerhit->get_px(1); gfpy = outerhit->get_py(1); gfpz = outerhit->get_pz(1); gfx = outerhit->get_x(1); gfy = outerhit->get_y(1); gfz = outerhit->get_z(1); } gembed = trutheval->get_embed(g4particle); gprimary = trutheval->is_primary(g4particle); } // if (g4particle){ } // if (g4hit) { if (g4particle){ efromtruth = clustereval->get_energy_contribution(cluster,g4particle); } float cluster_data[38] = {(float) _ievent, hitID, x, y, z, ex, ey, ez, ephi, e, adc, layer, size, phisize, zsize, trackID, g4hitID, gx, gy, gz, gt, gtrackID, gflavor, gpx, gpy, gpz, gvx, gvy, gvz, gfpx, gfpy, gfpz, gfx, gfy, gfz, gembed, gprimary, efromtruth}; _ntp_cluster->Fill(cluster_data); } } } else if (_ntp_cluster && _scan_for_embedded) { //cout << "Filling ntp_cluster 2 " << endl; // if only scanning embedded signals, loop over all the tracks from // embedded particles and report all of their clusters, including those // from other sources (noise hits on the embedded track) // need things off of the DST... SvtxTrackMap* trackmap = findNode::getClass<SvtxTrackMap>(topNode,"SvtxTrackMap"); SvtxClusterMap* clustermap = findNode::getClass<SvtxClusterMap>(topNode,"SvtxClusterMap"); if (trackmap) { for (SvtxTrackMap::Iter iter = trackmap->begin(); iter != trackmap->end(); ++iter) { SvtxTrack* track = iter->second; PHG4Particle* truth = trackeval->max_truth_particle_by_nclusters(track); if (truth) { if (trutheval->get_embed(truth) == 0) continue; } for (SvtxTrack::ConstClusterIter iter = track->begin_clusters(); iter != track->end_clusters(); ++iter) { unsigned int cluster_id = *iter; SvtxCluster* cluster = clustermap->get(cluster_id); PHG4Hit *g4hit = clustereval->max_truth_hit_by_energy(cluster); PHG4Particle *g4particle = trutheval->get_particle(g4hit); float hitID = cluster->get_id(); float x = cluster->get_x(); float y = cluster->get_y(); float z = cluster->get_z(); float ex = sqrt(cluster->get_error(0,0)); float ey = sqrt(cluster->get_error(1,1)); float ez = cluster->get_z_error(); float ephi = cluster->get_phi_error(); float e = cluster->get_e(); float adc = cluster->get_adc(); float layer = cluster->get_layer(); float size = cluster->size_hits(); float phisize = cluster->get_phi_size(); float zsize = cluster->get_z_size(); float trackID = NAN; if (track) trackID = track->get_id(); float g4hitID = NAN; float gx = NAN; float gy = NAN; float gz = NAN; float gt = NAN; float gtrackID = NAN; float gflavor = NAN; float gpx = NAN; float gpy = NAN; float gpz = NAN; float gvx = NAN; float gvy = NAN; float gvz = NAN; float gfpx = NAN; float gfpy = NAN; float gfpz = NAN; float gfx = NAN; float gfy = NAN; float gfz = NAN; float gembed = NAN; float gprimary = NAN; float efromtruth = NAN; if (g4hit) { g4hitID = g4hit->get_hit_id(); gx = g4hit->get_avg_x(); gy = g4hit->get_avg_y(); gz = g4hit->get_avg_z(); gt = g4hit->get_avg_t(); if (g4particle) { gtrackID = g4particle->get_track_id(); gflavor = g4particle->get_pid(); gpx = g4particle->get_px(); gpy = g4particle->get_py(); gpz = g4particle->get_pz(); PHG4VtxPoint* vtx = trutheval->get_vertex(g4particle); if (vtx) { gvx = vtx->get_x(); gvy = vtx->get_y(); gvz = vtx->get_z(); } PHG4Hit* outerhit = trutheval->get_outermost_truth_hit(g4particle); if (outerhit) { gfpx = outerhit->get_px(1); gfpy = outerhit->get_py(1); gfpz = outerhit->get_pz(1); gfx = outerhit->get_x(1); gfy = outerhit->get_y(1); gfz = outerhit->get_z(1); } gembed = trutheval->get_embed(g4particle); gprimary = trutheval->is_primary(g4particle); } // if (g4particle){ } // if (g4hit) { if (g4particle){ efromtruth = clustereval->get_energy_contribution(cluster,g4particle); } float cluster_data[38] = {(float) _ievent, hitID, x, y, z, ex, ey, ez, ephi, e, adc, layer, size, phisize, zsize, trackID, g4hitID, gx, gy, gz, gt, gtrackID, gflavor, gpx, gpy, gpz, gvx, gvy, gvz, gfpx, gfpy, gfpz, gfx, gfy, gfz, gembed, gprimary, efromtruth}; _ntp_cluster->Fill(cluster_data); } } } } //------------------------ // fill the Gtrack NTuple //------------------------ // need things off of the DST... //cout << "check for ntp_gtrack" << endl; if (_ntp_gtrack) { //cout << "Filling ntp_gtrack " << endl; PHG4TruthInfoContainer* truthinfo = findNode::getClass<PHG4TruthInfoContainer>(topNode,"G4TruthInfo"); SvtxClusterMap* clustermap = findNode::getClass<SvtxClusterMap>(topNode,"SvtxClusterMap"); if (truthinfo) { PHG4TruthInfoContainer::ConstRange range = truthinfo->GetPrimaryParticleRange(); for (PHG4TruthInfoContainer::ConstIterator iter = range.first; iter != range.second; ++iter) { PHG4Particle* g4particle = iter->second; if (_scan_for_embedded) { if (trutheval->get_embed(g4particle) == 0) continue; } float gtrackID = g4particle->get_track_id(); float gflavor = g4particle->get_pid(); std::set<PHG4Hit*> g4hits = trutheval->all_truth_hits(g4particle); float ng4hits = g4hits.size(); float gpx = g4particle->get_px(); float gpy = g4particle->get_py(); float gpz = g4particle->get_pz(); PHG4VtxPoint* vtx = trutheval->get_vertex(g4particle); float gvx = vtx->get_x(); float gvy = vtx->get_y(); float gvz = vtx->get_z(); float gvt = vtx->get_t(); float gfpx = 0.; float gfpy = 0.; float gfpz = 0.; float gfx = 0.; float gfy = 0.; float gfz = 0.; PHG4Hit* outerhit = trutheval->get_outermost_truth_hit(g4particle); if (outerhit) { gfpx = outerhit->get_px(1); gfpy = outerhit->get_py(1); gfpz = outerhit->get_pz(1); gfx = outerhit->get_x(1); gfy = outerhit->get_y(1); gfz = outerhit->get_z(1); } float gembed = trutheval->get_embed(g4particle); float gprimary = trutheval->is_primary(g4particle); SvtxTrack* track = trackeval->best_track_from(g4particle); float trackID = NAN; float charge = NAN; float quality = NAN; float chisq = NAN; float ndf = NAN; float nhits = NAN; unsigned int layers = 0x0; float dca2d = NAN; float dca2dsigma = NAN; float px = NAN; float py = NAN; float pz = NAN; float pcax = NAN; float pcay = NAN; float pcaz = NAN; float nfromtruth = NAN; float layersfromtruth = NAN; if (track) { trackID = track->get_id(); charge = track->get_charge(); quality = track->get_quality(); chisq = track->get_chisq(); ndf = track->get_ndf(); nhits = track->size_clusters(); for (SvtxTrack::ConstClusterIter iter = track->begin_clusters(); iter != track->end_clusters(); ++iter) { unsigned int cluster_id = *iter; SvtxCluster* cluster = clustermap->get(cluster_id); unsigned int layer = cluster->get_layer(); if (layer < 32) layers |= (0x1 << layer); } dca2d = track->get_dca2d(); dca2dsigma = track->get_dca2d_error(); px = track->get_px(); py = track->get_py(); pz = track->get_pz(); pcax = track->get_x(); pcay = track->get_y(); pcaz = track->get_z(); nfromtruth = trackeval->get_nclusters_contribution(track,g4particle); layersfromtruth = trackeval->get_nclusters_contribution_by_layer(track,g4particle); } float gtrack_data[36] = {(float) _ievent, gtrackID, gflavor, ng4hits, gpx, gpy, gpz, gvx, gvy, gvz, gvt, gfpx, gfpy, gfpz, gfx, gfy, gfz, gembed, gprimary, trackID, px, py, pz, charge, quality, chisq, ndf, nhits, (float) layers, dca2d, dca2dsigma, pcax, pcay, pcaz, nfromtruth, layersfromtruth }; /* cout << " ievent " << _ievent << " gtrackID " << gtrackID << " gflavor " << gflavor << " ng4hits " << ng4hits << endl; */ _ntp_gtrack->Fill(gtrack_data); } } } //------------------------ // fill the Track NTuple //------------------------ if (_ntp_track) { //cout << "Filling ntp_track " << endl; // need things off of the DST... SvtxTrackMap* trackmap = findNode::getClass<SvtxTrackMap>(topNode,"SvtxTrackMap"); SvtxClusterMap* clustermap = findNode::getClass<SvtxClusterMap>(topNode,"SvtxClusterMap"); if (trackmap) { for (SvtxTrackMap::Iter iter = trackmap->begin(); iter != trackmap->end(); ++iter) { SvtxTrack* track = iter->second; float trackID = track->get_id(); float charge = track->get_charge(); float quality = track->get_quality(); float chisq = track->get_chisq(); float ndf = track->get_ndf(); float nhits = track->size_clusters(); unsigned int layers = 0x0; for (SvtxTrack::ConstClusterIter iter = track->begin_clusters(); iter != track->end_clusters(); ++iter) { unsigned int cluster_id = *iter; SvtxCluster* cluster = clustermap->get(cluster_id); unsigned int layer = cluster->get_layer(); if (layer < 31) layers |= (0x1 << layer); } float dca2d = track->get_dca2d(); float dca2dsigma = track->get_dca2d_error(); float px = track->get_px(); float py = track->get_py(); float pz = track->get_pz(); float pcax = track->get_x(); float pcay = track->get_y(); float pcaz = track->get_z(); float presdphi = track->get_cal_dphi(SvtxTrack::PRES); float presdeta = track->get_cal_deta(SvtxTrack::PRES); float prese3x3 = track->get_cal_energy_3x3(SvtxTrack::PRES); float prese = track->get_cal_cluster_e(SvtxTrack::PRES); float cemcdphi = track->get_cal_dphi(SvtxTrack::CEMC); float cemcdeta = track->get_cal_deta(SvtxTrack::CEMC); float cemce3x3 = track->get_cal_energy_3x3(SvtxTrack::CEMC); float cemce = track->get_cal_cluster_e(SvtxTrack::CEMC); float hcalindphi = track->get_cal_dphi(SvtxTrack::HCALIN); float hcalindeta = track->get_cal_deta(SvtxTrack::HCALIN); float hcaline3x3 = track->get_cal_energy_3x3(SvtxTrack::HCALIN); float hcaline = track->get_cal_cluster_e(SvtxTrack::HCALIN); float hcaloutdphi = track->get_cal_dphi(SvtxTrack::HCALOUT); float hcaloutdeta = track->get_cal_deta(SvtxTrack::HCALOUT); float hcaloute3x3 = track->get_cal_energy_3x3(SvtxTrack::HCALOUT); float hcaloute = track->get_cal_cluster_e(SvtxTrack::HCALOUT); float gtrackID = NAN; float gflavor = NAN; float ng4hits = NAN; float gpx = NAN; float gpy = NAN; float gpz = NAN; float gvx = NAN; float gvy = NAN; float gvz = NAN; float gvt = NAN; float gfpx = NAN; float gfpy = NAN; float gfpz = NAN; float gfx = NAN; float gfy = NAN; float gfz = NAN; float gembed = NAN; float gprimary = NAN; float nfromtruth = NAN; float layersfromtruth = NAN; PHG4Particle* g4particle = trackeval->max_truth_particle_by_nclusters(track); if (g4particle) { if (_scan_for_embedded) { if (trutheval->get_embed(g4particle) == 0) continue; } gtrackID = g4particle->get_track_id(); gflavor = g4particle->get_pid(); std::set<PHG4Hit*> g4hits = trutheval->all_truth_hits(g4particle); ng4hits = g4hits.size(); gpx = g4particle->get_px(); gpy = g4particle->get_py(); gpz = g4particle->get_pz(); PHG4VtxPoint* vtx = trutheval->get_vertex(g4particle); gvx = vtx->get_x(); gvy = vtx->get_y(); gvz = vtx->get_z(); gvt = vtx->get_t(); PHG4Hit* outerhit = trutheval->get_outermost_truth_hit(g4particle); if (outerhit) { gfpx = outerhit->get_px(1); gfpy = outerhit->get_py(1); gfpz = outerhit->get_pz(1); gfx = outerhit->get_x(1); gfy = outerhit->get_y(1); gfz = outerhit->get_z(1); } gembed = trutheval->get_embed(g4particle); gprimary = trutheval->is_primary(g4particle); nfromtruth = trackeval->get_nclusters_contribution(track,g4particle); layersfromtruth = trackeval->get_nclusters_contribution_by_layer(track,g4particle); } float track_data[52] = {(float) _ievent, trackID, px, py, pz, charge, quality, chisq, ndf, nhits, (float) layers, dca2d, dca2dsigma, pcax, pcay, pcaz, presdphi, presdeta, prese3x3, prese, cemcdphi, cemcdeta, cemce3x3, cemce, hcalindphi, hcalindeta, hcaline3x3, hcaline, hcaloutdphi, hcaloutdeta, hcaloute3x3, hcaloute, gtrackID, gflavor, ng4hits, gpx, gpy, gpz, gvx, gvy, gvz, gvt, gfpx, gfpy, gfpz, gfx, gfy, gfz, gembed, gprimary, nfromtruth, layersfromtruth }; /* cout << "ievent " << _ievent << " trackID " << trackID << " nhits " << nhits << " px " << px << " py " << py << " pz " << pz << " gembed " << gembed << " gprimary " << gprimary << endl; */ _ntp_track->Fill(track_data); } } } return; }
int PhotonJet::process_event(PHCompositeNode *topnode) { cout<<"at event number "<<nevents<<endl; //get the nodes from the NodeTree JetMap* truth_jets = findNode::getClass<JetMap>(topnode,"AntiKt_Truth_r04"); JetMap *reco_jets = findNode::getClass<JetMap>(topnode,"AntiKt_Tower_r04"); PHG4TruthInfoContainer* truthinfo = findNode::getClass<PHG4TruthInfoContainer>(topnode,"G4TruthInfo"); RawClusterContainer *clusters = findNode::getClass<RawClusterContainer>(topnode,"CLUSTER_CEMC"); SvtxTrackMap *trackmap = findNode::getClass<SvtxTrackMap>(topnode,"SvtxTrackMap"); JetEvalStack* _jetevalstack = new JetEvalStack(topnode,"AntiKt_Tower_r04","AntiKt_Truth_r04"); PHG4TruthInfoContainer::Range range = truthinfo->GetPrimaryParticleRange(); if(!truth_jets){ cout<<"no truth jets"<<endl; return 0; } if(!reco_jets){ cout<<"no reco jets"<<endl; return 0; } if(!truthinfo){ cout<<"no truth track info"<<endl; return 0; } if(!clusters){ cout<<"no cluster info"<<endl; return 0; } if(!trackmap){ cout<<"no track map"<<endl; return 0; } if(!_jetevalstack){ cout<<"no good truth jets"<<endl; return 0; } JetRecoEval* recoeval = _jetevalstack->get_reco_eval(); /*********************************************** GET THE TRUTH PARTICLES ************************************************/ for( PHG4TruthInfoContainer::ConstIterator iter = range.first; iter!=range.second; ++iter){ PHG4Particle *truth = iter->second; truthpx = truth->get_px(); truthpy = truth->get_py(); truthpz = truth->get_pz(); truthp = sqrt(truthpx*truthpx+truthpy*truthpy+truthpz*truthpz); truthenergy = truth->get_e(); TLorentzVector vec; vec.SetPxPyPzE(truthpx,truthpy,truthpz,truthenergy); truthpt = sqrt(truthpx*truthpx+truthpy*truthpy); if(truthpt<0.5) continue; truthphi = vec.Phi(); trutheta = vec.Eta(); truthpid = truth->get_pid(); truth_g4particles->Fill(); } /*********************************************** GET THE EMCAL CLUSTERS ************************************************/ RawClusterContainer::ConstRange begin_end = clusters->getClusters(); RawClusterContainer::ConstIterator clusiter; for(clusiter = begin_end.first; clusiter!=begin_end.second; ++clusiter){ RawCluster *cluster = clusiter->second; clus_energy = cluster->get_energy(); clus_eta = cluster->get_eta(); clus_theta = 2.*TMath::ATan((TMath::Exp(-1.*clus_eta))); clus_pt = clus_energy*TMath::Sin(clus_theta); clus_phi = cluster->get_phi(); if(clus_pt<0.5) continue; TLorentzVector *clus = new TLorentzVector(); clus->SetPtEtaPhiE(clus_pt,clus_eta,clus_phi,clus_energy); float dumarray[4]; clus->GetXYZT(dumarray); clus_x = dumarray[0]; clus_y = dumarray[1]; clus_z = dumarray[2]; clus_t = dumarray[3]; clus_px = clus_pt*TMath::Cos(clus_phi); clus_py = clus_pt*TMath::Sin(clus_phi); clus_pz = sqrt(clus_energy*clus_energy-clus_px*clus_px-clus_py*clus_py); cluster_tree->Fill(); //only interested in high pt photons to be isolated if(clus_pt<mincluspt) continue; if(fabs(clus_eta)>(1.0-isoconeradius)) continue; float energysum = ConeSum(cluster,clusters,trackmap,isoconeradius); bool conecut = energysum > 0.1*clus_energy; if(conecut) continue; isolated_clusters->Fill(); GetRecoHadronsAndJets(cluster, trackmap, reco_jets,recoeval); } /*********************************************** GET THE SVTX TRACKS ************************************************/ SvtxEvalStack *svtxevalstack = new SvtxEvalStack(topnode); svtxevalstack->next_event(topnode); SvtxTrackEval *trackeval = svtxevalstack->get_track_eval(); for(SvtxTrackMap::Iter iter = trackmap->begin(); iter!=trackmap->end(); ++iter){ SvtxTrack *track = iter->second; //get reco info tr_px = track->get_px(); tr_py = track->get_py(); tr_pz = track->get_pz(); tr_p = sqrt(tr_px*tr_px+tr_py*tr_py+tr_pz*tr_pz); tr_pt = sqrt(tr_px*tr_px+tr_py*tr_py); if(tr_pt<0.5) continue; tr_phi = track->get_phi(); tr_eta = track->get_eta(); if(fabs(tr_eta)>1) continue; charge = track->get_charge(); chisq = track->get_chisq(); ndf = track->get_ndf(); dca = track->get_dca(); tr_x = track->get_x(); tr_y = track->get_y(); tr_z = track->get_z(); //get truth info PHG4Particle *truthtrack = trackeval->max_truth_particle_by_nclusters(track); truth_is_primary = truthinfo->is_primary(truthtrack); truthtrackpx = truthtrack->get_px(); truthtrackpy = truthtrack->get_py(); truthtrackpz = truthtrack->get_pz(); truthtrackp = sqrt(truthtrackpx*truthtrackpx+truthtrackpy*truthtrackpy+truthtrackpz*truthtrackpz); truthtracke = truthtrack->get_e(); TLorentzVector *Truthtrack = new TLorentzVector(); Truthtrack->SetPxPyPzE(truthtrackpx,truthtrackpy,truthtrackpz,truthtracke); truthtrackpt = Truthtrack->Pt(); truthtrackphi = Truthtrack->Phi(); truthtracketa = Truthtrack->Eta(); truthtrackpid = truthtrack->get_pid(); tracktree->Fill(); } /*************************************** TRUTH JETS ***************************************/ for(JetMap::Iter iter = truth_jets->begin(); iter!=truth_jets->end(); ++iter){ Jet *jet = iter->second; truthjetpt = jet->get_pt(); if(truthjetpt<10.) continue; truthjeteta = jet->get_eta(); if(fabs(truthjeteta)>2.) continue; truthjetpx = jet->get_px(); truthjetpy = jet->get_py(); truthjetpz = jet->get_pz(); truthjetphi = jet->get_phi(); truthjetmass = jet->get_mass(); truthjetp = jet->get_p(); truthjetenergy = jet->get_e(); truthjettree->Fill(); } /*************************************** RECONSTRUCTED JETS ***************************************/ for(JetMap::Iter iter = reco_jets->begin(); iter!=reco_jets->end(); ++iter){ Jet *jet = iter->second; Jet *truthjet = recoeval->max_truth_jet_by_energy(jet); recojetpt = jet->get_pt(); if(recojetpt<4.) continue; recojeteta = jet->get_eta(); if(fabs(recojeteta)>2.) continue; recojetid = jet->get_id(); recojetpx = jet->get_px(); recojetpy = jet->get_py(); recojetpz = jet->get_pz(); recojetphi = jet->get_phi(); recojetmass = jet->get_mass(); recojetp = jet->get_p(); recojetenergy = jet->get_e(); if(truthjet){ truthjetid = truthjet->get_id(); truthjetp = truthjet->get_p(); truthjetphi = truthjet->get_phi(); truthjeteta = truthjet->get_eta(); truthjetpt = truthjet->get_pt(); truthjetenergy = truthjet->get_e(); truthjetpx = truthjet->get_px(); truthjetpy = truthjet->get_py(); truthjetpz = truthjet->get_pz(); } else{ truthjetid = 0; truthjetp = 0; truthjetphi = 0; truthjeteta = 0; truthjetpt = 0; truthjetenergy = 0; truthjetpx = 0; truthjetpy = 0; truthjetpz = 0; } recojettree->Fill(); } nevents++; tree->Fill(); return 0; }
void SvtxEvaluator::fillOutputNtuples(PHCompositeNode *topNode) { if (verbosity > 1) cout << "SvtxEvaluator::fillOutputNtuples() entered" << endl; SvtxVertexEval* vertexeval = _svtxevalstack->get_vertex_eval(); SvtxTrackEval* trackeval = _svtxevalstack->get_track_eval(); SvtxClusterEval* clustereval = _svtxevalstack->get_cluster_eval(); SvtxHitEval* hiteval = _svtxevalstack->get_hit_eval(); SvtxTruthEval* trutheval = _svtxevalstack->get_truth_eval(); //----------------------- // fill the Vertex NTuple //----------------------- if (_ntp_vertex) { SvtxVertexMap* vertexmap = findNode::getClass<SvtxVertexMap>(topNode,"SvtxVertexMap"); PHG4TruthInfoContainer* truthinfo = findNode::getClass<PHG4TruthInfoContainer>(topNode,"G4TruthInfo"); if (vertexmap && truthinfo) { for (SvtxVertexMap::Iter iter = vertexmap->begin(); iter != vertexmap->end(); ++iter) { SvtxVertex* vertex = iter->second; PHG4VtxPoint* point = vertexeval->max_truth_point_by_ntracks(vertex); float vx = vertex->get_x(); float vy = vertex->get_y(); float vz = vertex->get_z(); float ntracks = vertex->size_tracks(); float gvx = NAN; float gvy = NAN; float gvz = NAN; float gntracks = truthinfo->GetNumPrimaryVertexParticles(); float nfromtruth = NAN; if (point) { gvx = point->get_x(); gvy = point->get_y(); gvz = point->get_z(); gntracks = truthinfo->GetNumPrimaryVertexParticles(); nfromtruth = vertexeval->get_ntracks_contribution(vertex,point); } float vertex_data[10] = {_ievent, vx, vy, vz, ntracks, gvx, gvy, gvz, gntracks, nfromtruth }; _ntp_vertex->Fill(vertex_data); } } } //----------------------- // fill the gpoint NTuple //----------------------- if (_ntp_gpoint) { SvtxVertexMap* vertexmap = findNode::getClass<SvtxVertexMap>(topNode,"SvtxVertexMap"); PHG4TruthInfoContainer* truthinfo = findNode::getClass<PHG4TruthInfoContainer>(topNode,"G4TruthInfo"); if (vertexmap && truthinfo) { PHG4VtxPoint* point = truthinfo->GetPrimaryVtx(truthinfo->GetPrimaryVertexIndex()); SvtxVertex* vertex = vertexeval->best_vertex_from(point); float gvx = point->get_x(); float gvy = point->get_y(); float gvz = point->get_z(); float gntracks = truthinfo->GetNumPrimaryVertexParticles(); float vx = NAN; float vy = NAN; float vz = NAN; float ntracks = NAN; float nfromtruth = NAN; if (vertex) { vx = vertex->get_x(); vy = vertex->get_y(); vz = vertex->get_z(); ntracks = vertex->size_tracks(); nfromtruth = vertexeval->get_ntracks_contribution(vertex,point); } float gpoint_data[10] = {_ievent, gvx, gvy, gvz, gntracks, vx, vy, vz, ntracks, nfromtruth }; _ntp_gpoint->Fill(gpoint_data); } } //--------------------- // fill the G4hit NTuple //--------------------- if (_ntp_g4hit) { std::set<PHG4Hit*> g4hits = trutheval->all_truth_hits(); for (std::set<PHG4Hit*>::iterator iter = g4hits.begin(); iter != g4hits.end(); ++iter) { PHG4Hit *g4hit = *iter; PHG4Particle *g4particle = trutheval->get_particle(g4hit); float g4hitID = g4hit->get_hit_id(); float gx = 0.5*(g4hit->get_x(0)+g4hit->get_x(1)); float gy = 0.5*(g4hit->get_y(0)+g4hit->get_y(1)); float gz = 0.5*(g4hit->get_z(0)+g4hit->get_z(1)); float gedep = g4hit->get_edep(); float glayer = g4hit->get_layer(); float gtrackID = g4hit->get_trkid(); float gflavor = NAN; float gpx = NAN; float gpy = NAN; float gpz = NAN; float gvx = NAN; float gvy = NAN; float gvz = NAN; float gembed = NAN; float gprimary = NAN; float gfpx = NULL; float gfpy = NULL; float gfpz = NULL; float gfx = NULL; float gfy = NULL; float gfz = NULL; if (g4particle) { gflavor = g4particle->get_pid(); gpx = g4particle->get_px(); gpy = g4particle->get_py(); gpz = g4particle->get_pz(); PHG4VtxPoint* vtx = trutheval->get_vertex(g4particle); if (vtx) { gvx = vtx->get_x(); gvy = vtx->get_y(); gvz = vtx->get_z(); } PHG4Hit* outerhit = trutheval->get_outermost_truth_hit(g4particle); if (outerhit) { gfpx = outerhit->get_px(1); gfpy = outerhit->get_py(1); gfpz = outerhit->get_pz(1); gfx = outerhit->get_x(1); gfy = outerhit->get_y(1); gfz = outerhit->get_z(1); } gembed = trutheval->get_embed(g4particle); gprimary = trutheval->is_primary(g4particle); } // if (g4particle) std::set<SvtxCluster*> clusters = clustereval->all_clusters_from(g4hit); float nclusters = clusters.size(); // best cluster reco'd SvtxCluster* cluster = clustereval->best_cluster_from(g4hit); float clusID = NAN; float x = NAN; float y = NAN; float z = NAN; float e = NAN; float adc = NAN; float layer = NAN; float size = NAN; float phisize = NAN; float zsize = NAN; float efromtruth = NAN; if (cluster) { clusID = cluster->get_id(); x = cluster->get_x(); y = cluster->get_y(); z = cluster->get_z(); e = cluster->get_e(); adc = cluster->get_adc(); layer = cluster->get_layer(); size = cluster->size_hits(); phisize = cluster->get_phi_size(); zsize = cluster->get_z_size(); if (g4particle) { efromtruth = clustereval->get_energy_contribution(cluster,g4particle); } } float g4hit_data[35] = {_ievent, g4hitID, gx, gy, gz, gedep, glayer, gtrackID, gflavor, gpx, gpy, gpz, gvx, gvy, gvz, gfpx, gfpy, gfpz, gfx, gfy, gfz, gembed, gprimary, nclusters, clusID, x, y, z, e, adc, layer, size, phisize, zsize, efromtruth }; _ntp_g4hit->Fill(g4hit_data); } } //-------------------- // fill the Hit NTuple //-------------------- if (_ntp_hit) { // need things off of the DST... SvtxHitMap* hitmap = findNode::getClass<SvtxHitMap>(topNode,"SvtxHitMap"); if (hitmap) { for (SvtxHitMap::Iter iter = hitmap->begin(); iter != hitmap->end(); ++iter) { SvtxHit* hit = iter->second; PHG4Hit* g4hit = hiteval->max_truth_hit_by_energy(hit); PHG4CylinderCell* g4cell = hiteval->get_cell(hit); PHG4Particle* g4particle = trutheval->get_particle(g4hit); float event = _ievent; float hitID = hit->get_id(); float e = hit->get_e(); float adc = hit->get_adc(); float layer = hit->get_layer(); float cellID = hit->get_cellid(); float ecell = g4cell->get_edep(); float g4hitID = NAN; float gedep = NAN; float gx = NAN; float gy = NAN; float gz = NAN; float gtrackID = NAN; float gflavor = NAN; float gpx = NAN; float gpy = NAN; float gpz = NAN; float gvx = NAN; float gvy = NAN; float gvz = NAN; float gfpx = NAN; float gfpy = NAN; float gfpz = NAN; float gfx = NAN; float gfy = NAN; float gfz = NAN; float glast = NAN; float gembed = NAN; float gprimary = NAN; float efromtruth = NAN; if (g4hit) { g4hitID = g4hit->get_hit_id(); gedep = g4hit->get_edep(); gx = 0.5*(g4hit->get_x(0)+g4hit->get_x(1)); gy = 0.5*(g4hit->get_y(0)+g4hit->get_y(1)); gz = 0.5*(g4hit->get_z(0)+g4hit->get_z(1)); gx = g4hit->get_x(0); gy = g4hit->get_y(0); gz = g4hit->get_z(0); if (g4particle) { gtrackID = g4particle->get_track_id(); gflavor = g4particle->get_pid(); gpx = g4particle->get_px(); gpy = g4particle->get_py(); gpz = g4particle->get_pz(); PHG4VtxPoint* vtx = trutheval->get_vertex(g4particle); if (vtx) { gvx = vtx->get_x(); gvy = vtx->get_y(); gvz = vtx->get_z(); } PHG4Hit* outerhit = trutheval->get_outermost_truth_hit(g4particle); if (outerhit) { gfpx = outerhit->get_px(1); gfpy = outerhit->get_py(1); gfpz = outerhit->get_pz(1); gfx = outerhit->get_x(1); gfy = outerhit->get_y(1); gfz = outerhit->get_z(1); } glast = NAN; gembed = trutheval->get_embed(g4particle); gprimary = trutheval->is_primary(g4particle); } // if (g4particle){ } if (g4particle) { efromtruth = hiteval->get_energy_contribution(hit,g4particle); } float hit_data[32] = { event, hitID, e, adc, layer, cellID, ecell, g4hitID, gedep, gx, gy, gz, gtrackID, gflavor, gpx, gpy, gpz, gvx, gvy, gvz, gfpx, gfpy, gfpz, gfx, gfy, gfz, gembed, gprimary, efromtruth }; _ntp_hit->Fill(hit_data); } } } //------------------------ // fill the Cluster NTuple //------------------------ if (_ntp_cluster) { // need things off of the DST... SvtxClusterMap* clustermap = findNode::getClass<SvtxClusterMap>(topNode,"SvtxClusterMap"); if (clustermap) { for (SvtxClusterMap::Iter iter = clustermap->begin(); iter != clustermap->end(); ++iter) { SvtxCluster* cluster = iter->second; PHG4Hit *g4hit = clustereval->max_truth_hit_by_energy(cluster); PHG4Particle *g4particle = trutheval->get_particle(g4hit); float hitID = cluster->get_id(); float x = cluster->get_x(); float y = cluster->get_y(); float z = cluster->get_z(); float e = cluster->get_e(); float adc = cluster->get_adc(); float layer = cluster->get_layer(); float size = cluster->size_hits(); float phisize = cluster->get_phi_size(); float zsize = cluster->get_z_size(); float g4hitID = NAN; float gx = NAN; float gy = NAN; float gz = NAN; float gtrackID = NAN; float gflavor = NAN; float gpx = NAN; float gpy = NAN; float gpz = NAN; float gvx = NAN; float gvy = NAN; float gvz = NAN; float gfpx = NAN; float gfpy = NAN; float gfpz = NAN; float gfx = NAN; float gfy = NAN; float gfz = NAN; float glast = NAN; float gembed = NAN; float gprimary = NAN; float nhits = NAN; float efromtruth = NAN; if (g4hit) { g4hitID = g4hit->get_hit_id(); gx = 0.5*(g4hit->get_x(0)+g4hit->get_x(1)); gy = 0.5*(g4hit->get_y(0)+g4hit->get_y(1)); gz = 0.5*(g4hit->get_z(0)+g4hit->get_z(1)); gx = g4hit->get_x(0); gy = g4hit->get_y(0); gz = g4hit->get_z(0); if (g4particle) { gtrackID = g4particle->get_track_id(); gflavor = g4particle->get_pid(); gpx = g4particle->get_px(); gpy = g4particle->get_py(); gpz = g4particle->get_pz(); PHG4VtxPoint* vtx = trutheval->get_vertex(g4particle); if (vtx) { gvx = vtx->get_x(); gvy = vtx->get_y(); gvz = vtx->get_z(); } PHG4Hit* outerhit = trutheval->get_outermost_truth_hit(g4particle); if (outerhit) { gfpx = outerhit->get_px(1); gfpy = outerhit->get_py(1); gfpz = outerhit->get_pz(1); gfx = outerhit->get_x(1); gfy = outerhit->get_y(1); gfz = outerhit->get_z(1); } glast = NAN; gembed = trutheval->get_embed(g4particle); gprimary = trutheval->is_primary(g4particle); } // if (g4particle){ } // if (g4hit) { if (g4particle){ efromtruth = clustereval->get_energy_contribution(cluster,g4particle); } float cluster_data[33] = {_ievent, hitID, x, y, z, e, adc, layer, size, phisize, zsize, g4hitID, gx, gy, gz, gtrackID, gflavor, gpx, gpy, gpz, gvx, gvy, gvz, gfpx, gfpy, gfpz, gfx, gfy, gfz, gembed, gprimary, nhits, efromtruth}; _ntp_cluster->Fill(cluster_data); } } } //------------------------ // fill the Gtrack NTuple //------------------------ // need things off of the DST... if (_ntp_gtrack) { PHG4TruthInfoContainer* truthinfo = findNode::getClass<PHG4TruthInfoContainer>(topNode,"G4TruthInfo"); SvtxClusterMap* clustermap = findNode::getClass<SvtxClusterMap>(topNode,"SvtxClusterMap"); if (truthinfo) { PHG4TruthInfoContainer::ConstRange range = truthinfo->GetPrimaryParticleRange(); for (PHG4TruthInfoContainer::ConstIterator iter = range.first; iter != range.second; ++iter) { PHG4Particle* g4particle = iter->second; float gtrackID = g4particle->get_track_id(); float gflavor = g4particle->get_pid(); std::set<PHG4Hit*> g4hits = trutheval->all_truth_hits(g4particle); float ng4hits = g4hits.size(); float gpx = g4particle->get_px(); float gpy = g4particle->get_py(); float gpz = g4particle->get_pz(); PHG4VtxPoint* vtx = trutheval->get_vertex(g4particle); float gvx = vtx->get_x(); float gvy = vtx->get_y(); float gvz = vtx->get_z(); float gfpx = NULL; float gfpy = NULL; float gfpz = NULL; float gfx = NULL; float gfy = NULL; float gfz = NULL; PHG4Hit* outerhit = trutheval->get_outermost_truth_hit(g4particle); if (outerhit) { gfpx = outerhit->get_px(1); gfpy = outerhit->get_py(1); gfpz = outerhit->get_pz(1); gfx = outerhit->get_x(1); gfy = outerhit->get_y(1); gfz = outerhit->get_z(1); } float gembed = trutheval->get_embed(g4particle); float gprimary = trutheval->is_primary(g4particle); SvtxTrack* track = trackeval->best_track_from(g4particle); float trackID = NAN; float charge = NAN; float quality = NAN; float chisq = NAN; float ndf = NAN; float nhits = NAN; unsigned int layers = 0x0; float dca = NAN; float dca2d = NAN; float dca2dsigma = NAN; float px = NAN; float py = NAN; float pz = NAN; float pcax = NAN; float pcay = NAN; float pcaz = NAN; float nfromtruth = NAN; if (track) { trackID = track->get_id(); charge = track->get_charge(); quality = track->get_quality(); chisq = track->get_chisq(); ndf = track->get_ndf(); nhits = track->size_clusters(); for (SvtxTrack::ConstClusterIter iter = track->begin_clusters(); iter != track->end_clusters(); ++iter) { unsigned int cluster_id = *iter; SvtxCluster* cluster = clustermap->get(cluster_id); unsigned int layer = cluster->get_layer(); if (layer < 32) layers |= (0x1 << layer); } dca = track->get_dca(); dca2d = track->get_dca2d(); dca2dsigma = track->get_dca2d_error(); px = track->get_px(); py = track->get_py(); pz = track->get_pz(); pcax = track->get_x(); pcay = track->get_y(); pcaz = track->get_z(); nfromtruth = trackeval->get_nclusters_contribution(track,g4particle); } float gtrack_data[34] = {_ievent, gtrackID, gflavor, ng4hits, gpx, gpy, gpz, gvx, gvy, gvz, gfpx, gfpy, gfpz, gfx, gfy, gfz, gembed, gprimary, trackID, px, py, pz, charge, quality, chisq, ndf, nhits, layers, dca2d, dca2dsigma, pcax, pcay, pcaz, nfromtruth }; _ntp_gtrack->Fill(gtrack_data); } } } //------------------------ // fill the Track NTuple //------------------------ if (_ntp_track) { // need things off of the DST... SvtxTrackMap* trackmap = findNode::getClass<SvtxTrackMap>(topNode,"SvtxTrackMap"); SvtxClusterMap* clustermap = findNode::getClass<SvtxClusterMap>(topNode,"SvtxClusterMap"); if (trackmap) { for (SvtxTrackMap::Iter iter = trackmap->begin(); iter != trackmap->end(); ++iter) { SvtxTrack* track = iter->second; float trackID = track->get_id(); float charge = track->get_charge(); float quality = track->get_quality(); float chisq = track->get_chisq(); float ndf = track->get_ndf(); float nhits = track->size_clusters(); unsigned int layers = 0x0; for (SvtxTrack::ConstClusterIter iter = track->begin_clusters(); iter != track->end_clusters(); ++iter) { unsigned int cluster_id = *iter; SvtxCluster* cluster = clustermap->get(cluster_id); unsigned int layer = cluster->get_layer(); if (layer < 32) layers |= (0x1 << layer); } float dca2d = track->get_dca2d(); float dca2dsigma = track->get_dca2d_error(); float px = track->get_px(); float py = track->get_py(); float pz = track->get_pz(); float pcax = track->get_x(); float pcay = track->get_y(); float pcaz = track->get_z(); float presdphi = track->get_cal_dphi(SvtxTrack::PRES); float presdeta = track->get_cal_deta(SvtxTrack::PRES); float prese3x3 = track->get_cal_energy_3x3(SvtxTrack::PRES); float prese = track->get_cal_cluster_e(SvtxTrack::PRES); float cemcdphi = track->get_cal_dphi(SvtxTrack::CEMC); float cemcdeta = track->get_cal_deta(SvtxTrack::CEMC); float cemce3x3 = track->get_cal_energy_3x3(SvtxTrack::CEMC); float cemce = track->get_cal_cluster_e(SvtxTrack::CEMC); float hcalindphi = track->get_cal_dphi(SvtxTrack::HCALIN); float hcalindeta = track->get_cal_deta(SvtxTrack::HCALIN); float hcaline3x3 = track->get_cal_energy_3x3(SvtxTrack::HCALIN); float hcaline = track->get_cal_cluster_e(SvtxTrack::HCALIN); float hcaloutdphi = track->get_cal_dphi(SvtxTrack::HCALOUT); float hcaloutdeta = track->get_cal_deta(SvtxTrack::HCALOUT); float hcaloute3x3 = track->get_cal_energy_3x3(SvtxTrack::HCALOUT); float hcaloute = track->get_cal_cluster_e(SvtxTrack::HCALOUT); float gtrackID = NAN; float gflavor = NAN; float ng4hits = NAN; float gpx = NAN; float gpy = NAN; float gpz = NAN; float gvx = NAN; float gvy = NAN; float gvz = NAN; float gfpx = NAN; float gfpy = NAN; float gfpz = NAN; float gfx = NAN; float gfy = NAN; float gfz = NAN; float gembed = NAN; float gprimary = NAN; float nfromtruth = NAN; PHG4Particle* g4particle = trackeval->max_truth_particle_by_nclusters(track); if (g4particle) { gtrackID = g4particle->get_track_id(); gflavor = g4particle->get_pid(); std::set<PHG4Hit*> g4hits = trutheval->all_truth_hits(g4particle); ng4hits = g4hits.size(); gpx = g4particle->get_px(); gpy = g4particle->get_py(); gpz = g4particle->get_pz(); PHG4VtxPoint* vtx = trutheval->get_vertex(g4particle); gvx = vtx->get_x(); gvy = vtx->get_y(); gvz = vtx->get_z(); PHG4Hit* outerhit = trutheval->get_outermost_truth_hit(g4particle); if (outerhit) { gfpx = outerhit->get_px(1); gfpy = outerhit->get_py(1); gfpz = outerhit->get_pz(1); gfx = outerhit->get_x(1); gfy = outerhit->get_y(1); gfz = outerhit->get_z(1); } gembed = trutheval->get_embed(g4particle); gprimary = trutheval->is_primary(g4particle); nfromtruth = trackeval->get_nclusters_contribution(track,g4particle); } float track_data[50] = {_ievent, trackID, px, py, pz, charge, quality, chisq, ndf, nhits, layers, dca2d, dca2dsigma, pcax, pcay, pcaz, presdphi, presdeta, prese3x3, prese, cemcdphi, cemcdeta, cemce3x3, cemce, hcalindphi, hcalindeta, hcaline3x3, hcaline, hcaloutdphi, hcaloutdeta, hcaloute3x3, hcaloute, gtrackID, gflavor, ng4hits, gpx, gpy, gpz, gvx, gvy, gvz, gfpx, gfpy, gfpz, gfx, gfy, gfz, gembed, gprimary, nfromtruth }; _ntp_track->Fill(track_data); } } } return; }
void PhotonJet::GetRecoHadronsAndJets(RawCluster *trig, SvtxTrackMap *tracks, JetMap *jets, JetRecoEval *recoeval) { float trig_phi = trig->get_phi(); float trig_eta = trig->get_eta(); for(SvtxTrackMap::Iter iter = tracks->begin(); iter!=tracks->end(); ++iter){ SvtxTrack *track = iter->second; _tr_px = track->get_px(); _tr_py = track->get_py(); _tr_pz = track->get_pz(); _tr_pt = sqrt(_tr_px*_tr_px+_tr_py*_tr_py); if(_tr_pt<0.5) continue; _tr_p = sqrt(_tr_px*_tr_px+_tr_py*_tr_py+_tr_pz*_tr_pz); _tr_phi = track->get_phi(); _tr_eta = track->get_eta(); _charge = track->get_charge(); _chisq = track->get_chisq(); _ndf = track->get_ndf(); _dca = track->get_dca(); _tr_x = track->get_x(); _tr_y = track->get_y(); _tr_z = track->get_z(); haddphi = trig_phi-_tr_phi; if(haddphi<pi2) haddphi+=2.*pi; if(haddphi>threepi2) haddphi-=2.*pi; haddeta = trig_eta-_tr_eta; hadpout = _tr_p*TMath::Sin(haddphi); isophot_had_tree->Fill(); } for(JetMap::Iter iter = jets->begin(); iter!=jets->end(); ++iter){ Jet* jet = iter->second; Jet *truthjet = recoeval->max_truth_jet_by_energy(jet); _recojetpt = jet->get_pt(); if(_recojetpt<4.0) continue; _recojeteta = jet->get_eta(); if(fabs(_recojeteta)>1.) continue; _recojetpx = jet->get_px(); _recojetpy = jet->get_py(); _recojetpz = jet->get_pz(); _recojetphi = jet->get_phi(); _recojetmass = jet->get_mass(); _recojetp = jet->get_p(); _recojetenergy = jet->get_e(); _recojetid = jet->get_id(); if(truthjet){ _truthjetid = truthjet->get_id(); _truthjetp = truthjet->get_p(); _truthjetphi = truthjet->get_phi(); _truthjeteta = truthjet->get_eta(); _truthjetpt = truthjet->get_pt(); _truthjetenergy = truthjet->get_e(); _truthjetpx = truthjet->get_px(); _truthjetpy = truthjet->get_py(); _truthjetpz = truthjet->get_pz(); } else{ _truthjetid = 0; _truthjetp = 0; _truthjetphi = 0; _truthjeteta = 0; _truthjetpt = 0; _truthjetenergy = 0; _truthjetpx = 0; _truthjetpy = 0; _truthjetpz = 0; } jetdphi = trig_phi-_recojetphi; if(jetdphi<pi2) jetdphi+=2.*pi; if(jetdphi>threepi2) jetdphi-=2.*pi; jetdeta = trig_eta-_recojeteta; jetpout = _recojetpt*TMath::Sin(jetdphi); isophot_jet_tree->Fill(); } }