ROOT logo
////////////////////////////////////////////////////////////////////////
//
// name: CopyAli.C
// date: 17.3.2002
// last update: 21.3.2002
// author: Jiri Chudoba
// version: 1.0
//
// description: 
//    copy some alice objects from 1 file to another
//
// ToDo: 
//    add support for more events in 1 file
//
//
// Note:
//    copied objects are not deleted, I assume that the root
//    session is exited after this copy
//
// Example:
//     aliroot -b -q CopyAli.C\("galice.root","TreeK.root",0,1,1,1\)
//
// History:
//
// 21.3.02 - first version
//
////////////////////////////////////////////////////////////////////////

#if !defined(__CINT__) || defined(__MAKECINT__)
#include "iostream.h"
#include "TTree.h"
#include "TBranch.h"
#include "TDirectory.h"
#include "TFile.h"
#include "AliRun.h"
#include "TParticle.h"
#include "AliHeader.h"
#include "TObjArray.h"
#include "TString.h"
#endif

void CopyAli(TString fnOrig="rfio:galice.root", TString fnNew="galice_new.root",Int_t iEvent = 0, Bool_t copygAlice=kTRUE,Bool_t copyTreeK = kFALSE) 
{

  TFile *fileOrig = TFile::Open(fnOrig);
  if (!fileOrig->IsOpen()) {
    cerr<<"Cannot open input file "<<fnOrig.Data()<<endl;
    return;
  }
//  AliRun *gAlice;
  if (gAlice) {delete gAlice; gAlice = 0;}  
  gAlice = (AliRun*)(fileOrig->Get("gAlice"));
  if (!gAlice) {
    cerr<<"Cannot read gAlice from the input file"<<endl;
    return;
  }

  Int_t nAllTracks = gAlice->GetEvent(iEvent);
  cout<<"nAllTracks = "<<nAllTracks<<endl;

// Open the new file

  TFile *fileNew = TFile::Open(fnNew,"update");
  if (!fileNew->IsOpen()) {
    cerr<<"Cannot open output file "<<fnNew.Data()<<endl;
    return;
  }
  if (copygAlice) {
    cout<<"Copy gAlice: ";
    gAlice->Write();
    cout<<"done"<<endl;

    TTree *treeE  = gAlice->TreeE();
    if (!treeE) {
      cerr<<"No TreeE found for event "<<iEvent<<endl;
      return;
    }      
    cout<<"Copy TreeE: ";
    AliHeader *header = new AliHeader();
    treeE->SetBranchAddress("Header", &header);
    treeE->SetBranchStatus("*",1);
    TTree *treeENew =  treeE->CloneTree();
    treeENew->Write();
    cout<<"done"<<endl;

  if (copyTreeK) {
    cout<<"Copy TreeK: ";
    TTree *treeK  = gAlice->TreeK();
    if (!treeK) {
      cerr<<"No TreeK found for event "<<iEvent<<endl;
      return;
    }
    TParticle *particle = new TParticle();
    treeK->SetBranchAddress("Particles",&particle);
    treeK->SetBranchStatus("*",1);
    TTree *treeKNew =  treeK->CloneTree();
    treeKNew->Write();
    cout<<"done"<<endl;
  }

 
  delete gAlice;
  gAlice = 0;
  fileNew->Close();
  fileOrig->Close();
  delete fileNew;
  delete fileOrig;
}
 CopyAli.C:1
 CopyAli.C:2
 CopyAli.C:3
 CopyAli.C:4
 CopyAli.C:5
 CopyAli.C:6
 CopyAli.C:7
 CopyAli.C:8
 CopyAli.C:9
 CopyAli.C:10
 CopyAli.C:11
 CopyAli.C:12
 CopyAli.C:13
 CopyAli.C:14
 CopyAli.C:15
 CopyAli.C:16
 CopyAli.C:17
 CopyAli.C:18
 CopyAli.C:19
 CopyAli.C:20
 CopyAli.C:21
 CopyAli.C:22
 CopyAli.C:23
 CopyAli.C:24
 CopyAli.C:25
 CopyAli.C:26
 CopyAli.C:27
 CopyAli.C:28
 CopyAli.C:29
 CopyAli.C:30
 CopyAli.C:31
 CopyAli.C:32
 CopyAli.C:33
 CopyAli.C:34
 CopyAli.C:35
 CopyAli.C:36
 CopyAli.C:37
 CopyAli.C:38
 CopyAli.C:39
 CopyAli.C:40
 CopyAli.C:41
 CopyAli.C:42
 CopyAli.C:43
 CopyAli.C:44
 CopyAli.C:45
 CopyAli.C:46
 CopyAli.C:47
 CopyAli.C:48
 CopyAli.C:49
 CopyAli.C:50
 CopyAli.C:51
 CopyAli.C:52
 CopyAli.C:53
 CopyAli.C:54
 CopyAli.C:55
 CopyAli.C:56
 CopyAli.C:57
 CopyAli.C:58
 CopyAli.C:59
 CopyAli.C:60
 CopyAli.C:61
 CopyAli.C:62
 CopyAli.C:63
 CopyAli.C:64
 CopyAli.C:65
 CopyAli.C:66
 CopyAli.C:67
 CopyAli.C:68
 CopyAli.C:69
 CopyAli.C:70
 CopyAli.C:71
 CopyAli.C:72
 CopyAli.C:73
 CopyAli.C:74
 CopyAli.C:75
 CopyAli.C:76
 CopyAli.C:77
 CopyAli.C:78
 CopyAli.C:79
 CopyAli.C:80
 CopyAli.C:81
 CopyAli.C:82
 CopyAli.C:83
 CopyAli.C:84
 CopyAli.C:85
 CopyAli.C:86
 CopyAli.C:87
 CopyAli.C:88
 CopyAli.C:89
 CopyAli.C:90
 CopyAli.C:91
 CopyAli.C:92
 CopyAli.C:93
 CopyAli.C:94
 CopyAli.C:95
 CopyAli.C:96
 CopyAli.C:97
 CopyAli.C:98
 CopyAli.C:99
 CopyAli.C:100
 CopyAli.C:101
 CopyAli.C:102
 CopyAli.C:103
 CopyAli.C:104
 CopyAli.C:105
 CopyAli.C:106
 CopyAli.C:107
 CopyAli.C:108
 CopyAli.C:109