#include "TString.h" #include "TDatabasePDG.h" #include "TParticlePDG.h" #include "TObjArray.h" #include "TObjString.h" #include #include #include #include #include #include #include using namespace std; struct part { TString sid; Double_t mass; Double_t width; //Int_t parity; TString parity; vector vpid; vector vnpid; vector vgpid; void reset() { sid = "not_set"; mass = -1; width = -1; parity = ""; vpid.clear(); vnpid.clear(); vgpid.clear(); } void print() { cout<::iterator it; map< Int_t,Int_t > madd; madd[ 311] = 16; madd[-311] = 16; madd[ 113] = 41; madd[ 213] = 42; madd[-213] = 43; madd[ 223] = 52; madd[ 331] = 53; madd[ 333] = 55; madd[2114] = 34; madd[2224] = 35; madd[2214] = 36; madd[1114] = 37; madd[ -12] = 4; madd[ -14] = 4; madd[ 14] = 4; madd[ -16] = 4; madd[ 16] = 4; regex r {R"(\s+)"}; const Int_t maxchar = 800; Char_t line[maxchar]; ifstream in; in.open("./particles.txt", std::ifstream::in); TDatabasePDG pdg; while(in.good()){ in.getline(line,maxchar); TString tmp = line; string l = line; string t = regex_replace(l, r, " "); tmp = t.data(); if(tmp.BeginsWith('#') ){ cout<GetEntries(); i++){ TObjString* s = (TObjString*) a->At(i); TString s1 = s->GetString(); if(s1 == "#" ) break; if ( i == 0 ){ p.sid = s1; } else if ( i == 1 ) { p.mass = s1.Atof(); } else if ( i == 2 ) { p.width = s1.Atof(); } else if ( i == 3 ) { //p.parity = s1.Atoi(); p.parity = s1; } else { Int_t id = s1.Atoi(); p.vpid.push_back(id); TParticlePDG* pa = pdg.GetParticle(id); if(pa) { TString n = pa->GetName(); p.vnpid.push_back(n); Int_t gi = pdg.ConvertPdgToGeant3(id); if(gi != 0) p.vgpid.push_back(gi); else { it = madd.find(id); if(it != madd.end()) p.vgpid.push_back(it->second); else p.vgpid.push_back(0); } } else { TString n = "not_set"; p.vnpid.push_back(n); p.vgpid.push_back(0); } } } if (p.vpid.size()>4) cout<<"test "<first << " => " << it->second << '\n'; return ; }