File valeurspics.root probably not closed, trying to recover

Hello,
I’m trying to understand why the following message: “file valeurspics.root probably not closed, trying to recover” appears on my code. I think I can close it using " output->Write();
output->Close();

  for (int j = 300; j <= 301; j++ )
             {
		fstream file;
		file.open("/home/dupuy/Documents/code_dupuy/Exercices/fichier texte/valeurspics.txt", ios::in);

		TFile *output = new TFile("/home/dupuy/Documents/code_dupuy/Exercices/fichier root/valeurspics.root","recreate");

		TTree *valeurspics_tree = new TTree("valeurspics_tree","valeurspics_tree");

		valeurspics_tree->Branch("Constant", &Constant);
		valeurspics_tree->Branch("Mean", &Mean);
		valeurspics_tree->Branch("Sigma", &Sigma);
                ....
                ....
                ....
                output->Write();
                output->Close();
                file.close();

	}

Try to add delete output; after output->Close();

I still have the same problem

Can you post something we can use to reproduce the issue? And can you tell which version of ROOT and on which platform this happens?

Instead of:
output->Write(); output->Close();
try:
valeurspics_tree->Write(); delete output;

void OM300()
{
	ofstream myfile;
	myfile.open("/home/dupuy/Documents/code_dupuy/Exercices/fichier texte/valeurspics.txt");
	myfile << "Constant" << "     " << "Mean" << "     " << "Sigma" <<"\n";


	for (int j = 300; j <= 301; j++ )
	{
		TCanvas *c1 = new TCanvas();

		TFile *input = new TFile("/home/dupuy/Documents/code_dupuy/Exercices/fichier root/histo_Li_system_565.root","READ");

		TTree *tree = (TTree*)input->Get("Result_tree;3");

		int om_number;
		double amplitude_tree,charge_tree, time;
		double Constant, Mean, Sigma;

		tree->SetBranchAddress("amplitude_tree", &amplitude_tree);
		tree->SetBranchAddress("charge_tree", &charge_tree);
		tree->SetBranchAddress("om_number", &om_number);
		tree->SetBranchAddress("time", &time);

  	int entries = tree->GetEntries();

  	cout << entries << endl;

  	TH1D *hist = new TH1D("hist", "premier pic",1000, 0, 500000);
		TH1D *hist2 = new TH1D("hist2", "deuxieme pic",1000, 0, 500000);
		TH1D *hist3 = new TH1D("hist3", "troisieme pic",1000, 0, 500000);
		TH1D *hist4 = new TH1D("hist4", "quatrieme pic",1000, 0, 500000);
		TH1D *hist5 = new TH1D("hist5", "cinquieme pic",1000, 0, 500000);
		TH1D *hist6 = new TH1D("hist6", "sixieme pic",1000, 0, 500000);

		TF1 *fit1 = new TF1("fit1", "gaus(0)", 0,500000);
		TF1 *fit2 = new TF1("fit2", "gaus(0)", 0,500000);
		TF1 *fit3 = new TF1("fit3", "gaus(0)", 0,500000);
		TF1 *fit4 = new TF1("fit4", "gaus(0)", 0,500000);
		TF1 *fit5 = new TF1("fit5", "gaus(0)", 0,500000);
		TF1 *fit6 = new TF1("fit6", "gaus(0)", 0,500000);



  	for(int i=0; i < entries; i++)
		    {
           tree->GetEntry(i);

					 if (time < 309 && time < 275 && om_number == j )
					 {
						 if((om_number >=260 && om_number <= 519) || (om_number >=584 && om_number<=647) || (om_number >= 680 && om_number <= 711))
						 {
					 	hist->Fill(charge_tree);
					   }
					 }
					 if (time < 350 && time > 315 && om_number == j )
					 {
						 if((om_number >=260 && om_number <= 519) || (om_number >=584 && om_number<=647) || (om_number >= 680 && om_number <= 711))
						 {
					  hist2->Fill(charge_tree);
					   }
					 }
					 if (time < 390 && time > 356 && om_number == j)
					 {
						 if((om_number >=260 && om_number <= 519) || (om_number >=584 && om_number<=647) || (om_number >= 680 && om_number <= 711))
						 {
					  hist3->Fill(charge_tree);
					   }
					 }
					 if (time < 431 && time > 396 && om_number == j)
					 {
						 if((om_number >=260 && om_number <= 519) || (om_number >=584 && om_number<=647) || (om_number >= 680 && om_number <= 711))
						 {
					  hist4->Fill(charge_tree);
				 	   }
					 }
					 if (time < 471 && time > 437 && om_number == j)
					 {
						 if((om_number >=260 && om_number <= 519) || (om_number >=584 && om_number<=647) || (om_number >= 680 && om_number <= 711))
						 {
					  hist5->Fill(charge_tree);
					   }
					 }
					 if (time <512 && time > 477 && om_number == j)
					 {
						 if((om_number >=260 && om_number <= 519) || (om_number >=584 && om_number<=647) || (om_number >= 680 && om_number <= 711))
						 {
					  hist6->Fill(charge_tree);
					   }
					 }

					 if (time < 62 && time < 27 && om_number == j )
					 {
						 if((om_number >=0 && om_number <= 259) || (om_number >=520 && om_number<=583) || (om_number >= 648 && om_number <= 679))
						 {
					 	hist->Fill(charge_tree);
					   }
					 }
					 if (time < 102 && time > 68 && om_number == j )
					 {
						 if((om_number >=0 && om_number <= 259) || (om_number >=520 && om_number<=583) || (om_number >= 648 && om_number <= 679))
						 {
					  hist2->Fill(charge_tree);
					   }
					 }
					 if (time < 143 && time > 108 && om_number == j)
					 {
						 if((om_number >=0 && om_number <= 259) || (om_number >=520 && om_number<=583) || (om_number >= 648 && om_number <= 679))
						 {
					  hist3->Fill(charge_tree);
					   }
					 }
					 if (time < 183 && time > 149 && om_number == j)
					 {
						 if((om_number >=0 && om_number <= 259) || (om_number >=520 && om_number<=583) || (om_number >= 648 && om_number <= 679))
						 {
					  hist4->Fill(charge_tree);
				 	   }
					 }
					 if (time < 223 && time > 189 && om_number == j)
					 {
						 if((om_number >=0 && om_number <= 259) || (om_number >=520 && om_number<=583) || (om_number >= 648 && om_number <= 679))
						 {
					  hist5->Fill(charge_tree);
					   }
					 }
					 if (time <264 && time > 229 && om_number == j)
					 {
						 if((om_number >=0 && om_number <= 259) || (om_number >=520 && om_number<=583) || (om_number >= 648 && om_number <= 679))
						 {
					  hist6->Fill(charge_tree);
					   }
					 }
				}

		fstream file;
		file.open("/home/dupuy/Documents/code_dupuy/Exercices/fichier texte/valeurspics.txt", ios::in);

		TFile *output = new TFile("/home/dupuy/Documents/code_dupuy/Exercices/fichier root/valeurspics.root","recreate");

		TTree *valeurspics_tree = new TTree("valeurspics_tree","valeurspics_tree");

		valeurspics_tree->Branch("Constant", &Constant);
		valeurspics_tree->Branch("Mean", &Mean);
		valeurspics_tree->Branch("Sigma", &Sigma);

		hist->GetXaxis()->SetTitle("charge");
		hist->GetYaxis()->SetTitle("nombre de coups");
		hist->GetXaxis()->SetTitleSize(0.05);
    hist->GetYaxis()->SetTitleSize(0.05);
    hist->GetXaxis()->SetLabelSize(0.05);
    hist->GetYaxis()->SetLabelSize(0.05);

		hist2->GetXaxis()->SetTitle("charge");
		hist2->GetYaxis()->SetTitle("nombre de coups");
		hist2->GetXaxis()->SetTitleSize(0.05);
		hist2->GetYaxis()->SetTitleSize(0.05);
		hist2->GetXaxis()->SetLabelSize(0.05);
		hist2->GetYaxis()->SetLabelSize(0.05);

		hist3->GetXaxis()->SetTitle("charge");
		hist3->GetYaxis()->SetTitle("nombre de coups");
		hist3->GetXaxis()->SetTitleSize(0.05);
		hist3->GetYaxis()->SetTitleSize(0.05);
		hist3->GetXaxis()->SetLabelSize(0.05);
		hist3->GetYaxis()->SetLabelSize(0.05);

		hist4->GetXaxis()->SetTitle("charge");
		hist4->GetYaxis()->SetTitle("nombre de coups");
		hist4->GetXaxis()->SetTitleSize(0.05);
		hist4->GetYaxis()->SetTitleSize(0.05);
		hist4->GetXaxis()->SetLabelSize(0.05);
		hist4->GetYaxis()->SetLabelSize(0.05);

		hist5->GetXaxis()->SetTitle("charge");
		hist5->GetYaxis()->SetTitle("nombre de coups");
		hist5->GetXaxis()->SetTitleSize(0.05);
		hist5->GetYaxis()->SetTitleSize(0.05);
		hist5->GetXaxis()->SetLabelSize(0.05);
		hist5->GetYaxis()->SetLabelSize(0.05);

		hist6->GetXaxis()->SetTitle("charge");
		hist6->GetYaxis()->SetTitle("nombre de coups");
		hist6->GetXaxis()->SetTitleSize(0.05);
		hist6->GetYaxis()->SetTitleSize(0.05);
		hist6->GetXaxis()->SetLabelSize(0.05);
		hist6->GetYaxis()->SetLabelSize(0.05);

		hist->Draw();
		hist->Fit("fit1","R");
		Constant = fit1->GetParameter(0);
		Mean = fit1->GetParameter(1);
		Sigma = fit1->GetParameter(2);

		c1->Print(Form("/home/dupuy/Documents/code_dupuy/Exercices/Image/%03i1.png", j));

		myfile << Constant << "     "<< Mean << "     "<< Sigma << "\n" ;

		while(1)
    {
		  file >> Constant >> Mean >> Sigma;

			valeurspics_tree->Fill();

			if(file.eof()) break;
    }

    hist2->Draw();
		hist2->Fit("fit2","R");
		Constant = fit2->GetParameter(0);
		Mean = fit2->GetParameter(1);
		Sigma = fit2->GetParameter(2);

		c1->Print(Form("/home/dupuy/Documents/code_dupuy/Exercices/Image/%03i2.png", j));
		myfile << Constant << "     "<< Mean << "     "<< Sigma << "\n";

		while(1)
    {
		  file >> Constant >> Mean >> Sigma;

			valeurspics_tree->Fill();

			if(file.eof()) break;
    }

		hist3->Draw();
		//lege->Draw();
		hist3->Fit("fit3","R");
		Constant = fit3->GetParameter(0);
		Mean = fit3->GetParameter(1);
		Sigma = fit3->GetParameter(2);

		cout << "parametre 1 = " << Constant << endl;

		c1->Print(Form("/home/dupuy/Documents/code_dupuy/Exercices/Image/%03i3.png", j));
		myfile << Constant << "     "<< Mean << "     "<< Sigma << "\n";

		while(1)
    {
			cout << Constant << "     " << Mean << "    " << Sigma  <<endl;

		  file >> Constant >> Mean >> Sigma;

			valeurspics_tree->Fill();

			if(file.eof()) break;
    }

    hist4->Draw();
		//lege->Draw();
		hist4->Fit("fit4","R");
		Constant = fit4->GetParameter(0);
		Mean = fit4->GetParameter(1);
		Sigma = fit4->GetParameter(2);

		c1->Print(Form("/home/dupuy/Documents/code_dupuy/Exercices/Image/%03i4.png", j));
		myfile << Constant << "     "<< Mean << "     "<< Sigma << "\n";

		while(1)
    {
			cout << Constant << "     " << Mean << "    " << Sigma  <<endl;

		  file >> Constant >> Mean >> Sigma;

			valeurspics_tree->Fill();

			if(file.eof()) break;
    }

		hist5->Draw();
		hist5->Fit("fit5","R");
		Constant = fit5->GetParameter(0);
		Mean = fit5->GetParameter(1);
		Sigma = fit5->GetParameter(2);

		c1->Print(Form("/home/dupuy/Documents/code_dupuy/Exercices/Image/%03i5.png", j));
		myfile << Constant << "     "<< Mean << "     "<< Sigma << "\n";

		while(1)
    {
			cout << Constant << "     " << Mean << "    " << Sigma  <<endl;

		  file >> Constant >> Mean >> Sigma;

			valeurspics_tree->Fill();

			if(file.eof()) break;
    }

    hist6->Draw();
    hist6->Fit("fit6","R");
		Constant = fit6->GetParameter(0);
		Mean = fit6->GetParameter(1);
		Sigma = fit6->GetParameter(2);

		c1->Print(Form("/home/dupuy/Documents/code_dupuy/Exercices/Image/%03i6.png", j));
		myfile << Constant << "     "<< Mean << "     "<< Sigma << "\n";

		while(1)
    {
			cout << Constant << "     " << Mean << "    " << Sigma  <<endl;

		  file >> Constant >> Mean >> Sigma;

			valeurspics_tree->Fill();

			if(file.eof()) break;
    }

    output->Write();
    output->Close();
    file.close();

	}


}

it still does not work, I specify that before I set up the loop on the totality of the program, it worked very well.

I don’t see anything obvious, even if I don’t understand the for (int j = 300; j <= 301; j++ ) loop, where you do everything (and re-create the same ROOT file) twice. Maybe you should move some of the code outside that loop

I want to go from 0 to 700 but to avoid waiting too long I put from 300 to 301

OK, but that means you will recreate the same file 700 times. Is it really what you want to do?

No, I draw 6 graphs for each loop which corresponds to a precise detector, then I save the values ​​of the fit in a text file and in a root file for each detector. In the end I want all the values ​​in the root file for the 700 detectors.

OK, so you should at least move this:

      TFile *output = new TFile("/home/dupuy/Documents/code_dupuy/Exercices/fichier root/valeurspics.root","recreate");
      [...]
      output->Close();

outside the loop, otherwise you recreate (overwrite) the file at each iteration and you will only have the latest value saved in the file. And possibly other part of the code too. For example:

      TCanvas *c1 = new TCanvas();

inside the loop will create 700 canvas.

This topic was automatically closed 14 days after the last reply. New replies are no longer allowed.