void FileSaver::writeObjsInFolder(string folder, bool recreate) { cout<<"*** Updating "<<filename.c_str()<<" file in "<< folder << endl; TFile * fileFinalPlots; if(recreate) fileFinalPlots=TFile::Open(filename.c_str(), "RECREATE"); else fileFinalPlots=TFile::Open(filename.c_str(), "UPDATE"); if (!fileFinalPlots->GetDirectory(folder.c_str())) fileFinalPlots->mkdir(folder.c_str()); fileFinalPlots->cd (folder.c_str()); cout<<"vrce: "<<fArr->At(0)<<endl; if(fArr->At(0)){ cout<<fArr->At(0)->GetName()<<endl; for (int i = 0; i <= fArr->GetLast(); i++){ cout<<fArr->At(i)<<" "<<fArr->At(i)->GetName()<<endl; fArr->At(i)->Write(fArr->At(i)->GetName(),2); cout<<"Object saved ..."<<endl; } } fileFinalPlots->Flush(); fileFinalPlots->Write(); fileFinalPlots->Close(); fArr->Clear(); return; }
void rdphi::Terminate() { //cout << "total event: " << NevtAll << "rejected: " << rejected_events << endl; TFile *f = new TFile("output.root","RECREATE"); //Write output Histograms TList *tl = GetOutputList(); int l = tl->GetEntries(); for ( int i = 0 ; i < l ; i++ ) { TObject *o = tl->At(i); if ( o->InheritsFrom("TH1") ) { cout << "TresChorros: Saving Histogram: " << " Class: " << o->ClassName() << " Name: "<< o->GetName() << " Title: " << o->GetTitle() << " " << endl << flush; o->Write(); } } f->Flush(); f->Close(); }
bool // returns true if success processTreeSection(FILE *fp, string& theline, bool& new_section) { string *tid = NULL; TChain *t1 = NULL; vector<string> v_tokens; string treename; if (gl_verbose) cout << "Processing Tree section" << endl; new_section=false; while (getLine(fp,theline,"Tree")) { if (!theline.size()) continue; if (theline[0] == '#') continue; // comments are welcome if (theline[0] == '[') { new_section=true; break; } string key, value; if (!getKeyValue(theline,key,value)) continue; //-------------------- if (key == "id") { //-------------------- if (tid != NULL) { cerr << "no more than one id per F1 section allowed " << value << endl; break; } tid = new string(value); map<string, TChain *>::const_iterator tit = glmap_id2chain.find(*tid); if (tit != glmap_id2chain.end()) { cerr << "Tree id " << *tid << " already defined" << endl; break; } //------------------------------ } else if( key == "treename" ) { //------------------------------ if( !tid ) { cerr << "id key must be defined first in the section" << endl; continue; } if( t1 ) { cerr << "Tree already defined" << endl; continue; } treename = value; //------------------------------ } else if( key == "globslist" ) { //------------------------------ t1 = getChainFromGlobslist(*tid,treename,value); if( !t1 ) exit(-1); //------------------------------ } else if( key == "copytree" ) { //------------------------------ if( !tid ) { cerr << "id key must be defined first in the section" << endl; continue; } Tokenize(value,v_tokens,","); if (v_tokens.size() != 2) { cerr << "copytree syntax expected: copytree=treeid,cutstring: " << value << endl; continue; } TChain *t2 = findChain(v_tokens[0]); if (!t2) { cerr << "tree " << v_tokens[0] << " must be defined previously" << endl; continue; } if (gl_verbose) cout<<"Begin CopyTree of "<<v_tokens[0]<<" with selection "<<v_tokens[1]<<flush; t1 = (TChain *)(t2->CopyTree(v_tokens[1].c_str())); if( !t1 ) { cerr << "CopyTree failed" << endl; exit(-1); } if (gl_verbose) cout<<"...Done."<<endl; //------------------------------ } else if( key == "save2file" ) { //------------------------------ if( !t1 ) { cerr << "save2file: must define tree first" << endl; continue; } TFile *rootfile = openRootFile(value,"RECREATE"); t1->SetDirectory(rootfile); t1->Write(); rootfile->Flush(); if (gl_verbose) cout << "Tree written to file " << value << endl; rootfile->Close(); //------------------------------ } else if( key == "unbinnedfit" ) { //------------------------------ if( !tid ) { cerr << "id key must be defined first in the section" << endl; continue; } if( !t1 ) { cerr << "Tree must already be defined using 'globslist'" << endl; continue; } int fitresult=-99; Tokenize(value,v_tokens,","); switch(v_tokens.size()) { case 2: fitresult = t1->UnbinnedFit(v_tokens[0].c_str(), v_tokens[1].c_str()); break; case 3: fitresult = t1->UnbinnedFit(v_tokens[0].c_str(), v_tokens[1].c_str(), v_tokens[2].c_str()); break; case 4: fitresult = t1->UnbinnedFit(v_tokens[0].c_str(), // funcname v_tokens[1].c_str(), // varexp v_tokens[2].c_str(), // selection v_tokens[3].c_str()); // option break; default: cerr << "unbinnedfit: expect 2-4 arguments separated by commas: " << value <<endl; exit(-1); } cout << "fit result returned = " << fitresult << endl; cout << "Number of selected entries in the fit = " << t1->GetSelectedRows() << endl; } else { cerr << "unknown key " << key << endl; } } if (tid) delete tid; return (t1 != NULL); } // processTreesection