/*##################################################################### # Author: Giuseppe La Rocca (giuseppe.larocca@ct.infn.it) # # ------------------------------------ # # Istituto Nazionale di Fisica Nucleare - Sez. di CATANIA # # Via Santa Sofia,64 - 95100 ITALY # # ------------------------------------ # # +39.095.378.54.46 +39.095.378.54.69 # #####################################################################*/ void GraphCODESA3D(const char *filename = "root-ntupla.dat.root", char *zeta = "0.1") { // Apertura file di ROOT e recupero oggetto TNtupleD. TFile *file = new TFile(filename, "READ"); // ------------------------------------------------------------------------------------------------// // Creazione di un oggetto TNupleD per rappresentare il Carico Piezometrico(p). TNtupleD *ntp = (TNtupleD*)file->Get("ntp"); Int_t nEntries = (Int_t)ntp->GetEntries(); // ------------------------------------------------------------------------------------------------// // Creazione di un oggetto TNupleD per rappresentare il Carico Idraulico(h). TNtupleD *ntp1 = (TNtupleD*)file->Get("ntp"); Int_t nEntries = (Int_t)ntp1->GetEntries(); // ------------------------------------------------------------------------------------------------// // Creazione di un oggetto TNupleD per rappresentare la Concentrazione(c). TNtupleD *ntp2 = (TNtupleD*)file->Get("ntp"); Int_t nEntries = (Int_t)ntp2->GetEntries(); Double_t *args = 0; Double_t *c1 = new Double_t[nEntries]; Double_t *c2 = new Double_t[nEntries]; Double_t *c3 = new Double_t[nEntries]; Double_t *c4 = new Double_t[nEntries]; Double_t *c5 = new Double_t[nEntries]; Double_t *c6 = new Double_t[nEntries]; char *title_piezometric = new char[1000]; char *title_hydraulic = new char[1000]; char *title_concentration = new char[1000]; sprintf(title_piezometric,"PIEZOMETRIC LOAD with Z > %s", zeta); sprintf(title_hydraulic,"HYDRAULIC LOAD with Z > %s", zeta); sprintf(title_concentration,"CONCENTRATION with Z > %s", zeta); TProfile2D *piezometric = new TProfile2D("Summary", title_piezometric, 200, 5.707E5, 6.032E5, 200, 3.524E5, 3.9321E5, -60, 100); TProfile2D *hydraulic = new TProfile2D("Summary", title_hydraulic, 200, 5.707E5, 6.032E5, 200, 3.524E5, 3.9321E5, -60, 100); TProfile2D *concentration = new TProfile2D("Summary", title_concentration, 200, 5.707E5, 6.032E5, 200, 3.524E5, 3.9321E5, -0.2, 0.1); // Convert the zeta axis into Double. Double_t zeta_axis = (Double_t)atof(zeta); Int_t entry; for (entry = 0; entry < nEntries; entry++) { // Lettura dei dati in ingresso. ntp->GetEntry(entry); args = ntp->GetArgs(); c1[entry] = args[0]; c2[entry] = args[1]; c3[entry] = args[2]; c4[entry] = args[3]; c5[entry] = args[4]; c6[entry] = args[5]; if (c3[entry] > zeta_axis) { //Riempimento degli oggetti TProfile2D. piezometric->Fill(c1[entry], c2[entry], c4[entry], 1); piezometric->SetFillColor(48); hydraulic->Fill(c1[entry], c2[entry], c5[entry]); hydraulic->SetFillColor(48); concentration->Fill(c1[entry], c2[entry], c6[entry]); concentration->SetFillColor(48); } } // Crea la finestra che conterra' i Grafici di CODESA3D. //TCanvas *canvas = new TCanvas("c", "CODESA3D 3D-Graphics", 70, 50, 1100, 800); //canvas->Divide(2, 2, 0.001, 0.001); TCanvas *canvas = new TCanvas("c", "CODESA3D 3D-Graphics", 0, 0, 550, 900); canvas->Divide(1, 3, 0.001, 0.001); canvas->cd(1); piezometric->Draw("colz"); canvas->cd(2); hydraulic->Draw("colz"); canvas->cd(3); concentration->Draw("colz"); // Ripristino del Cavas. canvas->cd(0); // Salvataggio del Canvas. canvas->SaveAs("CODESA3D.eps"); }