File indexing completed on 2025-08-03 08:15:05
0001 #include "VtxTest.h"
0002 #include "Conversion.h"
0003 #include "SVReco.h"
0004
0005
0006 #include <phool/PHCompositeNode.h>
0007 #include <phool/getClass.h>
0008
0009 #include <calotrigger/CaloTriggerInfo.h>
0010 #include <calobase/RawCluster.h>
0011 #include <calobase/RawClusterv1.h>
0012
0013 #include <fun4all/Fun4AllReturnCodes.h>
0014
0015 #include <g4main/PHG4TruthInfoContainer.h>
0016 #include <g4main/PHG4Particle.h>
0017 #include <g4main/PHG4Particlev1.h>
0018 #include <g4main/PHG4Particlev2.h>
0019 #include <g4main/PHG4VtxPoint.h>
0020
0021
0022
0023
0024
0025 #include <trackbase/TrkrClusterContainer.h>
0026
0027 #include <g4eval/SvtxEvalStack.h>
0028 #include <g4eval/SvtxTrackEval.h>
0029
0030
0031 #include <GenFit/FieldManager.h>
0032 #include <GenFit/GFRaveVertex.h>
0033 #include <GenFit/GFRaveVertexFactory.h>
0034 #include <GenFit/MeasuredStateOnPlane.h>
0035 #include <GenFit/RKTrackRep.h>
0036 #include <GenFit/StateOnPlane.h>
0037 #include <GenFit/Track.h>
0038
0039 #include <TFile.h>
0040 #include <TTree.h>
0041 #include <TLorentzVector.h>
0042
0043 #include <utility>
0044 #include <iostream>
0045 #include <math.h>
0046
0047 VtxTest::VtxTest(const std::string &name, unsigned int runnumber,
0048 int particleEmbed, int pythiaEmbed,bool makeTTree=true) : SubsysReco("VtxTest"),
0049 _kRunNumber(runnumber),_kParticleEmbed(particleEmbed), _kPythiaEmbed(pythiaEmbed), _kMakeTTree(makeTTree)
0050 {
0051 _foutname = name;
0052 }
0053
0054 VtxTest::~VtxTest(){
0055 if (_f) delete _f;
0056 if (_vertexer) delete _vertexer;
0057 }
0058
0059 int VtxTest::InitRun(PHCompositeNode *topNode)
0060 {
0061 _vertexer = new SVReco();
0062 _vertexer->InitRun(topNode);
0063 if(_kMakeTTree){
0064 _b_event=0;
0065 _runNumber=_kRunNumber;
0066 _f = new TFile( _foutname.c_str(), "RECREATE");
0067 _tree = new TTree("ttree","conversion data");
0068 _tree->SetAutoSave(300);
0069 _tree->Branch("runNumber",&_runNumber);
0070 _tree->Branch("event",&_b_event);
0071 _tree->Branch("nVtx", &_b_nVtx);
0072 _tree->Branch("nTpair", &_b_Tpair);
0073 _tree->Branch("nRpair", &_b_Rpair);
0074 _tree->Branch("rVtx", _b_rVtx,"rVtx[nVtx]/D");
0075 _tree->Branch("pythia", _b_pythia,"pythia[nVtx]/B");
0076 _tree->Branch("electron_pt", _b_electron_pt,"electron_pt[nVtx]/F");
0077 _tree->Branch("positron_reco_pt", _b_positron_reco_pt,"positron_reco_pt[nTpair]/F");
0078 _tree->Branch("electron_reco_pt", _b_electron_reco_pt,"electron_reco_pt[nTpair]/F");
0079 _tree->Branch("positron_pt", _b_positron_pt,"positron_pt[nVtx]/F");
0080 _tree->Branch("photon_pt", _b_parent_pt ,"photon_pt[nVtx]/F");
0081 _tree->Branch("photon_eta", _b_parent_eta ,"photon_eta[nVtx]/F");
0082 _tree->Branch("photon_phi", _b_parent_phi ,"photon_phi[nVtx]/F");
0083 _tree->Branch("e_deta", _b_e_deta ,"e_deta[nTpair]/F");
0084 _tree->Branch("e_dphi", _b_e_dphi ,"e_dphi[nTpair]/F");
0085 _tree->Branch("fLayer",_b_fLayer,"fLayer[nTpair]/I");
0086 _tree->Branch("photon_source_id", _b_grandparent_id ,"photon_source_id[nVtx]/I");
0087 _tree->Branch("nCluster",_b_nCluster,"nCluster[nRpair]/I");
0088 _tree->Branch("clus_dphi",_b_cluster_dphi,"clus_dphi[nRpair]/F");
0089 _tree->Branch("clus_deta",_b_cluster_deta,"clus_deta[nRpair]/F");
0090 _tree->Branch("Scluster_prob", &_b_Scluster_prob,"Scluster_prob[nRpair]/F");
0091 _tree->Branch("Mcluster_prob", &_b_Mcluster_prob,"Mcluster_prob[nRpair]/F");
0092
0093 _signalCutTree = new TTree("cutTreeSignal","signal data for making track pair cuts");
0094 _signalCutTree->SetAutoSave(300);
0095 _signalCutTree->Branch("track_deta", &_b_track_deta);
0096 _signalCutTree->Branch("track_dphi", &_b_track_dphi);
0097 _signalCutTree->Branch("track_dlayer",&_b_track_dlayer);
0098 _signalCutTree->Branch("track_layer", &_b_track_layer);
0099 _signalCutTree->Branch("track_pT", &_b_track_pT);
0100 _signalCutTree->Branch("ttrack_pT", &_b_ttrack_pT);
0101 _signalCutTree->Branch("approach_dist", &_b_approach);
0102 _signalCutTree->Branch("vtx_radius", &_b_vtx_radius);
0103 _signalCutTree->Branch("tvtx_radius", &_b_tvtx_radius);
0104 _signalCutTree->Branch("vtx_phi", &_b_vtx_phi);
0105 _signalCutTree->Branch("vtx_eta", &_b_vtx_eta);
0106 _signalCutTree->Branch("vtx_x", &_b_vtx_x);
0107 _signalCutTree->Branch("vtx_y", &_b_vtx_y);
0108 _signalCutTree->Branch("vtx_z", &_b_vtx_z);
0109 _signalCutTree->Branch("tvtx_eta", &_b_tvtx_eta);
0110 _signalCutTree->Branch("tvtx_x", &_b_tvtx_x);
0111 _signalCutTree->Branch("tvtx_y", &_b_tvtx_y);
0112 _signalCutTree->Branch("tvtx_z", &_b_tvtx_z);
0113 _signalCutTree->Branch("tvtx_phi", &_b_tvtx_phi);
0114 _signalCutTree->Branch("vtx_chi2", &_b_vtx_chi2);
0115 _signalCutTree->Branch("vtxTrack_dist", &_b_vtxTrack_dist);
0116 _signalCutTree->Branch("photon_m", &_b_photon_m);
0117 _signalCutTree->Branch("photon_pT", &_b_photon_pT);
0118 _signalCutTree->Branch("cluster_prob", &_b_cluster_prob);
0119
0120 _h_backgroundCutTree = new TTree("cutTreeBackh","background data for making track pair cuts");
0121 _h_backgroundCutTree->SetAutoSave(300);
0122 _h_backgroundCutTree->Branch("track_deta", &_bb_track_deta);
0123 _h_backgroundCutTree->Branch("track_dphi", &_bb_track_dphi);
0124 _h_backgroundCutTree->Branch("track_dlayer", &_bb_track_dlayer);
0125 _h_backgroundCutTree->Branch("track_layer", &_bb_track_layer);
0126 _h_backgroundCutTree->Branch("track_pT", &_bb_track_pT);
0127 _h_backgroundCutTree->Branch("vtx_radius", &_bb_vtx_radius);
0128 _h_backgroundCutTree->Branch("vtx_chi2", &_bb_vtx_chi2);
0129 _h_backgroundCutTree->Branch("approach_dist", &_bb_approach);
0130 _h_backgroundCutTree->Branch("vtxTrack_dist", &_bb_vtxTrack_dist);
0131 _h_backgroundCutTree->Branch("photon_m", &_bb_photon_m);
0132 _h_backgroundCutTree->Branch("photon_pT", &_bb_photon_pT);
0133 _h_backgroundCutTree->Branch("cluster_prob", &_bb_cluster_prob);
0134 _h_backgroundCutTree->Branch("pid", &_bb_pid);
0135
0136 _e_backgroundCutTree = new TTree("cutTreeBacke","background data for making track pair cuts");
0137 _e_backgroundCutTree->SetAutoSave(300);
0138 _e_backgroundCutTree->Branch("track_deta", &_bb_track_deta);
0139 _e_backgroundCutTree->Branch("track_dphi", &_bb_track_dphi);
0140 _e_backgroundCutTree->Branch("track_dlayer", &_bb_track_dlayer);
0141 _e_backgroundCutTree->Branch("track_layer", &_bb_track_layer);
0142 _e_backgroundCutTree->Branch("track_pT", &_bb_track_pT);
0143 _e_backgroundCutTree->Branch("vtx_radius", &_bb_vtx_radius);
0144 _e_backgroundCutTree->Branch("vtx_chi2", &_bb_vtx_chi2);
0145 _e_backgroundCutTree->Branch("approach_dist", &_bb_approach);
0146 _e_backgroundCutTree->Branch("vtxTrack_dist", &_bb_vtxTrack_dist);
0147 _e_backgroundCutTree->Branch("photon_m", &_bb_photon_m);
0148 _e_backgroundCutTree->Branch("photon_pT", &_bb_photon_pT);
0149 _e_backgroundCutTree->Branch("cluster_prob", &_bb_cluster_prob);
0150 }
0151 return 0;
0152 }
0153
0154 void VtxTest::doNodePointers(PHCompositeNode* topNode){
0155 _mainClusterContainer = findNode::getClass<RawClusterContainer>(topNode,"CLUSTER_CEMC");
0156 _truthinfo = findNode::getClass<PHG4TruthInfoContainer>(topNode,"G4TruthInfo");
0157 _clusterMap = findNode::getClass<TrkrClusterContainer>(topNode, "TRKR_CLUSTER");
0158
0159
0160 if(!_mainClusterContainer||!_truthinfo||!_clusterMap){
0161 cerr<<Name()<<": critical error-bad nodes \n";
0162 if(!_mainClusterContainer){
0163 cerr<<"\t RawClusterContainer is bad";
0164 }
0165 if(!_truthinfo){
0166 cerr<<"\t TruthInfoContainer is bad";
0167 }
0168 if(!_clusterMap){
0169 cerr<<"\t TrkrClusterMap is bad";
0170 }
0171
0172
0173
0174 cerr<<endl;
0175 }
0176 }
0177
0178 int VtxTest::process_event(PHCompositeNode *topNode)
0179 {
0180 doNodePointers(topNode);
0181 _vertexer->InitEvent(topNode);
0182 PHG4TruthInfoContainer::Range range = _truthinfo->GetParticleRange();
0183 SvtxEvalStack *stack = new SvtxEvalStack(topNode);
0184 SvtxTrackEval* trackeval = stack->get_track_eval();
0185 SvtxTrack *svtxtrack1=NULL;
0186 SvtxTrack *svtxtrack2=NULL;
0187 PHG4VtxPoint *truth_vtx=NULL;
0188 for ( PHG4TruthInfoContainer::ConstIterator iter = range.first; iter != range.second; ++iter ) {
0189 PHG4Particle* g4particle = iter->second;
0190 if(g4particle&&g4particle->get_pid()==211&&!_truthinfo->GetParticle(g4particle->get_parent_id())){
0191 cout<<"found pion\n";
0192 TLorentzVector truth;
0193 truth.SetPxPyPzE(g4particle->get_px(),g4particle->get_py(),g4particle->get_pz(),g4particle->get_e());
0194 if(!svtxtrack1)svtxtrack1=trackeval->best_track_from(g4particle);
0195 else svtxtrack2=trackeval->best_track_from(g4particle);
0196 if(truth_vtx==NULL) truth_vtx=_truthinfo->GetVtx(g4particle->get_vtx_id());
0197 else{
0198 PHG4VtxPoint *vtemp = truth_vtx;
0199 truth_vtx=_truthinfo->GetVtx(g4particle->get_vtx_id());
0200 if(!(*truth_vtx==*vtemp)) cout<<"vtx does not agree"<<endl;
0201 }
0202 }
0203 }
0204 if(!truth_vtx){
0205 cout<<"did not find truth_vtx"<<endl;
0206 return Fun4AllReturnCodes::ABORTEVENT;
0207 }
0208 if(!svtxtrack1||!svtxtrack2){
0209 cout<<"did not find tracks"<<endl;
0210 return Fun4AllReturnCodes::ABORTEVENT;
0211 }
0212 genfit::GFRaveVertex* recoVert=_vertexer->findSecondaryVertex(svtxtrack1,svtxtrack2);
0213 cout<<"here"<<endl;
0214 if (recoVert)
0215 {
0216 TVector3 recoVertPos = recoVert->getPos();
0217 _b_vtx_radius = sqrt(recoVertPos.x()*recoVertPos.x()+recoVertPos.y()*recoVertPos.y());
0218 _b_tvtx_radius = sqrt(truth_vtx->get_x()*truth_vtx->get_x()+truth_vtx->get_y()*truth_vtx->get_y());
0219 _b_vtx_phi = recoVertPos.Phi();
0220 _b_vtx_eta = recoVertPos.Eta();
0221 _b_vtx_z = recoVertPos.Z();
0222 _b_vtx_x = recoVertPos.X();
0223 _b_vtx_y = recoVertPos.Y();
0224 TVector3 tVertPos(truth_vtx->get_x(),truth_vtx->get_y(),truth_vtx->get_z());
0225 _b_tvtx_phi = tVertPos.Phi();
0226 _b_tvtx_eta = tVertPos.Eta();
0227 _b_tvtx_z = tVertPos.Z();
0228 _b_tvtx_x = tVertPos.X();
0229 _b_tvtx_y = tVertPos.Y();
0230 _b_vtx_chi2 = recoVert->getChi2();
0231 }
0232 else{
0233 _b_vtx_radius = 0;
0234 _b_vtx_phi = 0;
0235 _b_vtx_eta = 0;
0236 _b_vtx_z = 0;
0237 _b_vtx_x = 0;
0238 _b_vtx_y = 0;
0239 _b_tvtx_radius = sqrt(truth_vtx->get_x()*truth_vtx->get_x()+truth_vtx->get_y()*truth_vtx->get_y());
0240 TVector3 tVertPos(truth_vtx->get_x(),truth_vtx->get_y(),truth_vtx->get_z());
0241 _b_tvtx_phi = tVertPos.Phi();
0242 _b_tvtx_eta = tVertPos.Eta();
0243 _b_tvtx_z = tVertPos.Z();
0244 _b_tvtx_x = tVertPos.X();
0245 _b_tvtx_y = tVertPos.Y();
0246 }
0247 delete stack;
0248 _signalCutTree->Fill();
0249 return 0;
0250 }
0251
0252 std::queue<std::pair<int,int>> VtxTest::numUnique(std::map<int,Conversion> *mymap=NULL,SvtxTrackEval* trackeval=NULL,RawClusterContainer *mainClusterContainer=NULL){
0253 _b_nVtx = 0;
0254 _b_Tpair=0;
0255 _b_Rpair=0;
0256 std::queue<std::pair<int,int>> missingChildren;
0257 for (std::map<int,Conversion>::iterator i = mymap->begin(); i != mymap->end(); ++i) {
0258 PHG4VtxPoint *vtx =i->second.getVtx();
0259 PHG4Particle *temp = i->second.getPhoton();
0260 TLorentzVector tlv_photon,tlv_electron,tlv_positron;
0261 tlv_photon.SetPxPyPzE(temp->get_px(),temp->get_py(),temp->get_pz(),temp->get_e());
0262 temp=i->second.getElectron();
0263 tlv_electron.SetPxPyPzE(temp->get_px(),temp->get_py(),temp->get_pz(),temp->get_e());
0264 if(_kMakeTTree){
0265 cout<<"numUnique filling tree"<<endl;
0266 _b_rVtx[_b_nVtx] = sqrt(vtx->get_x()*vtx->get_x()+vtx->get_y()*vtx->get_y());
0267 _b_parent_pt[_b_nVtx] =tlv_photon.Pt();
0268 _b_parent_phi[_b_nVtx]=tlv_photon.Phi();
0269 _b_parent_eta[_b_nVtx]=tlv_photon.Eta();
0270 _b_grandparent_id[_b_nVtx]=i->second.getSourceId();
0271 _b_e_deta[_b_nVtx]=-1.;
0272 _b_e_dphi[_b_nVtx]=-1.;
0273 _b_positron_pt[_b_nVtx]=-1.;
0274 _b_electron_pt[_b_nVtx]=tlv_electron.Pt();
0275 }
0276 temp=i->second.getPositron();
0277 if(temp){
0278 tlv_positron.SetPxPyPzE(temp->get_px(),temp->get_py(),temp->get_pz(),temp->get_e());
0279 if(_kMakeTTree) _b_positron_pt[_b_nVtx]=tlv_positron.Pt();
0280 if (TMath::Abs(tlv_electron.Eta())<_kRAPIDITYACCEPT&&TMath::Abs(tlv_positron.Eta())<_kRAPIDITYACCEPT)
0281 {
0282 unsigned int nRecoTracks = i->second.setRecoTracks(trackeval);
0283 if(_kMakeTTree){
0284 _b_e_deta[_b_Tpair]=TMath::Abs(tlv_electron.Eta()-tlv_positron.Eta());
0285 _b_e_dphi[_b_Tpair]=TMath::Abs(tlv_electron.Phi()-tlv_positron.Phi());
0286 _b_fLayer[_b_Tpair]=_b_track_layer = i->second.firstLayer(_clusterMap);
0287 _b_fLayer[_b_Tpair]=-1;
0288 _b_Tpair++;
0289 }
0290 switch(nRecoTracks)
0291 {
0292 case 2:
0293 {
0294 if(_kMakeTTree){
0295 _b_track_deta = i->second.trackDEta();
0296 _b_track_dphi = i->second.trackDPhi();
0297 _b_track_dlayer = i->second.trackDLayer(_clusterMap);
0298 _b_track_dlayer=-1;
0299 _b_track_pT = i->second.minTrackpT();
0300 if(tlv_electron.Pt()>tlv_positron.Pt()) _b_ttrack_pT = tlv_positron.Pt();
0301 else _b_ttrack_pT = tlv_electron.Pt();
0302 _b_approach = i->second.approachDistance();
0303 pair<SvtxTrack*, SvtxTrack*> reco_tracks=i->second.getRecoTracks();
0304 genfit::GFRaveVertex* recoVert = _vertexer->findSecondaryVertex(reco_tracks.first,reco_tracks.second);
0305 if (recoVert)
0306 {
0307 TVector3 recoVertPos = recoVert->getPos();
0308 _b_vtx_radius = sqrt(recoVertPos.x()*recoVertPos.x()+recoVertPos.y()*recoVertPos.y());
0309 _b_tvtx_radius = _b_rVtx[_b_nVtx];
0310 _b_vtx_phi = recoVertPos.Phi();
0311 _b_vtx_eta = recoVertPos.Eta();
0312 _b_vtx_z = recoVertPos.Z();
0313 _b_vtx_x = recoVertPos.X();
0314 _b_vtx_y = recoVertPos.Y();
0315 TVector3 tVertPos(vtx->get_x(),vtx->get_y(),vtx->get_z());
0316 _b_tvtx_phi = tVertPos.Phi();
0317 _b_tvtx_eta = tVertPos.Eta();
0318 _b_tvtx_z = tVertPos.Z();
0319 _b_tvtx_x = tVertPos.X();
0320 _b_tvtx_y = tVertPos.Y();
0321 _b_vtx_chi2 = recoVert->getChi2();
0322 _b_vtxTrack_dist = i->second.dist(&recoVertPos,_clusterMap);
0323 }
0324
0325 TLorentzVector* recoPhoton = i->second.setRecoPhoton();
0326 if (recoPhoton)
0327 {
0328 _b_photon_m=recoPhoton->Dot(*recoPhoton);
0329 _b_photon_pT=recoPhoton->Pt();
0330 }
0331 else{
0332 _b_photon_m =-1;
0333 _b_photon_pT=-1;
0334 }
0335
0336 _b_cluster_prob=-1;
0337 _b_cluster_deta[_b_Rpair]=-1.;
0338 _b_cluster_dphi[_b_Rpair]=-1.;
0339 _b_nCluster[_b_Rpair]=0;
0340 _b_Scluster_prob[_b_Rpair]=-1;
0341 _b_Mcluster_prob[_b_Rpair]=-1;
0342
0343 }
0344 pair<int,int> clusterIds = i->second.get_cluster_ids();
0345 RawCluster *clustemp;
0346 if(mainClusterContainer->getCluster(clusterIds.first)){
0347 clustemp = dynamic_cast<RawCluster*>(mainClusterContainer->getCluster(clusterIds.first)->Clone());
0348 _conversionClusters.AddCluster(clustemp);
0349 if (_kMakeTTree)
0350 {
0351 _b_cluster_prob=clustemp->get_prob();
0352 RawCluster *clus2 = mainClusterContainer->getCluster(clusterIds.second);
0353 if (clus2)
0354 {
0355 _b_cluster_dphi[_b_Rpair]=fabs(clustemp->get_phi()-clus2->get_phi());
0356 TVector3 etaCalc(clustemp->get_x(),clustemp->get_y(),clustemp->get_z());
0357 if (clus2->get_prob()>_b_cluster_prob)
0358 {
0359 _b_cluster_prob=clus2->get_prob();
0360 }
0361
0362 float eta1 = etaCalc.PseudoRapidity();
0363 etaCalc.SetXYZ(clus2->get_x(),clus2->get_y(),clus2->get_z());
0364 _b_cluster_deta[_b_Rpair]=fabs(eta1-etaCalc.PseudoRapidity());
0365
0366 if (clusterIds.first!=clusterIds.second)
0367 {
0368 _b_nCluster[_b_Rpair]=2;
0369 _b_Scluster_prob[_b_Rpair]=clustemp->get_prob();
0370 }
0371 else{
0372 _b_nCluster[_b_Rpair]=1;
0373 _b_Mcluster_prob[_b_Rpair]=clustemp->get_prob();
0374 }
0375 }
0376 }
0377 }
0378 _signalCutTree->Fill();
0379 _b_Rpair++;
0380 break;
0381 }
0382 case 1:
0383 {
0384 int clustidtemp=i->second.get_cluster_id();
0385 if(mainClusterContainer->getCluster(clustidtemp)){
0386 RawCluster *clustemp = dynamic_cast<RawCluster*>(mainClusterContainer->getCluster(clustidtemp)->Clone());
0387 _conversionClusters.AddCluster(clustemp);
0388 }
0389
0390 break;
0391 }
0392 case 0:
0393 break;
0394 default:
0395 if (Verbosity()>1)
0396 {
0397 cerr<<Name()<<" error setting reco tracks"<<endl;
0398 }
0399 break;
0400 }
0401 }
0402 if (_kMakeTTree)
0403 {
0404 _b_pythia[_b_nVtx]=i->second.getEmbed()==_kPythiaEmbed;
0405 _b_nVtx++;
0406 }
0407 }
0408 }
0409 return missingChildren;
0410 }
0411
0412
0413 void VtxTest::processBackground(std::map<int,Conversion> *mymap,SvtxTrackEval* trackeval,TTree* tree){
0414 for (std::map<int,Conversion>::iterator i = mymap->begin(); i != mymap->end(); ++i) {
0415 int nReco=i->second.setRecoTracks(trackeval);
0416 if (nReco==2)
0417 {
0418 _bb_track_deta = i->second.trackDEta();
0419 _bb_track_dphi = i->second.trackDPhi();
0420 _bb_track_dlayer = i->second.trackDLayer(_clusterMap);
0421 _bb_track_layer = i->second.firstLayer(_clusterMap);
0422 _bb_track_layer=-1;
0423 _bb_track_dlayer=-1;
0424 _bb_track_pT = i->second.minTrackpT();
0425 _bb_approach = i->second.approachDistance();
0426 _bb_pid = i->second.getElectron()->get_pid();
0427 pair<SvtxTrack*, SvtxTrack*> reco_tracks=i->second.getRecoTracks();
0428 genfit::GFRaveVertex* recoVert = _vertexer->findSecondaryVertex(reco_tracks.first,reco_tracks.second);
0429 if (recoVert)
0430 {
0431 TVector3 recoVertPos = recoVert->getPos();
0432 _bb_vtx_radius = sqrt(recoVertPos.x()*recoVertPos.x()+recoVertPos.y()*recoVertPos.y());
0433 _bb_vtx_chi2 = recoVert->getChi2();
0434 _bb_vtxTrack_dist = i->second.dist(&recoVertPos,_clusterMap);
0435 }
0436 TLorentzVector* recoPhoton = i->second.setRecoPhoton();
0437 if (recoPhoton)
0438 {
0439 _bb_photon_m=recoPhoton->Dot(*recoPhoton);
0440 _bb_photon_pT=recoPhoton->Pt();
0441 }
0442 else{
0443 _bb_photon_m =0;
0444 _bb_photon_pT=0;
0445 }
0446 _bb_cluster_prob= _mainClusterContainer->getCluster(i->second.get_cluster_id())->get_prob();
0447 tree->Fill();
0448 }
0449 }
0450 }
0451
0452 void VtxTest::findChildren(std::queue<std::pair<int,int>> missingChildren,PHG4TruthInfoContainer* _truthinfo){
0453 if (Verbosity()>=6)
0454 {
0455 while(!missingChildren.empty()){
0456 for (PHG4TruthInfoContainer::ConstIterator iter = _truthinfo->GetParticleRange().first; iter != _truthinfo->GetParticleRange().second; ++iter)
0457 {
0458 if(Verbosity()>1&& iter->second->get_parent_id()==missingChildren.front().first&&iter->second->get_track_id()!=missingChildren.front().second){
0459 cout<<"Found Child:\n";
0460 iter->second->identify();
0461 cout<<"With mother:\n";
0462
0463 }
0464 }
0465 missingChildren.pop();
0466 }
0467 }
0468 }
0469
0470 const RawClusterContainer* VtxTest::getClusters()const {return &_conversionClusters;}
0471
0472 int VtxTest::get_embed(PHG4Particle* particle, PHG4TruthInfoContainer* truthinfo)const{
0473 return truthinfo->isEmbeded(particle->get_track_id());
0474 }
0475
0476 float VtxTest::vtoR(PHG4VtxPoint* vtx)const{
0477 return (float) sqrt(vtx->get_x()*vtx->get_x()+vtx->get_y()*vtx->get_y());
0478 }
0479
0480
0481 int VtxTest::End(PHCompositeNode *topNode)
0482 {
0483 if(_kMakeTTree){
0484 _f->Write();
0485 _f->Close();
0486 }
0487 return 0;
0488 }