// @(#)root/base:$Id$
// Author: Jan Fiete Grosse-Oetringhaus, 04.06.07

/*************************************************************************
 * Copyright (C) 1995-2000, Rene Brun and Fons Rademakers.               *
 * All rights reserved.                                                  *
 *                                                                       *
 * For the licensing terms see $ROOTSYS/LICENSE.                         *
 * For the list of contributors see $ROOTSYS/README/CREDITS.             *
 *************************************************************************/

//////////////////////////////////////////////////////////////////////////
//                                                                      //
// TDataSetManagerFile                                             //
//                                                                      //
// Implementation of TDataSetManager handling datasets from root   //
// files under a specific directory path                                //
//                                                                      //
//////////////////////////////////////////////////////////////////////////
#include <sys/stat.h>

#include "TDataSetManagerFile.h"

#include "Riostream.h"
#include "TDatime.h"
#include "TEnv.h"
#include "TFileCollection.h"
#include "TFileInfo.h"
#include "TFile.h"
#include "TFileStager.h"
#include "TLockFile.h"
#include "TMap.h"
#include "TRegexp.h"
#include "TMD5.h"
#include "TMacro.h"
#include "TMessage.h"
#include "TSystem.h"
#include "TError.h"
#include "TPRegexp.h"
#include "TVirtualMonitoring.h"
#include "TObjArray.h"
#include "THashList.h"
#include "TKey.h"
#include "TTree.h"
#include "TParameter.h"

struct LsTreeEntry_t {
   TObjString  *fGrp;      // Group
   TObjString  *fUsr;      // User
   TObjString  *fMd5;      // Checksum
   TObjString  *fLss;      // 'ls' string
   Long64_t     fMtime;    // modification time
   LsTreeEntry_t(const char *g, const char *u, const char *cs, const char *ls, Long64_t m) :
         fMtime(m) { fGrp = new TObjString(g); fUsr = new TObjString(u);
                     fMd5 = new TObjString(cs); fLss = new TObjString(ls); }
   ~LsTreeEntry_t() { SafeDelete(fGrp); SafeDelete(fUsr); SafeDelete(fMd5); SafeDelete(fLss);}
};

ClassImp(TDataSetManagerFile)

//_____________________________________________________________________________
TDataSetManagerFile::TDataSetManagerFile(const char *group,
                                         const char *user, const char *ins)
                    : TDataSetManager(group, user, ins)
{
   //
   // Main constructor

   // Parse options
   ParseInitOpts(ins);

   // Init the instance
   Init();
}

//_____________________________________________________________________________
TDataSetManagerFile::TDataSetManagerFile(const char *ins)
                    : TDataSetManager("", "", ins)
{
   //
   // Main constructor

   // Parse options
   ParseInitOpts(ins);

   // Init the instance
   Init();
}

//______________________________________________________________________________
void TDataSetManagerFile::Init()
{
   // Do the real inititialization

   fIsRemote = kFALSE;
   if (!fUser.IsNull() && !fGroup.IsNull() && !fDataSetDir.IsNull()) {

      // Make sure that the dataset dir exists
      TString dir;
      dir.Form("%s/%s/%s", fDataSetDir.Data(), fGroup.Data(), fUser.Data());
      if (gSystem->AccessPathName(dir)) {
         if (gSystem->mkdir(dir, kTRUE) != 0) {
            TString emsg = dir;
            // Read only dataset info system: switch to COMMON
            fUser = fCommonUser;
            fGroup = fCommonGroup;
            ResetBit(TDataSetManager::kCheckQuota);
            ResetBit(TDataSetManager::kAllowRegister);
            ResetBit(TDataSetManager::kAllowVerify);
            ResetBit(TDataSetManager::kTrustInfo);
            dir.Form("%s/%s/%s", fDataSetDir.Data(), fGroup.Data(), fUser.Data());
            if (gSystem->AccessPathName(dir)) {
               Error("Init",
                     "could not attach to a valid the dataset dir; paths tried:");
               Error("Init", "    %s", emsg.Data());
               Error("Init", "    %s", dir.Data());
               SetBit(TObject::kInvalidObject);
               return;
            }
         }
         else if (fOpenPerms) {

            // Directory creation was OK: let's open permissions if requested
            TString t;
            Int_t rr = 0;

            t.Form("%s/%s/%s", fDataSetDir.Data(), fGroup.Data(), fUser.Data());
            rr += gSystem->Chmod(t.Data(), 0777);

            t.Form("%s/%s", fDataSetDir.Data(), fGroup.Data());
            rr += gSystem->Chmod(t.Data(), 0777);

            rr += gSystem->Chmod(fDataSetDir.Data(), 0777);

            if (rr < 0) {
               t.Form("%s/%s/%s", fDataSetDir.Data(), fGroup.Data(),
                 fUser.Data());
               Warning("Init",
                 "problems setting perms of dataset directory %s (#%d)",
                 t.Data(), TSystem::GetErrno());
            }

         }
      }

      // If not in sandbox, construct the base URI using session defaults
      // (group, user) (syntax: /group/user/dsname[#[subdir/]objname])
      if (!TestBit(TDataSetManager::kIsSandbox))
         fBase.SetUri(TString(Form("/%s/%s/", fGroup.Data(), fUser.Data())));

      // Local or remote?
      TString locPath;
      TFile::EFileType pathType = TFile::GetType(fDataSetDir, "READ", &locPath);
      if (pathType == TFile::kLocal) {
         // Remote Url pointing to this machine
         fDataSetDir = locPath;
         if (gDebug > 0)
            Info("Init", "repository '%s' is local", fDataSetDir.Data());
      } else if (pathType != TFile::kDefault && pathType != TFile::kFile) {
         fIsRemote = kTRUE;
         if (gDebug > 0)
            Info("Init", "repository '%s' is remote", fDataSetDir.Data());
      }

      // Read locking path from kDataSet_LockLocation
      TString lockloc = TString::Format("%s/%s", fDataSetDir.Data(), kDataSet_LockLocation);
      if (!gSystem->AccessPathName(lockloc, kReadPermission)) {
         // Open the file in RAW mode
         lockloc += "?filetype=raw";
         TFile *f = TFile::Open(lockloc);
         if (f && !(f->IsZombie())) {
            const Int_t blen = 8192;
            char buf[blen];
            Long64_t rest = f->GetSize();
            while (rest > 0) {
               Long64_t len = (rest > blen - 1) ? blen - 1 : rest;
               if (f->ReadBuffer(buf, len)) {
                  fDataSetLockFile = "";
                  break;
               }
               buf[len] = '\0';
               fDataSetLockFile += buf;
               rest -= len;
            }
            f->Close();
            SafeDelete(f);
            fDataSetLockFile.ReplaceAll("\n","");
         } else {
            lockloc.ReplaceAll("?filetype=raw", "");
            Warning("Init", "could not open remore file '%s' with the lock location", lockloc.Data());
         }
      }
      if (fDataSetLockFile.IsNull()) {
         fDataSetLockFile.Form("%s-dataset-lock", fDataSetDir.Data());
         fDataSetLockFile.ReplaceAll("/","%");
         fDataSetLockFile.ReplaceAll(":","%");
         fDataSetLockFile.Insert(0, TString::Format("%s/", gSystem->TempDirectory()));
      }
      if (!fDataSetLockFile.IsNull() && fIsRemote) {
         TUrl lu(fDataSetLockFile, kTRUE);
         if (!strcmp(lu.GetProtocol(), "file")) {
            // Add host and port
            TUrl u(fDataSetDir);
            TString srv(fDataSetDir);
            srv.Remove(srv.Index(u.GetFile()));
            fDataSetLockFile.Insert(0, srv);
         }
      }
   }

   // Limit in seconds after a lock automatically expires
   fLockFileTimeLimit = 120;

   // Default validity of the cache
   fCacheUpdatePeriod = gEnv->GetValue("ProofDataSet.CacheUpdatePeriod", 0);

   // If the MSS url was not given, check if one is defined via env
   if (fMSSUrl.IsNull())
      fMSSUrl = gEnv->GetValue("ProofDataSet.MSSUrl", "");
   // Default highest priority for xrd-backends
   fStageOpts = gEnv->GetValue("DataSet.StageOpts", "p=3");

   // File to check updates and its locking path
   fListFile.Form("%s/%s", fDataSetDir.Data(), kDataSet_DataSetList);

   // Init the local cache directory if the repository is remote
   fUseCache = kFALSE;
   fLocalCacheDir = "";
   InitLocalCache();
}
//______________________________________________________________________________
void TDataSetManagerFile::InitLocalCache()
{
   // Init the local cache if required

   fUseCache = (fIsRemote) ? kTRUE : kFALSE;

   // Check if the caller has given specific instructions
   TString useCache;
   if (TestBit(TDataSetManager::kUseCache)) useCache = "yes";
   if (TestBit(TDataSetManager::kDoNotUseCache)) useCache = "no";
   if (useCache.IsNull()) useCache = gEnv->GetValue("DataSet.UseCache", "");
   if (useCache.IsNull() && gSystem->Getenv("DATASETCACHE"))
      useCache = gSystem->Getenv("DATASETCACHE");
   useCache.ToLower();
   if (!useCache.IsNull())
      fUseCache = (useCache == "no" || useCache == "0") ? kFALSE : kTRUE;

   if (fUseCache) {
      fLocalCacheDir = gSystem->Getenv("DATASETLOCALCACHEDIR");
      if (fLocalCacheDir.IsNull())
         fLocalCacheDir = gEnv->GetValue("DataSet.LocalCacheDir", "");
      if (!fLocalCacheDir.IsNull()) {
         // Make sure that the non-default local cache directory exists and is writable
         if (gSystem->AccessPathName(fLocalCacheDir)) {
            if (gSystem->mkdir(fLocalCacheDir, kTRUE) != 0) {
               // Switch to default
               Warning("InitLocalCache",
                        "non-default local cache directory '%s' could not be created"
                        " - switching to default", fLocalCacheDir.Data());
               fLocalCacheDir = "";
            }
         }
         if (!fLocalCacheDir.IsNull() &&
               gSystem->AccessPathName(fLocalCacheDir, kWritePermission)) {
            Warning("InitLocalCache",
                     "non-default local cache directory '%s' is not writable"
                     " - switching to default",
                     fDataSetDir.Data());
            fLocalCacheDir = "";
         }
      }
      // If not defined yet try the (unique) default
      if (fLocalCacheDir.IsNull()) {
         // Add something related to fDataSetDir
         TString uds(fDataSetDir.Data());
         uds.ReplaceAll("/","%");
         uds.ReplaceAll(":","%");
         if (TString(gSystem->TempDirectory()).EndsWith(fUser.Data())) {
            fLocalCacheDir.Form("%s/%s/%s", gSystem->TempDirectory(),
                                 kDataSet_LocalCache, uds.Data());
         } else {
            fLocalCacheDir.Form("%s/%s/%s/%s", gSystem->TempDirectory(),
                                 fUser.Data(), kDataSet_LocalCache, uds.Data());
         }
         // Make sure that the local cache dir exists and is writable
         if (gSystem->AccessPathName(fLocalCacheDir) && gSystem->mkdir(fLocalCacheDir, kTRUE) != 0) {
            // Disable
            Warning("InitLocalCache",
                     "local cache directory '%s' could not be created"
                     " - disabling cache", fLocalCacheDir.Data());
            fUseCache = kFALSE;
         }
         if (!fLocalCacheDir.IsNull() &&
             gSystem->AccessPathName(fLocalCacheDir, kWritePermission)) {
            Warning("InitLocalCache",
                     "local cache directory '%s' is not writable - disabling cache",
                     fDataSetDir.Data());
            fUseCache = kFALSE;
         }
         if (!fUseCache) fLocalCacheDir = "";
      }
   }
   // Done
   return;
}

//______________________________________________________________________________
void TDataSetManagerFile::ParseInitOpts(const char *ins)
{
   // Parse the input string and set the init bits accordingly
   // Format is
   //    dir:<datasetdir> [mss:<mss-url>] [opt:<base-options>]
   // The <datasetdir> is mandatory.
   // See TDataSetManager::ParseInitOpts for the available
   // base options.
   // The base options are already initialized by the base constructor

   SetBit(TObject::kInvalidObject);
   fOpenPerms = kFALSE;

   // Needs something in
   if (!ins || strlen(ins) <= 0) return;

   // Extract elements
   Int_t from = 0;
   TString s(ins), tok;
   while (s.Tokenize(tok, from, " ")) {
      if (tok.BeginsWith("dir:"))
         fDataSetDir = tok(4, tok.Length());
      if (tok.BeginsWith("mss:"))
         fMSSUrl = tok(4, tok.Length());
      if (tok == "perms:open")
         fOpenPerms = kTRUE;
   }

   // The directory is mandatory
   if (fDataSetDir.IsNull()) return;

   // Object is valid
   ResetBit(TObject::kInvalidObject);
}

//______________________________________________________________________________
const char *TDataSetManagerFile::GetDataSetPath(const char *group,
                                                const char *user,
                                                const char *dsName,
                                                TString &md5path, Bool_t local)
{
   // Returns path of the indicated dataset. The extension is '.root' for all files
   // except for 'dsName==ls' which have extension '.txt'.
   // If 'local' is kTRUE the local cache path is returned instead in the form
   // <cachedir>/<group>.<user>.<dsName>.<ext>.
   // NB: contains a static TString for result, so copy result before using twice.

   if (fgCommonDataSetTag == group)
     group = fCommonGroup;

   if (fgCommonDataSetTag == user)
     user = fCommonUser;

   const char *ext = (!strcmp(dsName, "ls")) ? ".txt" : ".root";
   static TString result;
   if (local) {
      result.Form("%s/%s.%s.%s%s", fLocalCacheDir.Data(), group, user, dsName, ext);
      md5path.Form("%s/%s.%s.%s.md5sum", fLocalCacheDir.Data(), group, user, dsName);
   } else {
      result.Form("%s/%s/%s/%s%s", fDataSetDir.Data(), group, user, dsName, ext);
      md5path.Form("%s/%s/%s/%s.md5sum", fDataSetDir.Data(), group, user, dsName);
   }
   if (gDebug > 0)
      Info("GetDataSetPath","paths: %s, %s ", result.Data(), md5path.Data());
   return result;
}

//______________________________________________________________________________
Int_t TDataSetManagerFile::NotifyUpdate(const char *group, const char *user,
                                        const char *dsName, Long_t mtime, const char *checksum)
{
   // Save into the <datasetdir>/kDataSet_DataSetList file the name of the updated
   // or created or modified dataset. For still existing datasets, fill the
   // modification date in seconds anf the checksum.
   // Returns 0 on success, -1 on error

   // Update / create list for the owner
   Long_t lsmtime = 0;
   TString lschecksum;
   Int_t lsrc = -1;
   if ((lsrc = CreateLsFile(group, user, lsmtime, lschecksum)) < 0) {
      Warning("NotifyUpdate", "problems (re-)creating the dataset lists for '/%s/%s'",
                              group, user);
   }

   {  TLockFile lock(fDataSetLockFile, fLockFileTimeLimit);
      TString dspath = TString::Format("/%s/%s/%s", group, user, dsName);
      // Check if the global file exists
      Bool_t hasListFile = gSystem->AccessPathName(fListFile) ? kFALSE : kTRUE;
      // Load the info in form of TMacro
      TMD5 *oldMd5 = 0, *newMd5 = 0;
      if (hasListFile && !(oldMd5 = TMD5::FileChecksum(fListFile.Data()))) {
         Error("NotifyUpdate", "problems calculating old checksum of %s", fListFile.Data());
         return -1;
      }
      // Create the TMacro object, filling it with the existing file, if any
      TMacro mac;
      if (hasListFile) mac.ReadFile(fListFile.Data());
      // Locate the line to change or delete
      TObjString *os = mac.GetLineWith(dspath);
      if (os) {
         // Delete the line if required so
         if (!strcmp(checksum, "removed")) {
            mac.GetListOfLines()->Remove(os);
            SafeDelete(os);
         } else {
            // Update the information
            os->SetString(TString::Format("%ld %s %s", mtime, dspath.Data(), checksum));
         }
      } else {
         if (!strcmp(checksum, "removed")) {
            Warning("NotifyUpdate", "entry for removed dataset '%s' not found!", dspath.Data());
         } else {
            // Add new line
            mac.AddLine(TString::Format("%ld %s %s", mtime, dspath.Data(), checksum));
         }
      }
      // Locate the ls line now, is needed
      TString lspath = TString::Format("/%s/%s/ls", group, user);
      os = mac.GetLineWith(lspath);
      if (os) {
         // Delete the line if required so
         if (lsrc == 1) {
            mac.GetListOfLines()->Remove(os);
            SafeDelete(os);
         } else {
            // Update the information
            os->SetString(TString::Format("%ld %s %s", lsmtime, lspath.Data(), lschecksum.Data()));
         }
      } else {
         if (lsrc == 0) {
            // Add new line
            mac.AddLine(TString::Format("%ld %s %s", lsmtime, lspath.Data(), lschecksum.Data()));
         }
      }
      // Write off the new content
      mac.SaveSource(fListFile.Data());
      if (fOpenPerms) {
         if (gSystem->Chmod(fListFile.Data(), 0666) < 0) {
            Warning("NotifyUpdate",
               "can't set permissions of dataset list file %s (#%d)",
               fListFile.Data(), TSystem::GetErrno());
         }
      }
      if (!(newMd5 = TMD5::FileChecksum(fListFile.Data()))) {
         Error("NotifyUpdate", "problems calculating new checksum of %s", fListFile.Data());
         SafeDelete(oldMd5);
         return -1;
      }
      if (oldMd5 && (*newMd5 == *oldMd5))
         Warning("NotifyUpdate", "checksum for %s did not change!", fListFile.Data());
      // Cleanup
      SafeDelete(oldMd5);
      SafeDelete(newMd5);
   }
   // Done
   return 0;
}

//______________________________________________________________________________
Int_t TDataSetManagerFile::CreateLsFile(const char *group, const char *user,
                                        Long_t &mtime, TString &checksum)
{
   // Create or recreate the dataset lists for 'uri'.
   // The list are saved in text form in 'uri'/ls.txt for fast browsing and in
   // 'uri'/ls.root in form of TMacro for optimized and portable transfer.
   // Return 0 on success, 1 if the file was empty, -1 on error

   mtime = 0;
   checksum = "";
   // Create temporary file; we cannot lock now because we would (dead-)lock
   // during ShowDataSets
   TString tmpfile;
   tmpfile.Form("%s/%s/%s/ls.tmp.txt", fDataSetDir.Data(), group, user);

   // Redirect output to 'tmpfile'
   RedirectHandle_t rh;
   if (gSystem->RedirectOutput(tmpfile.Data(), "w", &rh) != 0) {
      Error("CreateLsFile", "problems redirecting output to %s (errno: %d)",
                            tmpfile.Data(), TSystem::GetErrno());
      return -1;
   }
   // Create the list
   TString uri;
   uri.Form("/%s/%s", group, user);
   ShowDataSets(uri, "forcescan:noheader:");
   // Restore output to standard streams
   if (gSystem->RedirectOutput(0, 0, &rh) != 0) {
      Error("CreateLsFile", "problems restoring output to standard streams (errno: %d)",
                            TSystem::GetErrno());
      return -1;
   }
   // We can lock now
   TLockFile lock(fDataSetLockFile, fLockFileTimeLimit);
   // Rename the temp file
   TString lsfile;
   lsfile.Form("%s/%s/%s/ls.txt", fDataSetDir.Data(), group, user);
   // Remove the file, if existing
   if (!gSystem->AccessPathName(lsfile) && gSystem->Unlink(lsfile) != 0) {
      Error("CreateLsFile", "problems unlinking old file '%s' (errno: %d)",
                            lsfile.Data(), TSystem::GetErrno());
      return -1;
   }
   // Save the new file only if non empty
   FileStat_t st;
   if (gSystem->GetPathInfo(tmpfile, st) == 0 && st.fSize > 0) {
      if (gSystem->Rename(tmpfile, lsfile) != 0) {
         Error("CreateLsFile", "problems renaming '%s' to '%s' (errno: %d)",
                              tmpfile.Data(), lsfile.Data(), TSystem::GetErrno());
         return -1;
      }
#ifndef WIN32
      // Make sure that the ownership and permissions are those expected
      FileStat_t udirst;
      if (!fIsRemote && gSystem->GetPathInfo(gSystem->DirName(tmpfile), udirst) == 0) {
         if (chown(lsfile.Data(), udirst.fUid, udirst.fGid) != 0) {
            Warning("CreateLsFile", "problems setting ownership on file '%s' (errno: %d)",
                                    lsfile.Data(), TSystem::GetErrno());
         }
         if (fOpenPerms) {
            if (gSystem->Chmod(lsfile.Data(), 0666) < 0) {
               Warning("NotifyUpdate",
                  "can't set permissions of list file %s (#%d)",
                  lsfile.Data(), TSystem::GetErrno());
            }
         }
         else if (chmod(lsfile.Data(), 0644) != 0) {
            Warning("CreateLsFile", "problems setting permissions on file '%s' (errno: %d)",
                                    lsfile.Data(), TSystem::GetErrno());
         }
      }
#endif
      mtime = st.fMtime;
      TMD5 *md5 = TMD5::FileChecksum(lsfile);
      if (!md5) {
         Error("CreateLsFile", "problems calculating checksum for '%s'", lsfile.Data());
      } else {
         checksum = md5->AsString();
         SafeDelete(md5);
      }
   } else {
      if (!gSystem->AccessPathName(tmpfile) && gSystem->Unlink(tmpfile) != 0) {
         Error("CreateLsFile", "problems unlinking temp file '%s' (errno: %d)",
                               tmpfile.Data(), TSystem::GetErrno());
         return -1;
      }
      // No datasets anymore
      return 1;
   }
   // Done
   return 0;
}

