#include #include #include #include #include #include #include #include #include #include #include #include #include #include #include "TParticle.h" #include using namespace std; void GetPDGPID(Int_t *, Int_t*); void Convert_GiBUU_2ROOT(){ // this class holds the variables for the events struct TGiBUUevent{ Int_t eventNumber; Int_t n_particles; Int_t particle_ID; Int_t charge; Float_t energy; Float_t momentumX; Float_t momentumY; Float_t momentumZ; Int_t Mother_PID; }; TGiBUUevent event; string s; TString r_string; //We will set r_string = s becaue ROOT has some nice comparison/contain functions with strings. istringstream instream; ifstream infile; infile.open("trial.dat"); Int_t stopn =0; //Some output TFile* f = new TFile("testParticle.root", "RECREATE"); TTree* t = new TTree("Tpart_tree", "A test tree"); TClonesArray* arr = new TClonesArray("TParticle"); TClonesArray &ar = *arr; t->Branch("b_TParticle",&arr,8000,99); arr->BypassStreamer(); while (!infile.eof() &&event.eventNumber < 100) { //if ((event.eventNumber%100)==0) cout<<"Event "<")) { event.n_particles = 0; event.eventNumber++; } else if (r_string.Contains("")) { cout<Fill(); }else{ event.n_particles++; ar.Clear(); instream.clear(); instream.str(s); instream >> event.particle_ID; instream >> event.charge; instream >> event.energy; instream >> event.momentumX; instream >> event.momentumY; instream >> event.momentumZ; instream >> event.Mother_PID; //Now lets convert GiBUU PID to PDG PID because TParticle uses PDG muber scheme GetPDGPID(&event.particle_ID, &event.charge); GetPDGPID(&event.Mother_PID, &event.charge); new(ar[event.n_particles]) TParticle(event.particle_ID, 1, event.Mother_PID, 0, 0, 0, event.momentumX, event.momentumY, event.momentumZ, event.energy, 0.0, 0.0, 0.0, 0.0); } } cout<Write(); f->Close(); infile.close(); } void GetPDGPID(Int_t *pid, Int_t *charge){ if (*pid == 999) { *pid = 22; } else if(*pid == 1 && *charge ==1){ *pid = 2212; } else if(*pid == 1 && *charge ==0){ *pid = 2112; } else if(*pid == 901 && *charge ==1){ *pid = -11; } else if(*pid == 901 && *charge ==-1){ *pid = 11; } else if(*pid == 101 && *charge ==-1){ *pid = -211; } else if(*pid == 101 && *charge ==1){ *pid = 211; } else if(*pid == 101 && *charge ==0){ *pid = 111; } else if(*pid == 102){ *pid = 221; } else if(*pid == 103){ *pid = 113; } else if(*pid == 105){ *pid = 223; } else if(*pid == 106){ *pid = 331; } else if(*pid == 107){ *pid = 333; } else if(*pid == 2){ *pid = 2114; } else if(*pid == 0){ *pid = 0; } else{ cout<<"PDG PID not set yet"<