Hi Rooters,
I switch to the 2.20 version , and this might have been part of the
problem,
However I'm still not able to obtain the Histogram resulting from the
projection.
Nevertheless I thing this problem rather come from the directory where
the Histogram is set than
the Draw() object itself :
I'm openning a succesion of files where the a TNtuple has been filled
for each run.
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();
and then I'm projection this TNtuple into the TH1F,
My guess would be that the TH1F stays in the directory associated with
the NTtuple it comes from.
(even with the "+" in ->Draw("MSMass>>+DSDEDT"....) )
To bypass this problem, I've been obliged to declare a new TH1F
"current" to project the TNtuple
and then to copy "current" into a "repository" TH1F :
void PiAna::ProjNT(TFile* TF){
TH1F* current = new TH1F("current","tmp",120,-0.1,0.6);
TNtuple *FromFile;
TF->cd(); //optional
FromFile = (TNtuple*) TF->Get("Neutral_Events");
FromFile->Draw("MSMass>>current",cut,"goff");
DSDEDT->Add(DSDEDT,current);
current->Delete();
return;
}
This works, I obtain the same result than interactively but is king of
"heavy"
thanks for your concerne
Pascal
> Pascal,
> I cannot reproduce this problem. I assume you are using 2.20 or higher.
>
> Always use TTree::Draw. Project is an interface to Draw.
>
> I tested your example interactively and in batch mode without
> problems.
>
> Rene Brun
>
> Pascal Girard wrote:
> >
> > Hi all,
> >
> > I'm trying to project a TNtuple in to a pre-define
> > TH1F from a c++ code.
> > I Have seen on roottalk some references to this issue,
> > but It seems it doesn't work for me :
> >
> > I define a TH1F* RES :
> >
> > TH1F* RES;
> > RES = new TH1F("DEDT",title,120,-0.1,0.6);
> >
> > ...
> >
> > I read a TNtuple from file :
> >
> > TNtuple *FromFile;
> > FromFile = (TNtuple*) TF->Get("Neutral_Events");
> > FromFile->Project("DEDT","MSMass",cut,"goff");
> >
> > ...
> >
> > when I visualize DEDT , it's empty.
> >
> > I tryed the Draw solution :
> >
> > > TH1F *h1 = new TH1F(..
> > >
> > > The TTree::Draw function (in the form "m>>+h1") fills an histogram
> > > with the name "h1". In your case h1 is the name of the pointer,
> > > not the name of the histogram ("blat").
> > > It is a good practice to have the pointer_name = histogram_name.
> > > Your program will work with:
> > > TH1F *h1 = new TH1F("blat", "quat", 20, 4.5, 6);
> > > ntuple->Draw("m>>+blat", "(4.5 > h1->Draw();
> > > or
> > > TH1F *blat = new TH1F("blat", "quat", 20, 4.5, 6);
> > > ntuple->Draw("m>>+blat", "(4.5 > blat->Draw();
> > >
> > > Rene Brun
> >
> > But It doesn't recognise the "goff" option and try to open a canvas from a
> > batch job. And the final result is an empty histogram.
> >
> > In interactive root (on HP), Project(...) doesn't seems to work,
> > however
> > the Draw solution does.
> >
> > Any suggestions ?
> >
> > thanks
> >
> > Pascal
> >
> >
> >
>
>
--------------F6B686F8DDE507CF4112B080
Content-Type: text/html; charset=x-user-defined
Content-Transfer-Encoding: 7bit
<!doctype html public "-//w3c//dtd html 4.0 transitional//en">
Hi Rooters,
I switch to the 2.20 version , and this might have been part of the
problem,
However I'm still not able to obtain the Histogram resulting from the
projection.
Nevertheless I thing this problem rather come from the directory where
the Histogram is set than
the Draw() object itself :
I'm openning a succesion of files where the a TNtuple has been filled
for each run.
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();
and then I'm projection this TNtuple into the TH1F,
My guess would be that the TH1F stays in the directory associated with
the NTtuple it comes from.
(even with the "+" in ->Draw("MSMass>>+DSDEDT"....) )
To bypass this problem, I've been obliged to declare a new TH1F "current" to
project the TNtuple
and then to copy "current" into a "repository" TH1F :
void PiAna::ProjNT(TFile* TF){
TH1F* current = new TH1F("current","tmp",120,-0.1,0.6);
TNtuple *FromFile;
TF->cd(); //optional
FromFile = (TNtuple*) TF->Get("Neutral_Events");
FromFile->Draw("MSMass>>current",cut,"goff");
DSDEDT->Add(DSDEDT,current);
current->Delete();
return;
}
This works, I obtain the same result than interactively but is king of "heavy"
thanks for your concerne
Pascal
Pascal, I cannot reproduce this problem. I assume you are using 2.20 or higher. Always use TTree::Draw. Project is an interface to Draw. I tested your example interactively and in batch mode without problems. Rene Brun Pascal Girard wrote: > > Hi all, > > I'm trying to project a TNtuple in to a pre-define > TH1F from a c++ code. > I Have seen on roottalk some references to this issue, > but It seems it doesn't work for me : > > I define a TH1F* RES : > > TH1F* RES; > RES = new TH1F("DEDT",title,120,-0.1,0.6); > > ... > > I read a TNtuple from file : > > TNtuple *FromFile; > FromFile = (TNtuple*) TF->Get("Neutral_Events"); > FromFile->Project("DEDT","MSMass",cut,"goff"); > > ... > > when I visualize DEDT , it's empty. > > I tryed the Draw solution : > > > TH1F *h1 = new TH1F(.. > > > > The TTree::Draw function (in the form "m>>+h1") fills an histogram > > with the name "h1". In your case h1 is the name of the pointer, > > not the name of the histogram ("blat"). > > It is a good practice to have the pointer_name = histogram_name. > > Your program will work with: > > TH1F *h1 = new TH1F("blat", "quat", 20, 4.5, 6); > > ntuple->Draw("m>>+blat", "(4.5> h1->Draw(); > > or > > TH1F *blat = new TH1F("blat", "quat", 20, 4.5, 6); > > ntuple->Draw("m>>+blat", "(4.5 > blat->Draw(); > > > > Rene Brun > > But It doesn't recognise the "goff" option and try to open a canvas from a > batch job. And the final result is an empty histogram. > > In interactive root (on HP), Project(...) doesn't seems to work, > however > the Draw solution does. > > Any suggestions ? > > thanks > > Pascal > > >
--------------F6B686F8DDE507CF4112B080--