ROOT logo
/**************************************************************************
 * Copyright(c) 1998-1999, ALICE Experiment at CERN, All rights reserved. *
 *                                                                        *
 * Author: The ALICE Off-line Project.                                    *
 * Contributors are mentioned in the code where appropriate.              *
 *                                                                        *
 * Permission to use, copy, modify and distribute this software and its   *
 * documentation strictly for non-commercial purposes is hereby granted   *
 * without fee, provided that the above copyright notice appears in all   *
 * copies and that both the copyright notice and this permission notice   *
 * appear in the supporting documentation. The authors make no claims     *
 * about the suitability of this software for any purpose. It is          *
 * provided "as is" without express or implied warranty.                  *
 **************************************************************************/

/* $Id$ */

/// \ingroup macros
/// \file MergeMuonLight.C
/// \brief This macro merges several files built with DecodeRecoCocktail.C into 
/// a single one
///
/// \author A. De Falco, H. Woehri, INFN Cagliari, July 2006 

#if !defined(__CINT__) || defined(__MAKECINT__)
#include "TFile.h"
#include "TTree.h"
#include "TClonesArray.h"
#include "AliMUONTrackLight.h"
#include "AliMUONPairLight.h"
#endif


void MergeMuonLight(char *foutname="MuonLightMerged.root",char *flistname="lista.lis", Bool_t saveAll = kTRUE)
{ 
/// \param foutname   name of the output file
/// \param flistname  name of a text file containing the list of files
///                   to be merged 
/// \param  saveAll    boolian that allows/forbids saving of events with no muons

  // up to 2000 input files 

  TFile *file[2000];
  TClonesArray *muonArray   = new TClonesArray("AliMUONTrackLight",2); 
  TClonesArray *dimuonArray = new TClonesArray("AliMUONPairLight",1); 

  // open output file 
  TFile *fout = new TFile (foutname,"recreate"); 
  TTree *treeOut = new TTree("tree","tree"); 
  treeOut->Branch("muons",&muonArray); 
  treeOut->Branch("dimuons",&dimuonArray); 
  
  char *filename = new char[100];
  // read the list of input files 
  FILE *pf= fopen(flistname,"r");
  Int_t nfiles=0; 
  Int_t outflag=0; 
  // open the n input files 
  while (!outflag) { 
    if (fscanf(pf,"%s",filename)==1) { 
      file[nfiles++] = new TFile (filename); 
      printf("Opening for input %s", filename);
    }
    else outflag = 1; 
  }
  fclose(pf); 

 
  for (Int_t ifile=0; ifile<nfiles; ifile++) {
    printf ("Scanning file %d: %s\n",ifile, file[ifile]->GetName()); 
    TTree *tree = (TTree*) file[ifile]->Get("tree"); 
    tree->SetBranchAddress("muons",&muonArray); 
    tree->SetBranchAddress("dimuons",&dimuonArray); 
    Int_t nev = tree->GetEntriesFast(); 
    printf ("Scanning file %d: %s containing %d events\n",
	    ifile, file[ifile]->GetName(),nev); 
    for (Int_t iev=0; iev<nev; iev++) {
      tree->GetEvent(iev); 
      Int_t nMu = muonArray->GetEntriesFast(); 
      if(!saveAll)
	if(nMu < 1) continue;
      treeOut->Fill();
    }
    file[ifile]->Close();
  }//end of scanning incoming file
  fout->cd(); 
  treeOut->Write(); 
}
 MergeMuonLight.C:1
 MergeMuonLight.C:2
 MergeMuonLight.C:3
 MergeMuonLight.C:4
 MergeMuonLight.C:5
 MergeMuonLight.C:6
 MergeMuonLight.C:7
 MergeMuonLight.C:8
 MergeMuonLight.C:9
 MergeMuonLight.C:10
 MergeMuonLight.C:11
 MergeMuonLight.C:12
 MergeMuonLight.C:13
 MergeMuonLight.C:14
 MergeMuonLight.C:15
 MergeMuonLight.C:16
 MergeMuonLight.C:17
 MergeMuonLight.C:18
 MergeMuonLight.C:19
 MergeMuonLight.C:20
 MergeMuonLight.C:21
 MergeMuonLight.C:22
 MergeMuonLight.C:23
 MergeMuonLight.C:24
 MergeMuonLight.C:25
 MergeMuonLight.C:26
 MergeMuonLight.C:27
 MergeMuonLight.C:28
 MergeMuonLight.C:29
 MergeMuonLight.C:30
 MergeMuonLight.C:31
 MergeMuonLight.C:32
 MergeMuonLight.C:33
 MergeMuonLight.C:34
 MergeMuonLight.C:35
 MergeMuonLight.C:36
 MergeMuonLight.C:37
 MergeMuonLight.C:38
 MergeMuonLight.C:39
 MergeMuonLight.C:40
 MergeMuonLight.C:41
 MergeMuonLight.C:42
 MergeMuonLight.C:43
 MergeMuonLight.C:44
 MergeMuonLight.C:45
 MergeMuonLight.C:46
 MergeMuonLight.C:47
 MergeMuonLight.C:48
 MergeMuonLight.C:49
 MergeMuonLight.C:50
 MergeMuonLight.C:51
 MergeMuonLight.C:52
 MergeMuonLight.C:53
 MergeMuonLight.C:54
 MergeMuonLight.C:55
 MergeMuonLight.C:56
 MergeMuonLight.C:57
 MergeMuonLight.C:58
 MergeMuonLight.C:59
 MergeMuonLight.C:60
 MergeMuonLight.C:61
 MergeMuonLight.C:62
 MergeMuonLight.C:63
 MergeMuonLight.C:64
 MergeMuonLight.C:65
 MergeMuonLight.C:66
 MergeMuonLight.C:67
 MergeMuonLight.C:68
 MergeMuonLight.C:69
 MergeMuonLight.C:70
 MergeMuonLight.C:71
 MergeMuonLight.C:72
 MergeMuonLight.C:73
 MergeMuonLight.C:74
 MergeMuonLight.C:75
 MergeMuonLight.C:76
 MergeMuonLight.C:77
 MergeMuonLight.C:78
 MergeMuonLight.C:79
 MergeMuonLight.C:80
 MergeMuonLight.C:81
 MergeMuonLight.C:82
 MergeMuonLight.C:83
 MergeMuonLight.C:84
 MergeMuonLight.C:85
 MergeMuonLight.C:86
 MergeMuonLight.C:87
 MergeMuonLight.C:88
 MergeMuonLight.C:89