RE: [ROOT] Help with TFile

From: Rene Brun (Rene.Brun@cern.ch)
Date: Thu Apr 10 2003 - 08:37:04 MEST


Hi Alex,

The function TSystem::AccessPathName cannot resolve $XXX variables,
but you can solve your problem in the following way
   char *path = 
   gSystem->ExpandPathName("$NTUPLE_DIR/B/BJpsiSkimFeb14%s_%d.root");
   Long_t id,size,flags,modtime;
   if(!gSystem->GetPathInfo(path,id,size,flags,modtime)){
    ...
   }
   delete path;

Rene Brun

On 
Wed, 
9 Apr 2003, Olivas, Alexander Raymond wrote:

> so i tried...
> 
>   Int_t i_last=272;
>   for(Int_t i=1;i<=i_last;i++){
>     char fileName[70];
>     sprintf(fileName,"/nfs/data04/olivas/Stream16/B/BJpsiSkimFeb14%s_%d.root",name,i);
>     //if(!gSystem->AccessPathname(fileName)){
>     Long_t* id;
>     Long_t* size;
>     Long_t* flags;
>     Long_t* modtime;
>     if(!gSystem->GetPathInfo(fileName,id,size,flags,modtime)){
>       cout<<gSystem->GetPathInfo(fileName,id,size,flags,modtime)<<":";
>       cout<<fileName;
>       if(id) cout<<" id:"<<*id;
>       if(size) cout<<" size:"<<*size;
>       if(flags) cout<<" flags:"<<*flags;
>       if(modtime) cout<<" modtime:"<<*modtime;
>       cout<<endl;
>       TFile f(fileName);
>       ksMassNoCuts->Add((TH1F*)f.Get("h1d3"));
>       ksMassCuts->Add((TH1F*)f.Get("h1d5"));
>       jpsiMassNoCuts->Add((TH1F*)f.Get("h1d7"));
>       jpsiMassCuts->Add((TH1F*)f.Get("h1d9"));
>     }
>   }
> 
> GetPathInfo seems to work just fine for checking whether files exist or not,
> but if the file does exist id, size, flags, and modtime are all "NULL."
> 
> i would like to have access to these, because i would also like to skip
> files that are open and currently being written to by batch jobs.
> 
> thanks,
> alex.
> 
> -----Original Message-----
> From: Rene Brun
> To: Sebastien Greder
> Cc: Olivas, Alexander Raymond; 'roottalk@root.cern.ch'
> Sent: 4/9/2003 2:39 AM
> Subject: Re: [ROOT] Help with TFile
> 
> Sebastien,
> 
> Thanks for correcting my mistake.
> 
> Rene
> 
> Sebastien Greder wrote:
> > 
> > Hi,
> > 
> > sorry but the AccessPathname return value is the opposite, cf
> classindex
> > doc :
> > 
> > Bool_t AccessPathName(const char *, EAccessMode)
> > 
> > Returns FALSE if one can access a file using the specified access
> mode.
> >  Attention, bizarre convention of return value!!
> > 
> > seb.
> > 
> > On Wed, 9 Apr 2003, Rene Brun wrote:
> > 
> > > Hi Alex,
> > >
> > > I don't know that is the "g" object in your statement g.Open !
> > >
> > > To test if a file exist, you can use
> > >    gSystem->AccessPathname(fileName);
> > > This will return kTRUE if the file can be accessed, kFALSE
> otherwise.
> > >
> > > Rene Brun
> > >
> > > "Olivas, Alexander Raymond" wrote:
> > > >
> > > > I'm not sure if this is the correct place to post this question,
> > > > but here it goes.
> > > >
> > > > I have many jobs currently creating quite a few root files.
> > > > I have the files numbered so I can read them using a simple
> > > > for loop.  However, some jobs haven't started yet and some
> > > > are still running. I would like to read only the files that
> > > > exist and are closed.
> > > >
> > > > I've tried something like...
> > > >
> > > >   Int_t i_last=272;
> > > >   for(Int_t i=1;i<=i_last;i++){
> > > >     char fileName[60];
> > > >
> sprintf(fileName,"$NTUPLE_DIR/B/BJpsiSkimFeb14%s_%d.root",name,i);
> > > >     if(g.Open(fileName)){
> > > >       TFile f(fileName);
> > > >       ksMassNoCuts->Add((TH1F*)f.Get("h1d3"));
> > > >     }
> > > >   }
> > > >
> > > > g.Open(fileName) still returns true if the file does not exist.
> > > > I've searched through the root page and have had trouble finding
> > > > anything that will allow me to assess the state of a file without
> > > > explicity trying to open it.
> > > >
> > > > Any help would be greatly appreciated.
> > > > Thanks,
> > > > Alex.
> > >
> 



This archive was generated by hypermail 2b29 : Thu Jan 01 2004 - 17:50:10 MET