Re: [ROOT] Chaining files together

From: Edward Chen (edward@SLAC.stanford.edu)
Date: Sat Sep 07 2002 - 02:28:27 MEST


Hi - another way which I believe works is:

TString myBasePath =  "/nfs/farm/babar/AWG11/Charmonium/Etac/ntp13/"
TString myFileBase = "good_1999-b1-s0-r10B-on_all_["
for (i=1;i<=_numFiles;i++){
  TString myFullPath = myBasePath + myFileBase + i + "].root";
  run1.Add(myFullPath);
}

You can then write a macro as variation on this which takes TString's as
input.

-Ed

On Fri, 6 Sep 2002, Stilianos Kesisoglou wrote:

> Hi Philip,
>
>     The [i] doesn't work because ROOT expects a string argument in the method run1.Add(),
> and in contrast to all the shell languages it doesn't have a parser to make substitutions before it handles
> the string to the Add method.
>
>     So you have to construct the string outside the method call using C++ commands, and then hand it to Add().
>
>     Try the following:
>
>      TChain run1("h45");
>
>     char name[200];
>     for (Int_t i=1; i<13, i++)
>     {
>         sprintf(name,"/nfs/farm/babar/AWG11/Charmonium/Etac/ntp13/good_1999-b1-s0-r10B-on_all_[%i].root",i);
>         run1.Add(name);
>     }
>
>     for (Int_t i=1; i<58, i++)
>     {
>         sprintf(name, "/nfs/farm/babar/AWG11/Charmonium/Etac/ntp13/good_2000-b1-s0-r10B-on_all_[%i].root",i);
>         run1.Add(name);
>     }
>
> Stelios.
>
> ----- Original Message -----
> From: "Philip Clark" <pclark@SLAC.stanford.edu>
> To: <roottalk@pcroot.cern.ch>
> Sent: Friday, September 06, 2002 6:26 PM
> Subject: [ROOT] Chaining files together
>
>
> >
> > Hi Everyone,
> >
> > Currently, I am trying to loop over files and make chains. In PAW I would do:-
> >
> >  MACRO run1
> >    do i=1,12
> >      chain run1 good_1999-b1-s0-r10B-on_all_[i].hbook
> >    enddo
> >    do i=1,57
> >      chain run1 good_2000-b1-s0-r10B-on_all_[i].hbook
> >    enddo
> > etc
> >
> > I root I am trying to do something like
> >
> > TChain run1("h45");
> > for (Int_t i=1; i<13, i++)
> > {
> >   run1.Add("/nfs/farm/babar/AWG11/Charmonium/Etac/ntp13/good_1999-b1-s0-r10B-on_all_[i].root");
> > }
> > for (Int_t i=1; i<58, i++)
> > {
> >   run1.Add("/nfs/farm/babar/AWG11/Charmonium/Etac/ntp13/good_2000-b1-s0-r10B-on_all_[i].root");
> > }
> >
> > Obviously [i] wont work here... Any ideas instead? I need to loop over
> > several thousand files in this manner. So a better solution would help a
> > lot.
> >
> > Also a way to substitute the path
> > /nfs/farm/babar/AWG11/Charmonium/Etac/ntp13/
> > which is the same all the time would be good as well.
> >
> > Thanks
> >
> > -Phil
> >
> > --
> > Philip J. Clark                    MS41 (Bristol), SLAC
> > tel: 1-650-926-3761                Stanford University
> > fax: 1-650-926-3767                P.O. Box 20450
> > pclark@slac.stanford.edu           Stanford, California 94309
> >
>



This archive was generated by hypermail 2b29 : Sat Jan 04 2003 - 23:51:08 MET