ROOT logo
// @(#)root/base:$Id: TDataSetManagerFile.cxx 29171 2009-06-23 14:13:06Z brun $
// 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 "TDataSetManagerFile.h"

#include "Riostream.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 "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"

ClassImp(TDataSetManagerFile)

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

   // Parse options
   ParseInitOpts(ins);

   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::kAllowStaging);
            dir.Form("%s/%s/%s", fDataSetDir.Data(), fGroup.Data(), fUser.Data());
            if (gSystem->AccessPathName(dir)) {
               Error("TDataSetManagerFile",
                     "could not attach to a valid the dataset dir; paths tried:");
               Error("TDataSetManagerFile", "    %s", emsg.Data());
               Error("TDataSetManagerFile", "    %s", dir.Data());
               SetBit(TObject::kInvalidObject);
               return;
            }
         }
      }

      // 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())));

      // Fill locking path
      fDataSetLockFile = Form("%s-dataset-lock", fDataSetDir.Data());
      fDataSetLockFile.ReplaceAll("/","%");
      fDataSetLockFile.ReplaceAll(":","%");
      fDataSetLockFile.Insert(0, Form("%s/", gSystem->TempDirectory()));

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

   // If the MSS url was not given, check if one is defined via env
   if (fMSSUrl.IsNull())
      fMSSUrl = gEnv->GetValue("ProofDataSet.MSSUrl", "");
}

//______________________________________________________________________________
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 laready initialized by the base constructor

   SetBit(TObject::kInvalidObject);

   // 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());
   }

   // 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)
{
   //
   // Returns path of the indicated dataset
   // Contains a static TString for result. Copy result before using twice.

   if (fgCommonDataSetTag == group)
     group = fCommonGroup;

   if (fgCommonDataSetTag == user)
     user = fCommonUser;

   static TString result;
   result.Form("%s/%s/%s/%s.root", fDataSetDir.Data(), group, user, dsName);
   if (gDebug > 0)
      Info("GetDataSetPath","path: %s", result.Data());
   return result;
}

//______________________________________________________________________________
Bool_t TDataSetManagerFile::BrowseDataSets(const char *group,
                                                const char *user,
                                                UInt_t option, TObject *target)
{
   // Adds the dataset in the folder of group, user to the list in target
   //
   // 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
   //
   // 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;

   // 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) > 1) {
      Error("BrowseDataSets",
            "only one of kPrint, kQuotaUpdate or kExport can be specified at once");
      return kFALSE;
   }
   Bool_t fillmap = (!exporting && !printing && !updating) ? kTRUE : kFALSE;

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

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

   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));

         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 && 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));
            }
         } else {
            if (fillmap && datasetMap)
               datasetMap->Add(new TObjString(datasetName), fileList);
         }
      }
   }
   gSystem->FreeDirectory(userDir);

   return kTRUE;
}

//______________________________________________________________________________
TMap *TDataSetManagerFile::GetDataSets(const char *group, const char *user,
                                            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.
   // 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
   //    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;

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

   Bool_t printing = (option & kPrint) ? kTRUE : kFALSE;
   Bool_t exporting = (option & kExport) ? kTRUE : kFALSE;
   Bool_t updating = (option & kQuotaUpdate) ? kTRUE : kFALSE;

   // The last three options are mutually exclusive
   if (((Int_t)printing + (Int_t)exporting + (Int_t)updating) > 1) {
      Error("GetDataSets", "only one of '?P', '?Q' or '?E' 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) {
      TMap *om = new TMap;
      om->SetOwner();
      result = om;
   }

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

   if (option & kShowDefault) {
      // add the common ones
      BrowseDataSets(fCommonGroup, fCommonUser, option, result);
      user = 0;
   }

   // group, user defined, no looping needed
   if (user && group) {
      BrowseDataSets(group, user, option, result);
      if (!printing) return (TMap *)result;
   } else {
      // loop needed
      void *dataSetDir = 0;
      if ((dataSetDir = gSystem->OpenDirectory(fDataSetDir))) {
         // loop over groups
         const char *currentGroup = 0;
         while ((currentGroup = gSystem->GetDirEntry(dataSetDir))) {

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

            if (group && strcmp(group, currentGroup))
               continue;

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

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

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

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

               if (user && strcmp(user, currentUser))
                  continue;

               BrowseDataSets(currentGroup, currentUser, option, result);
            }
            gSystem->FreeDirectory(groupDir);
         }
         gSystem->FreeDirectory(dataSetDir);
      }
   }
   // Print the result, if required
   if (printing) {
      TList *output = (TList *)result;
      output->Sort();
      Printf("Dataset URI                               | # Files | Default tree | # Events |   Disk   | Staged");
      TIter iter4(output);
      TObjString* formattedLine = 0;
      while ((formattedLine = dynamic_cast<TObjString*> (iter4())))
         Printf("%s", formattedLine->String().Data());
      // Cleanup
      SafeDelete(output);
      result = 0;
   }

   return (TMap *)result;
}

