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
Pascal Girard wrote:
>
> 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
> > >
> > >
> > >
> >
> >