#include #include #include #include #include using namespace std; // Particle and it's attributes grouped into a data structure "particle" //============================================================================= struct particle { double numb; double typ; double eta; double phi; double pt; double jmas; double ntrk; double btag; double had; double dum1; double dum2; }; // Event is a data structure containing the event number and all the particles //====================================================================== struct Event { int identifier; // Identify the begining of new event int number; int trigg; vector children; }; // This function will be used to fill the Children vector of each event //==================================================================== ifstream& read_child(ifstream& of, vector& vec,int x) { if(of) { particle cand; of>>cand.typ>>cand.eta>>cand.phi>>cand.pt>>cand.jmas>>cand.ntrk>>cand.btag>>cand.had>>cand.dum1>>cand.dum2; cand.numb=x; vec.push_back(cand); of.clear(); } return of; } // This cleans the Children vector before the new event is read //=============================================================== void clean(vector& vec) { vec.clear(); } //Define a vector to hold the events in a chain form //============================================================ vector Chain; Event anevent; int test=94,test2; int main() { ifstream ff("nmssm.pggss", ios::in); int cnt = 0; char line[120]; ff.getline(line,120); while (ff.good()) { if(test == 94){ ff >> test; } if(!(test)){ anevent.identifier=test; ff>>anevent.number>>anevent.trigg; ff>>test2; } else { while(test && ff.good()) { read_child(ff,anevent.children,test); ff>>test2; if(test2) { test=test2; continue; } else break; } Chain.push_back(anevent); } test = test2; clean(anevent.children); continue; } ff.close(); for(vector::const_iterator iter = Chain.begin();iter != Chain.end();iter++) { cout<<(*iter).identifier<<" "<<(*iter).number<<" "<<(*iter).trigg<& progeny= iter->children; for(vector::const_iterator biter = progeny.begin();biter != progeny.end();++biter) { cout<<(*biter).numb<<" "<<(*biter).typ<<" "<<(*biter).eta<<" "<<(*biter).phi<<" "<<(*biter).pt<<" "<<(*biter).jmas<<" "<<(*biter).ntrk<<" "<<(*biter).btag<<" "<<(*biter).had<<" "<<(*biter).dum1<<" "<<(*biter).dum2<& progeny= iter->children; for(vector::const_iterator biter = progeny.begin();biter != progeny.end();++biter) { } cout<<(*biter).numb<<" "<<(*biter).typ<<" "<<(*biter).eta<<" "<<(*biter).phi<<" "<<(*biter).pt<<" "<<(*biter).jmas<<" "<<(*biter).ntrk<<" "<<(*biter).btag<<" "<<(*biter).had<<" "<<(*biter).dum1<<" "<<(*biter).dum2<