//______________________________________________________________________________
Bool_t TDataSetManagerFile::BrowseDataSets(const char *group, const char *user,
                                           const char *dsName,
                                           UInt_t option, TObject *target)
{
   // Adds the dataset in the folder of group, user to the list in target.
   // If dsName is defined, only the information about the specified dataset
   // is processed.
   //
   // The unsigned int 'option' is forwarded to GetDataSet and BrowseDataSet.
   // Available options (to be .or.ed):
   //    kPrint          print the dataset content
   //    kQuotaUpdate    update quotas
   //    kExport         use export naming
   //    kList           get a list of dataset names
   //
   // NB1: options "kPrint", "kQuoatUpdate" and "kExport" are mutually exclusive
   // NB2: for options "kPrint" and "kQuotaUpdate" return is null.

   TString userDirPath;
   userDirPath.Form("%s/%s/%s", fDataSetDir.Data(), group, user);
   void *userDir = gSystem->OpenDirectory(userDirPath);
   if (!userDir)
     return kFALSE;

   // Options
   Bool_t printing = (option & kPrint) ? kTRUE : kFALSE;
   Bool_t exporting = (option & kExport) ? kTRUE : kFALSE;
   Bool_t updating = (option & kQuotaUpdate) ? kTRUE : kFALSE;
   Bool_t printout = (printing && (option & kDebug)) ? kTRUE : kFALSE;
   Bool_t listing = (option & kList) ? kTRUE : kFALSE;

   // If printing is required add kReadShort to the options
   if (printing || updating)
      option |= kReadShort;

   // The last three options are mutually exclusive
   if (((Int_t)printing + (Int_t)exporting + (Int_t)updating + (Int_t)listing) > 1) {
      Error("BrowseDataSets",
            "only one of kPrint, kQuotaUpdate, kExport or kList can be specified at once");
      return kFALSE;
   }
   Bool_t fillmap = (!exporting && !printing && !updating) ? kTRUE : kFALSE;

   // Output object
   TMap *outmap = (fillmap || exporting || listing) ? (TMap *)target : (TMap *)0;
   TList *outlist = (printing) ? (TList *)target : (TList *)0;

   TRegexp rg("^[^./][^/]*.root$");  //check that it is a root file, not starting with "."

   TRegexp *reds = 0;
   if (dsName && strlen(dsName) > 0) reds = new TRegexp(dsName, kTRUE);

   TMap *userMap = 0, *datasetMap = 0;
   // loop over datasets
   const char *dsEnt = 0;
   while ((dsEnt = gSystem->GetDirEntry(userDir))) {
      TString datasetFile(dsEnt);
      if (datasetFile.Index(rg) != kNPOS) {
         TString datasetName(datasetFile(0, datasetFile.Length()-5));

         // Check dataset name, if required
         if (reds && datasetName.Index(*reds) == kNPOS) continue;

         if (gDebug > 0)
            Info("GetDataSets", "found dataset %s of user %s in group %s",
                                 datasetName.Data(), user, group);

         TFileCollection *fileList = GetDataSet(group, user, datasetName, option);
         if (!fileList) {
            Error("GetDataSets", "dataset %s (user %s, group %s) could not be opened",
                                 datasetName.Data(), user, group);
            continue;
         }
         if (gDebug > 0)
            fileList->Print();

         // We found a dataset, now add it to the map

         // COMMON dataset transition
         const char *mapGroup = group;
         if (fCommonGroup == mapGroup)
            mapGroup = fgCommonDataSetTag.Data();
         const char *mapUser = user;
         if (fCommonUser == mapUser)
            mapUser = fgCommonDataSetTag.Data();

         if (fillmap && !listing && outmap) {
            if (!(userMap = dynamic_cast<TMap*> (outmap->GetValue(mapGroup)))) {
               userMap = new TMap;
               userMap->SetOwner();
               outmap->Add(new TObjString(mapGroup), userMap);
            }

            if (!(datasetMap = dynamic_cast<TMap*> (userMap->GetValue(mapUser)))) {
               datasetMap = new TMap;
               datasetMap->SetOwner();
               userMap->Add(new TObjString(mapUser), datasetMap);
            }
         }

         // Action depends on option
         if (exporting) {

            // Just format the dataset name with group and user
            TString dsNameFormatted(Form("/%s/%s/%s", mapGroup,
                                                      mapUser, datasetName.Data()));
            if (outmap)
               outmap->Add(new TObjString(dsNameFormatted), fileList);

         } else if (updating) {

            // Update quotas
            GetQuota(mapGroup, mapUser, datasetName.Data(), fileList);

         } else if (printing) {

            // Prepare the output list
            if (outlist) {
               TString dsNameFormatted(Form("/%s/%s/%s", mapGroup,
                                                         mapUser, datasetName.Data()));
               // Magic number?
               if (dsNameFormatted.Length() < 42)
                  dsNameFormatted.Resize(42);

               // Done
               outlist->Add(fileList->ExportInfo(dsNameFormatted));
               if (printout) {
                  // Recreating the LS file
                  TObjString *os = (TObjString *) outlist->Last();
                  if (os) Printf("%s", os->GetName());
               }
            }
         } else if (listing) {

            // Just a list of available datasets
            if (outmap) {
               outmap->Add(new TObjString(TString::Format("/%s/%s/%s", mapGroup, mapUser, datasetName.Data())),
                           new TObjString(""));
            }
         } else {
            if (fillmap && datasetMap)
               datasetMap->Add(new TObjString(datasetName), fileList);
         }
      }
   }
   gSystem->FreeDirectory(userDir);
   SafeDelete(reds);

   return kTRUE;
}

//______________________________________________________________________________
TMap *TDataSetManagerFile::GetDataSets(const char *group, const char *user,
                                       const char *dsName, UInt_t option)
{
   // General purpose call to go through the existing datasets.
   // If <user> is 0 or "*", act on all datasets for the given <group>.
   // If <group> is 0 or "*", act on all datasets.
   // If <dsName> is defined, only the information about the specified dataset
   // is processed.
   // Action depends on option; available options:
   //
   //    kExport         Return a TMap object containing all the information about
   //                    datasets in the form:
   //                    { <group>, <map of users> }
   //                                     |
   //                             { <map of datasets>, <dataset>}
   //                    (<dataset> are TFileCollection objects)
   //    kShowDefault    as kExport with in addition a default selection including
   //                    the datasets from the current user, the ones from the group
   //                    and the common ones
   //
   //    kPrint          print the dataset content; no output is returned
   //    kList           get a list of available dataset names
   //    kForceScan      Re-open files while processing kPrint (do not use the
   //                    pre-processed information)
   //    kNoHeaderPrint  Labelling header is not printed
   //    kQuotaUpdate    update {group, user} quotas; no output is returned
   //
   // NB1: options "kPrint", "kQuoatUpdate" and "kExport" are mutually exclusive
   // NB2: for options "kPrint" and "kQuoatUpdate" return is null.

   if (group && fgCommonDataSetTag == group)
     group = fCommonGroup;

   if (user && fgCommonDataSetTag == user)
     user = fCommonUser;

   // Special treatment for the COMMON user
   Bool_t notCommonUser = kTRUE;
   if ((user && fCommonUser == user) &&
       (group && fCommonGroup == group)) notCommonUser = kFALSE;

   // convert * to "nothing"
   if (group && (strcmp(group, "*") == 0 || !group[0]))
      group = 0;
   if (user && (strcmp(user, "*") == 0 || !user[0]))
      user = 0;

   Bool_t printing = (option & kPrint) ? kTRUE : kFALSE;
   Bool_t forcescan = (option & kForceScan) ? kTRUE : kFALSE;
   Bool_t printheader = (option & kNoHeaderPrint) ? kFALSE : kTRUE;
   Bool_t exporting = (option & kExport) ? kTRUE : kFALSE;
   Bool_t updating = (option & kQuotaUpdate) ? kTRUE : kFALSE;
   Bool_t refreshingls = (option & kRefreshLs) ? kTRUE : kFALSE;
   Bool_t listing = (option & kList) ? kTRUE : kFALSE;

   // The last three options are mutually exclusive
   if (((Int_t)printing + (Int_t)exporting + (Int_t)updating + (Int_t)listing) > 1) {
      Error("GetDataSets", "only one of '?P', '?Q', '?E' or '?L' can be specified at once");
      return 0;
   }

   TObject *result = 0;
   if (printing) {
      // The output is a list of strings
      TList *ol = new TList();
      ol->SetOwner();
      result = ol;
   } else if (exporting || !updating || listing) {
      TMap *om = new TMap;
      om->SetOwner();
      result = om;
   }

   if (gDebug > 0)
      Info("GetDataSets", "opening dir %s", fDataSetDir.Data());

   Long_t m;
   TString s;
   if (option & kShowDefault) {
      // Add the common ones
      if (refreshingls) {
         if (CreateLsFile(fCommonGroup, fCommonUser, m, s) != 0)
            Warning("GetDataSets", "problems recreating 'ls' info for {%s,%s}",
                                   fCommonGroup.Data(), fCommonUser.Data());
      } else if (!printing || forcescan || (printing &&
                 FillLsDataSet(fCommonGroup, fCommonUser, dsName, (TList *)result, option) != 0)) {
         BrowseDataSets(fCommonGroup, fCommonUser, dsName, option, result);
      }
      user = 0;
   } else {
      // Fill the information at least once
      if (!notCommonUser) notCommonUser = kTRUE;
   }

   // Fill the information only once
   if (notCommonUser) {
      // group, user defined, no looping needed
      if (user && group && strchr(user, '*') && strchr(group, '*')) {
         if (refreshingls) {
            if (CreateLsFile(group, user, m, s) != 0)
               Warning("GetDataSets", "problems recreating 'ls' info for {%s,%s}",
                                      group, user);
         } else if (!printing || forcescan || (printing &&
                    FillLsDataSet(group, user, dsName, (TList *)result, option) != 0)) {
            BrowseDataSets(group, user, dsName, option, result);
         }
         if (!printing) return (TMap *)result;
      } else {
         TRegexp *reg = (group && strlen(group) > 0) ? new TRegexp(group, kTRUE) : 0;
         TRegexp *reu = (user && strlen(user) > 0) ? new TRegexp(user, kTRUE) : 0;
         // Loop needed, either on the local cache or on the real thing
         if (printing && !forcescan &&
             fUseCache && CheckLocalCache(group, user, 0, option) == 0) {
            // Loop on the local cache
            Int_t from = 0;
            TString locupdate, dsn, grp, usr;
            locupdate.Form("%s/%s", fLocalCacheDir.Data(), kDataSet_DataSetList);
            TMacro uptmac(locupdate);
            TIter nxl(uptmac.GetListOfLines());
            TObjString *os = 0;
            while ((os = (TObjString *) nxl())) {
               if (!(os->GetString().Contains("/ls"))) continue;
               from = 0;
               if (!(os->GetString().Tokenize(dsn, from, " "))) continue;
               if (!(os->GetString().Tokenize(dsn, from, " "))) continue;
               from = 0;
               // Get group and apply filter on group
               if (!(dsn.Tokenize(grp, from, "/")) || (reg && (grp.Index(*reg) == kNPOS))) continue;
               // Get user and apply filter on user
               if (!(dsn.Tokenize(usr, from, "/")) || (reu && (usr.Index(*reu) == kNPOS))) continue;
               // Now get the info
               if (FillLsDataSet(grp, usr, dsName, (TList *)result, option) != 0) {
                  // Use the standard way opening all the files
                  BrowseDataSets(grp, usr, dsName, option, result);
               }
            }
         } else {
            // Loop needed on the real thing
            void *dataSetDir = 0;
            if ((dataSetDir = gSystem->OpenDirectory(fDataSetDir))) {
               // loop over groups
               const char *eg = 0;
               while ((eg = gSystem->GetDirEntry(dataSetDir))) {

                  if (strcmp(eg, ".") == 0 || strcmp(eg, "..") == 0)
                     continue;

                  if (reg && (TString(eg).Index(*reg) == kNPOS))
                     continue;

                  TString groupDirPath;
                  groupDirPath.Form("%s/%s", fDataSetDir.Data(), eg);

                  // Make sure it is a directory
                  FileStat_t dirSt;
                  if (gSystem->GetPathInfo(groupDirPath, dirSt) != 0 || !R_ISDIR(dirSt.fMode))
                     continue;

                  void *groupDir = gSystem->OpenDirectory(groupDirPath);
                  if (!groupDir)
                     continue;

                  // loop over users
                  const char *eu = 0;
                  while ((eu = gSystem->GetDirEntry(groupDir))) {

                     if (strcmp(eu, ".") == 0 || strcmp(eu, "..") == 0)
                        continue;

                     if (reu && (TString(eu).Index(*reu) == kNPOS))
                        continue;

                     // If we have the ls.macro use that
                     if (refreshingls) {
                        if (CreateLsFile(eg, eu, m, s) != 0)
                           Warning("GetDataSets", "problems recreating 'ls' info for {%s,%s}",
                                                  eg, eu);
                     } else if (!printing || forcescan || (printing &&
                                 FillLsDataSet(eg, eu, dsName, (TList *)result, option) != 0)) {
                        // Use the standard way opening all the files
                        BrowseDataSets(eg, eu, dsName, option, result);
                     }
                  }
                  gSystem->FreeDirectory(groupDir);
               }
               gSystem->FreeDirectory(dataSetDir);
            }
         }
         SafeDelete(reg);
         SafeDelete(reu);
      }
   }
   // Print the result, if required
   if (printing) {
      TList *output = (TList *)result;
      output->Sort();
      if (printheader) {
         Printf("Dataset repository: %s", fDataSetDir.Data());
         Printf("Dataset URI                               | # Files | Default tree | # Events |   Disk   | Staged");
      }
      TIter iter4(output);
      TObjString *os = 0;
      while ((os = dynamic_cast<TObjString*> (iter4()))) {
         if (os->GetString().BeginsWith("file:")) {
            // Path of the file to be browsed
            TString path(os->GetString()(5, os->GetString().Length()));
            RedirectHandle_t rh(path.Data());
            gSystem->ShowOutput(&rh);
            fflush(stderr);
         } else {
            // Simple line
            Printf("%s", os->String().Data());
         }
      }
      // Cleanup
      SafeDelete(output);
      result = 0;
   }

   return (TMap *)result;
}

//______________________________________________________________________________
Int_t TDataSetManagerFile::FillLsDataSet(const char *group, const char *user,
                                         const char *dsname, TList *out, UInt_t option)
{
   // Check for the 'ls.txt' for 'group' and 'user' and fill the path for the
   // ls file in 'out'.
   // If 'dsname' is defined, open the file and extract the relevant line.
   // Return 0 on success, -1 on failure

   // Check inputs
   if (!group || strlen(group) <= 0 || !user || strlen(user) <= 0 || !out) {
      Error("FillLsDataSet", "at least one of the inputs is invalid (%s,%s,%p)", group, user, out);
      return -1;
   }

   // File with the TMacro
   Int_t crc = -1;
   TString lsfile, lsmd5file;
   if (!fUseCache || (fUseCache && (crc = CheckLocalCache(group, user, "ls", option)) <= 0)) {
      Bool_t local = (crc == 0) ? kTRUE : kFALSE;
      lsfile = GetDataSetPath(group, user, "ls", lsmd5file, local);
   } else {
      // The dataset does not exist anymore
      return 0;
   }

   if (gSystem->AccessPathName(lsfile, kFileExists)) {
      if (gDebug > 0)
         Info("FillLsDataSet", "file '%s' does not exists", lsfile.Data());
      return -1;
   }
   if (gSystem->AccessPathName(lsfile, kReadPermission)) {
      Warning("FillLsDataSet", "file '%s' exists cannot be read (permission denied)", lsfile.Data());
      return -1;
   }

   if (dsname && strlen(dsname) > 0) {
      // Read the macro
      TMacro *mac = new TMacro(lsfile.Data());
      if (!mac) {
         Error("FillLsDataSet", "could not initialize TMacro from '%s'", lsfile.Data());
         return -1;
      }
      // Prepare the string to search for
      TString fullname = TString::Format("/%s/%s/%s", group, user, dsname);
      Bool_t wc = (fullname.Contains("*")) ? kTRUE : kFALSE;
      if (wc) fullname.ReplaceAll("*", ".*");
      TRegexp reds(fullname);
      TIter nxl(mac->GetListOfLines());
      TObjString *o;
      Int_t nf = 0;
      while ((o = (TObjString *) nxl())) {
         if (o->GetString().Index(reds) != kNPOS) {
            out->Add(o->Clone());
            nf++;
            if (!wc) break;
         }
      }
      if (nf > 0 && gDebug > 0)
         Info("FillLsDataSet", "no match for dataset uri '/%s/%s/%s'", group, user, dsname);
      // Delete the macro
      SafeDelete(mac);
   } else {
      // Fill in the file information
      out->Add(new TObjString(TString::Format("file:%s", lsfile.Data())));
   }
   // Done
   return 0;
}

//______________________________________________________________________________
TFileCollection *TDataSetManagerFile::GetDataSet(const char *group,
                                                 const char *user,
                                                 const char *dsName,
                                                 UInt_t option,
                                                 TMD5 **checksum)
{
   //
   // Returns the dataset <dsName> of user <user> in group <group> .
   // If checksum is non-zero, it will contain the pointer to a TMD5 sum object
   // with the checksum of the file, has to be deleted by the user.
   // If option has the bi kReadShort set, the shortobject is read, that does not
   // contain the list of files. This is much faster.

   TFileCollection *fileList = 0;
   Bool_t readshort = (option & kReadShort) ? kTRUE : kFALSE;
   // Check is the file is in the cache
   Int_t crc = -1;
   TString path, md5path;
   if (readshort || !fUseCache ||
      (!readshort && fUseCache && (crc = CheckLocalCache(group, user, dsName, option)) <= 0)) {
      Bool_t local = (crc == 0) ? kTRUE : kFALSE;
      path = GetDataSetPath(group, user, dsName, md5path, local);
   } else {
      // The dataset does not exist (anymore?)
      if (gDebug > 0)
         Info("GetDataSet", "dataset %s does not exist", path.Data());
      return fileList;
   }

   // Now we lock because we are going to use the file, if there
   TLockFile lock(fDataSetLockFile, fLockFileTimeLimit);

   // Check if the file can be opened for reading
   if (gSystem->AccessPathName(path, kFileExists)) {
      if (gDebug > 0)
         Info("GetDataSet", "file '%s' does not exists", path.Data());
      return fileList;
   }
   if (gSystem->AccessPathName(path, kReadPermission)) {
      Warning("GetDataSet", "file '%s' exists cannot be read (permission denied)", path.Data());
      return fileList;
   }

   // Get checksum
   if (checksum) {
      // save md5 sum
      *checksum = TMD5::ReadChecksum(md5path);
      if (!(*checksum)) {
         Error("GetDataSet", "could not get checksum of %s from %s", path.Data(), md5path.Data());
         return fileList;
      }
   }

   TFile *f = TFile::Open(path.Data());
   if (!f) {
      Error("GetDataSet", "could not open file %s", path.Data());
      if (checksum) SafeDelete(*checksum);
      return fileList;
   }

   if (option & kReadShort)
     fileList = dynamic_cast<TFileCollection*> (f->Get("dataset_short"));

   if (!fileList)
     fileList = dynamic_cast<TFileCollection*> (f->Get("dataset"));

   f->Close();
   SafeDelete(f);

   return fileList;
}

