Re Hi,
Sorry if I wasn't clear . I'm reading a succession of file with TNtuple.
my problem is to prevent the Histogram to disappear , when I'll close the
"current" file,
to read the next one.
The complete code of what i'm doing is following.
If I don't use this DSDEDT->Add(DSDEDT, current) procedure,
But something like
FromFile->Draw("MSMass>>+DSDEDT",cut,"goff");
The Histogram DSDEDT stays in the memory whit the ntuple I'm curently reading.
When I close the current file to read the next one, the Histogram "disappears".
Adding all the histograms in a single one seems to work. Technicly , I have what I
want to. However I think theire is a better way to do so. As you said, Rene , the
"Add()" thing
is a little bit dangerous and heavy. My first thougt was the + option (in
MSMass>>+DSDEDT)
would allow the Histogram to "stay" in memory after I close the file, but it didn't
work out.
thank you again
Pascal
//_____________________________________________________________
//_____________________________________________________________
the histogram DSDEDT is define as private in a class :
TH1F* DSDEDT;
....
Theire is a member of this class for its memory allocation :
//_____________________________________________________________
int PiAna::ResHisto(char* title){
DSDEDT = new TH1F("DSDEDT",title,120,-0.1,0.6);
return 1;
}
Then a Tfile is open to write out this histo :
//_____________________________________________________________
void PiAna::OpenResFile(char* particle, float angle, float E) {
char file[20];
sprintf(file,"%sT_%2.2fE_%2.2f",particle,angle,E);
FileFlag = OpenFile(file);
}
with
//_____________________________________________________________
int PiAna::OpenFile(char* outfile) {
// output file name determination and opening
int i;
char *strtemp = outfile;
char tempo[255];
for (i=1;(!((TUnixSystem*)gSystem)->AccessPathName(outfile));i++) {
cout <<outfile<< " already exists" <<endl;
sprintf(tempo,"%s.%d",strtemp,i);
outfile = tempo;
}
out = new TFile(outfile,"new");
cout<<"ROOT Output file : "<<outfile<<endl;;
return 1;
}
(out is pivate in the class : TFile *out;)
//_____________________________________________________________
The pre-existing TNtuple are stored on Tfiles , I open them and project them this
way
int PiAna::LoopOnFile() {
TFile *InNT;
char file[15];
for (int i=11400;i<11900;i++) {
sprintf(file,"HistoRun.%d",i);
if ( !((TUnixSystem*)gSystem)->AccessPathName(file) ) {
cout<<"Opening "<<file<<endl;
InNT = new TFile (file,"read");
ProjNT(InNT);
InNT->Close();
}
}
return 1;
}
//_____________________________________________________________
void PiAna::ProjNT(TFile* TF){
TH1F* current = new TH1F("current","tmp",120,-0.1,0.6);
TNtuple *FromFile;
TF->cd();
FromFile = (TNtuple*) TF->Get("Neutral_Events");
FromFile->Draw("MSMass>>current",cut,"goff");
DSDEDT->Add(DSDEDT,current);
current->Delete();
return;
}
//_____________________________________________________________
//_____________________________________________________________
the succesive steps are :
OpenResFile(particle, angle, (E*1000.));
HResFlag = ResHisto(title);
LoopOnFile();
out->cd();
DSDEDT->Write();
out->Write();
Rene Brun wrote:
> Hi Pascal,
> Could you make clear what is your problem?
> Provide a simple macro that does not work.
> In your example below, you have an extremely dangerous construct with
> the statement;
> DSDEDT->Add(..)
> Where is DSDEDT defined?
>
> Also, remember that when you create an histogram, this histogram is
> automatically added to the list of objects in memory associated to teh
> current file.
>
> Rene Brun
>
>
--------------F18F3526350D89E9A0DD1474
Content-Type: text/html; charset=x-user-defined
Content-Transfer-Encoding: 7bit
<!doctype html public "-//w3c//dtd html 4.0 transitional//en">
Re Hi,
Sorry if I wasn't clear . I'm reading a succession of file with TNtuple.
my problem is to prevent the Histogram to disappear , when I'll
close the "current" file,
to read the next one.
The complete code of what i'm doing is following.
If I don't use this DSDEDT->Add(DSDEDT, current) procedure,
But something like
FromFile->Draw("MSMass>>+DSDEDT",cut,"goff");
The Histogram DSDEDT stays in the memory whit the ntuple I'm curently
reading.
When I close the current file to read the next one, the Histogram "disappears".
Adding all the histograms in a single one seems to work. Technicly
, I have what I
want to. However I think theire is a better way to do so. As you said,
Rene , the "Add()" thing
is a little bit dangerous and heavy. My first thougt was the + option
(in MSMass>>+DSDEDT)
would allow the Histogram to "stay" in memory after I close the
file, but it didn't work out.
thank you again
Pascal
//_____________________________________________________________
//_____________________________________________________________
the histogram DSDEDT is define as private in a class :
TH1F* DSDEDT;
....
Theire is a member of this class for its memory allocation :
//_____________________________________________________________
int PiAna::ResHisto(char* title){
DSDEDT = new TH1F("DSDEDT",title,120,-0.1,0.6);
return 1;
}
Then a Tfile is open to write out this histo :
//_____________________________________________________________
void PiAna::OpenResFile(char* particle, float angle, float E) {
char file[20];
sprintf(file,"%sT_%2.2fE_%2.2f",particle,angle,E);
FileFlag = OpenFile(file);
}
with
//_____________________________________________________________
int PiAna::OpenFile(char* outfile) {
// output file name determination and opening
int i;
char *strtemp = outfile;
char tempo[255];
for (i=1;(!((TUnixSystem*)gSystem)->AccessPathName(outfile));i++)
{
cout <<outfile<< " already exists" <<endl;
sprintf(tempo,"%s.%d",strtemp,i);
outfile = tempo;
}
out = new TFile(outfile,"new");
cout<<"ROOT Output file : "<<outfile<<endl;;
return 1;
}
(out is pivate in the class : TFile *out;)
//_____________________________________________________________
The pre-existing TNtuple are stored on Tfiles , I open them and project
them this way
int PiAna::LoopOnFile() {
TFile *InNT;
char file[15];
for (int i=11400;i<11900;i++) {
sprintf(file,"HistoRun.%d",i);
if ( !((TUnixSystem*)gSystem)->AccessPathName(file)
) {
cout<<"Opening "<<file<<endl;
InNT = new TFile (file,"read");
ProjNT(InNT);
InNT->Close();
}
}
return 1;
}
//_____________________________________________________________
void PiAna::ProjNT(TFile* TF){
TH1F* current = new TH1F("current","tmp",120,-0.1,0.6);
TNtuple *FromFile;
TF->cd();
FromFile = (TNtuple*) TF->Get("Neutral_Events");
FromFile->Draw("MSMass>>current",cut,"goff");
DSDEDT->Add(DSDEDT,current);
current->Delete();
return;
}
//_____________________________________________________________ //_____________________________________________________________
the succesive steps are :
OpenResFile(particle, angle, (E*1000.));
HResFlag = ResHisto(title);
LoopOnFile();
out->cd();
DSDEDT->Write();
out->Write();
Rene Brun wrote:
Hi Pascal,--------------F18F3526350D89E9A0DD1474--
Could you make clear what is your problem?
Provide a simple macro that does not work.
In your example below, you have an extremely dangerous construct with
the statement;
DSDEDT->Add(..)
Where is DSDEDT defined?Also, remember that when you create an histogram, this histogram is
automatically added to the list of objects in memory associated to teh
current file.Rene Brun