What Does ROOT TH1::SetDirectory Do?

  • Thread starter Thread starter ChrisVer
  • Start date Start date
  • Tags Tags
    Root
Click For Summary
SetDirectory in ROOT is a crucial function that determines the ownership of histograms with respect to directories. When a histogram is created, it is automatically associated with the current directory, which can lead to issues if the directory is deleted, as all associated histograms would also be deleted. By using SetDirectory(0), histograms are detached from the current directory, allowing them to persist independently. This is particularly important when displaying histograms on a canvas, as seen in the provided code example where the canvas appeared empty without detaching the histograms. The discussion highlights the analogy of directories in a filesystem, where histograms can be thought of as files within directories, emphasizing the importance of managing directory associations to ensure proper functionality and data retention in ROOT.
ChrisVer
Science Advisor
Messages
3,372
Reaction score
465
Can someone explain me what SetDirectory actually does?

I found the problem with a macro like that:

C:
#include<iostream>
#include <TH1F.h>
#include <TCanvas.h>
#include <TFile.h>

int histoSum(){

//create histograms to use
TH1F* histo1 = new TH1F("histo1",";A", 100, 0,10);
TH1F* histo2 = new TH1F("histo2",";B", 100, 0,10);
TH1F* histoSUM = new TH1F("histoSUM",";C", 100, 0,10);

//call histograms from a root file
TFile f ("histograms.root");
f.GetObject("h_A_events",histo1);
f.GetObject("h_B_events",histo2);

//add the histograms of A,B
histo1->sumw2();
histo2->sumw2();
histoSUM->Add(histo1,histo2);

//print the histogram of SUM on canvas
TCanvas * c= new TCanvas("sum_histos",900,700);
histoSUM->Draw();

return 0;
}

The problem when I ran the program like this, is that the Canvas appeared empty...
On the other hand if I set for my histos histo1,histo2,histoSUM the ->SetDirectory(0)

C:
[...]
f.GetObject("h_B_events",histo2);

histo1->SetDirectory(0);
histo2->SetDirectory(0);
histoSUM->SetDirectory(0);

//add the histograms of A,B
histo1->sumw2();
[...]

the histogram appeared in the canvas...
I only found this:
https://root.cern.ch/drupal/content/histograms-and-current-directory
but it doesn't help me understand how it works.
 
Last edited by a moderator:
Technology news on Phys.org
My reading of it is that the Directory is a means to group histograms together for easier organized operations. Specifically, it says that if you delete the Directory all associated histograms are deleted as well.

It seems to work like a filesystem with histograms representing files and Directories representing filesystem subdirectories. In the filesystem paradigm, one can work with files as a group with a common subdirectory name ie one can copy files or on can delete the subdirectory to delete its files (some cautions may apply ie might have to force the operation).

This page talks about changing Directory to get a different set of histograms:

https://root.cern.ch/drupal/content/subdirectories-and-navigation
 
Last edited by a moderator:
I tried a web search "the loss of programming ", and found an article saying that all aspects of writing, developing, and testing software programs will one day all be handled through artificial intelligence. One must wonder then, who is responsible. WHO is responsible for any problems, bugs, deficiencies, or whatever malfunctions which the programs make their users endure? Things may work wrong however the "wrong" happens. AI needs to fix the problems for the users. Any way to...

Similar threads

Replies
3
Views
5K
  • · Replies 1 ·
Replies
1
Views
11K
Replies
4
Views
11K
  • · Replies 49 ·
2
Replies
49
Views
12K
  • · Replies 7 ·
Replies
7
Views
8K
  • · Replies 67 ·
3
Replies
67
Views
15K
  • · Replies 1 ·
Replies
1
Views
3K