//______________________________________________________________________________
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.

   TLockFile lock(fDataSetLockFile, fLockFileTimeLimit);

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

   if (gSystem->AccessPathName(path) != kFALSE) {
      Info("GetDataSet", "dataset %s does not exist", path.Data());
      return 0;
   }

   TMD5 *retrievedChecksum = 0;
   if (checksum) {
      // save md5 sum
      retrievedChecksum = TMD5::FileChecksum(path);
      if (!retrievedChecksum) {
          Error("GetDataSet", "could not get checksum of %s", path.Data());
         return 0;
      }
   }

   TFile *f = TFile::Open(path.Data());
   if (!f) {
      Error("GetDataSet", "Could not open file %s", path.Data());
      if (retrievedChecksum)
         delete retrievedChecksum;
      return 0;
   }

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

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

   f->Close();
   delete f;

   if (checksum)
      *checksum = retrievedChecksum;
   return fileList;
}

//______________________________________________________________________________
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

   TLockFile lock(fDataSetLockFile, fLockFileTimeLimit);

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

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

   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);

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

   f->Close();
   delete f;

   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());
      return 0;
   }

   return 1;
}

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

   TLockFile lock(fDataSetLockFile, fLockFileTimeLimit);

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

   return (gSystem->Unlink(path) == 0);
}

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

   TLockFile lock(fDataSetLockFile, fLockFileTimeLimit);

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

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

//______________________________________________________________________________
Int_t TDataSetManagerFile::RegisterDataSet(const char *uri,
                                                TFileCollection *dataSet,
                                                const char *opts)
{
   // Register a dataset, perfoming quota checkings and verification, if required.
   // Fails if a dataset with the same name already exists, unless 'opts'
   // contains 'O', in which case the old dataset is overwritten.
   // If 'opts' contains 'V' the dataset files are also verified.
   // By default the dataset is not verified.
   // 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;
   }

   // Check option
   TString opt(opts);
   if (!opt.Contains("O", TString::kIgnoreCase)) {
      // Fail if it exists already
      if (ExistsDataSet(fGroup, fUser, dsName)) {
         //Dataset name does exist
         return -1;
      }
   }

   // We will save a sorted list
   dataSet->Sort();

   // 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 (prevFile->Compare(obj)) {
         uniqueFileList->Add(obj);
         prevFile = 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
   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 (ScanDataSet(dataSet, (UInt_t)(kReopen | kDebug)) < 0) {
         Error("RegisterDataSet", "problems verifying the dataset");
         return -1;
      }
   }

   // 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)) {
            if (ScanDataSet(fGroup, fUser, dsName, (UInt_t)(kReopen | kDebug)) > 0)
               return GetNDisapparedFiles();
         }
      }
   }
   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;

   Int_t result = ScanDataSet(dataset, option);

   if (result == 2) {
      if (WriteDataSet(group, user, dsName, dataset) == 0) {
         delete dataset;
         return -2;
      }
   }
   delete dataset;

   return result;
}