//______________________________________________________________________________
Int_t TDataSetManagerFile::CheckLocalCache(const char *group, const char *user,
                                           const char *dsName, UInt_t option)
{
   // Check if the local cache information for group, user, dsName is up-to-date
   // If not, make the relevant updates
   // Return 0 if OK, 1 if the dataset does not exists anymore, -1 on failure

   // Check first if the global update info is uptodate
   static TMacro *uptmac = 0;
   Bool_t need_last_update = (option & kNoCacheUpdate) ? kFALSE : kTRUE;
   TString locupdtim, locupdate, remupdate;
   locupdtim.Form("%s/%s.update", fLocalCacheDir.Data(), kDataSet_DataSetList);
   locupdate.Form("%s/%s", fLocalCacheDir.Data(), kDataSet_DataSetList);
   remupdate.Form("%s/%s", fDataSetDir.Data(), kDataSet_DataSetList);
   need_last_update = (gSystem->AccessPathName(locupdate)) ? kTRUE : need_last_update;
   TDatime now;
   UInt_t tnow = now.Convert();
   FileStat_t timst, locst, remst;
   if (need_last_update && !gSystem->AccessPathName(locupdtim)) {
      if (gSystem->GetPathInfo(locupdtim, timst) == 0) {
         need_last_update = kFALSE;
         if ((Int_t)tnow > timst.fMtime + fCacheUpdatePeriod) need_last_update = kTRUE;
      }
   }
   if (need_last_update) {
      if (gSystem->GetPathInfo(remupdate, remst) != 0) {
         Error("CheckLocalCache", "cannot get info for remote file '%s' - ignoring", remupdate.Data());
         return -1;
      }
      if (gSystem->GetPathInfo(locupdate, locst) == 0) {
         need_last_update = kFALSE;
         if (remst.fMtime > locst.fMtime) {
            need_last_update = kTRUE;
         } else {
            if (!gSystem->AccessPathName(locupdtim))
               if (gSystem->Utime(locupdtim, tnow, 0) != 0)
                  Warning("CheckLocalCache",
                          "cannot set modification time on file '%s' (errno: %d)",
                          locupdtim.Data(), TSystem::GetErrno());
         }
      }
   }
   // Get the file, if needed
   if (need_last_update) {
      if (!TFile::Cp(remupdate, locupdate, kFALSE)) {
         Error("CheckLocalCache", "cannot get remote file '%s' - ignoring", remupdate.Data());
         return -1;
      }
      // Set the modification time
      if (gSystem->Utime(locupdate, remst.fMtime, 0) != 0) {
         Warning("CheckLocalCache", "cannot set modification time on file '%s' (errno: %d)",
                           locupdate.Data(), TSystem::GetErrno());
      }
      // Touch or create the file to control updates
      if (gSystem->AccessPathName(locupdtim)) {
         FILE *ftim = fopen(locupdtim.Data(), "w");
         if (!ftim) {
            Warning("CheckLocalCache", "problems create file '%s' (errno: %d)",
                                       locupdtim.Data(), TSystem::GetErrno());
         } else {
            if (fclose(ftim) != 0)
               Warning("CheckLocalCache", "problems close file '%s' (errno: %d)",
                                          locupdtim.Data(), TSystem::GetErrno());
            if (gSystem->Utime(locupdtim, now.Convert(), 0) != 0)
               Warning("CheckLocalCache",
                       "cannot set modification time on file '%s' (errno: %d)",
                       locupdtim.Data(), TSystem::GetErrno());
         }
      }
      // Update macro info
      SafeDelete(uptmac);
      uptmac = new TMacro(locupdate);
   } else {
      // Touch or create the file to control updates
      if (gSystem->AccessPathName(locupdtim)) {
         FILE *ftim = fopen(locupdtim.Data(), "w");
         if (!ftim) {
            Warning("CheckLocalCache", "problems create file '%s' (errno: %d)",
                                       locupdtim.Data(), TSystem::GetErrno());
         } else {
            if (fclose(ftim) != 0)
               Warning("CheckLocalCache", "problems close file '%s' (errno: %d)",
                                          locupdtim.Data(), TSystem::GetErrno());
            if (gSystem->GetPathInfo(locupdate, locst) == 0) {
               if (gSystem->Utime(locupdtim, locst.fMtime, 0) != 0)
                  Warning("CheckLocalCache",
                          "cannot set modification time on file '%s' (errno: %d)",
                          locupdtim.Data(), TSystem::GetErrno());
            } else {
               Warning("CheckLocalCache", "cannot get info for file '%s'"
                       " - will not touch '%s'", locupdate.Data(), locupdtim.Data());
            }
         }
      }
      if (!uptmac) uptmac = new TMacro(locupdate);
   }

   // If we are just interested in the global dataset list we are done
   if (!dsName || strlen(dsName) <= 0)
      return 0;

   // Read the information
   TString ds, locpath, path, locmd5path, md5path, remmd5s;
   TMD5 *locmd5 = 0;
   // The paths ...
   path = GetDataSetPath(group, user, dsName, md5path);
   locpath = GetDataSetPath(group, user, dsName, locmd5path, kTRUE);
   ds.Form("/%s/%s/%s", group, user, dsName);
   TObjString *os = uptmac->GetLineWith(ds);
   if (!os) {
      // DataSet does not exist anymore
      if (strcmp(dsName, "ls"))
         Warning("CheckLocalCache", "dataset '%s' does not exists anymore", ds.Data());
      return 1;
   }
   // Extract the relevant information
   TString s;
   Int_t from = 0;
   while (os->GetString().Tokenize(s, from, " ")) {
      if (!s.IsDigit() && s != ds) {
         remmd5s = s;
      }
   }
   if (remmd5s == "---") {
      // DataSet does not exist anymore
      if (strcmp(dsName, "ls"))
         Warning("CheckLocalCache", "dataset '%s' does not exists anymore", ds.Data());
      return 1;
   }
   Bool_t need_update = (option & kNoCacheUpdate) ? kFALSE : kTRUE;
   if (!gSystem->AccessPathName(locpath)) {
      if (need_update) {
         need_update = kFALSE;
         locmd5 = TMD5::ReadChecksum(locmd5path);
         if (!locmd5 && !(locmd5 = TMD5::FileChecksum(locpath))) {
            Warning("CheckLocalCache", "cannot get checksum of '%s' - assuming match failed", ds.Data());
            need_update = kTRUE;
         } else {
            if (remmd5s != locmd5->AsString()) need_update = kTRUE;
         }
      }
   } else {
      need_update = kTRUE;
   }
   // Get the file, if needed
   if (need_update) {
      SafeDelete(locmd5);
      if (!TFile::Cp(path, locpath, kFALSE)) {
         Error("CheckLocalCache", "cannot get remote file '%s' - ignoring", path.Data());
         return -1;
      }
      // Calculate and save the new checksum
      locmd5 = TMD5::FileChecksum(locpath);
      if (locmd5) {
         if (remmd5s != locmd5->AsString())
            Warning("CheckLocalCache", "checksum for freshly downloaded file '%s' does not match the"
                               " one posted in '%s'", locpath.Data(), kDataSet_DataSetList);
         if (TMD5::WriteChecksum(locmd5path, locmd5) != 0)
            Warning("CheckLocalCache", "problems saving checksum to '%s' (errno: %d)",
                               locmd5path.Data(), TSystem::GetErrno());
      } else {
         Warning("CheckLocalCache", "problems calculating checksum for '%s'", locpath.Data());
      }
   }
   SafeDelete(locmd5);
   // Done
   return 0;
}

//______________________________________________________________________________
Int_t TDataSetManagerFile::ClearCache(const char *uri)
{
   // Clear cached information matching uri

   // Open the top directory
   void *dirp = gSystem->OpenDirectory(fLocalCacheDir.Data());
   if (!dirp) {
      Error("ClearCache", "cannot open directory '%s' (errno: %d)",
                          fLocalCacheDir.Data(), TSystem::GetErrno());
      return -1;
   }
   TRegexp *re = 0;
   if (uri && strlen(uri) > 0) {
      if (strcmp(uri, "*") && strcmp(uri, "/*") && strcmp(uri, "/*/") &&
          strcmp(uri, "/*/*") && strcmp(uri, "/*/*/") && strcmp(uri, "/*/*/*")) {
         TString u(uri);
         // Remove leading '/'
         if (u(0) == '/') u.Remove(0,1);
         // Change '/' to '%'
         u.ReplaceAll("/", ".");
         // Init the regular expression
         u.ReplaceAll("*", ".*");
         re = new TRegexp(u.Data());
      }
   }

   Printf(" Dataset repository: %s", fDataSetDir.Data());
   Printf(" Local cache directory: %s", fLocalCacheDir.Data());

   Long64_t totsz = 0, nf = 0;
   FileStat_t st;
   TString path;
   const char *e = 0;
   while ((e = gSystem->GetDirEntry(dirp))) {
      // Skip basic entries
      if (!strcmp(e,".") || !strcmp(e,"..")) continue;
      // Apply regular expression, if requested
      if (re && TString(e).Index(*re) == kNPOS) continue;
      // Group directory
      path.Form("%s/%s", fLocalCacheDir.Data(), e);
      // Get file information
      if (gSystem->GetPathInfo(path, st) != 0) {
         Warning("ShowCache", "problems 'stat'-ing '%s' (errno: %d)",
                               path.Data(), TSystem::GetErrno());
         continue;
      }
      // Count
      totsz += st.fSize;
      nf++;
      // Remove the file
      if (gSystem->Unlink(path) != 0) {
         Warning("ClearCache", "problems unlinking '%s' (errno: %d)",
                               path.Data(), TSystem::GetErrno());
      }
   }
   gSystem->FreeDirectory(dirp);
   SafeDelete(re);

   // Notify totals
   Printf(" %lld bytes (%lld files) have been freed", totsz, nf);

   // Done
   return 0;
}

//______________________________________________________________________________
Int_t TDataSetManagerFile::ShowCache(const char *uri)
{
   // Show cached information matching uri

   // Open the top directory
   void *dirp = gSystem->OpenDirectory(fLocalCacheDir.Data());
   if (!dirp) {
      Error("ShowCache", "cannot open directory '%s' (errno: %d)",
                         fLocalCacheDir.Data(), TSystem::GetErrno());
      return -1;
   }
   TRegexp *re = 0;
   if (uri && strlen(uri) > 0) {
      if (strcmp(uri, "*") && strcmp(uri, "/*") && strcmp(uri, "/*/") &&
          strcmp(uri, "/*/*") && strcmp(uri, "/*/*/") && strcmp(uri, "/*/*/*")) {
         TString u(uri);
         // Remove leading '/'
         if (u(0) == '/') u.Remove(0,1);
         // Change '/' to '%'
         u.ReplaceAll("/", ".");
         // Init the regular expression
         u.ReplaceAll("*", ".*");
         re = new TRegexp(u.Data());
      }
   }

   Printf(" Dataset repository: %s", fDataSetDir.Data());
   Printf(" Local cache directory: %s", fLocalCacheDir.Data());
   Printf(" Last modified        Size(bytes)  File");

   Long64_t totsz = 0, nf = 0;
   FileStat_t st;
   TString path, sz;
   const char *e = 0;
   while ((e = gSystem->GetDirEntry(dirp))) {
      // Skip basic entries
      if (!strcmp(e,".") || !strcmp(e,"..")) continue;
      // Apply regular expression, if requested
      if (re && TString(e).Index(*re) == kNPOS) continue;
      // Group directory
      path.Form("%s/%s", fLocalCacheDir.Data(), e);
      // Get file information
      if (gSystem->GetPathInfo(path, st) != 0) {
         Warning("ShowCache", "problems 'stat'-ing '%s' (errno: %d)",
                               path.Data(), TSystem::GetErrno());
         continue;
      }
      // Count
      totsz += st.fSize;
      nf++;
      // Get modification time in human readable form
      TDatime tmod(st.fMtime);
      sz.Form("%lld", st.fSize);
      sz.Resize(12);
      Printf(" %s  %s %s", tmod.AsSQLString(), sz.Data(), e);
   }
   gSystem->FreeDirectory(dirp);
   SafeDelete(re);

   // Notify totals
   Printf(" %lld files, %lld bytes", nf, totsz);

   // Done
   return 0;
}

//______________________________________________________________________________
Int_t TDataSetManagerFile::WriteDataSet(const char *group, const char *user,
                                        const char *dsName, TFileCollection *dataset,
                                        UInt_t option, TMD5 *checksum)
{
   //
   // Writes indicated dataset.
   // If option has the bit kFileMustExist set, the file must still exist,
   // otherwise the new dataset is not written (returns 3 in this case).
   // If checksum is non-zero the files current checksum is checked against it,
   // if it does not match the file is not written (the function returns 2 in this
   // case, if the file has disappeared it is also not written (i.e. checksum
   // implies the bit kFileMustExist set in option).
   // Returns != 0 for success, 0 for error

   TString md5path, path, md5sum;
   Long_t mtime = 0;
   {  TLockFile lock(fDataSetLockFile, fLockFileTimeLimit);

      Bool_t checkIfExists = ((option & kFileMustExist) || checksum) ? kTRUE : kFALSE;

      path = GetDataSetPath(group, user, dsName, md5path);

      if (checkIfExists) {
         // check if file still exists, otherwise it was deleted in the meanwhile and is not written here
         Long_t tmp;
         if (gSystem->GetPathInfo(path, 0, (Long_t*) 0, 0, &tmp) != 0) {
            if (gDebug > 0)
               Info("WriteDataSet", "Dataset disappeared. Discarding update.");
            return 3;
         }
      }

      if (checksum) {
         // verify md5 sum, otherwise the file was changed in the meanwhile and is not overwritten here
         TMD5 *checksum2 = TMD5::FileChecksum(path);
         if (!checksum2) {
            Error("WriteDataSet", "Could not get checksum of %s", path.Data());
            return 0;
         }

         Bool_t checksumAgrees = (*checksum == *checksum2);
         delete checksum2;

         if (!checksumAgrees) {
            if (gDebug > 0)
               Info("WriteDataSet", "Dataset changed. Discarding update.");
            return 2;
         }
      }

      // write first in ".<file>" then rename to recover from crash during writing
      TString tempFile(path);
      Int_t index = -1;
      while (tempFile.Index("/", index+1) >= 0)
         index = tempFile.Index("/", index+1);

      tempFile.Insert(index+1, ".");

      TFile *f = TFile::Open(tempFile, "RECREATE");
      if (!f) {
         Error("WriteDataSet", "Could not open dataset for writing %s", tempFile.Data());
         return 0;
      }

      // write full TFileCollection
      dataset->Write("dataset", TObject::kSingleKey | TObject::kOverwrite);

      // write only metadata
      THashList *list = dataset->GetList();
      dataset->SetList(0);
      dataset->Write("dataset_short", TObject::kSingleKey | TObject::kOverwrite);

      f->Close();
      delete f;

      // Restore full list
      dataset->SetList(list);

      // file is written, rename to real filename
      if (gSystem->Rename(tempFile, path) != 0) {
         Error("WriteDataSet", "renaming %s to %s failed; dataset might be corrupted",
                              tempFile.Data(), path.Data());
         // Cleanup any MD5 sum information
         if (!gSystem->AccessPathName(md5path, kWritePermission) && gSystem->Unlink(md5path) != 0)
            Error("WriteDataSet", "unlink of %s failed", md5path.Data());
         return 0;
      }
      else if (fOpenPerms) {
         if (gSystem->Chmod(path.Data(), 0666) < 0) {
            Warning("NotifyUpdate",
               "can't set permissions of dataset file %s (#%d)",
               path.Data(), TSystem::GetErrno());
         }
      }

      // Save md5 sum, otherwise the file was changed in the meanwhile and is not overwritten here
      if (ChecksumDataSet(path, md5path, md5sum) != 0) {
         Error("WriteDataSet", "problems calculating checksum of %s", path.Data());
         return 0;
      }
      else if (fOpenPerms) {
         if (gSystem->Chmod(md5path.Data(), 0666) < 0) {
            Warning("NotifyUpdate",
               "can't set permissions of dataset MD5 checksum file %s (#%d)",
               md5path.Data(), TSystem::GetErrno());
         }
      }

      FileStat_t st;
      if (gSystem->GetPathInfo(path, st) != 0) {
         Error("WriteDataSet", "could not 'stat' the version of '%s'!", path.Data());
         return 0;
      }
      mtime= st.fMtime;
   }

   // The repository was updated
   if (NotifyUpdate(group, user, dsName, mtime, md5sum) != 0)
      Warning("WriteDataSet", "problems notifying update with 'NotifyUpdate'");

   return 1;
}

//______________________________________________________________________________
Int_t TDataSetManagerFile::ChecksumDataSet(const char *path,
                                           const char *md5path, TString &checksum)
{
   // Calculate the checksum of the indicated dataset at 'path' and save it to the
   // appropriate file 'md5path'. The MD5 string is returned in 'md5sum'.
   // Return 0 on success, -1 on error.

   checksum = "";
   // Check inputs
   if (!path || strlen(path) <= 0 || !md5path || strlen(md5path) <= 0) {
      Error("ChecksumDataSet", "one or more inputs are invalid ('%s','%s')",
             path, md5path);
      return -1;
   }
   // Calculate md5 sum
   TMD5 *md5sum = TMD5::FileChecksum(path);
   if (!md5sum) {
      Error("ChecksumDataSet", "problems calculating checksum of '%s'", path);
      return -1;
   }
   // Save it to a file
   if (TMD5::WriteChecksum(md5path, md5sum) != 0) {
      Error("ChecksumDataSet", "problems saving checksum to '%s'", md5path);
      SafeDelete(md5sum);
      return -1;
   }
   // Fill output
   checksum = md5sum->AsString();
   // Done
   SafeDelete(md5sum);
   return 0;
}

//______________________________________________________________________________
Bool_t TDataSetManagerFile::RemoveDataSet(const char *group, const char *user,
                                               const char *dsName)
{
   // Removes the indicated dataset

   TString md5path, path;
   {  TLockFile lock(fDataSetLockFile, fLockFileTimeLimit);

      path = GetDataSetPath(group, user, dsName, md5path);
      Int_t rc = 0;
      // Remove the main file
      if ((rc = gSystem->Unlink(path)) != 0)
         Warning("RemoveDataSet", "problems removing main file '%s' (errno: %d)",
                                 path.Data(), TSystem::GetErrno());
      // Remove the checksum file
      if (gSystem->Unlink(md5path) != 0)
         Warning("RemoveDataSet", "problems removing chcksum file '%s' (errno: %d)",
                                 md5path.Data(), TSystem::GetErrno());
   }

   // The repository was updated
   if (gSystem->AccessPathName(path, kFileExists)) {
      if (NotifyUpdate(group, user, dsName, 0, "removed") != 0)
         Warning("RemoveDataSet", "problems notifying update with 'NotifyUpdate'");
      // Success
      return kTRUE;
   }
   // Failure
   return kFALSE;
}

//______________________________________________________________________________
Bool_t TDataSetManagerFile::ExistsDataSet(const char *group, const char *user,
                                               const char *dsName)
{
   // Checks if the indicated dataset exits

   TLockFile lock(fDataSetLockFile, fLockFileTimeLimit);

   TString md5path, path(GetDataSetPath(group, user, dsName, md5path));

   return (gSystem->AccessPathName(path) == kFALSE);
}

