]> git.uio.no Git - u/mrichter/AliRoot.git/blob - MUON/MergeMuonLight.C
Decalibration should use the same CDB as calibration in AliPHOSClusterizerv1
[u/mrichter/AliRoot.git] / MUON / MergeMuonLight.C
1 /**************************************************************************
2  * Copyright(c) 1998-1999, ALICE Experiment at CERN, All rights reserved. *
3  *                                                                        *
4  * Author: The ALICE Off-line Project.                                    *
5  * Contributors are mentioned in the code where appropriate.              *
6  *                                                                        *
7  * Permission to use, copy, modify and distribute this software and its   *
8  * documentation strictly for non-commercial purposes is hereby granted   *
9  * without fee, provided that the above copyright notice appears in all   *
10  * copies and that both the copyright notice and this permission notice   *
11  * appear in the supporting documentation. The authors make no claims     *
12  * about the suitability of this software for any purpose. It is          *
13  * provided "as is" without express or implied warranty.                  *
14  **************************************************************************/
15
16 /* $Id$ */
17
18 // A. De Falco, H. Woehri, INFN Cagliari, July 2006 
19 // This macro merges several files built with DecodeRecoCocktail.C into 
20 // a single one. 
21 // Arguments:     foutname = name of the output file
22 //                flistname = name of a text file containing the list of files
23 //                            to be merged 
24 //                saveAll = boolian that allows/forbids saving of events with no muons
25 void MergeMuonLight(char *foutname="MuonLightMerged.root",char *flistname="lista.lis", Bool_t saveAll = kTRUE){ 
26   // up to 2000 input files 
27
28   TFile *file[2000];
29   TClonesArray *muonArray   = new TClonesArray("AliMUONTrackLight",2); 
30   TClonesArray *dimuonArray = new TClonesArray("AliMUONPairLight",1); 
31
32   // open output file 
33   TFile *fout = new TFile (foutname,"recreate"); 
34   TTree *treeOut = new TTree("tree","tree"); 
35   treeOut->Branch("muons",&muonArray); 
36   treeOut->Branch("dimuons",&dimuonArray); 
37   
38   char *filename = new char[100];
39   // read the list of input files 
40   FILE *pf= fopen(flistname,"r");
41   Int_t nfiles=0; 
42   Int_t outflag=0; 
43   // open the n input files 
44   while (!outflag) { 
45     if (fscanf(pf,"%s",filename)==1) { 
46       file[nfiles++] = new TFile (filename); 
47       cout << "Opening for input " << filename << endl;
48     }
49     else outflag = 1; 
50   }
51   fclose(pf); 
52
53  
54   for (Int_t ifile=0; ifile<nfiles; ifile++) {
55     printf ("Scanning file %d: %s\n",ifile, file[ifile]->GetName()); 
56     TTree *tree = (TTree*) file[ifile]->Get("tree"); 
57     tree->SetBranchAddress("muons",&muonArray); 
58     tree->SetBranchAddress("dimuons",&dimuonArray); 
59     Int_t nev = tree->GetEntriesFast(); 
60     printf ("Scanning file %d: %s containing %d events\n",
61             ifile, file[ifile]->GetName(),nev); 
62     for (Int_t iev=0; iev<nev; iev++) {
63       tree->GetEvent(iev); 
64       Int_t nMu = muonArray->GetEntriesFast(); 
65       if(!saveAll)
66         if(nMu < 1) continue;
67       treeOut->Fill();
68     }
69     file[ifile]->Close();
70   }//end of scanning incoming file
71   fout->cd(); 
72   treeOut->Write(); 
73 }