//______________________________________________________________________________
Int_t TDataSetManagerFile::ScanDataSet(TFileCollection *dataset,
                                            UInt_t option, Int_t filesmax)
{
   // Updates the information in a dataset by opening all files that are not yet
   // marked staged creates metadata for each tree in the opened file
   //
   // Available options (to be .or.ed)
   //   kMaxFiles      process a maximum of 'filesmax' files
   //   kReopen        opens also files that are marked staged
   //   kTouch         opens and touches files that are marked staged; implies kReopen
   //
   // Return code
   //   negative in case of error
   //     -1 dataset not found
   //     -2 could not write dataset after verification
   //
   //   positive in case of success
   //     1 dataset was not changed
   //     2 dataset was changed
   //
   // The number of opened, touched, disappeared files can be retrieved by
   // GetNTouchedFiles(), GetNOpenedFiles(), GetNDisapparedFiles()

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

   // Parse options
   Bool_t notify = (gDebug > 0 || (option & kDebug)) ? kTRUE : kFALSE;
   // Max number of files
   Int_t maxFiles = ((option & kMaxFiles) && (filesmax > -1)) ? filesmax : -1;
   if (maxFiles > -1 && notify)
      Info("ScanDataSet", "processing a maximum of %d files", maxFiles);
   // Reopen
   Bool_t reopen = ((option & kReopen) || (option & kTouch)) ? kTRUE : kFALSE;
   // Touch
   Bool_t touch = ((option & kTouch)) ? kTRUE : kFALSE;

   fNTouchedFiles = 0;
   fNOpenedFiles = 0;
   fNDisappearedFiles = 0;

   Bool_t changed = kFALSE;

   TFileStager *stager = (!fMSSUrl.IsNull()) ? TFileStager::Open(fMSSUrl) : 0;
   Bool_t createStager = (stager) ? kFALSE : kTRUE;

   // Check which files have been staged, this can be replaced by a bulk command,
   // once it exists in the xrdclient
   TList newStagedFiles;
   TIter iter2(dataset->GetList());
   TFileInfo *fileInfo = 0;
   while ((fileInfo = dynamic_cast<TFileInfo*> (iter2.Next()))) {

      fileInfo->ResetUrl();
      if (!fileInfo->GetCurrentUrl()) {
         Error("ScanDataSet", "GetCurrentUrl() is 0 for %s",
                              fileInfo->GetFirstUrl()->GetUrl());
         continue;
      }

      if (fileInfo->TestBit(TFileInfo::kStaged)) {

         // Skip files flagged as corrupted
         if (fileInfo->TestBit(TFileInfo::kCorrupted)) continue;

         // Skip if we are not asked to re-open the staged files
         if (!reopen) continue;

         // Set the URL removing the anchor (e.g. #AliESDs.root) because IsStaged()
         // and TFile::Open() with filetype=raw do not accept anchors
         TUrl url(*(fileInfo->GetCurrentUrl()));
         url.SetAnchor("");

         // Notify
         if (notify && (fNTouchedFiles+fNDisappearedFiles) % 100 == 0)
            Info("ScanDataSet",
                 "opening %d. file: %s", fNTouchedFiles+fNDisappearedFiles,
                 fileInfo->GetCurrentUrl()->GetUrl());

         // Check if file is still available, if touch is set actually read from the file
         TFile *file = TFile::Open(Form("%s?filetype=raw&mxredir=2", url.GetUrl()));
         if (file) {
            if (touch) {
               // Actually access the file
               char tmpChar = 0;
               file->ReadBuffer(&tmpChar, 1);
            }
            file->Close();
            delete file;
            fNTouchedFiles++;
         } else {
            // File could not be opened, reset staged bit
            if (notify)
               Info("ScanDataSet", "file %s disappeared", url.GetUrl());
            fileInfo->ResetBit(TFileInfo::kStaged);
            fNDisappearedFiles++;
            changed = kTRUE;

            // Remove invalid URL, if other one left...
            if (fileInfo->GetNUrls() > 1)
               fileInfo->RemoveUrl(fileInfo->GetCurrentUrl()->GetUrl());
         }
         // Go to next
         continue;
      }

      // Staging must be allowed
      if (!TestBit(TDataSetManager::kAllowStaging)) continue;

      // Only open maximum number of 'new' files
      if (maxFiles > 0 && newStagedFiles.GetEntries() >= maxFiles)
         continue;

      // Set the URL removing the anchor (e.g. #AliESDs.root) because IsStaged()
      // and TFile::Open() with filetype=raw do not accept anchors
      TUrl url(*(fileInfo->GetCurrentUrl()));
      url.SetAnchor("");

      // Get the stager (either the global one or from the URL)
      stager = createStager ? TFileStager::Open(url.GetUrl()) : stager;

      Bool_t result = kFALSE;
      if (stager) {
         result = stager->IsStaged(url.GetUrl());
         if (notify && gDebug > 0)
            Info("ScanDataSet", "IsStaged: %s: %d", url.GetUrl(), result);
         if (createStager)
            SafeDelete(stager);
      } else {
         Warning("ScanDataSet",
                 "could not get stager instance for '%s'", url.GetUrl());
      }

      // Go to next in case of failure
      if (!result) continue;

      // Register the newly staged file
      newStagedFiles.Add(fileInfo);
   }
   SafeDelete(stager);

   // loop over now staged files
   if (notify && newStagedFiles.GetEntries() > 0)
      Info("ScanDataSet",
           "opening %d files that appear to be newly staged.",
           newStagedFiles.GetEntries());

   // Prevent blocking of TFile::Open, if the file disappeared in the last nanoseconds
   Bool_t oldStatus = TFile::GetOnlyStaged();
   TFile::SetOnlyStaged(kTRUE);

   Int_t count = 0;
   TIter iter3(&newStagedFiles);
   while ((fileInfo = dynamic_cast<TFileInfo*> (iter3.Next()))) {

      if (notify && count++ % 100 == 0)
         Info("ScanDataSet", "processing %d.'new' file: %s",
                             count, fileInfo->GetCurrentUrl()->GetUrl());

      TUrl *url = fileInfo->GetCurrentUrl();

      TFile *file = 0;

      // To determine the size we have to open the file without the anchor
      // (otherwise we get the size of the contained file - in case of a zip archive)
      // We open in raw mode which makes sure that the opening succeeds, even if
      // the file is corrupted
      TUrl urlNoAnchor(*url);
      urlNoAnchor.SetAnchor("");
      urlNoAnchor.SetOptions("filetype=raw");
      if (!(file = TFile::Open(urlNoAnchor.GetUrl())))
         continue;

      // OK, set the relevant flags
      changed = kTRUE;
      fileInfo->SetBit(TFileInfo::kStaged);

      // Add url of the disk server in front of the list
      TUrl urlDiskServer(*url);
      urlDiskServer.SetHost(file->GetEndpointUrl()->GetHost());
      fileInfo->AddUrl(urlDiskServer.GetUrl(), kTRUE);
      if (notify)
        Info("ScanDataSet", "added URL %s", urlDiskServer.GetUrl());

      if (file->GetSize() > 0)
          fileInfo->SetSize(file->GetSize());
      fileInfo->SetUUID(file->GetUUID().AsString());

      file->Close();
      delete file;

      if (!(file = TFile::Open(url->GetUrl()))) {
         // If the file could be opened before, but fails now it is corrupt...
         if (notify)
            Info("ScanDataSet", "marking %s as corrupt", url->GetUrl());
         fileInfo->SetBit(TFileInfo::kCorrupted);
         continue;
      }

      // disable warnings when reading a tree without loading the corresponding library
      Int_t oldLevel = gErrorIgnoreLevel;
      gErrorIgnoreLevel = kError+1;

      // loop over all entries and create/update corresponding metadata
      // this code only used the objects in the basedir, should be extended to cover directories also
      // It only processes TTrees
      if (file->GetListOfKeys()) {
         TIter keyIter(file->GetListOfKeys());
         TKey *key = 0;
         while ((key = dynamic_cast<TKey*> (keyIter.Next()))) {
            if (strcmp(key->GetClassName(), "TTree"))
               continue;

            TString keyStr;
            keyStr.Form("/%s", key->GetName());

            TFileInfoMeta *metaData = fileInfo->GetMetaData(keyStr);
            if (!metaData) {
               // create it
               metaData = new TFileInfoMeta(keyStr, key->GetClassName());
               fileInfo->AddMetaData(metaData);

               if (notify)
                  Info("ScanDataSet", "created meta data for tree %s", keyStr.Data());
            }

            // fill values
            // TODO if we cannot read the tree, is the file corrupted also?
            TTree *tree = dynamic_cast<TTree*> (file->Get(key->GetName()));
            if (tree) {
               if (tree->GetEntries() > 0)
                  metaData->SetEntries(tree->GetEntries());
               if (tree->GetTotBytes() > 0)
                  metaData->SetTotBytes(tree->GetTotBytes());
               if (tree->GetZipBytes() > 0)
                  metaData->SetZipBytes(tree->GetZipBytes());
            }
         }
      }

      // set back old warning level
      gErrorIgnoreLevel = oldLevel;

      file->Close();
      delete file;

      fNOpenedFiles++;
   }

   TFile::SetOnlyStaged(oldStatus);

   dataset->RemoveDuplicates();
   dataset->Update(fAvgFileSize);

   Int_t result = (changed) ? 2 : 1;
   if (result > 0 && notify)
      Info("ScanDataSet", "%d files 'new'; %d files touched; %d files disappeared",
                          GetNOpenedFiles(), GetNTouchedFiles(), GetNDisapparedFiles());

   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;

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

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

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

   TString dsUser, dsGroup, dsName;

   if (!ParseUri(uri, &dsGroup, &dsUser, &dsName))
      return (TFileCollection *)0;
   TFileCollection *fc = GetDataSet(dsGroup, dsUser, dsName);

   if (fc && srv && strlen(srv) > 0) {
      // Build up the subset
      TFileCollection *sfc = 0;
      TString ss(srv), 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, (UInt_t)kQuotaUpdate);
}
 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