ROOT logo
/** 
 * Create a file collection in a ROOT file 
 * 
 * @param dir         Input directory
 * @param tN          Tree name
 * @param pa          File name pattern
 * @param mc          If true, simulations
 * @param recursive   Scan recursively 
 *
 * @ingroup pwglf_forward_trains_helper
 */
void
CreateFileCollection(const TString& dir="/data/alice/data/ppb/LHC12g/pass1/188359/",
		     const TString& tN="esdTree", 
		     const TString& pa="AliESD*", 
		     Bool_t mc=false, 
		     Bool_t recursive=false)
)
{
  gROOT->LoadMacro("$ALICE_ROOT/PWGLF/FORWARD/trains/ChainBuilder.C+");
  
  UShort_t flags = 0;
  if (recursive) flags |= ChainBuilder::kRecursive;
  if (mc)        flags |= ChainBuilder::kMC;
  UShort_t type = ChainBuilder::CheckSource(dir, flags);
  Info("", "type=%d, dir=%s tN=%s pa=%s, flags=0x%x", type,
       dir.Data(), tN.Data(), pa.Data(), flags);
  TChain* chain = ChainBuilder::Create(type, dir, tN, pa, flags);
  if (!chain) { 
    Error("CreateFileCollection", "Failed to make chain");
    return;
  }
  Int_t port;
  TString host;
  { 
    TUrl u(Form("root://%s//foo", gSystem->HostName()));
    port = u.GetPort() * 10;
    host = u.GetHostFQDN();
  }
  

  TFileCollection* fc  = new TFileCollection("files");
  TObjArray*       cEs = chain->GetListOfFiles();
  TChainElement*   cE  = 0;
  TIter            next(cEs);
  while ((cE= static_cast<TChainElement*>(next()))) {
    TString fN(cE->GetTitle());
    TFile* f = TFile::Open(fN, "READ");
    TTree* t = static_cast<TTree*>(f->Get(tN));
    
    fN.Prepend(Form("root://%s:%d/", host.Data(), port));
    TFileInfo* fi = new TFileInfo(Form("%s tree:%s,%d", 
				       fN.Data(), tN.Data(), t->GetEntries()),
				  f->GetSize());
    f->Close();
    fc->Add(fi);
  }
  fc->Print("F");
  
  TFile* files = TFile::Open("files.root", "RECREATE");
  fc->Write();
  files->Close();
  
}
//
// EOF
//
 CreateFileCollection.C:1
 CreateFileCollection.C:2
 CreateFileCollection.C:3
 CreateFileCollection.C:4
 CreateFileCollection.C:5
 CreateFileCollection.C:6
 CreateFileCollection.C:7
 CreateFileCollection.C:8
 CreateFileCollection.C:9
 CreateFileCollection.C:10
 CreateFileCollection.C:11
 CreateFileCollection.C:12
 CreateFileCollection.C:13
 CreateFileCollection.C:14
 CreateFileCollection.C:15
 CreateFileCollection.C:16
 CreateFileCollection.C:17
 CreateFileCollection.C:18
 CreateFileCollection.C:19
 CreateFileCollection.C:20
 CreateFileCollection.C:21
 CreateFileCollection.C:22
 CreateFileCollection.C:23
 CreateFileCollection.C:24
 CreateFileCollection.C:25
 CreateFileCollection.C:26
 CreateFileCollection.C:27
 CreateFileCollection.C:28
 CreateFileCollection.C:29
 CreateFileCollection.C:30
 CreateFileCollection.C:31
 CreateFileCollection.C:32
 CreateFileCollection.C:33
 CreateFileCollection.C:34
 CreateFileCollection.C:35
 CreateFileCollection.C:36
 CreateFileCollection.C:37
 CreateFileCollection.C:38
 CreateFileCollection.C:39
 CreateFileCollection.C:40
 CreateFileCollection.C:41
 CreateFileCollection.C:42
 CreateFileCollection.C:43
 CreateFileCollection.C:44
 CreateFileCollection.C:45
 CreateFileCollection.C:46
 CreateFileCollection.C:47
 CreateFileCollection.C:48
 CreateFileCollection.C:49
 CreateFileCollection.C:50
 CreateFileCollection.C:51
 CreateFileCollection.C:52
 CreateFileCollection.C:53
 CreateFileCollection.C:54
 CreateFileCollection.C:55
 CreateFileCollection.C:56
 CreateFileCollection.C:57
 CreateFileCollection.C:58
 CreateFileCollection.C:59
 CreateFileCollection.C:60
 CreateFileCollection.C:61
 CreateFileCollection.C:62
 CreateFileCollection.C:63
 CreateFileCollection.C:64
 CreateFileCollection.C:65
 CreateFileCollection.C:66
 CreateFileCollection.C:67
 CreateFileCollection.C:68