void execCreateAndMerge() { 
//-------------------------------------------------------------------------- 
for ( Int_t ifile = 0 ; ifile < 4 ; ifile++ ) { 
   TFile* outputFile = TFile::Open(Form("a_file_%d.root",ifile),"RECREATE"); 
   TNamed* namedObj = new TNamed(Form("namedObj%d",ifile),Form("namedObj%d",ifile)); 
   namedObj->Write(); 
   outputFile->Close(); 
} 
cout << "4 a files created" << endl; 
//-------------------------------------------------------------------------- 
//-------------------------------------------------------------------------- 
for ( Int_t ifile = 0 ; ifile < 4 ; ifile++ ) { 
   TFile* outputFile = TFile::Open(Form("b_file_%d.root",ifile),"RECREATE"); 
   TNamed* namedObj = new TNamed("namedObj","namedObj"); 
   namedObj->Write(); 
   outputFile->Close(); 
} 
cout << "4 b files created" << endl; 
//-------------------------------------------------------------------------- 
//-------------------------------------------------------------------------- 
TFileMerger* aMerger = new TFileMerger(kFALSE); 
 for ( Int_t ifile = 0 ; ifile < 4 ; ifile++ ) { 
    TFile* inFile = TFile::Open(Form("a_file_%d.root",ifile)); 
    aMerger->AddFile(inFile); 
 } 
 aMerger->OutputFile("a_file.root"); 
 aMerger->Merge(); 
 cout << "4 a files merged" << endl; 
//-------------------------------------------------------------------------- 
//-------------------------------------------------------------------------- 
 TFileMerger* bMerger = new TFileMerger(kFALSE); 
 for ( Int_t ifile = 0 ; ifile < 4 ; ifile++ ) { 
    TFile* inFile = TFile::Open(Form("b_file_%d.root",ifile)); 
    bMerger->AddFile(inFile); 
 } 
 bMerger->OutputFile("b_file.root"); 
 bMerger->Merge(); 
cout << "4 b files merged" << endl; 
//-------------------------------------------------------------------------- 
//-------------------------------------------------------------------------- 
TFile* inAFile = TFile::Open("a_file.root"); 
cout << "******* MERGED A FILE ******** 4 objects with different names" << endl; 
inAFile->ls(); 
cout << "******************************" << endl; 
//-------------------------------------------------------------------------- 
//-------------------------------------------------------------------------- 
TFile* inBFile = TFile::Open("b_file.root"); 
cout << "******* MERGED B FILE ******** 4 objects with the same names" << endl; 
inBFile->ls(); 
cout << "******************************" << endl; 
//-------------------------------------------------------------------------- 
} 
Example #2
0
void MergeCollectionFromGrid(const char * incollection = "test.xml", const char * outputfile= "dndeta_merged.root")
{
  // for running with root only
  gSystem->Load("libTree");
  gSystem->Load("libGeom");
  gSystem->Load("libVMC");
  gSystem->Load("libSTEERBase");
  gSystem->Load("libESD");
  gSystem->Load("libAOD");

  // load analysis framework
  gSystem->Load("libANALYSIS");
  gSystem->Load("libANALYSISalice");

  // load dndeta task
  gROOT->LoadMacro("AliAnalysisTaskdNdetaMC.cxx+");


  TFileMerger * fileMerger  = new TFileMerger(0); // dont merge local files

  TGrid::Connect("alien://");
  TGridCollection * coll = TAlienCollection::Open (incollection);
  Int_t  ifile=0;
  while(coll->Next()){
    fileMerger->AddFile(TString("alien://")+coll->GetLFN());
    ifile++;
    //    if(ifile>2) break;
  }
  fileMerger->OutputFile("tmp.root");
  fileMerger->Merge();

  // Reopen the merged file, normalize histos and save them back.
  // SOME DUPLICATED CODE... SOME CLEAN UP WOULD BE GOOD
  AliAnalysisTaskdNdetaMC * localTask  = new AliAnalysisTaskdNdetaMC("merger", "tmp.root");
  localTask->Finalize();
  
  TFile * fout = new TFile (outputfile, "recreate");
  localTask->GetList()->Write();
  fout->Close();
}
void MergeFlowd() 
{
	TGrid *alien = TGrid::Connect("alien");
	if (alien->IsZombie())
	{
		delete alien;
		cout << "Fatal: Alien is a zombie!" << endl;
		return;
	}

  Int_t runlist[] = {                                                               // Counter
    /*170309, 170308, 170306, 170270, 170269, 170268, 170230, 170228,*/ 170204, 170203, // 10
    170193, 170163, 170159, 170155, 170081, 170027, 169859, 169858, 169855, 169846, // 20
    169838, 169837, 169835, 169417, 169415, 169411, 169238, 169167, 169160, 169156, // 30
    169148, 169145, 169144, 169138, 169094, 169091, 169035, 168992, 168988, 168826, // 40
    168777, 168514, 168512, 168511, 168467, 168464, 168460, 168458, 168362, 168361, // 50
    168342, 168341, 168325, 168322, 168311, 168310, 167988, 167987                  // 58
  };	

  TFileMerger merger;
  TString dataBaseDir = "/alice/cern.ch/user/m/mpuccio/Flowd_PbPb2011/output/000";
  merger.OutputFile("FileMerger.root");
  for (int iRun = 0; iRun < 1; ++iRun)
  {
  	TString runDir = Form("%s%i",dataBaseDir.Data(),runlist[iRun]);
  	TGridResult *res = alien->Command(Form("find %s */mpuccio_Flowd.root",runDir.Data()));
  	TIter iter(res);
  	TMap *map;
  	while ((map = (TMap*)iter())) 
  	{
  		TObjString *obj = dynamic_cast<TObjString*>(map->GetValue("turl"));
  		if (!obj || !obj->String().Length())
  		{
  			delete res;
  			break;
  		}

  		TFile *f = TFile::Open(obj->String().Data());
  		if (!f->IsOpen())
  		{
  			cout << "File " << obj->String().Data() << " has some problems..." << endl;
  			continue;
  		}
  		merger.AddFile(f);
  		merger.PartialMerge();
  		f->Close();
  	}
  }
  merger.Merge();
  merger.Write();
}
Example #4
0
File: BA.C Project: ktf/AliPhysics
Int_t BA(  const TString& pSpectra   = "~/alice/output/Proton-lhc10d-Spectra.root"
         , const TString& dSpectra   = "~/alice/output/Deuteron-lhc10d-Spectra.root"
         , const TString& ptag       = "lhc10d"
         , const TString& dtag       = "lhc10d"
         , const TString& outputfile = "~/alice/output/lhc10d-B2.root"
         , const TString& otag       = "lhc10d"
         , const Bool_t   draw       = 1)
{
//
// coalescence parameter for nucleus and antinucleus
//
	using namespace std;
	
	Int_t A = 2;
	Int_t Z = 1;
	
	if(nucleus == "Deuteron")
	{
		A = 2;
		Z = 1;
	}
	else if(nucleus == "Triton")
	{
		A = 3;
		Z = 1;
	}
	else if(nucleus == "He3")
	{
		A = 3;
		Z = 2;
	}
	else
	{
		cerr << "only valid names: Deuteron, Triton and He3" << endl;
		return 1;
	}
	
	const Int_t kNpart = 2;
	const Int_t kZ[kNpart] = { Z, -Z };
	const TString kB2File[kNpart] = {"BA.root", "AntiBA.root" };
	
	TFileMerger m;
	
	for(Int_t i=0; i<kNpart; ++i)
	{
		AliLnBA b2(pSpectra, ptag, dSpectra, dtag, kB2File[i], otag, A, kZ[i]);
		
		b2.Run();
		
		m.AddFile(kB2File[i].Data(),0);
	}
	
	m.OutputFile(outputfile.Data());
	m.Merge();
	
	gSystem->Exec(Form("rm -f %s %s", kB2File[0].Data(), kB2File[1].Data()));
	
	if(!draw) return 0;
	
	const TString kNucleus[kNpart] = { nucleus, Form("Anti%s",nucleus.Data())};
	
	for(Int_t i=0; i<kNpart; ++i)
	{
		gROOT->ProcessLine(Form(".x DrawBA.C+g(\"%s\",\"%s\",\"%s\")", outputfile.Data(), otag.Data(), kNucleus[i].Data()));
	}
	
	return 0;
}
Example #5
0
void mergeSelective(Int_t nfiles=5)
{
// This macro demonstrates how to merge only a part of the content of a set
// of input files, specified via the interface:
//      TFileMerger::AddObjectNames(const char *names)
// The method can be called several times to add object names, or using a single
// strings with names separated by a blank. Directory names contained in the files
// to be merged are accepted.
//
// Two modes are supported:
// == kOnlyListed: via TFileMerger::PartialMerge(kOnlyListed)
//    This will merge only the objects in the files having the names in the
//    specified list. If a folder is specified, it whole content will be merged
//
// == kSkipListed: via TFileMerger::PartialMerge(kSkipListed)
//    This will skip merging of specified objects. If a folder is specified, its
//    whole content will be skipped.
//
// Important note: the kOnlyListed and kSkipListed flags have to be bitwise OR-ed
// on top of the merging defaults: kAll | kIncremental (as in the example)
//
// The files to be merged have the following structure:
// - hpx          (TH1F)
// - hpxpy        (TH2F)
// - hprof        (TProfile)
// - ntuple       (TNtuple)
// = folder       (TDirectory)
//      - hpx1    (TH1F)
//
// The example first merges exclusively hprof and the content of "folder",
// producing the file exclusive.root, then merges all content but skipping
// hprof and the content of "folder". The result can be inspected in the
// browser.

   // Create the files to be merged
   TStopwatch timer;
   timer.Start();
   if (gROOT->LoadMacro("$ROOTSYS/tutorials/hsimple.C")) return;
   Int_t i;
   for (i=0; i<nfiles; i++) CreateFile(Form("tomerge%03d.root",i));

   //------------------------------------
   // Merge only the listed objects
   //------------------------------------
   TFileMerger *fm;
   fm = new TFileMerger(kFALSE);
   fm->OutputFile("exclusive.root");
   fm->AddObjectNames("hprof folder");
   for (i=0; i<nfiles; i++) fm->AddFile(Form("tomerge%03d.root",i));
   // Must add new merging flag on top of the the default ones
   Int_t default_mode = TFileMerger::kAll | TFileMerger::kIncremental;
   Int_t mode = default_mode | TFileMerger::kOnlyListed;
   fm->PartialMerge(mode);
   fm->Reset();

   //------------------------------------
   // Skip merging of the listed objects
   //------------------------------------
   fm->OutputFile("skipped.root");
   fm->AddObjectNames("hprof folder");
   for (i=0; i<nfiles; i++) fm->AddFile(Form("tomerge%03d.root",i));
   // Must add new merging flag on top of the the default ones
   mode = default_mode | TFileMerger::kSkipListed;
   fm->PartialMerge(mode);
   delete fm;


   // Cleanup initial files
   for (i=0; i<nfiles; i++) gSystem->Unlink(Form("tomerge%03d.root",i));
   // Open files to inspect in the browser
   TFile::Open("exclusive.root");
   TFile::Open("skipped.root");
   new TBrowser();
   timer.Stop();
   timer.Print();
}