//______________________________________________________________________________
Int_t TDataSetManagerFile::RegisterDataSet(const char *uri,
                                           TFileCollection *newDataSet,
                                           const char *opts)
{
   // Register a dataset, perfoming quota checkings and verification, if required.
   // If a dataset with the same name already exists the action fails unless 'opts'
   // contains 'O', in which case the old dataset is overwritten, or contains 'U',
   // in which case 'newDataSet' is added to the existing dataset (duplications are
   // ignored, if any).
   // If 'opts' contains 'V' the dataset files are also verified (if the dataset manager
   // is configured to allow so). By default the dataset is not verified.
   // If 'opts' contains 'T' the in the dataset object (status bits, meta,...)
   // is trusted, i.e. not reset (if the dataset manager is configured to allow so).
   // Returns 0 on success, -1 on failure

   if (!TestBit(TDataSetManager::kAllowRegister))
      return -1;

   // Get the dataset name
   TString dsName;
   if (ParseUri(uri, 0, 0, &dsName, 0, kTRUE) == kFALSE) {
      Error("RegisterDataSet", "problem parsing uri: %s", uri);
      return -1;
   }

   // The dataset
   TFileCollection *dataSet = newDataSet;
   // Check option
   TString opt(opts);
   // If in update mode, retrieve the existing dataset, if any
   if (opt.Contains("U", TString::kIgnoreCase)) {
      // Fail if it exists already
      if (ExistsDataSet(fGroup, fUser, dsName)) {
         // Retrieve the dataset
         if (!(dataSet = GetDataSet(fGroup, fUser, dsName))) {
            // Dataset name does exist
            Warning("RegisterDataSet",
                    "dataset '%s' claimed to exists but retrieval failed - ignoring", uri);
            dataSet = newDataSet;
         } else {
            // Add new dataset to existing one
            dataSet->Add(newDataSet);
         }
      }
   } else if (!opt.Contains("O", TString::kIgnoreCase)) {
      // Fail if it exists already
      if (ExistsDataSet(fGroup, fUser, dsName)) {
         //Dataset name does exist
         Error("RegisterDataSet", "dataset '%s' exists already", uri);
         return -1;
      }
   }

   // A temporary list to hold the unique members (i.e. the very set)
   TList *uniqueFileList = new TList();
   TIter nextFile(dataSet->GetList());
   TFileInfo *prevFile = (TFileInfo*)nextFile();
   uniqueFileList->Add(prevFile);
   while (TFileInfo *obj = (TFileInfo*)nextFile()) {
      // Add entities only once to the temporary list
      if (!uniqueFileList->FindObject(obj->GetFirstUrl()->GetUrl()))
         uniqueFileList->Add(obj);
   }

   // Clear dataSet and add contents of uniqueFileList needed otherwise
   // THashList deletes the objects even when nodelete is set
   dataSet->GetList()->SetOwner(0);
   dataSet->GetList()->Clear("nodelete");
   dataSet->GetList()->SetOwner(1);
   dataSet->GetList()->AddAll(uniqueFileList);
   uniqueFileList->SetOwner(kFALSE);
   delete uniqueFileList;

   // Enforce certain settings
   Bool_t reset = kTRUE;
   if (opt.Contains("T", TString::kIgnoreCase)) {
      if (!TestBit(TDataSetManager::kTrustInfo)) {
         Warning("RegisterDataSet", "configured to not trust the information"
                                    " provided by users: ignoring request");
      } else {
         reset = kFALSE;
      }
   }
   if (reset) {
      dataSet->SetName(dsName);
      dataSet->ResetBitAll(TFileInfo::kStaged);
      dataSet->ResetBitAll(TFileInfo::kCorrupted);
      dataSet->RemoveMetaData();
   }

   // Verify the dataset if required
   if (opt.Contains("V", TString::kIgnoreCase)) {
      if (TestBit(TDataSetManager::kAllowVerify)) {
         // Reopen files and notify
         if (TDataSetManager::ScanDataSet(dataSet, 1, 0, 0, kTRUE ) < 0) {
            Error("RegisterDataSet", "problems verifying the dataset");
            return -1;
         }
      } else {
         Warning("RegisterDataSet", "user-driven verification not allowed: ignoring request");
      }
   }

   // Update accumulated information
   dataSet->Update(fAvgFileSize);

   if (TestBit(TDataSetManager::kCheckQuota)) {
      if (dataSet->GetTotalSize() <= 0) {
         Error("RegisterDataSet", "datasets without size information are not accepted:");
         if (fAvgFileSize < 0) {
            Error("RegisterDataSet", "you may want to define an average"
                                     " file size to get an estimated dataset size");
         }
         return -1;
      }
      // now check the quota
      UpdateUsedSpace();
      Long64_t used = GetGroupUsed(fGroup) + dataSet->GetTotalSize();

      Info("RegisterDataSet", "your group %s uses %.1f GB + %.1f GB for the new dataset; "
                              "the available quota is %.1f GB", fGroup.Data(),
                              (Float_t) GetGroupUsed(fGroup)    / 1073741824,
                              (Float_t) dataSet->GetTotalSize() / 1073741824,
                              (Float_t) GetGroupQuota(fGroup)   / 1073741824);
      if (used > GetGroupQuota(fGroup)) {
         Error("RegisterDataSet", "quota exceeded");
         return -1;
      }
   }

   Bool_t success = WriteDataSet(fGroup, fUser, dsName, dataSet);
   if (!success)
      Error("RegisterDataSet", "could not write dataset: %s", dsName.Data());

   // Done
   return ((success) ? 0 : -1);
}
//______________________________________________________________________________
Int_t TDataSetManagerFile::ScanDataSet(const char *uri, UInt_t opt)
{
   // Scans the dataset indicated by <uri> and returns the number of missing files.
   // Returns -1 if any failure occurs, >= 0 on success.
   // For more details, see documentation of
   // ScanDataSet(TFileCollection *dataset, const char *option)

   TString dsName, dsTree;
   if ((opt & kSetDefaultTree)) {
      if (TestBit(TDataSetManager::kAllowRegister)) {
         if (ParseUri(uri, 0, 0, &dsName, &dsTree, kTRUE)) {
            TFileCollection *dataset = GetDataSet(fGroup, fUser, dsName);
            if (!dataset) return -1;
            dataset->SetDefaultTreeName(dsTree.Data());
            Int_t rc = WriteDataSet(fGroup, fUser, dsName, dataset);
            delete dataset;
            return (rc == 0) ? -1 : 0;
         }
      }
   } else {
      if (TestBit(TDataSetManager::kAllowVerify)) {
         if (ParseUri(uri, 0, 0, &dsName, 0, kTRUE, kTRUE)) {
            if (!(dsName.Contains("*"))) {
               if (ScanDataSet(fGroup, fUser, dsName, opt) > 0)
                  return GetNDisapparedFiles();
            } else {
               TString luri = TString::Format("/%s/%s/%s", fGroup.Data(), fUser.Data(), dsName.Data());
               TMap *fcs = GetDataSets(luri, kList);
               if (!fcs) return -1;
               fcs->Print();
               Int_t ndisappeared = 0;
               TIter nxd(fcs);
               TObjString *d = 0;
               while ((d = (TObjString *) nxd())) {
                  if (!(d->GetString().IsNull())) {
                     TString dsn(d->GetName());
                     if (dsn.Contains("/")) dsn.Remove(0, dsn.Last('/') + 1);
                     if (ScanDataSet(fGroup, fUser, dsn, opt) > 0) {
                        ndisappeared += GetNDisapparedFiles();
                     } else {
                        Warning("ScanDataSet", "problems processing dataset: %s", d->GetName());
                     }
                  } else {
                     Warning("ScanDataSet", "empty string found in map while processing: %s", uri);
                  }
               }
               SafeDelete(fcs);
               return ndisappeared;
            }
         }
      }
   }
   return -1;
}

//______________________________________________________________________________
Int_t TDataSetManagerFile::ScanDataSet(const char *group, const char *user,
                                       const char *dsName, UInt_t option)
{
   // See documentation of ScanDataSet(TFileCollection *dataset, UInt_t option)

   if (!TestBit(TDataSetManager::kAllowVerify))
      return -1;

   TFileCollection *dataset = GetDataSet(group, user, dsName);
   if (!dataset)
      return -1;

   // File selection
   Int_t fopt = ((option & kAllFiles)) ? -1 : 0;
   if (fopt >= 0) {
      if ((option & kStagedFiles)) {
         fopt = 10;
      } else {
         if ((option & kReopen)) fopt++;
         if ((option & kTouch)) fopt++;
      }
      if ((option & kNoStagedCheck)) fopt += 100;
   } else {
      if ((option & kStagedFiles) || (option & kReopen) || (option & kTouch)) {
         Warning("ScanDataSet", "kAllFiles mode: ignoring kStagedFiles or kReopen"
                                " or kTouch requests");
      }
      if ((option & kNoStagedCheck)) fopt -= 100;
   }

   // Type of action
   Int_t sopt = ((option & kNoAction)) ? -1 : 0;
   if (sopt >= 0) {
      if ((option & kLocateOnly) && (option & kStageOnly)) {
         Error("ScanDataSet", "kLocateOnly and kStageOnly cannot be processed concurrently");
         return -1;
      }
      if ((option & kLocateOnly)) sopt = 1;
      if ((option & kStageOnly)) sopt = 2;
   } else if ((option & kLocateOnly) || (option & kStageOnly)) {
      Warning("ScanDataSet", "kNoAction mode: ignoring kLocateOnly or kStageOnly requests");
   }

   Bool_t dbg = ((option & kDebug)) ? kTRUE : kFALSE;
   // Do the scan
   Int_t result = TDataSetManager::ScanDataSet(dataset, fopt, sopt, 0, dbg,
                                   &fNTouchedFiles, &fNOpenedFiles, &fNDisappearedFiles,
                                   (TList *)0, fAvgFileSize, fMSSUrl.Data(), -1, fStageOpts.Data());
   if (result == 2) {
      if (WriteDataSet(group, user, dsName, dataset) == 0) {
         delete dataset;
         return -2;
      }
   }
   delete dataset;

   return result;
}

//______________________________________________________________________________
TMap *TDataSetManagerFile::GetDataSets(const char *uri, UInt_t option)
{
   //
   // Returns all datasets for the <group> and <user> specified by <uri>.
   // If <user> is 0, it returns all datasets for the given <group>.
   // If <group> is 0, it returns all datasets.
   // The returned TMap contains:
   //    <group> --> <map of users> --> <map of datasets> --> <dataset> (TFileCollection)
   //
   // The unsigned int 'option' is forwarded to GetDataSet and BrowseDataSet.
   // Available options (to be .or.ed):
   //    kShowDefault    a default selection is shown that include the ones from
   //                    the current user, the ones from the group and the common ones
   //    kPrint          print the dataset content
   //    kQuotaUpdate    update quotas
   //    kExport         use export naming
   //
   // NB1: options "kPrint", "kQuoatUpdate" and "kExport" are mutually exclusive
   // NB2: for options "kPrint" and "kQuoatUpdate" return is null.

   TString dsUser, dsGroup, dsName;

   if (((option & kPrint) || (option & kExport)) && strlen(uri) <= 0)
      option |= kShowDefault;

   if (ParseUri(uri, &dsGroup, &dsUser, &dsName, 0, kFALSE, kTRUE))
      return GetDataSets(dsGroup, dsUser, dsName, option);
   return (TMap *)0;
}

//______________________________________________________________________________
TFileCollection *TDataSetManagerFile::GetDataSet(const char *uri, const char *opts)
{
   // Utility function used in various methods for user dataset upload.

   TString dsUser, dsGroup, dsName, ss(opts);

   TFileCollection *fc = 0;
   if (!strchr(uri, '*')) {
      if (!ParseUri(uri, &dsGroup, &dsUser, &dsName)) return fc;
      UInt_t opt = (ss.Contains("S:") || ss.Contains("short:")) ? kReadShort : 0;
      ss.ReplaceAll("S:","");
      ss.ReplaceAll("short:","");
      fc = GetDataSet(dsGroup, dsUser, dsName, opt);
   } else {
      TMap *fcs = GetDataSets(uri);
      if (!fcs) return fc;
      TIter nxd(fcs);
      TObject *k = 0;
      TFileCollection *xfc = 0;
      while ((k = nxd()) && (xfc = (TFileCollection *) fcs->GetValue(k))) {
         if (!fc) {
            // The first one
            fc = xfc;
            fcs->Remove(k);
         } else {
            // Add
            fc->Add(xfc);
         }
      }
   }

   if (fc && !ss.IsNull()) {
      // Build up the subset
      TFileCollection *sfc = 0;
      TString s;
      Int_t from = 0;
      while (ss.Tokenize(s, from, ",")) {
         TFileCollection *xfc = fc->GetFilesOnServer(s.Data());
         if (xfc) {
            if (sfc) {
               sfc->Add(xfc);
               delete xfc;
            } else {
               sfc = xfc;
            }
         }
      }
      // Cleanup
      delete fc;
      fc = sfc;
   }
   // Done
   return fc;
}

//______________________________________________________________________________
Bool_t TDataSetManagerFile::RemoveDataSet(const char *uri)
{
   // Removes the indicated dataset

   TString dsName;

   if (TestBit(TDataSetManager::kAllowRegister)) {
      if (ParseUri(uri, 0, 0, &dsName, 0, kTRUE)) {
         Bool_t rc = RemoveDataSet(fGroup, fUser, dsName);
         if (rc) return kTRUE;
         Error("RemoveDataSet", "error removing dataset %s", dsName.Data());
      }
   }
   return kFALSE;
}

//______________________________________________________________________________
Bool_t TDataSetManagerFile::ExistsDataSet(const char *uri)
{
   // Checks if the indicated dataset exits

   TString dsUser, dsGroup, dsName;

   if (ParseUri(uri, &dsGroup, &dsUser, &dsName))
      return ExistsDataSet(dsGroup, dsUser, dsName);
   return kFALSE;
}

//______________________________________________________________________________
void TDataSetManagerFile::UpdateUsedSpace()
{
   // updates the used space maps

   // Clear used space entries
   fGroupUsed.DeleteAll();
   fUserUsed.DeleteAll();

   // Scan the existing datasets
   GetDataSets(0, 0, 0, (UInt_t)kQuotaUpdate);
}

