/* Título: write_tre.C Autor: Jaime Acosta Descripción: lee un fichero .txt y escribe un tree de datos */ class event { // creamos la clase que define la rama public: event(){} ~event(){} Int_t GetMult(){return mult;} Int_t GetID(Int_t i){return ID[i];} Double_t GetE(Int_t i){return E[i];} void SetMult(Int_t m){mult = m;} void SetID(Int_t i){ID.push_back(i);} void SetE(Double_t e){E.push_back(e);} void Clear(){ mult = 0; ID.clear(); E.clear(); } protected: vector ID; vector E; Int_t mult; }; Int_t write_tree(){ // leer el fichero .txt ifstream ifile("datos.txt"); // crear el archivo .root de salida TFile *ofile = new TFile("60Co.root","RECREATE"); // creamos el tree TTree *tr = new TTree("tr","60Co calibration run"); // declarar qué contiene el tree Int_t n_evento_temp; event *evento_temp = new event(); // creamos el contenido del tree (las ramas) tr->Branch("evento", &evento_temp, 320000); tr->Branch("n_evento", &n_evento_temp, "n_evento/I"); Long64_t ts_new; Long64_t ts = 999999999999; Int_t id; Double_t e; n_evento_temp = 1; evento_temp->SetMult(0); ifile.ignore(1000,'\n'); while( ifile.good() ){ ifile >> ts_new >> id >> e; //cout << "timestamp: " << ts << "\t\tID: " << id << "\t\tE_raw: " << e << endl; if(ts_new - ts > 1000){ tr->Fill(); evento_temp->Clear(); n_evento_temp = n_evento_temp + 1; } evento_temp->SetID(id); evento_temp->SetE(e); evento_temp->SetMult(evento_temp->GetMult() + 1); ts = ts_new; } ifile.close(); ofile->cd(); tr->Write(); ofile->Close(); return 1; }