13 const int status = wordexp(wildcardString.c_str(), &
p, WRDE_SHOWERR);
16 std::cerr <<
"Wildcard string '" << wildcardString
17 <<
"' returned error " << status <<
" from wordexp()." 24 for(
unsigned int i = 0;
i < p.we_wordc; ++
i){
27 if(
stat(p.we_wordv[
i], &sb) == 0)
28 fileList.push_back(p.we_wordv[
i]);
40 if(
id == 1 && charge == -1)
return -2212;
41 if(
id == 1 && charge == 0)
return 2112;
42 if(
id == 1 && charge == +1)
return +2212;
44 if(
id == 32 && charge == 0)
return 3122;
46 if(
id == 33 && charge == -1)
return 3112;
47 if(
id == 33 && charge == 0)
return 3212;
48 if(
id == 33 && charge == +1)
return 3222;
50 if(
id == 53 && charge == -1)
return +3312;
51 if(
id == 53 && charge == 0)
return 3322;
52 if(
id == 53 && charge == +1)
return -3312;
54 if(
id == 56 && charge == -1)
return -4122;
55 if(
id == 56 && charge == +1)
return +4122;
57 if(
id == 57 && charge == -2)
return -4222;
58 if(
id == 57 && charge == -1)
return -4212;
59 if(
id == 57 && charge == 0)
return 4112;
60 if(
id == 57 && charge == +1)
return 4212;
61 if(
id == 57 && charge == +2)
return 4222;
63 if(
id == 59 && charge == -1)
return -4232;
64 if(
id == 59 && charge == 0)
return 4132;
65 if(
id == 59 && charge == +1)
return +4232;
67 if(
id == 101 && charge == -1)
return -211;
68 if(
id == 101 && charge == 0)
return 111;
69 if(
id == 101 && charge == +1)
return +211;
71 if(
id == 110 && charge == 0)
return +311;
72 if(
id == 110 && charge == +1)
return +321;
74 if(
id == 111 && charge == -1)
return -321;
75 if(
id == 111 && charge == 0)
return -311;
77 if(
id == 114 && charge == 0)
return +421;
78 if(
id == 114 && charge == +1)
return +411;
80 if(
id == 115 && charge == -1)
return -411;
81 if(
id == 115 && charge == 0)
return -421;
83 if(
id == 118 && charge == +1)
return +431;
84 if(
id == 119 && charge == -1)
return -431;
86 if(
id == 901 && charge == -1)
return +11;
87 if(
id == 901 && charge == +1)
return -11;
88 if(
id == 902 && charge == -1)
return +13;
89 if(
id == 902 && charge == +1)
return -13;
90 if(
id == 903 && charge == -1)
return +15;
91 if(
id == 903 && charge == +1)
return -15;
93 if(
id == 911 && charge == 0)
return +12;
94 if(
id == 912 && charge == 0)
return +14;
95 if(
id == 913 && charge == 0)
return +16;
96 if(
id == -911 && charge == 0)
return -12;
97 if(
id == -912 && charge == 0)
return -14;
98 if(
id == -913 && charge == 0)
return -16;
101 std::cout <<
"Unknown particle: ID=" <<
id <<
", charge=" << charge
109 TFile*
fOut =
new TFile((
dir+
"/records.root").c_str(),
"RECREATE");
110 TTree* trOut =
new TTree(
"tr",
"tr");
112 trOut->Branch(
"Enu", &Enu);
113 trOut->Branch(
"weight", &weight);
115 trOut->Branch(
"prod_id", &prod_id);
122 trOut->Branch(
"nparts", &nparts);
123 trOut->Branch(
"pdg", &pdg,
"pdg[nparts]/I");
124 trOut->Branch(
"E", &E,
"E[nparts]/F");
125 trOut->Branch(
"px", &px,
"px[nparts]/F");
126 trOut->Branch(
"py", &py,
"py[nparts]/F");
127 trOut->Branch(
"pz", &pz,
"pz[nparts]/F");
131 const std::vector<std::string> fnames =
wildcard(
dir+
"/*/FinalEvents.dat");
133 for(
unsigned int i = 0;
i < fnames.size(); ++
i){
137 FILE*
f = fopen(fname.c_str(),
"r");
139 fgets(header, 4096, f);
141 int run, event,
id, charge;
142 float perweight, pos1, pos2, pos3,
p0,
p1,
p2,
p3;
147 int ret = fscanf(f,
"%d %d %d %d %f %f %f %f %f %f %f %f %d %d %f",
148 &run, &event, &
id, &charge,
149 &perweight, &pos1, &pos2, &pos3, &p0, &p1, &p2, &p3,
150 &history, &prod_id_in,
155 if(nparts > 0) trOut->Fill();
160 if(prevEvt == -1) prevEvt = event;
163 if(event != prevEvt){
171 prod_id = prod_id_in;
182 weight = perweight/fnames.size();
190 std::cout <<
"Wrote combination of " << fnames.size()
191 <<
" files with " << trOut->GetEntries() <<
" events" <<
std::endl;
::xsd::cxx::tree::id< char, ncname > id
int gibuu_to_pdg(int id, int charge)
void convert(std::string dir="cc_numu/C12")
std::vector< std::string > wildcard(const std::string &wildcardString)