//______________________________________________________________________________
Long_t TDataSetManagerFile::GetModTime(const char *uri)
{
   // Gets last dataset modification time. Returns -1 on error, or number of
   // seconds since epoch on success

   TString group, user, name, md5path;
   if (!ParseUri(uri, &group, &user, &name)) {
      return -1;
   }

   TString path( GetDataSetPath(group, user, name, md5path) );

   Long_t modTime;
   if (gSystem->GetPathInfo(path.Data(),
      (Long_t *)0, (Long_t *)0, (Long_t *)0, &modTime)) {
      return -1;
   }

   return modTime;
}
 TDataSetManagerFile.cxx:1
 TDataSetManagerFile.cxx:2
 TDataSetManagerFile.cxx:3
 TDataSetManagerFile.cxx:4
 TDataSetManagerFile.cxx:5
 TDataSetManagerFile.cxx:6
 TDataSetManagerFile.cxx:7
 TDataSetManagerFile.cxx:8
 TDataSetManagerFile.cxx:9
 TDataSetManagerFile.cxx:10
 TDataSetManagerFile.cxx:11
 TDataSetManagerFile.cxx:12
 TDataSetManagerFile.cxx:13
 TDataSetManagerFile.cxx:14
 TDataSetManagerFile.cxx:15
 TDataSetManagerFile.cxx:16
 TDataSetManagerFile.cxx:17
 TDataSetManagerFile.cxx:18
 TDataSetManagerFile.cxx:19
 TDataSetManagerFile.cxx:20
 TDataSetManagerFile.cxx:21
 TDataSetManagerFile.cxx:22
 TDataSetManagerFile.cxx:23
 TDataSetManagerFile.cxx:24
 TDataSetManagerFile.cxx:25
 TDataSetManagerFile.cxx:26
 TDataSetManagerFile.cxx:27
 TDataSetManagerFile.cxx:28
 TDataSetManagerFile.cxx:29
 TDataSetManagerFile.cxx:30
 TDataSetManagerFile.cxx:31
 TDataSetManagerFile.cxx:32
 TDataSetManagerFile.cxx:33
 TDataSetManagerFile.cxx:34
 TDataSetManagerFile.cxx:35
 TDataSetManagerFile.cxx:36
 TDataSetManagerFile.cxx:37
 TDataSetManagerFile.cxx:38
 TDataSetManagerFile.cxx:39
 TDataSetManagerFile.cxx:40
 TDataSetManagerFile.cxx:41
 TDataSetManagerFile.cxx:42
 TDataSetManagerFile.cxx:43
 TDataSetManagerFile.cxx:44
 TDataSetManagerFile.cxx:45
 TDataSetManagerFile.cxx:46
 TDataSetManagerFile.cxx:47
 TDataSetManagerFile.cxx:48
 TDataSetManagerFile.cxx:49
 TDataSetManagerFile.cxx:50
 TDataSetManagerFile.cxx:51
 TDataSetManagerFile.cxx:52
 TDataSetManagerFile.cxx:53
 TDataSetManagerFile.cxx:54
 TDataSetManagerFile.cxx:55
 TDataSetManagerFile.cxx:56
 TDataSetManagerFile.cxx:57
 TDataSetManagerFile.cxx:58
 TDataSetManagerFile.cxx:59
 TDataSetManagerFile.cxx:60
 TDataSetManagerFile.cxx:61
 TDataSetManagerFile.cxx:62
 TDataSetManagerFile.cxx:63
 TDataSetManagerFile.cxx:64
 TDataSetManagerFile.cxx:65
 TDataSetManagerFile.cxx:66
 TDataSetManagerFile.cxx:67
 TDataSetManagerFile.cxx:68
 TDataSetManagerFile.cxx:69
 TDataSetManagerFile.cxx:70
 TDataSetManagerFile.cxx:71
 TDataSetManagerFile.cxx:72
 TDataSetManagerFile.cxx:73
 TDataSetManagerFile.cxx:74
 TDataSetManagerFile.cxx:75
 TDataSetManagerFile.cxx:76
 TDataSetManagerFile.cxx:77
 TDataSetManagerFile.cxx:78
 TDataSetManagerFile.cxx:79
 TDataSetManagerFile.cxx:80
 TDataSetManagerFile.cxx:81
 TDataSetManagerFile.cxx:82
 TDataSetManagerFile.cxx:83
 TDataSetManagerFile.cxx:84
 TDataSetManagerFile.cxx:85
 TDataSetManagerFile.cxx:86
 TDataSetManagerFile.cxx:87
 TDataSetManagerFile.cxx:88
 TDataSetManagerFile.cxx:89
 TDataSetManagerFile.cxx:90
 TDataSetManagerFile.cxx:91
 TDataSetManagerFile.cxx:92
 TDataSetManagerFile.cxx:93
 TDataSetManagerFile.cxx:94
 TDataSetManagerFile.cxx:95
 TDataSetManagerFile.cxx:96
 TDataSetManagerFile.cxx:97
 TDataSetManagerFile.cxx:98
 TDataSetManagerFile.cxx:99
 TDataSetManagerFile.cxx:100
 TDataSetManagerFile.cxx:101
 TDataSetManagerFile.cxx:102
 TDataSetManagerFile.cxx:103
 TDataSetManagerFile.cxx:104
 TDataSetManagerFile.cxx:105
 TDataSetManagerFile.cxx:106
 TDataSetManagerFile.cxx:107
 TDataSetManagerFile.cxx:108
 TDataSetManagerFile.cxx:109
 TDataSetManagerFile.cxx:110
 TDataSetManagerFile.cxx:111
 TDataSetManagerFile.cxx:112
 TDataSetManagerFile.cxx:113
 TDataSetManagerFile.cxx:114
 TDataSetManagerFile.cxx:115
 TDataSetManagerFile.cxx:116
 TDataSetManagerFile.cxx:117
 TDataSetManagerFile.cxx:118
 TDataSetManagerFile.cxx:119
 TDataSetManagerFile.cxx:120
 TDataSetManagerFile.cxx:121
 TDataSetManagerFile.cxx:122
 TDataSetManagerFile.cxx:123
 TDataSetManagerFile.cxx:124
 TDataSetManagerFile.cxx:125
 TDataSetManagerFile.cxx:126
 TDataSetManagerFile.cxx:127
 TDataSetManagerFile.cxx:128
 TDataSetManagerFile.cxx:129
 TDataSetManagerFile.cxx:130
 TDataSetManagerFile.cxx:131
 TDataSetManagerFile.cxx:132
 TDataSetManagerFile.cxx:133
 TDataSetManagerFile.cxx:134
 TDataSetManagerFile.cxx:135
 TDataSetManagerFile.cxx:136
 TDataSetManagerFile.cxx:137
 TDataSetManagerFile.cxx:138
 TDataSetManagerFile.cxx:139
 TDataSetManagerFile.cxx:140
 TDataSetManagerFile.cxx:141
 TDataSetManagerFile.cxx:142
 TDataSetManagerFile.cxx:143
 TDataSetManagerFile.cxx:144
 TDataSetManagerFile.cxx:145
 TDataSetManagerFile.cxx:146
 TDataSetManagerFile.cxx:147
 TDataSetManagerFile.cxx:148
 TDataSetManagerFile.cxx:149
 TDataSetManagerFile.cxx:150
 TDataSetManagerFile.cxx:151
 TDataSetManagerFile.cxx:152
 TDataSetManagerFile.cxx:153
 TDataSetManagerFile.cxx:154
 TDataSetManagerFile.cxx:155
 TDataSetManagerFile.cxx:156
 TDataSetManagerFile.cxx:157
 TDataSetManagerFile.cxx:158
 TDataSetManagerFile.cxx:159
 TDataSetManagerFile.cxx:160
 TDataSetManagerFile.cxx:161
 TDataSetManagerFile.cxx:162
 TDataSetManagerFile.cxx:163
 TDataSetManagerFile.cxx:164
 TDataSetManagerFile.cxx:165
 TDataSetManagerFile.cxx:166
 TDataSetManagerFile.cxx:167
 TDataSetManagerFile.cxx:168
 TDataSetManagerFile.cxx:169
 TDataSetManagerFile.cxx:170
 TDataSetManagerFile.cxx:171
 TDataSetManagerFile.cxx:172
 TDataSetManagerFile.cxx:173
 TDataSetManagerFile.cxx:174
 TDataSetManagerFile.cxx:175
 TDataSetManagerFile.cxx:176
 TDataSetManagerFile.cxx:177
 TDataSetManagerFile.cxx:178
 TDataSetManagerFile.cxx:179
 TDataSetManagerFile.cxx:180
 TDataSetManagerFile.cxx:181
 TDataSetManagerFile.cxx:182
 TDataSetManagerFile.cxx:183
 TDataSetManagerFile.cxx:184
 TDataSetManagerFile.cxx:185
 TDataSetManagerFile.cxx:186
 TDataSetManagerFile.cxx:187
 TDataSetManagerFile.cxx:188
 TDataSetManagerFile.cxx:189
 TDataSetManagerFile.cxx:190
 TDataSetManagerFile.cxx:191
 TDataSetManagerFile.cxx:192
 TDataSetManagerFile.cxx:193
 TDataSetManagerFile.cxx:194
 TDataSetManagerFile.cxx:195
 TDataSetManagerFile.cxx:196
 TDataSetManagerFile.cxx:197
 TDataSetManagerFile.cxx:198
 TDataSetManagerFile.cxx:199
 TDataSetManagerFile.cxx:200
 TDataSetManagerFile.cxx:201
 TDataSetManagerFile.cxx:202
 TDataSetManagerFile.cxx:203
 TDataSetManagerFile.cxx:204
 TDataSetManagerFile.cxx:205
 TDataSetManagerFile.cxx:206
 TDataSetManagerFile.cxx:207
 TDataSetManagerFile.cxx:208
 TDataSetManagerFile.cxx:209
 TDataSetManagerFile.cxx:210
 TDataSetManagerFile.cxx:211
 TDataSetManagerFile.cxx:212
 TDataSetManagerFile.cxx:213
 TDataSetManagerFile.cxx:214
 TDataSetManagerFile.cxx:215
 TDataSetManagerFile.cxx:216
 TDataSetManagerFile.cxx:217
 TDataSetManagerFile.cxx:218
 TDataSetManagerFile.cxx:219
 TDataSetManagerFile.cxx:220
 TDataSetManagerFile.cxx:221
 TDataSetManagerFile.cxx:222
 TDataSetManagerFile.cxx:223
 TDataSetManagerFile.cxx:224
 TDataSetManagerFile.cxx:225
 TDataSetManagerFile.cxx:226
 TDataSetManagerFile.cxx:227
 TDataSetManagerFile.cxx:228
 TDataSetManagerFile.cxx:229
 TDataSetManagerFile.cxx:230
 TDataSetManagerFile.cxx:231
 TDataSetManagerFile.cxx:232
 TDataSetManagerFile.cxx:233
 TDataSetManagerFile.cxx:234
 TDataSetManagerFile.cxx:235
 TDataSetManagerFile.cxx:236
 TDataSetManagerFile.cxx:237
 TDataSetManagerFile.cxx:238
 TDataSetManagerFile.cxx:239
 TDataSetManagerFile.cxx:240
 TDataSetManagerFile.cxx:241
 TDataSetManagerFile.cxx:242
 TDataSetManagerFile.cxx:243
 TDataSetManagerFile.cxx:244
 TDataSetManagerFile.cxx:245
 TDataSetManagerFile.cxx:246
 TDataSetManagerFile.cxx:247
 TDataSetManagerFile.cxx:248
 TDataSetManagerFile.cxx:249
 TDataSetManagerFile.cxx:250
 TDataSetManagerFile.cxx:251
 TDataSetManagerFile.cxx:252
 TDataSetManagerFile.cxx:253
 TDataSetManagerFile.cxx:254
 TDataSetManagerFile.cxx:255
 TDataSetManagerFile.cxx:256
 TDataSetManagerFile.cxx:257
 TDataSetManagerFile.cxx:258
 TDataSetManagerFile.cxx:259
 TDataSetManagerFile.cxx:260
 TDataSetManagerFile.cxx:261
 TDataSetManagerFile.cxx:262
 TDataSetManagerFile.cxx:263
 TDataSetManagerFile.cxx:264
 TDataSetManagerFile.cxx:265
 TDataSetManagerFile.cxx:266
 TDataSetManagerFile.cxx:267
 TDataSetManagerFile.cxx:268
 TDataSetManagerFile.cxx:269
 TDataSetManagerFile.cxx:270
 TDataSetManagerFile.cxx:271
 TDataSetManagerFile.cxx:272
 TDataSetManagerFile.cxx:273
 TDataSetManagerFile.cxx:274
 TDataSetManagerFile.cxx:275
 TDataSetManagerFile.cxx:276
 TDataSetManagerFile.cxx:277
 TDataSetManagerFile.cxx:278
 TDataSetManagerFile.cxx:279
 TDataSetManagerFile.cxx:280
 TDataSetManagerFile.cxx:281
 TDataSetManagerFile.cxx:282
 TDataSetManagerFile.cxx:283
 TDataSetManagerFile.cxx:284
 TDataSetManagerFile.cxx:285
 TDataSetManagerFile.cxx:286
 TDataSetManagerFile.cxx:287
 TDataSetManagerFile.cxx:288
 TDataSetManagerFile.cxx:289
 TDataSetManagerFile.cxx:290
 TDataSetManagerFile.cxx:291
 TDataSetManagerFile.cxx:292
 TDataSetManagerFile.cxx:293
 TDataSetManagerFile.cxx:294
 TDataSetManagerFile.cxx:295
 TDataSetManagerFile.cxx:296
 TDataSetManagerFile.cxx:297
 TDataSetManagerFile.cxx:298
 TDataSetManagerFile.cxx:299
 TDataSetManagerFile.cxx:300
 TDataSetManagerFile.cxx:301
 TDataSetManagerFile.cxx:302
 TDataSetManagerFile.cxx:303
 TDataSetManagerFile.cxx:304
 TDataSetManagerFile.cxx:305
 TDataSetManagerFile.cxx:306
 TDataSetManagerFile.cxx:307
 TDataSetManagerFile.cxx:308
 TDataSetManagerFile.cxx:309
 TDataSetManagerFile.cxx:310
 TDataSetManagerFile.cxx:311
 TDataSetManagerFile.cxx:312
 TDataSetManagerFile.cxx:313
 TDataSetManagerFile.cxx:314
 TDataSetManagerFile.cxx:315
 TDataSetManagerFile.cxx:316
 TDataSetManagerFile.cxx:317
 TDataSetManagerFile.cxx:318
 TDataSetManagerFile.cxx:319
 TDataSetManagerFile.cxx:320
 TDataSetManagerFile.cxx:321
 TDataSetManagerFile.cxx:322
 TDataSetManagerFile.cxx:323
 TDataSetManagerFile.cxx:324
 TDataSetManagerFile.cxx:325
 TDataSetManagerFile.cxx:326
 TDataSetManagerFile.cxx:327
 TDataSetManagerFile.cxx:328
 TDataSetManagerFile.cxx:329
 TDataSetManagerFile.cxx:330
 TDataSetManagerFile.cxx:331
 TDataSetManagerFile.cxx:332
 TDataSetManagerFile.cxx:333
 TDataSetManagerFile.cxx:334
 TDataSetManagerFile.cxx:335
 TDataSetManagerFile.cxx:336
 TDataSetManagerFile.cxx:337
 TDataSetManagerFile.cxx:338
 TDataSetManagerFile.cxx:339
 TDataSetManagerFile.cxx:340
 TDataSetManagerFile.cxx:341
 TDataSetManagerFile.cxx:342
 TDataSetManagerFile.cxx:343
 TDataSetManagerFile.cxx:344
 TDataSetManagerFile.cxx:345
 TDataSetManagerFile.cxx:346
 TDataSetManagerFile.cxx:347
 TDataSetManagerFile.cxx:348
 TDataSetManagerFile.cxx:349
 TDataSetManagerFile.cxx:350
 TDataSetManagerFile.cxx:351
 TDataSetManagerFile.cxx:352
 TDataSetManagerFile.cxx:353
 TDataSetManagerFile.cxx:354
 TDataSetManagerFile.cxx:355
 TDataSetManagerFile.cxx:356
 TDataSetManagerFile.cxx:357
 TDataSetManagerFile.cxx:358
 TDataSetManagerFile.cxx:359
 TDataSetManagerFile.cxx:360
 TDataSetManagerFile.cxx:361
 TDataSetManagerFile.cxx:362
 TDataSetManagerFile.cxx:363
 TDataSetManagerFile.cxx:364
 TDataSetManagerFile.cxx:365
 TDataSetManagerFile.cxx:366
 TDataSetManagerFile.cxx:367
 TDataSetManagerFile.cxx:368
 TDataSetManagerFile.cxx:369
 TDataSetManagerFile.cxx:370
 TDataSetManagerFile.cxx:371
 TDataSetManagerFile.cxx:372
 TDataSetManagerFile.cxx:373
 TDataSetManagerFile.cxx:374
 TDataSetManagerFile.cxx:375
 TDataSetManagerFile.cxx:376
 TDataSetManagerFile.cxx:377
 TDataSetManagerFile.cxx:378
 TDataSetManagerFile.cxx:379
 TDataSetManagerFile.cxx:380
 TDataSetManagerFile.cxx:381
 TDataSetManagerFile.cxx:382
 TDataSetManagerFile.cxx:383
 TDataSetManagerFile.cxx:384
 TDataSetManagerFile.cxx:385
 TDataSetManagerFile.cxx:386
 TDataSetManagerFile.cxx:387
 TDataSetManagerFile.cxx:388
 TDataSetManagerFile.cxx:389
 TDataSetManagerFile.cxx:390
 TDataSetManagerFile.cxx:391
 TDataSetManagerFile.cxx:392
 TDataSetManagerFile.cxx:393
 TDataSetManagerFile.cxx:394
 TDataSetManagerFile.cxx:395
 TDataSetManagerFile.cxx:396
 TDataSetManagerFile.cxx:397
 TDataSetManagerFile.cxx:398
 TDataSetManagerFile.cxx:399
 TDataSetManagerFile.cxx:400
 TDataSetManagerFile.cxx:401
 TDataSetManagerFile.cxx:402
 TDataSetManagerFile.cxx:403
 TDataSetManagerFile.cxx:404
 TDataSetManagerFile.cxx:405
 TDataSetManagerFile.cxx:406
 TDataSetManagerFile.cxx:407
 TDataSetManagerFile.cxx:408
 TDataSetManagerFile.cxx:409
 TDataSetManagerFile.cxx:410
 TDataSetManagerFile.cxx:411
 TDataSetManagerFile.cxx:412
 TDataSetManagerFile.cxx:413
 TDataSetManagerFile.cxx:414
 TDataSetManagerFile.cxx:415
 TDataSetManagerFile.cxx:416
 TDataSetManagerFile.cxx:417
 TDataSetManagerFile.cxx:418
 TDataSetManagerFile.cxx:419
 TDataSetManagerFile.cxx:420
 TDataSetManagerFile.cxx:421
 TDataSetManagerFile.cxx:422
 TDataSetManagerFile.cxx:423
 TDataSetManagerFile.cxx:424
 TDataSetManagerFile.cxx:425
 TDataSetManagerFile.cxx:426
 TDataSetManagerFile.cxx:427
 TDataSetManagerFile.cxx:428
 TDataSetManagerFile.cxx:429
 TDataSetManagerFile.cxx:430
 TDataSetManagerFile.cxx:431
 TDataSetManagerFile.cxx:432
 TDataSetManagerFile.cxx:433
 TDataSetManagerFile.cxx:434
 TDataSetManagerFile.cxx:435
 TDataSetManagerFile.cxx:436
 TDataSetManagerFile.cxx:437
 TDataSetManagerFile.cxx:438
 TDataSetManagerFile.cxx:439
 TDataSetManagerFile.cxx:440
 TDataSetManagerFile.cxx:441
 TDataSetManagerFile.cxx:442
 TDataSetManagerFile.cxx:443
 TDataSetManagerFile.cxx:444
 TDataSetManagerFile.cxx:445
 TDataSetManagerFile.cxx:446
 TDataSetManagerFile.cxx:447
 TDataSetManagerFile.cxx:448
 TDataSetManagerFile.cxx:449
 TDataSetManagerFile.cxx:450
 TDataSetManagerFile.cxx:451
 TDataSetManagerFile.cxx:452
 TDataSetManagerFile.cxx:453
 TDataSetManagerFile.cxx:454
 TDataSetManagerFile.cxx:455
 TDataSetManagerFile.cxx:456
 TDataSetManagerFile.cxx:457
 TDataSetManagerFile.cxx:458
 TDataSetManagerFile.cxx:459
 TDataSetManagerFile.cxx:460
 TDataSetManagerFile.cxx:461
 TDataSetManagerFile.cxx:462
 TDataSetManagerFile.cxx:463
 TDataSetManagerFile.cxx:464
 TDataSetManagerFile.cxx:465
 TDataSetManagerFile.cxx:466
 TDataSetManagerFile.cxx:467
 TDataSetManagerFile.cxx:468
 TDataSetManagerFile.cxx:469
 TDataSetManagerFile.cxx:470
 TDataSetManagerFile.cxx:471
 TDataSetManagerFile.cxx:472
 TDataSetManagerFile.cxx:473
 TDataSetManagerFile.cxx:474
 TDataSetManagerFile.cxx:475
 TDataSetManagerFile.cxx:476
 TDataSetManagerFile.cxx:477
 TDataSetManagerFile.cxx:478
 TDataSetManagerFile.cxx:479
 TDataSetManagerFile.cxx:480
 TDataSetManagerFile.cxx:481
 TDataSetManagerFile.cxx:482
 TDataSetManagerFile.cxx:483
 TDataSetManagerFile.cxx:484
 TDataSetManagerFile.cxx:485
 TDataSetManagerFile.cxx:486
 TDataSetManagerFile.cxx:487
 TDataSetManagerFile.cxx:488
 TDataSetManagerFile.cxx:489
 TDataSetManagerFile.cxx:490
 TDataSetManagerFile.cxx:491
 TDataSetManagerFile.cxx:492
 TDataSetManagerFile.cxx:493
 TDataSetManagerFile.cxx:494
 TDataSetManagerFile.cxx:495
 TDataSetManagerFile.cxx:496
 TDataSetManagerFile.cxx:497
 TDataSetManagerFile.cxx:498
 TDataSetManagerFile.cxx:499
 TDataSetManagerFile.cxx:500
 TDataSetManagerFile.cxx:501
 TDataSetManagerFile.cxx:502
 TDataSetManagerFile.cxx:503
 TDataSetManagerFile.cxx:504
 TDataSetManagerFile.cxx:505
 TDataSetManagerFile.cxx:506
 TDataSetManagerFile.cxx:507
 TDataSetManagerFile.cxx:508
 TDataSetManagerFile.cxx:509
 TDataSetManagerFile.cxx:510
 TDataSetManagerFile.cxx:511
 TDataSetManagerFile.cxx:512
 TDataSetManagerFile.cxx:513
 TDataSetManagerFile.cxx:514
 TDataSetManagerFile.cxx:515
 TDataSetManagerFile.cxx:516
 TDataSetManagerFile.cxx:517
 TDataSetManagerFile.cxx:518
 TDataSetManagerFile.cxx:519
 TDataSetManagerFile.cxx:520
 TDataSetManagerFile.cxx:521
 TDataSetManagerFile.cxx:522
 TDataSetManagerFile.cxx:523
 TDataSetManagerFile.cxx:524
 TDataSetManagerFile.cxx:525
 TDataSetManagerFile.cxx:526
 TDataSetManagerFile.cxx:527
 TDataSetManagerFile.cxx:528
 TDataSetManagerFile.cxx:529
 TDataSetManagerFile.cxx:530
 TDataSetManagerFile.cxx:531
 TDataSetManagerFile.cxx:532
 TDataSetManagerFile.cxx:533
 TDataSetManagerFile.cxx:534
 TDataSetManagerFile.cxx:535
 TDataSetManagerFile.cxx:536
 TDataSetManagerFile.cxx:537
 TDataSetManagerFile.cxx:538
 TDataSetManagerFile.cxx:539
 TDataSetManagerFile.cxx:540
 TDataSetManagerFile.cxx:541
 TDataSetManagerFile.cxx:542
 TDataSetManagerFile.cxx:543
 TDataSetManagerFile.cxx:544
 TDataSetManagerFile.cxx:545
 TDataSetManagerFile.cxx:546
 TDataSetManagerFile.cxx:547
 TDataSetManagerFile.cxx:548
 TDataSetManagerFile.cxx:549
 TDataSetManagerFile.cxx:550
 TDataSetManagerFile.cxx:551
 TDataSetManagerFile.cxx:552
 TDataSetManagerFile.cxx:553
 TDataSetManagerFile.cxx:554
 TDataSetManagerFile.cxx:555
 TDataSetManagerFile.cxx:556
 TDataSetManagerFile.cxx:557
 TDataSetManagerFile.cxx:558
 TDataSetManagerFile.cxx:559
 TDataSetManagerFile.cxx:560
 TDataSetManagerFile.cxx:561
 TDataSetManagerFile.cxx:562
 TDataSetManagerFile.cxx:563
 TDataSetManagerFile.cxx:564
 TDataSetManagerFile.cxx:565
 TDataSetManagerFile.cxx:566
 TDataSetManagerFile.cxx:567
 TDataSetManagerFile.cxx:568
 TDataSetManagerFile.cxx:569
 TDataSetManagerFile.cxx:570
 TDataSetManagerFile.cxx:571
 TDataSetManagerFile.cxx:572
 TDataSetManagerFile.cxx:573
 TDataSetManagerFile.cxx:574
 TDataSetManagerFile.cxx:575
 TDataSetManagerFile.cxx:576
 TDataSetManagerFile.cxx:577
 TDataSetManagerFile.cxx:578
 TDataSetManagerFile.cxx:579
 TDataSetManagerFile.cxx:580
 TDataSetManagerFile.cxx:581
 TDataSetManagerFile.cxx:582
 TDataSetManagerFile.cxx:583
 TDataSetManagerFile.cxx:584
 TDataSetManagerFile.cxx:585
 TDataSetManagerFile.cxx:586
 TDataSetManagerFile.cxx:587
 TDataSetManagerFile.cxx:588
 TDataSetManagerFile.cxx:589
 TDataSetManagerFile.cxx:590
 TDataSetManagerFile.cxx:591
 TDataSetManagerFile.cxx:592
 TDataSetManagerFile.cxx:593
 TDataSetManagerFile.cxx:594
 TDataSetManagerFile.cxx:595
 TDataSetManagerFile.cxx:596
 TDataSetManagerFile.cxx:597
 TDataSetManagerFile.cxx:598
 TDataSetManagerFile.cxx:599
 TDataSetManagerFile.cxx:600
 TDataSetManagerFile.cxx:601
 TDataSetManagerFile.cxx:602
 TDataSetManagerFile.cxx:603
 TDataSetManagerFile.cxx:604
 TDataSetManagerFile.cxx:605
 TDataSetManagerFile.cxx:606
 TDataSetManagerFile.cxx:607
 TDataSetManagerFile.cxx:608
 TDataSetManagerFile.cxx:609
 TDataSetManagerFile.cxx:610
 TDataSetManagerFile.cxx:611
 TDataSetManagerFile.cxx:612
 TDataSetManagerFile.cxx:613
 TDataSetManagerFile.cxx:614
 TDataSetManagerFile.cxx:615
 TDataSetManagerFile.cxx:616
 TDataSetManagerFile.cxx:617
 TDataSetManagerFile.cxx:618
 TDataSetManagerFile.cxx:619
 TDataSetManagerFile.cxx:620
 TDataSetManagerFile.cxx:621
 TDataSetManagerFile.cxx:622
 TDataSetManagerFile.cxx:623
 TDataSetManagerFile.cxx:624
 TDataSetManagerFile.cxx:625
 TDataSetManagerFile.cxx:626
 TDataSetManagerFile.cxx:627
 TDataSetManagerFile.cxx:628
 TDataSetManagerFile.cxx:629
 TDataSetManagerFile.cxx:630
 TDataSetManagerFile.cxx:631
 TDataSetManagerFile.cxx:632
 TDataSetManagerFile.cxx:633
 TDataSetManagerFile.cxx:634
 TDataSetManagerFile.cxx:635
 TDataSetManagerFile.cxx:636
 TDataSetManagerFile.cxx:637
 TDataSetManagerFile.cxx:638
 TDataSetManagerFile.cxx:639
 TDataSetManagerFile.cxx:640
 TDataSetManagerFile.cxx:641
 TDataSetManagerFile.cxx:642
 TDataSetManagerFile.cxx:643
 TDataSetManagerFile.cxx:644
 TDataSetManagerFile.cxx:645
 TDataSetManagerFile.cxx:646
 TDataSetManagerFile.cxx:647
 TDataSetManagerFile.cxx:648
 TDataSetManagerFile.cxx:649
 TDataSetManagerFile.cxx:650
 TDataSetManagerFile.cxx:651
 TDataSetManagerFile.cxx:652
 TDataSetManagerFile.cxx:653
 TDataSetManagerFile.cxx:654
 TDataSetManagerFile.cxx:655
 TDataSetManagerFile.cxx:656
 TDataSetManagerFile.cxx:657
 TDataSetManagerFile.cxx:658
 TDataSetManagerFile.cxx:659
 TDataSetManagerFile.cxx:660
 TDataSetManagerFile.cxx:661
 TDataSetManagerFile.cxx:662
 TDataSetManagerFile.cxx:663
 TDataSetManagerFile.cxx:664
 TDataSetManagerFile.cxx:665
 TDataSetManagerFile.cxx:666
 TDataSetManagerFile.cxx:667
 TDataSetManagerFile.cxx:668
 TDataSetManagerFile.cxx:669
 TDataSetManagerFile.cxx:670
 TDataSetManagerFile.cxx:671
 TDataSetManagerFile.cxx:672
 TDataSetManagerFile.cxx:673
 TDataSetManagerFile.cxx:674
 TDataSetManagerFile.cxx:675
 TDataSetManagerFile.cxx:676
 TDataSetManagerFile.cxx:677
 TDataSetManagerFile.cxx:678
 TDataSetManagerFile.cxx:679
 TDataSetManagerFile.cxx:680
 TDataSetManagerFile.cxx:681
 TDataSetManagerFile.cxx:682
 TDataSetManagerFile.cxx:683
 TDataSetManagerFile.cxx:684
 TDataSetManagerFile.cxx:685
 TDataSetManagerFile.cxx:686
 TDataSetManagerFile.cxx:687
 TDataSetManagerFile.cxx:688
 TDataSetManagerFile.cxx:689
 TDataSetManagerFile.cxx:690
 TDataSetManagerFile.cxx:691
 TDataSetManagerFile.cxx:692
 TDataSetManagerFile.cxx:693
 TDataSetManagerFile.cxx:694
 TDataSetManagerFile.cxx:695
 TDataSetManagerFile.cxx:696
 TDataSetManagerFile.cxx:697
 TDataSetManagerFile.cxx:698
 TDataSetManagerFile.cxx:699
 TDataSetManagerFile.cxx:700
 TDataSetManagerFile.cxx:701
 TDataSetManagerFile.cxx:702
 TDataSetManagerFile.cxx:703
 TDataSetManagerFile.cxx:704
 TDataSetManagerFile.cxx:705
 TDataSetManagerFile.cxx:706
 TDataSetManagerFile.cxx:707
 TDataSetManagerFile.cxx:708
 TDataSetManagerFile.cxx:709
 TDataSetManagerFile.cxx:710
 TDataSetManagerFile.cxx:711
 TDataSetManagerFile.cxx:712
 TDataSetManagerFile.cxx:713
 TDataSetManagerFile.cxx:714
 TDataSetManagerFile.cxx:715
 TDataSetManagerFile.cxx:716
 TDataSetManagerFile.cxx:717
 TDataSetManagerFile.cxx:718
 TDataSetManagerFile.cxx:719
 TDataSetManagerFile.cxx:720
 TDataSetManagerFile.cxx:721
 TDataSetManagerFile.cxx:722
 TDataSetManagerFile.cxx:723
 TDataSetManagerFile.cxx:724
 TDataSetManagerFile.cxx:725
 TDataSetManagerFile.cxx:726
 TDataSetManagerFile.cxx:727
 TDataSetManagerFile.cxx:728
 TDataSetManagerFile.cxx:729
 TDataSetManagerFile.cxx:730
 TDataSetManagerFile.cxx:731
 TDataSetManagerFile.cxx:732
 TDataSetManagerFile.cxx:733
 TDataSetManagerFile.cxx:734
 TDataSetManagerFile.cxx:735
 TDataSetManagerFile.cxx:736
 TDataSetManagerFile.cxx:737
 TDataSetManagerFile.cxx:738
 TDataSetManagerFile.cxx:739
 TDataSetManagerFile.cxx:740
 TDataSetManagerFile.cxx:741
 TDataSetManagerFile.cxx:742
 TDataSetManagerFile.cxx:743
 TDataSetManagerFile.cxx:744
 TDataSetManagerFile.cxx:745
 TDataSetManagerFile.cxx:746
 TDataSetManagerFile.cxx:747
 TDataSetManagerFile.cxx:748
 TDataSetManagerFile.cxx:749
 TDataSetManagerFile.cxx:750
 TDataSetManagerFile.cxx:751
 TDataSetManagerFile.cxx:752
 TDataSetManagerFile.cxx:753
 TDataSetManagerFile.cxx:754
 TDataSetManagerFile.cxx:755
 TDataSetManagerFile.cxx:756
 TDataSetManagerFile.cxx:757
 TDataSetManagerFile.cxx:758
 TDataSetManagerFile.cxx:759
 TDataSetManagerFile.cxx:760
 TDataSetManagerFile.cxx:761
 TDataSetManagerFile.cxx:762
 TDataSetManagerFile.cxx:763
 TDataSetManagerFile.cxx:764
 TDataSetManagerFile.cxx:765
 TDataSetManagerFile.cxx:766
 TDataSetManagerFile.cxx:767
 TDataSetManagerFile.cxx:768
 TDataSetManagerFile.cxx:769
 TDataSetManagerFile.cxx:770
 TDataSetManagerFile.cxx:771
 TDataSetManagerFile.cxx:772
 TDataSetManagerFile.cxx:773
 TDataSetManagerFile.cxx:774
 TDataSetManagerFile.cxx:775
 TDataSetManagerFile.cxx:776
 TDataSetManagerFile.cxx:777
 TDataSetManagerFile.cxx:778
 TDataSetManagerFile.cxx:779
 TDataSetManagerFile.cxx:780
 TDataSetManagerFile.cxx:781
 TDataSetManagerFile.cxx:782
 TDataSetManagerFile.cxx:783
 TDataSetManagerFile.cxx:784
 TDataSetManagerFile.cxx:785
 TDataSetManagerFile.cxx:786
 TDataSetManagerFile.cxx:787
 TDataSetManagerFile.cxx:788
 TDataSetManagerFile.cxx:789
 TDataSetManagerFile.cxx:790
 TDataSetManagerFile.cxx:791
 TDataSetManagerFile.cxx:792
 TDataSetManagerFile.cxx:793
 TDataSetManagerFile.cxx:794
 TDataSetManagerFile.cxx:795
 TDataSetManagerFile.cxx:796
 TDataSetManagerFile.cxx:797
 TDataSetManagerFile.cxx:798
 TDataSetManagerFile.cxx:799
 TDataSetManagerFile.cxx:800
 TDataSetManagerFile.cxx:801
 TDataSetManagerFile.cxx:802
 TDataSetManagerFile.cxx:803
 TDataSetManagerFile.cxx:804
 TDataSetManagerFile.cxx:805
 TDataSetManagerFile.cxx:806
 TDataSetManagerFile.cxx:807
 TDataSetManagerFile.cxx:808
 TDataSetManagerFile.cxx:809
 TDataSetManagerFile.cxx:810
 TDataSetManagerFile.cxx:811
 TDataSetManagerFile.cxx:812
 TDataSetManagerFile.cxx:813
 TDataSetManagerFile.cxx:814
 TDataSetManagerFile.cxx:815
 TDataSetManagerFile.cxx:816
 TDataSetManagerFile.cxx:817
 TDataSetManagerFile.cxx:818
 TDataSetManagerFile.cxx:819
 TDataSetManagerFile.cxx:820
 TDataSetManagerFile.cxx:821
 TDataSetManagerFile.cxx:822
 TDataSetManagerFile.cxx:823
 TDataSetManagerFile.cxx:824
 TDataSetManagerFile.cxx:825
 TDataSetManagerFile.cxx:826
 TDataSetManagerFile.cxx:827
 TDataSetManagerFile.cxx:828
 TDataSetManagerFile.cxx:829
 TDataSetManagerFile.cxx:830
 TDataSetManagerFile.cxx:831
 TDataSetManagerFile.cxx:832
 TDataSetManagerFile.cxx:833
 TDataSetManagerFile.cxx:834
 TDataSetManagerFile.cxx:835
 TDataSetManagerFile.cxx:836
 TDataSetManagerFile.cxx:837
 TDataSetManagerFile.cxx:838
 TDataSetManagerFile.cxx:839
 TDataSetManagerFile.cxx:840
 TDataSetManagerFile.cxx:841
 TDataSetManagerFile.cxx:842
 TDataSetManagerFile.cxx:843
 TDataSetManagerFile.cxx:844
 TDataSetManagerFile.cxx:845
 TDataSetManagerFile.cxx:846
 TDataSetManagerFile.cxx:847
 TDataSetManagerFile.cxx:848
 TDataSetManagerFile.cxx:849
 TDataSetManagerFile.cxx:850
 TDataSetManagerFile.cxx:851
 TDataSetManagerFile.cxx:852
 TDataSetManagerFile.cxx:853
 TDataSetManagerFile.cxx:854
 TDataSetManagerFile.cxx:855
 TDataSetManagerFile.cxx:856
 TDataSetManagerFile.cxx:857
 TDataSetManagerFile.cxx:858
 TDataSetManagerFile.cxx:859
 TDataSetManagerFile.cxx:860
 TDataSetManagerFile.cxx:861
 TDataSetManagerFile.cxx:862
 TDataSetManagerFile.cxx:863
 TDataSetManagerFile.cxx:864
 TDataSetManagerFile.cxx:865
 TDataSetManagerFile.cxx:866
 TDataSetManagerFile.cxx:867
 TDataSetManagerFile.cxx:868
 TDataSetManagerFile.cxx:869
 TDataSetManagerFile.cxx:870
 TDataSetManagerFile.cxx:871
 TDataSetManagerFile.cxx:872
 TDataSetManagerFile.cxx:873
 TDataSetManagerFile.cxx:874
 TDataSetManagerFile.cxx:875
 TDataSetManagerFile.cxx:876
 TDataSetManagerFile.cxx:877
 TDataSetManagerFile.cxx:878
 TDataSetManagerFile.cxx:879
 TDataSetManagerFile.cxx:880
 TDataSetManagerFile.cxx:881
 TDataSetManagerFile.cxx:882
 TDataSetManagerFile.cxx:883
 TDataSetManagerFile.cxx:884
 TDataSetManagerFile.cxx:885
 TDataSetManagerFile.cxx:886
 TDataSetManagerFile.cxx:887
 TDataSetManagerFile.cxx:888
 TDataSetManagerFile.cxx:889
 TDataSetManagerFile.cxx:890
 TDataSetManagerFile.cxx:891
 TDataSetManagerFile.cxx:892
 TDataSetManagerFile.cxx:893
 TDataSetManagerFile.cxx:894
 TDataSetManagerFile.cxx:895
 TDataSetManagerFile.cxx:896
 TDataSetManagerFile.cxx:897
 TDataSetManagerFile.cxx:898
 TDataSetManagerFile.cxx:899
 TDataSetManagerFile.cxx:900
 TDataSetManagerFile.cxx:901
 TDataSetManagerFile.cxx:902
 TDataSetManagerFile.cxx:903
 TDataSetManagerFile.cxx:904
 TDataSetManagerFile.cxx:905
 TDataSetManagerFile.cxx:906
 TDataSetManagerFile.cxx:907
 TDataSetManagerFile.cxx:908
 TDataSetManagerFile.cxx:909
 TDataSetManagerFile.cxx:910
 TDataSetManagerFile.cxx:911
 TDataSetManagerFile.cxx:912
 TDataSetManagerFile.cxx:913
 TDataSetManagerFile.cxx:914
 TDataSetManagerFile.cxx:915
 TDataSetManagerFile.cxx:916
 TDataSetManagerFile.cxx:917
 TDataSetManagerFile.cxx:918
 TDataSetManagerFile.cxx:919
 TDataSetManagerFile.cxx:920
 TDataSetManagerFile.cxx:921
 TDataSetManagerFile.cxx:922
 TDataSetManagerFile.cxx:923
 TDataSetManagerFile.cxx:924
 TDataSetManagerFile.cxx:925
 TDataSetManagerFile.cxx:926
 TDataSetManagerFile.cxx:927
 TDataSetManagerFile.cxx:928
 TDataSetManagerFile.cxx:929
 TDataSetManagerFile.cxx:930
 TDataSetManagerFile.cxx:931
 TDataSetManagerFile.cxx:932
 TDataSetManagerFile.cxx:933
 TDataSetManagerFile.cxx:934
 TDataSetManagerFile.cxx:935
 TDataSetManagerFile.cxx:936
 TDataSetManagerFile.cxx:937
 TDataSetManagerFile.cxx:938
 TDataSetManagerFile.cxx:939
 TDataSetManagerFile.cxx:940
 TDataSetManagerFile.cxx:941
 TDataSetManagerFile.cxx:942
 TDataSetManagerFile.cxx:943
 TDataSetManagerFile.cxx:944
 TDataSetManagerFile.cxx:945
 TDataSetManagerFile.cxx:946
 TDataSetManagerFile.cxx:947
 TDataSetManagerFile.cxx:948
 TDataSetManagerFile.cxx:949
 TDataSetManagerFile.cxx:950
 TDataSetManagerFile.cxx:951
 TDataSetManagerFile.cxx:952
 TDataSetManagerFile.cxx:953
 TDataSetManagerFile.cxx:954
 TDataSetManagerFile.cxx:955
 TDataSetManagerFile.cxx:956
 TDataSetManagerFile.cxx:957
 TDataSetManagerFile.cxx:958
 TDataSetManagerFile.cxx:959
 TDataSetManagerFile.cxx:960
 TDataSetManagerFile.cxx:961
 TDataSetManagerFile.cxx:962
 TDataSetManagerFile.cxx:963
 TDataSetManagerFile.cxx:964
 TDataSetManagerFile.cxx:965
 TDataSetManagerFile.cxx:966
 TDataSetManagerFile.cxx:967
 TDataSetManagerFile.cxx:968
 TDataSetManagerFile.cxx:969
 TDataSetManagerFile.cxx:970
 TDataSetManagerFile.cxx:971
 TDataSetManagerFile.cxx:972
 TDataSetManagerFile.cxx:973
 TDataSetManagerFile.cxx:974
 TDataSetManagerFile.cxx:975
 TDataSetManagerFile.cxx:976
 TDataSetManagerFile.cxx:977
 TDataSetManagerFile.cxx:978
 TDataSetManagerFile.cxx:979
 TDataSetManagerFile.cxx:980
 TDataSetManagerFile.cxx:981
 TDataSetManagerFile.cxx:982
 TDataSetManagerFile.cxx:983
 TDataSetManagerFile.cxx:984
 TDataSetManagerFile.cxx:985
 TDataSetManagerFile.cxx:986
 TDataSetManagerFile.cxx:987
 TDataSetManagerFile.cxx:988
 TDataSetManagerFile.cxx:989
 TDataSetManagerFile.cxx:990
 TDataSetManagerFile.cxx:991
 TDataSetManagerFile.cxx:992
 TDataSetManagerFile.cxx:993
 TDataSetManagerFile.cxx:994
 TDataSetManagerFile.cxx:995
 TDataSetManagerFile.cxx:996
 TDataSetManagerFile.cxx:997
 TDataSetManagerFile.cxx:998
 TDataSetManagerFile.cxx:999
 TDataSetManagerFile.cxx:1000
 TDataSetManagerFile.cxx:1001
 TDataSetManagerFile.cxx:1002
 TDataSetManagerFile.cxx:1003
 TDataSetManagerFile.cxx:1004
 TDataSetManagerFile.cxx:1005
 TDataSetManagerFile.cxx:1006
 TDataSetManagerFile.cxx:1007
 TDataSetManagerFile.cxx:1008
 TDataSetManagerFile.cxx:1009
 TDataSetManagerFile.cxx:1010
 TDataSetManagerFile.cxx:1011
 TDataSetManagerFile.cxx:1012
 TDataSetManagerFile.cxx:1013
 TDataSetManagerFile.cxx:1014
 TDataSetManagerFile.cxx:1015
 TDataSetManagerFile.cxx:1016
 TDataSetManagerFile.cxx:1017
 TDataSetManagerFile.cxx:1018
 TDataSetManagerFile.cxx:1019
 TDataSetManagerFile.cxx:1020
 TDataSetManagerFile.cxx:1021
 TDataSetManagerFile.cxx:1022
 TDataSetManagerFile.cxx:1023
 TDataSetManagerFile.cxx:1024
 TDataSetManagerFile.cxx:1025
 TDataSetManagerFile.cxx:1026
 TDataSetManagerFile.cxx:1027
 TDataSetManagerFile.cxx:1028
 TDataSetManagerFile.cxx:1029
 TDataSetManagerFile.cxx:1030
 TDataSetManagerFile.cxx:1031
 TDataSetManagerFile.cxx:1032
 TDataSetManagerFile.cxx:1033
 TDataSetManagerFile.cxx:1034
 TDataSetManagerFile.cxx:1035
 TDataSetManagerFile.cxx:1036
 TDataSetManagerFile.cxx:1037
 TDataSetManagerFile.cxx:1038
 TDataSetManagerFile.cxx:1039
 TDataSetManagerFile.cxx:1040
 TDataSetManagerFile.cxx:1041
 TDataSetManagerFile.cxx:1042
 TDataSetManagerFile.cxx:1043
 TDataSetManagerFile.cxx:1044
 TDataSetManagerFile.cxx:1045
 TDataSetManagerFile.cxx:1046
 TDataSetManagerFile.cxx:1047
 TDataSetManagerFile.cxx:1048
 TDataSetManagerFile.cxx:1049
 TDataSetManagerFile.cxx:1050
 TDataSetManagerFile.cxx:1051
 TDataSetManagerFile.cxx:1052
 TDataSetManagerFile.cxx:1053
 TDataSetManagerFile.cxx:1054
 TDataSetManagerFile.cxx:1055
 TDataSetManagerFile.cxx:1056
 TDataSetManagerFile.cxx:1057
 TDataSetManagerFile.cxx:1058
 TDataSetManagerFile.cxx:1059
 TDataSetManagerFile.cxx:1060
 TDataSetManagerFile.cxx:1061
 TDataSetManagerFile.cxx:1062
 TDataSetManagerFile.cxx:1063
 TDataSetManagerFile.cxx:1064
 TDataSetManagerFile.cxx:1065
 TDataSetManagerFile.cxx:1066
 TDataSetManagerFile.cxx:1067
 TDataSetManagerFile.cxx:1068
 TDataSetManagerFile.cxx:1069
 TDataSetManagerFile.cxx:1070
 TDataSetManagerFile.cxx:1071
 TDataSetManagerFile.cxx:1072
 TDataSetManagerFile.cxx:1073
 TDataSetManagerFile.cxx:1074
 TDataSetManagerFile.cxx:1075
 TDataSetManagerFile.cxx:1076
 TDataSetManagerFile.cxx:1077
 TDataSetManagerFile.cxx:1078
 TDataSetManagerFile.cxx:1079
 TDataSetManagerFile.cxx:1080
 TDataSetManagerFile.cxx:1081
 TDataSetManagerFile.cxx:1082
 TDataSetManagerFile.cxx:1083
 TDataSetManagerFile.cxx:1084
 TDataSetManagerFile.cxx:1085
 TDataSetManagerFile.cxx:1086
 TDataSetManagerFile.cxx:1087
 TDataSetManagerFile.cxx:1088
 TDataSetManagerFile.cxx:1089
 TDataSetManagerFile.cxx:1090
 TDataSetManagerFile.cxx:1091
 TDataSetManagerFile.cxx:1092
 TDataSetManagerFile.cxx:1093
 TDataSetManagerFile.cxx:1094
 TDataSetManagerFile.cxx:1095
 TDataSetManagerFile.cxx:1096
 TDataSetManagerFile.cxx:1097
 TDataSetManagerFile.cxx:1098
 TDataSetManagerFile.cxx:1099
 TDataSetManagerFile.cxx:1100
 TDataSetManagerFile.cxx:1101
 TDataSetManagerFile.cxx:1102
 TDataSetManagerFile.cxx:1103
 TDataSetManagerFile.cxx:1104
 TDataSetManagerFile.cxx:1105
 TDataSetManagerFile.cxx:1106
 TDataSetManagerFile.cxx:1107
 TDataSetManagerFile.cxx:1108
 TDataSetManagerFile.cxx:1109
 TDataSetManagerFile.cxx:1110
 TDataSetManagerFile.cxx:1111
 TDataSetManagerFile.cxx:1112
 TDataSetManagerFile.cxx:1113
 TDataSetManagerFile.cxx:1114
 TDataSetManagerFile.cxx:1115
 TDataSetManagerFile.cxx:1116
 TDataSetManagerFile.cxx:1117
 TDataSetManagerFile.cxx:1118
 TDataSetManagerFile.cxx:1119
 TDataSetManagerFile.cxx:1120
 TDataSetManagerFile.cxx:1121
 TDataSetManagerFile.cxx:1122
 TDataSetManagerFile.cxx:1123
 TDataSetManagerFile.cxx:1124
 TDataSetManagerFile.cxx:1125
 TDataSetManagerFile.cxx:1126
 TDataSetManagerFile.cxx:1127
 TDataSetManagerFile.cxx:1128
 TDataSetManagerFile.cxx:1129
 TDataSetManagerFile.cxx:1130
 TDataSetManagerFile.cxx:1131
 TDataSetManagerFile.cxx:1132
 TDataSetManagerFile.cxx:1133
 TDataSetManagerFile.cxx:1134
 TDataSetManagerFile.cxx:1135
 TDataSetManagerFile.cxx:1136
 TDataSetManagerFile.cxx:1137
 TDataSetManagerFile.cxx:1138
 TDataSetManagerFile.cxx:1139
 TDataSetManagerFile.cxx:1140
 TDataSetManagerFile.cxx:1141
 TDataSetManagerFile.cxx:1142
 TDataSetManagerFile.cxx:1143
 TDataSetManagerFile.cxx:1144
 TDataSetManagerFile.cxx:1145
 TDataSetManagerFile.cxx:1146
 TDataSetManagerFile.cxx:1147
 TDataSetManagerFile.cxx:1148
 TDataSetManagerFile.cxx:1149
 TDataSetManagerFile.cxx:1150
 TDataSetManagerFile.cxx:1151
 TDataSetManagerFile.cxx:1152
 TDataSetManagerFile.cxx:1153
 TDataSetManagerFile.cxx:1154
 TDataSetManagerFile.cxx:1155
 TDataSetManagerFile.cxx:1156
 TDataSetManagerFile.cxx:1157
 TDataSetManagerFile.cxx:1158
 TDataSetManagerFile.cxx:1159
 TDataSetManagerFile.cxx:1160
 TDataSetManagerFile.cxx:1161
 TDataSetManagerFile.cxx:1162
 TDataSetManagerFile.cxx:1163
 TDataSetManagerFile.cxx:1164
 TDataSetManagerFile.cxx:1165
 TDataSetManagerFile.cxx:1166
 TDataSetManagerFile.cxx:1167
 TDataSetManagerFile.cxx:1168
 TDataSetManagerFile.cxx:1169
 TDataSetManagerFile.cxx:1170
 TDataSetManagerFile.cxx:1171
 TDataSetManagerFile.cxx:1172
 TDataSetManagerFile.cxx:1173
 TDataSetManagerFile.cxx:1174
 TDataSetManagerFile.cxx:1175
 TDataSetManagerFile.cxx:1176
 TDataSetManagerFile.cxx:1177
 TDataSetManagerFile.cxx:1178
 TDataSetManagerFile.cxx:1179
 TDataSetManagerFile.cxx:1180
 TDataSetManagerFile.cxx:1181
 TDataSetManagerFile.cxx:1182
 TDataSetManagerFile.cxx:1183
 TDataSetManagerFile.cxx:1184
 TDataSetManagerFile.cxx:1185
 TDataSetManagerFile.cxx:1186
 TDataSetManagerFile.cxx:1187
 TDataSetManagerFile.cxx:1188
 TDataSetManagerFile.cxx:1189
 TDataSetManagerFile.cxx:1190
 TDataSetManagerFile.cxx:1191
 TDataSetManagerFile.cxx:1192
 TDataSetManagerFile.cxx:1193
 TDataSetManagerFile.cxx:1194
 TDataSetManagerFile.cxx:1195
 TDataSetManagerFile.cxx:1196
 TDataSetManagerFile.cxx:1197
 TDataSetManagerFile.cxx:1198
 TDataSetManagerFile.cxx:1199
 TDataSetManagerFile.cxx:1200
 TDataSetManagerFile.cxx:1201
 TDataSetManagerFile.cxx:1202
 TDataSetManagerFile.cxx:1203
 TDataSetManagerFile.cxx:1204
 TDataSetManagerFile.cxx:1205
 TDataSetManagerFile.cxx:1206
 TDataSetManagerFile.cxx:1207
 TDataSetManagerFile.cxx:1208
 TDataSetManagerFile.cxx:1209
 TDataSetManagerFile.cxx:1210
 TDataSetManagerFile.cxx:1211
 TDataSetManagerFile.cxx:1212
 TDataSetManagerFile.cxx:1213
 TDataSetManagerFile.cxx:1214
 TDataSetManagerFile.cxx:1215
 TDataSetManagerFile.cxx:1216
 TDataSetManagerFile.cxx:1217
 TDataSetManagerFile.cxx:1218
 TDataSetManagerFile.cxx:1219
 TDataSetManagerFile.cxx:1220
 TDataSetManagerFile.cxx:1221
 TDataSetManagerFile.cxx:1222
 TDataSetManagerFile.cxx:1223
 TDataSetManagerFile.cxx:1224
 TDataSetManagerFile.cxx:1225
 TDataSetManagerFile.cxx:1226
 TDataSetManagerFile.cxx:1227
 TDataSetManagerFile.cxx:1228
 TDataSetManagerFile.cxx:1229
 TDataSetManagerFile.cxx:1230
 TDataSetManagerFile.cxx:1231
 TDataSetManagerFile.cxx:1232
 TDataSetManagerFile.cxx:1233
 TDataSetManagerFile.cxx:1234
 TDataSetManagerFile.cxx:1235
 TDataSetManagerFile.cxx:1236
 TDataSetManagerFile.cxx:1237
 TDataSetManagerFile.cxx:1238
 TDataSetManagerFile.cxx:1239
 TDataSetManagerFile.cxx:1240
 TDataSetManagerFile.cxx:1241
 TDataSetManagerFile.cxx:1242
 TDataSetManagerFile.cxx:1243
 TDataSetManagerFile.cxx:1244
 TDataSetManagerFile.cxx:1245
 TDataSetManagerFile.cxx:1246
 TDataSetManagerFile.cxx:1247
 TDataSetManagerFile.cxx:1248
 TDataSetManagerFile.cxx:1249
 TDataSetManagerFile.cxx:1250
 TDataSetManagerFile.cxx:1251
 TDataSetManagerFile.cxx:1252
 TDataSetManagerFile.cxx:1253
 TDataSetManagerFile.cxx:1254
 TDataSetManagerFile.cxx:1255
 TDataSetManagerFile.cxx:1256
 TDataSetManagerFile.cxx:1257
 TDataSetManagerFile.cxx:1258
 TDataSetManagerFile.cxx:1259
 TDataSetManagerFile.cxx:1260
 TDataSetManagerFile.cxx:1261
 TDataSetManagerFile.cxx:1262
 TDataSetManagerFile.cxx:1263
 TDataSetManagerFile.cxx:1264
 TDataSetManagerFile.cxx:1265
 TDataSetManagerFile.cxx:1266
 TDataSetManagerFile.cxx:1267
 TDataSetManagerFile.cxx:1268
 TDataSetManagerFile.cxx:1269
 TDataSetManagerFile.cxx:1270
 TDataSetManagerFile.cxx:1271
 TDataSetManagerFile.cxx:1272
 TDataSetManagerFile.cxx:1273
 TDataSetManagerFile.cxx:1274
 TDataSetManagerFile.cxx:1275
 TDataSetManagerFile.cxx:1276
 TDataSetManagerFile.cxx:1277
 TDataSetManagerFile.cxx:1278
 TDataSetManagerFile.cxx:1279
 TDataSetManagerFile.cxx:1280
 TDataSetManagerFile.cxx:1281
 TDataSetManagerFile.cxx:1282
 TDataSetManagerFile.cxx:1283
 TDataSetManagerFile.cxx:1284
 TDataSetManagerFile.cxx:1285
 TDataSetManagerFile.cxx:1286
 TDataSetManagerFile.cxx:1287
 TDataSetManagerFile.cxx:1288
 TDataSetManagerFile.cxx:1289
 TDataSetManagerFile.cxx:1290
 TDataSetManagerFile.cxx:1291
 TDataSetManagerFile.cxx:1292
 TDataSetManagerFile.cxx:1293
 TDataSetManagerFile.cxx:1294
 TDataSetManagerFile.cxx:1295
 TDataSetManagerFile.cxx:1296
 TDataSetManagerFile.cxx:1297
 TDataSetManagerFile.cxx:1298
 TDataSetManagerFile.cxx:1299
 TDataSetManagerFile.cxx:1300
 TDataSetManagerFile.cxx:1301
 TDataSetManagerFile.cxx:1302
 TDataSetManagerFile.cxx:1303
 TDataSetManagerFile.cxx:1304
 TDataSetManagerFile.cxx:1305
 TDataSetManagerFile.cxx:1306
 TDataSetManagerFile.cxx:1307
 TDataSetManagerFile.cxx:1308
 TDataSetManagerFile.cxx:1309
 TDataSetManagerFile.cxx:1310
 TDataSetManagerFile.cxx:1311
 TDataSetManagerFile.cxx:1312
 TDataSetManagerFile.cxx:1313
 TDataSetManagerFile.cxx:1314
 TDataSetManagerFile.cxx:1315
 TDataSetManagerFile.cxx:1316
 TDataSetManagerFile.cxx:1317
 TDataSetManagerFile.cxx:1318
 TDataSetManagerFile.cxx:1319
 TDataSetManagerFile.cxx:1320
 TDataSetManagerFile.cxx:1321
 TDataSetManagerFile.cxx:1322
 TDataSetManagerFile.cxx:1323
 TDataSetManagerFile.cxx:1324
 TDataSetManagerFile.cxx:1325
 TDataSetManagerFile.cxx:1326
 TDataSetManagerFile.cxx:1327
 TDataSetManagerFile.cxx:1328
 TDataSetManagerFile.cxx:1329
 TDataSetManagerFile.cxx:1330
 TDataSetManagerFile.cxx:1331
 TDataSetManagerFile.cxx:1332
 TDataSetManagerFile.cxx:1333
 TDataSetManagerFile.cxx:1334
 TDataSetManagerFile.cxx:1335
 TDataSetManagerFile.cxx:1336
 TDataSetManagerFile.cxx:1337
 TDataSetManagerFile.cxx:1338
 TDataSetManagerFile.cxx:1339
 TDataSetManagerFile.cxx:1340
 TDataSetManagerFile.cxx:1341
 TDataSetManagerFile.cxx:1342
 TDataSetManagerFile.cxx:1343
 TDataSetManagerFile.cxx:1344
 TDataSetManagerFile.cxx:1345
 TDataSetManagerFile.cxx:1346
 TDataSetManagerFile.cxx:1347
 TDataSetManagerFile.cxx:1348
 TDataSetManagerFile.cxx:1349
 TDataSetManagerFile.cxx:1350
 TDataSetManagerFile.cxx:1351
 TDataSetManagerFile.cxx:1352
 TDataSetManagerFile.cxx:1353
 TDataSetManagerFile.cxx:1354
 TDataSetManagerFile.cxx:1355
 TDataSetManagerFile.cxx:1356
 TDataSetManagerFile.cxx:1357
 TDataSetManagerFile.cxx:1358
 TDataSetManagerFile.cxx:1359
 TDataSetManagerFile.cxx:1360
 TDataSetManagerFile.cxx:1361
 TDataSetManagerFile.cxx:1362
 TDataSetManagerFile.cxx:1363
 TDataSetManagerFile.cxx:1364
 TDataSetManagerFile.cxx:1365
 TDataSetManagerFile.cxx:1366
 TDataSetManagerFile.cxx:1367
 TDataSetManagerFile.cxx:1368
 TDataSetManagerFile.cxx:1369
 TDataSetManagerFile.cxx:1370
 TDataSetManagerFile.cxx:1371
 TDataSetManagerFile.cxx:1372
 TDataSetManagerFile.cxx:1373
 TDataSetManagerFile.cxx:1374
 TDataSetManagerFile.cxx:1375
 TDataSetManagerFile.cxx:1376
 TDataSetManagerFile.cxx:1377
 TDataSetManagerFile.cxx:1378
 TDataSetManagerFile.cxx:1379
 TDataSetManagerFile.cxx:1380
 TDataSetManagerFile.cxx:1381
 TDataSetManagerFile.cxx:1382
 TDataSetManagerFile.cxx:1383
 TDataSetManagerFile.cxx:1384
 TDataSetManagerFile.cxx:1385
 TDataSetManagerFile.cxx:1386
 TDataSetManagerFile.cxx:1387
 TDataSetManagerFile.cxx:1388
 TDataSetManagerFile.cxx:1389
 TDataSetManagerFile.cxx:1390
 TDataSetManagerFile.cxx:1391
 TDataSetManagerFile.cxx:1392
 TDataSetManagerFile.cxx:1393
 TDataSetManagerFile.cxx:1394
 TDataSetManagerFile.cxx:1395
 TDataSetManagerFile.cxx:1396
 TDataSetManagerFile.cxx:1397
 TDataSetManagerFile.cxx:1398
 TDataSetManagerFile.cxx:1399
 TDataSetManagerFile.cxx:1400
 TDataSetManagerFile.cxx:1401
 TDataSetManagerFile.cxx:1402
 TDataSetManagerFile.cxx:1403
 TDataSetManagerFile.cxx:1404
 TDataSetManagerFile.cxx:1405
 TDataSetManagerFile.cxx:1406
 TDataSetManagerFile.cxx:1407
 TDataSetManagerFile.cxx:1408
 TDataSetManagerFile.cxx:1409
 TDataSetManagerFile.cxx:1410
 TDataSetManagerFile.cxx:1411
 TDataSetManagerFile.cxx:1412
 TDataSetManagerFile.cxx:1413
 TDataSetManagerFile.cxx:1414
 TDataSetManagerFile.cxx:1415
 TDataSetManagerFile.cxx:1416
 TDataSetManagerFile.cxx:1417
 TDataSetManagerFile.cxx:1418
 TDataSetManagerFile.cxx:1419
 TDataSetManagerFile.cxx:1420
 TDataSetManagerFile.cxx:1421
 TDataSetManagerFile.cxx:1422
 TDataSetManagerFile.cxx:1423
 TDataSetManagerFile.cxx:1424
 TDataSetManagerFile.cxx:1425
 TDataSetManagerFile.cxx:1426
 TDataSetManagerFile.cxx:1427
 TDataSetManagerFile.cxx:1428
 TDataSetManagerFile.cxx:1429
 TDataSetManagerFile.cxx:1430
 TDataSetManagerFile.cxx:1431
 TDataSetManagerFile.cxx:1432
 TDataSetManagerFile.cxx:1433
 TDataSetManagerFile.cxx:1434
 TDataSetManagerFile.cxx:1435
 TDataSetManagerFile.cxx:1436
 TDataSetManagerFile.cxx:1437
 TDataSetManagerFile.cxx:1438
 TDataSetManagerFile.cxx:1439
 TDataSetManagerFile.cxx:1440
 TDataSetManagerFile.cxx:1441
 TDataSetManagerFile.cxx:1442
 TDataSetManagerFile.cxx:1443
 TDataSetManagerFile.cxx:1444
 TDataSetManagerFile.cxx:1445
 TDataSetManagerFile.cxx:1446
 TDataSetManagerFile.cxx:1447
 TDataSetManagerFile.cxx:1448
 TDataSetManagerFile.cxx:1449
 TDataSetManagerFile.cxx:1450
 TDataSetManagerFile.cxx:1451
 TDataSetManagerFile.cxx:1452
 TDataSetManagerFile.cxx:1453
 TDataSetManagerFile.cxx:1454
 TDataSetManagerFile.cxx:1455
 TDataSetManagerFile.cxx:1456
 TDataSetManagerFile.cxx:1457
 TDataSetManagerFile.cxx:1458
 TDataSetManagerFile.cxx:1459
 TDataSetManagerFile.cxx:1460
 TDataSetManagerFile.cxx:1461
 TDataSetManagerFile.cxx:1462
 TDataSetManagerFile.cxx:1463
 TDataSetManagerFile.cxx:1464
 TDataSetManagerFile.cxx:1465
 TDataSetManagerFile.cxx:1466
 TDataSetManagerFile.cxx:1467
 TDataSetManagerFile.cxx:1468
 TDataSetManagerFile.cxx:1469
 TDataSetManagerFile.cxx:1470
 TDataSetManagerFile.cxx:1471
 TDataSetManagerFile.cxx:1472
 TDataSetManagerFile.cxx:1473
 TDataSetManagerFile.cxx:1474
 TDataSetManagerFile.cxx:1475
 TDataSetManagerFile.cxx:1476
 TDataSetManagerFile.cxx:1477
 TDataSetManagerFile.cxx:1478
 TDataSetManagerFile.cxx:1479
 TDataSetManagerFile.cxx:1480
 TDataSetManagerFile.cxx:1481
 TDataSetManagerFile.cxx:1482
 TDataSetManagerFile.cxx:1483
 TDataSetManagerFile.cxx:1484
 TDataSetManagerFile.cxx:1485
 TDataSetManagerFile.cxx:1486
 TDataSetManagerFile.cxx:1487
 TDataSetManagerFile.cxx:1488
 TDataSetManagerFile.cxx:1489
 TDataSetManagerFile.cxx:1490
 TDataSetManagerFile.cxx:1491
 TDataSetManagerFile.cxx:1492
 TDataSetManagerFile.cxx:1493
 TDataSetManagerFile.cxx:1494
 TDataSetManagerFile.cxx:1495
 TDataSetManagerFile.cxx:1496
 TDataSetManagerFile.cxx:1497
 TDataSetManagerFile.cxx:1498
 TDataSetManagerFile.cxx:1499
 TDataSetManagerFile.cxx:1500
 TDataSetManagerFile.cxx:1501
 TDataSetManagerFile.cxx:1502
 TDataSetManagerFile.cxx:1503
 TDataSetManagerFile.cxx:1504
 TDataSetManagerFile.cxx:1505
 TDataSetManagerFile.cxx:1506
 TDataSetManagerFile.cxx:1507
 TDataSetManagerFile.cxx:1508
 TDataSetManagerFile.cxx:1509
 TDataSetManagerFile.cxx:1510
 TDataSetManagerFile.cxx:1511
 TDataSetManagerFile.cxx:1512
 TDataSetManagerFile.cxx:1513
 TDataSetManagerFile.cxx:1514
 TDataSetManagerFile.cxx:1515
 TDataSetManagerFile.cxx:1516
 TDataSetManagerFile.cxx:1517
 TDataSetManagerFile.cxx:1518
 TDataSetManagerFile.cxx:1519
 TDataSetManagerFile.cxx:1520
 TDataSetManagerFile.cxx:1521
 TDataSetManagerFile.cxx:1522
 TDataSetManagerFile.cxx:1523
 TDataSetManagerFile.cxx:1524
 TDataSetManagerFile.cxx:1525
 TDataSetManagerFile.cxx:1526
 TDataSetManagerFile.cxx:1527
 TDataSetManagerFile.cxx:1528
 TDataSetManagerFile.cxx:1529
 TDataSetManagerFile.cxx:1530
 TDataSetManagerFile.cxx:1531
 TDataSetManagerFile.cxx:1532
 TDataSetManagerFile.cxx:1533
 TDataSetManagerFile.cxx:1534
 TDataSetManagerFile.cxx:1535
 TDataSetManagerFile.cxx:1536
 TDataSetManagerFile.cxx:1537
 TDataSetManagerFile.cxx:1538
 TDataSetManagerFile.cxx:1539
 TDataSetManagerFile.cxx:1540
 TDataSetManagerFile.cxx:1541
 TDataSetManagerFile.cxx:1542
 TDataSetManagerFile.cxx:1543
 TDataSetManagerFile.cxx:1544
 TDataSetManagerFile.cxx:1545
 TDataSetManagerFile.cxx:1546
 TDataSetManagerFile.cxx:1547
 TDataSetManagerFile.cxx:1548
 TDataSetManagerFile.cxx:1549
 TDataSetManagerFile.cxx:1550
 TDataSetManagerFile.cxx:1551
 TDataSetManagerFile.cxx:1552
 TDataSetManagerFile.cxx:1553
 TDataSetManagerFile.cxx:1554
 TDataSetManagerFile.cxx:1555
 TDataSetManagerFile.cxx:1556
 TDataSetManagerFile.cxx:1557
 TDataSetManagerFile.cxx:1558
 TDataSetManagerFile.cxx:1559
 TDataSetManagerFile.cxx:1560
 TDataSetManagerFile.cxx:1561
 TDataSetManagerFile.cxx:1562
 TDataSetManagerFile.cxx:1563
 TDataSetManagerFile.cxx:1564
 TDataSetManagerFile.cxx:1565
 TDataSetManagerFile.cxx:1566
 TDataSetManagerFile.cxx:1567
 TDataSetManagerFile.cxx:1568
 TDataSetManagerFile.cxx:1569
 TDataSetManagerFile.cxx:1570
 TDataSetManagerFile.cxx:1571
 TDataSetManagerFile.cxx:1572
 TDataSetManagerFile.cxx:1573
 TDataSetManagerFile.cxx:1574
 TDataSetManagerFile.cxx:1575
 TDataSetManagerFile.cxx:1576
 TDataSetManagerFile.cxx:1577
 TDataSetManagerFile.cxx:1578
 TDataSetManagerFile.cxx:1579
 TDataSetManagerFile.cxx:1580
 TDataSetManagerFile.cxx:1581
 TDataSetManagerFile.cxx:1582
 TDataSetManagerFile.cxx:1583
 TDataSetManagerFile.cxx:1584
 TDataSetManagerFile.cxx:1585
 TDataSetManagerFile.cxx:1586
 TDataSetManagerFile.cxx:1587
 TDataSetManagerFile.cxx:1588
 TDataSetManagerFile.cxx:1589
 TDataSetManagerFile.cxx:1590
 TDataSetManagerFile.cxx:1591
 TDataSetManagerFile.cxx:1592
 TDataSetManagerFile.cxx:1593
 TDataSetManagerFile.cxx:1594
 TDataSetManagerFile.cxx:1595
 TDataSetManagerFile.cxx:1596
 TDataSetManagerFile.cxx:1597
 TDataSetManagerFile.cxx:1598
 TDataSetManagerFile.cxx:1599
 TDataSetManagerFile.cxx:1600
 TDataSetManagerFile.cxx:1601
 TDataSetManagerFile.cxx:1602
 TDataSetManagerFile.cxx:1603
 TDataSetManagerFile.cxx:1604
 TDataSetManagerFile.cxx:1605
 TDataSetManagerFile.cxx:1606
 TDataSetManagerFile.cxx:1607
 TDataSetManagerFile.cxx:1608
 TDataSetManagerFile.cxx:1609
 TDataSetManagerFile.cxx:1610
 TDataSetManagerFile.cxx:1611
 TDataSetManagerFile.cxx:1612
 TDataSetManagerFile.cxx:1613
 TDataSetManagerFile.cxx:1614
 TDataSetManagerFile.cxx:1615
 TDataSetManagerFile.cxx:1616
 TDataSetManagerFile.cxx:1617
 TDataSetManagerFile.cxx:1618
 TDataSetManagerFile.cxx:1619
 TDataSetManagerFile.cxx:1620
 TDataSetManagerFile.cxx:1621
 TDataSetManagerFile.cxx:1622
 TDataSetManagerFile.cxx:1623
 TDataSetManagerFile.cxx:1624
 TDataSetManagerFile.cxx:1625
 TDataSetManagerFile.cxx:1626
 TDataSetManagerFile.cxx:1627
 TDataSetManagerFile.cxx:1628
 TDataSetManagerFile.cxx:1629
 TDataSetManagerFile.cxx:1630
 TDataSetManagerFile.cxx:1631
 TDataSetManagerFile.cxx:1632
 TDataSetManagerFile.cxx:1633
 TDataSetManagerFile.cxx:1634
 TDataSetManagerFile.cxx:1635
 TDataSetManagerFile.cxx:1636
 TDataSetManagerFile.cxx:1637
 TDataSetManagerFile.cxx:1638
 TDataSetManagerFile.cxx:1639
 TDataSetManagerFile.cxx:1640
 TDataSetManagerFile.cxx:1641
 TDataSetManagerFile.cxx:1642
 TDataSetManagerFile.cxx:1643
 TDataSetManagerFile.cxx:1644
 TDataSetManagerFile.cxx:1645
 TDataSetManagerFile.cxx:1646
 TDataSetManagerFile.cxx:1647
 TDataSetManagerFile.cxx:1648
 TDataSetManagerFile.cxx:1649
 TDataSetManagerFile.cxx:1650
 TDataSetManagerFile.cxx:1651
 TDataSetManagerFile.cxx:1652
 TDataSetManagerFile.cxx:1653
 TDataSetManagerFile.cxx:1654
 TDataSetManagerFile.cxx:1655
 TDataSetManagerFile.cxx:1656
 TDataSetManagerFile.cxx:1657
 TDataSetManagerFile.cxx:1658
 TDataSetManagerFile.cxx:1659
 TDataSetManagerFile.cxx:1660
 TDataSetManagerFile.cxx:1661
 TDataSetManagerFile.cxx:1662
 TDataSetManagerFile.cxx:1663
 TDataSetManagerFile.cxx:1664
 TDataSetManagerFile.cxx:1665
 TDataSetManagerFile.cxx:1666
 TDataSetManagerFile.cxx:1667
 TDataSetManagerFile.cxx:1668
 TDataSetManagerFile.cxx:1669
 TDataSetManagerFile.cxx:1670
 TDataSetManagerFile.cxx:1671
 TDataSetManagerFile.cxx:1672
 TDataSetManagerFile.cxx:1673
 TDataSetManagerFile.cxx:1674
 TDataSetManagerFile.cxx:1675
 TDataSetManagerFile.cxx:1676
 TDataSetManagerFile.cxx:1677
 TDataSetManagerFile.cxx:1678
 TDataSetManagerFile.cxx:1679
 TDataSetManagerFile.cxx:1680
 TDataSetManagerFile.cxx:1681
 TDataSetManagerFile.cxx:1682
 TDataSetManagerFile.cxx:1683
 TDataSetManagerFile.cxx:1684
 TDataSetManagerFile.cxx:1685
 TDataSetManagerFile.cxx:1686
 TDataSetManagerFile.cxx:1687
 TDataSetManagerFile.cxx:1688
 TDataSetManagerFile.cxx:1689
 TDataSetManagerFile.cxx:1690
 TDataSetManagerFile.cxx:1691
 TDataSetManagerFile.cxx:1692
 TDataSetManagerFile.cxx:1693
 TDataSetManagerFile.cxx:1694
 TDataSetManagerFile.cxx:1695
 TDataSetManagerFile.cxx:1696
 TDataSetManagerFile.cxx:1697
 TDataSetManagerFile.cxx:1698
 TDataSetManagerFile.cxx:1699
 TDataSetManagerFile.cxx:1700
 TDataSetManagerFile.cxx:1701
 TDataSetManagerFile.cxx:1702
 TDataSetManagerFile.cxx:1703
 TDataSetManagerFile.cxx:1704
 TDataSetManagerFile.cxx:1705
 TDataSetManagerFile.cxx:1706
 TDataSetManagerFile.cxx:1707
 TDataSetManagerFile.cxx:1708
 TDataSetManagerFile.cxx:1709
 TDataSetManagerFile.cxx:1710
 TDataSetManagerFile.cxx:1711
 TDataSetManagerFile.cxx:1712
 TDataSetManagerFile.cxx:1713
 TDataSetManagerFile.cxx:1714
 TDataSetManagerFile.cxx:1715
 TDataSetManagerFile.cxx:1716
 TDataSetManagerFile.cxx:1717
 TDataSetManagerFile.cxx:1718
 TDataSetManagerFile.cxx:1719
 TDataSetManagerFile.cxx:1720
 TDataSetManagerFile.cxx:1721
 TDataSetManagerFile.cxx:1722
 TDataSetManagerFile.cxx:1723
 TDataSetManagerFile.cxx:1724
 TDataSetManagerFile.cxx:1725
 TDataSetManagerFile.cxx:1726
 TDataSetManagerFile.cxx:1727
 TDataSetManagerFile.cxx:1728
 TDataSetManagerFile.cxx:1729
 TDataSetManagerFile.cxx:1730
 TDataSetManagerFile.cxx:1731
 TDataSetManagerFile.cxx:1732
 TDataSetManagerFile.cxx:1733
 TDataSetManagerFile.cxx:1734
 TDataSetManagerFile.cxx:1735
 TDataSetManagerFile.cxx:1736
 TDataSetManagerFile.cxx:1737
 TDataSetManagerFile.cxx:1738
 TDataSetManagerFile.cxx:1739
 TDataSetManagerFile.cxx:1740
 TDataSetManagerFile.cxx:1741
 TDataSetManagerFile.cxx:1742
 TDataSetManagerFile.cxx:1743
 TDataSetManagerFile.cxx:1744
 TDataSetManagerFile.cxx:1745
 TDataSetManagerFile.cxx:1746
 TDataSetManagerFile.cxx:1747
 TDataSetManagerFile.cxx:1748
 TDataSetManagerFile.cxx:1749
 TDataSetManagerFile.cxx:1750
 TDataSetManagerFile.cxx:1751
 TDataSetManagerFile.cxx:1752
 TDataSetManagerFile.cxx:1753
 TDataSetManagerFile.cxx:1754
 TDataSetManagerFile.cxx:1755
 TDataSetManagerFile.cxx:1756
 TDataSetManagerFile.cxx:1757
 TDataSetManagerFile.cxx:1758
 TDataSetManagerFile.cxx:1759
 TDataSetManagerFile.cxx:1760
 TDataSetManagerFile.cxx:1761
 TDataSetManagerFile.cxx:1762
 TDataSetManagerFile.cxx:1763
 TDataSetManagerFile.cxx:1764
 TDataSetManagerFile.cxx:1765
 TDataSetManagerFile.cxx:1766
 TDataSetManagerFile.cxx:1767
 TDataSetManagerFile.cxx:1768
 TDataSetManagerFile.cxx:1769
 TDataSetManagerFile.cxx:1770
 TDataSetManagerFile.cxx:1771
 TDataSetManagerFile.cxx:1772
 TDataSetManagerFile.cxx:1773
 TDataSetManagerFile.cxx:1774
 TDataSetManagerFile.cxx:1775
 TDataSetManagerFile.cxx:1776
 TDataSetManagerFile.cxx:1777
 TDataSetManagerFile.cxx:1778
 TDataSetManagerFile.cxx:1779
 TDataSetManagerFile.cxx:1780
 TDataSetManagerFile.cxx:1781
 TDataSetManagerFile.cxx:1782
 TDataSetManagerFile.cxx:1783
 TDataSetManagerFile.cxx:1784
 TDataSetManagerFile.cxx:1785
 TDataSetManagerFile.cxx:1786
 TDataSetManagerFile.cxx:1787
 TDataSetManagerFile.cxx:1788
 TDataSetManagerFile.cxx:1789
 TDataSetManagerFile.cxx:1790
 TDataSetManagerFile.cxx:1791
 TDataSetManagerFile.cxx:1792
 TDataSetManagerFile.cxx:1793
 TDataSetManagerFile.cxx:1794
 TDataSetManagerFile.cxx:1795
 TDataSetManagerFile.cxx:1796
 TDataSetManagerFile.cxx:1797
 TDataSetManagerFile.cxx:1798
 TDataSetManagerFile.cxx:1799
 TDataSetManagerFile.cxx:1800
 TDataSetManagerFile.cxx:1801
 TDataSetManagerFile.cxx:1802
 TDataSetManagerFile.cxx:1803
 TDataSetManagerFile.cxx:1804
 TDataSetManagerFile.cxx:1805
 TDataSetManagerFile.cxx:1806
 TDataSetManagerFile.cxx:1807
 TDataSetManagerFile.cxx:1808
 TDataSetManagerFile.cxx:1809
 TDataSetManagerFile.cxx:1810
 TDataSetManagerFile.cxx:1811
 TDataSetManagerFile.cxx:1812
 TDataSetManagerFile.cxx:1813
 TDataSetManagerFile.cxx:1814
 TDataSetManagerFile.cxx:1815
 TDataSetManagerFile.cxx:1816
 TDataSetManagerFile.cxx:1817
 TDataSetManagerFile.cxx:1818
 TDataSetManagerFile.cxx:1819
 TDataSetManagerFile.cxx:1820
 TDataSetManagerFile.cxx:1821
 TDataSetManagerFile.cxx:1822
 TDataSetManagerFile.cxx:1823
 TDataSetManagerFile.cxx:1824
 TDataSetManagerFile.cxx:1825
 TDataSetManagerFile.cxx:1826
 TDataSetManagerFile.cxx:1827
 TDataSetManagerFile.cxx:1828
 TDataSetManagerFile.cxx:1829
 TDataSetManagerFile.cxx:1830
 TDataSetManagerFile.cxx:1831
 TDataSetManagerFile.cxx:1832
 TDataSetManagerFile.cxx:1833
 TDataSetManagerFile.cxx:1834
 TDataSetManagerFile.cxx:1835
 TDataSetManagerFile.cxx:1836
 TDataSetManagerFile.cxx:1837
 TDataSetManagerFile.cxx:1838
 TDataSetManagerFile.cxx:1839
 TDataSetManagerFile.cxx:1840
 TDataSetManagerFile.cxx:1841
 TDataSetManagerFile.cxx:1842
 TDataSetManagerFile.cxx:1843
 TDataSetManagerFile.cxx:1844
 TDataSetManagerFile.cxx:1845
 TDataSetManagerFile.cxx:1846
 TDataSetManagerFile.cxx:1847
 TDataSetManagerFile.cxx:1848
 TDataSetManagerFile.cxx:1849
 TDataSetManagerFile.cxx:1850
 TDataSetManagerFile.cxx:1851
 TDataSetManagerFile.cxx:1852
 TDataSetManagerFile.cxx:1853
 TDataSetManagerFile.cxx:1854
 TDataSetManagerFile.cxx:1855
 TDataSetManagerFile.cxx:1856
 TDataSetManagerFile.cxx:1857
 TDataSetManagerFile.cxx:1858
 TDataSetManagerFile.cxx:1859
 TDataSetManagerFile.cxx:1860
 TDataSetManagerFile.cxx:1861
 TDataSetManagerFile.cxx:1862
 TDataSetManagerFile.cxx:1863
 TDataSetManagerFile.cxx:1864
 TDataSetManagerFile.cxx:1865
 TDataSetManagerFile.cxx:1866
 TDataSetManagerFile.cxx:1867
 TDataSetManagerFile.cxx:1868
 TDataSetManagerFile.cxx:1869
 TDataSetManagerFile.cxx:1870
 TDataSetManagerFile.cxx:1871
 TDataSetManagerFile.cxx:1872
 TDataSetManagerFile.cxx:1873
 TDataSetManagerFile.cxx:1874
 TDataSetManagerFile.cxx:1875
 TDataSetManagerFile.cxx:1876
 TDataSetManagerFile.cxx:1877
 TDataSetManagerFile.cxx:1878
 TDataSetManagerFile.cxx:1879
 TDataSetManagerFile.cxx:1880
 TDataSetManagerFile.cxx:1881
 TDataSetManagerFile.cxx:1882
 TDataSetManagerFile.cxx:1883
 TDataSetManagerFile.cxx:1884
 TDataSetManagerFile.cxx:1885
 TDataSetManagerFile.cxx:1886
 TDataSetManagerFile.cxx:1887
 TDataSetManagerFile.cxx:1888
 TDataSetManagerFile.cxx:1889
 TDataSetManagerFile.cxx:1890
 TDataSetManagerFile.cxx:1891
 TDataSetManagerFile.cxx:1892
 TDataSetManagerFile.cxx:1893
 TDataSetManagerFile.cxx:1894
 TDataSetManagerFile.cxx:1895
 TDataSetManagerFile.cxx:1896
 TDataSetManagerFile.cxx:1897
 TDataSetManagerFile.cxx:1898
 TDataSetManagerFile.cxx:1899
 TDataSetManagerFile.cxx:1900
 TDataSetManagerFile.cxx:1901
 TDataSetManagerFile.cxx:1902
 TDataSetManagerFile.cxx:1903
 TDataSetManagerFile.cxx:1904
 TDataSetManagerFile.cxx:1905
 TDataSetManagerFile.cxx:1906
 TDataSetManagerFile.cxx:1907
 TDataSetManagerFile.cxx:1908
 TDataSetManagerFile.cxx:1909
 TDataSetManagerFile.cxx:1910
 TDataSetManagerFile.cxx:1911
 TDataSetManagerFile.cxx:1912
 TDataSetManagerFile.cxx:1913
 TDataSetManagerFile.cxx:1914
 TDataSetManagerFile.cxx:1915
 TDataSetManagerFile.cxx:1916
 TDataSetManagerFile.cxx:1917
 TDataSetManagerFile.cxx:1918
 TDataSetManagerFile.cxx:1919
 TDataSetManagerFile.cxx:1920
 TDataSetManagerFile.cxx:1921
 TDataSetManagerFile.cxx:1922
 TDataSetManagerFile.cxx:1923
 TDataSetManagerFile.cxx:1924
 TDataSetManagerFile.cxx:1925
 TDataSetManagerFile.cxx:1926
 TDataSetManagerFile.cxx:1927
 TDataSetManagerFile.cxx:1928
 TDataSetManagerFile.cxx:1929
 TDataSetManagerFile.cxx:1930
 TDataSetManagerFile.cxx:1931
 TDataSetManagerFile.cxx:1932
 TDataSetManagerFile.cxx:1933
 TDataSetManagerFile.cxx:1934
 TDataSetManagerFile.cxx:1935
 TDataSetManagerFile.cxx:1936
 TDataSetManagerFile.cxx:1937
 TDataSetManagerFile.cxx:1938
 TDataSetManagerFile.cxx:1939
 TDataSetManagerFile.cxx:1940
 TDataSetManagerFile.cxx:1941
 TDataSetManagerFile.cxx:1942
 TDataSetManagerFile.cxx:1943
 TDataSetManagerFile.cxx:1944
 TDataSetManagerFile.cxx:1945
 TDataSetManagerFile.cxx:1946
 TDataSetManagerFile.cxx:1947
 TDataSetManagerFile.cxx:1948
 TDataSetManagerFile.cxx:1949
 TDataSetManagerFile.cxx:1950
 TDataSetManagerFile.cxx:1951
 TDataSetManagerFile.cxx:1952
 TDataSetManagerFile.cxx:1953
 TDataSetManagerFile.cxx:1954
 TDataSetManagerFile.cxx:1955
 TDataSetManagerFile.cxx:1956
 TDataSetManagerFile.cxx:1957
 TDataSetManagerFile.cxx:1958
 TDataSetManagerFile.cxx:1959
 TDataSetManagerFile.cxx:1960
 TDataSetManagerFile.cxx:1961
 TDataSetManagerFile.cxx:1962
 TDataSetManagerFile.cxx:1963
 TDataSetManagerFile.cxx:1964
 TDataSetManagerFile.cxx:1965
 TDataSetManagerFile.cxx:1966
 TDataSetManagerFile.cxx:1967
 TDataSetManagerFile.cxx:1968
 TDataSetManagerFile.cxx:1969
 TDataSetManagerFile.cxx:1970
 TDataSetManagerFile.cxx:1971
 TDataSetManagerFile.cxx:1972
 TDataSetManagerFile.cxx:1973
 TDataSetManagerFile.cxx:1974
 TDataSetManagerFile.cxx:1975
 TDataSetManagerFile.cxx:1976
 TDataSetManagerFile.cxx:1977
 TDataSetManagerFile.cxx:1978
 TDataSetManagerFile.cxx:1979
 TDataSetManagerFile.cxx:1980
 TDataSetManagerFile.cxx:1981
 TDataSetManagerFile.cxx:1982
 TDataSetManagerFile.cxx:1983
 TDataSetManagerFile.cxx:1984
 TDataSetManagerFile.cxx:1985
 TDataSetManagerFile.cxx:1986
 TDataSetManagerFile.cxx:1987
 TDataSetManagerFile.cxx:1988
 TDataSetManagerFile.cxx:1989