void testlor::Loop() { // In a ROOT session, you can do: // Root > .L testlor.C // Root > testlor t // Root > t.GetEntry(12); // Fill t data members with entry number 12 // Root > t.Show(); // Show values of entry 12 // Root > t.Show(16); // Read and show values of entry 16 // Root > t.Loop(); // Loop on all entries // // This is the loop skeleton where: // jentry is the global entry number in the chain // ientry is the entry number in the current Tree // Note that the argument to GetEntry must be: // jentry for TChain::GetEntry // ientry for TTree::GetEntry and TBranch::GetEntry // // To read only selected branches, Insert statements like: // METHOD1: // fChain->SetBranchStatus("*",0); // disable all branches // fChain->SetBranchStatus("branchname",1); // activate branchname // METHOD2: replace line // fChain->GetEntry(jentry); //read all branches //by b_branchname->GetEntry(ientry); //read only this branch //Set-up Code if (fChain == 0) return; Long64_t nentries = fChain->GetEntriesFast(); Long64_t nbytes = 0, nb = 0; int pions=0,kaons=0,ksTOpi=0,i=0,j=0; int ipart1,ipart2,a,b; Double_t ppion[kMaxentry]; Double_t npion[kMaxentry]; Double_t p[kMaxentry]; double prop=0; Double_t pp,E,KSmass; TLorentzVector q[kMaxentry];//pinakas tupou tlorentz TLorentzVector w,v; TVector3 l; TH1D *pzhist=new TH1D("pz","pz histogram",120,-12,12); TH1D *pthist=new TH1D("pt","pt histogram",50,0,1.5); TH1D *kshist=new TH1D("KSmass","KSmasss",120,0.2,0.8); TH1D *kshist2=new TH1D("KSmass","KSmasss",120,0.,5); TH1D *pseudohist=new TH1D("Pseudorapidity","Pseudorapidity",120,-15,15); cout << "Number of events = " << nentries << endl; //event loop for (Long64_t jentry=0; jentry<nentries;jentry++) {//nentries Long64_t ientry = LoadTree(jentry); if (ientry < 0) break; nb = fChain->GetEntry(jentry); nbytes += nb; cout << " event # " << jentry << ", #particles " << entry_ << endl; // if (Cut(ientry) < 0) continue; //particle loop for (int ipart = 0; ipart < entry_ ; ipart++) { w.SetPx(entry_pSave_xx[ipart]); w.SetPy(entry_pSave_yy[ipart]); w.SetPz(entry_pSave_zz[ipart]); w.SetE(entry_pSave_tt[ipart]); q[ipart]=w; l=q[ipart].Vect(); //~ cout<<"pseudorapidity="<<l.PseudoRapidity()<<endl; p[ipart]=l.Mag(); cout<<"p="<<l.Mag()<<endl;//P! //~ cout<<"m="<<q[ipart].M()<<endl;//m?not right //~ cout<<"pt="<<q[ipart].Perp()<<endl;//PT! //~ cout <<"i="<<ipart<< "\tpdgID = " << entry_idSave[ipart]<<",\t Daughter1="<<entry_idSave[entry_daughter1Save[ipart]]<<",\tDaughter2="<<entry_idSave[entry_daughter2Save[ipart]]<<"\tEnergy="<<entry_pSave_tt[ipart]<<endl; //pions vs kaons if(((TMath::Abs(entry_idSave[ipart]))==(211))||(entry_idSave[ipart]==(111))) { pions++; } else if((entry_idSave[ipart]==130)|| ((TMath::Abs(entry_idSave[ipart]))==(321))||(entry_idSave[ipart]==310) ||((TMath::Abs(entry_idSave[ipart]))==(311))||((TMath::Abs(entry_idSave[ipart]))==(323)) ||((TMath::Abs(entry_idSave[ipart]))==(313)) ) { kaons++; } //Ks->pions if((entry_idSave[ipart]==310)&&(((entry_idSave[entry_daughter1Save[ipart]]==(211))&&(entry_idSave[entry_daughter2Save[ipart]]==(-1)*(211))) ||((entry_idSave[entry_daughter1Save[ipart]]==(-1)*(211))&&(entry_idSave[entry_daughter2Save[ipart]]==(211))) )){ ipart1[ksTOpi]=entry_daughter1Save[ipart]; ipart2[ksTOpi]=entry_daughter2Save[ipart]; cout<<"ipart1="<<ipart1<<"\t ipart2="<<ipart2<<endl; ksTOpi++; cout<<"ksTOpi="<<ksTOpi<<endl; }//end of ks->pions if if(entry_idSave[ipart]==211){ ppion[i]=ipart; i++;} if(entry_idSave[ipart]==(-1)*(211)){ npion[j]=ipart; j++;} //Fill Histograms pzhist->Fill(entry_pSave_zz[ipart]); pthist->Fill(q[ipart].Perp()); pseudohist->Fill(l.PseudoRapidity()); }//end of particle loop //Ksmass for(int n=0;n<i;n++){ a=ppion[n]; for(int m=0;m<j;m++){ b=npion[m]; v=q[a]+q[b]; //~ TVector3 y=v.Vect(); //~ pp=y.Mag(); //~ E=v.E(); KSmass=v.M(); kshist2->Fill(KSmass); }//end of npion loop }//end of ppion loop //KStoPI for(int count=0;count<ksTOpi;count++){ v=q[ipart1[ksTOpi]]+q[ipart2[ksTOpi]]; //~ l=v.Vect(); //~ pp=l.Mag(); //~ E=v.E(); KSmass=v.M(); kshist->Fill(KSmass); }//end of ksTOpi loop i=0; j=0; ksTOpi=0; if(kaons!=0){ prop=prop+((double)kaons)/((double)pions); } }//end of event loop //Wrap-up code TCanvas* k1 = new TCanvas("c1","Pythia8Ana",800,800); k1->Divide(1, 3); k1->cd(1); kshist->Draw(); kshist->GetXaxis()->SetTitle("mass [GeV/c^2]"); kshist->GetYaxis()->SetTitle("Number of events"); k1->cd(2); kshist2->Draw(); kshist2->GetXaxis()->SetTitle("mass [GeV/c^2]"); kshist2->GetYaxis()->SetTitle("Number of events"); //~ //~ k1->cd(2); //~ pseudohist->Draw(); //~ pseudohist->GetXaxis()->SetTitle("pseudorapidity"); //~ pseudohist->GetYaxis()->SetTitle("Number of events"); k1->cd(3); pthist->Draw(); pthist->GetXaxis()->SetTitle("pt [GeV/c]"); pthist->GetYaxis()->SetTitle("Number of events"); cout<<"Ebeam1="<<entry_pSave_tt[1]<<"[GeV], Ebeam2="<<entry_pSave_tt[2]<<"[GeV]"<<endl; cout<<"Mass1= "<<entry_mSave[1]<<" Mass2="<<entry_mSave[2]<<endl; cout<<"Kaons="<<prop/nentries<<"Pions"<<endl; cout<<"kaons="<<kaons<<", Pions="<<pions<<endl; cout<<"event found, ipart1="<<ipart1<<"\t ipart2="<<ipart2<<endl; cout<<"ipart1="<<ipart1<<endl; cout<<"p["<<ipart1<<"]="<<p[ipart1]<<endl; }//End of Loop method
int RecoInfoExport::process_event(PHCompositeNode *topNode) { ++_event; stringstream fname; fname << _file_prefix << "_Event" << _event << ".dat"; fstream fdata(fname.str(), ios_base::out); for (auto & calo_name : _calo_names) { string towernodename = "TOWER_CALIB_" + calo_name; // Grab the towers RawTowerContainer* towers = findNode::getClass<RawTowerContainer>(topNode, towernodename.c_str()); if (!towers) { std::cout << PHWHERE << ": Could not find node " << towernodename.c_str() << std::endl; return Fun4AllReturnCodes::ABORTRUN; } string towergeomnodename = "TOWERGEOM_" + calo_name; RawTowerGeomContainer *towergeom = findNode::getClass< RawTowerGeomContainer>(topNode, towergeomnodename.c_str()); if (!towergeom) { cout << PHWHERE << ": Could not find node " << towergeomnodename.c_str() << endl; return Fun4AllReturnCodes::ABORTRUN; } set<const RawTower *> good_towers; RawTowerContainer::ConstRange begin_end = towers->getTowers(); RawTowerContainer::ConstIterator rtiter; for (rtiter = begin_end.first; rtiter != begin_end.second; ++rtiter) { const RawTower *tower = rtiter->second; assert(tower); if (tower->get_energy() > _tower_threshold) { good_towers.insert(tower); } } fdata << (boost::format("%1% (1..%2% hits)") % calo_name % good_towers.size()) << endl; bool first = true; for (const auto & tower : good_towers) { assert(tower); float eta = towergeom->get_etacenter(tower->get_bineta()); float phi = towergeom->get_phicenter(tower->get_binphi()); phi = atan2(cos(phi), sin(phi)); if (first) { first = false; } else fdata << ","; fdata << (boost::format("[%1%,%2%,%3%]") % eta % phi % tower->get_energy()); } fdata << endl; } { fdata << "Track list" << endl; // need things off of the DST... PHG4TruthInfoContainer* truthinfo = findNode::getClass< PHG4TruthInfoContainer>(topNode, "G4TruthInfo"); if (!truthinfo) { cerr << PHWHERE << " ERROR: Can't find G4TruthInfo" << endl; exit(-1); } // create SVTX eval stack SvtxEvalStack svtxevalstack(topNode); // SvtxVertexEval* vertexeval = svtxevalstack.get_vertex_eval(); // SvtxTrackEval* trackeval = svtxevalstack.get_track_eval(); SvtxTruthEval* trutheval = svtxevalstack.get_truth_eval(); // loop over all truth particles PHG4TruthInfoContainer::Range range = truthinfo->GetPrimaryParticleRange(); for (PHG4TruthInfoContainer::ConstIterator iter = range.first; iter != range.second; ++iter) { PHG4Particle* g4particle = iter->second; const TVector3 mom(g4particle->get_px(), g4particle->get_py(), g4particle->get_pz()); std::set<PHG4Hit*> g4hits = trutheval->all_truth_hits(g4particle); map<float, PHG4Hit *> time_sort; map<float, PHG4Hit *> layer_sort; for (auto & hit : g4hits) { if (hit) { time_sort[hit->get_avg_t()] = hit; } } for (auto & hit_pair : time_sort) { if (hit_pair.second->get_layer() != UINT_MAX and layer_sort.find(hit_pair.second->get_layer()) == layer_sort.end()) { layer_sort[hit_pair.second->get_layer()] = hit_pair.second; } } if (layer_sort.size() > 5 and mom.Pt() > _pT_threshold) // minimal track length cut { stringstream spts; TVector3 last_pos(0, 0, 0); bool first = true; for (auto & hit_pair : layer_sort) { TVector3 pos(hit_pair.second->get_avg_x(), hit_pair.second->get_avg_y(), hit_pair.second->get_avg_z()); // hit step cuts if ((pos - last_pos).Mag() < _min_track_hit_dist and hit_pair.first != (layer_sort.rbegin()->first) and hit_pair.first != (layer_sort.begin()->first)) continue; last_pos = pos; if (first) { first = false; } else spts << ","; spts << "["; spts << pos.x(); spts << ","; spts << pos.y(); spts << ","; spts << pos.z(); spts << "]"; } const int abs_pid = abs(g4particle->get_pid()); int t = 5; if (abs_pid == TDatabasePDG::Instance()->GetParticle("pi+")->PdgCode()) { t = 1; } else if (abs_pid == TDatabasePDG::Instance()->GetParticle("proton")->PdgCode()) { t = 2; } else if (abs_pid == TDatabasePDG::Instance()->GetParticle("K+")->PdgCode()) { t = 3; } else if (abs_pid == TDatabasePDG::Instance()->GetParticle("e-")->PdgCode()) { t = 3; } const TParticlePDG * pdg_part = TDatabasePDG::Instance()->GetParticle(11); const int c = (pdg_part != nullptr) ? (copysign(1, pdg_part->Charge())) : 0; fdata << (boost::format( "{ \"pt\": %1%, \"t\": %2%, \"e\": %3%, \"p\": %4%, \"c\": %5%, \"pts\":[ %6% ]}") % mom.Pt() % t % mom.PseudoRapidity() % mom.Phi() % c % spts.str()) << endl; } } } fdata.close(); return 0; }