New Calorimeter Calibration directory, now only PHOS
[u/mrichter/AliRoot.git] / PWG4 / CaloCalib / macros / addhistoEmc.C
1 #include "TFile.h"
2 #include "TList.h"
3 #include "TObjString.h"
4 #include "TObjArray.h"
5 #include "TH1.h"
6
7 void addhistoEmc(const char* list="list.txt", char *newname=0)
8 {
9   // Add histograms from a set of files listed in file list
10   // and write the result into a new file.
11
12   char SumName[20];
13
14   if (!newname) {
15     sprintf(SumName,"Sum_All_Emc.root");
16     newname=SumName;
17     printf("\n  === Default output file name is %s ===\n",newname);
18   }
19
20   TFile *f=NULL;
21   TH1F* hst[5][64][56];
22   TH1F* hadd=NULL;
23   char hnam[80]; char htit[80];
24   TList* hlist = 0;
25
26   char fpath[80];
27   int ifscanf=0;
28   Int_t ifile=0;
29
30   for(Int_t iMod=0; iMod<5; iMod++) {
31     for(Int_t iX=0; iX<64; iX++) {
32       for(Int_t iZ=0; iZ<56; iZ++) {
33         sprintf(hnam,"%d_%d_%d",iMod,iX,iZ);
34         sprintf(htit,"Two-gamma inv. mass for mod %d, cell (%d,%d)",iMod,iX,iZ);
35         hst[iMod][iX][iZ] = new TH1F(hnam,htit,100,0.,300.);
36       }
37     }
38   }
39   
40   TH1F*  hmgg = new TH1F("hmgg","2-cluster invariant mass",100,0.,300.);
41   
42   FILE* fd = fopen(list,"r");
43   while( ifscanf = fscanf(fd,"%s",fpath) != EOF) {
44     f=new TFile(fpath);
45     hlist = (TList*)f->Get("histos");
46     
47     for(Int_t iList=0; iList<hlist->GetEntries(); iList++) {
48       hadd = (TH1F*)hlist->At(iList);
49       const char* str = hadd->GetName();
50       int md,X,Z;
51       if (sscanf(str,"%d_%d_%d",&md,&X,&Z)) {
52         hst[md][X][Z]->Add(hadd);
53         //printf("Added hst[%d][%d][%d]\n",md,X,Z);
54       }
55       else {
56         printf("Trying to add histogram %s to hmgg.\n",hadd->GetName());
57         hmgg->Add(hadd);
58       }
59     }
60     
61     printf("Deleting list..\n");
62     hlist->Delete();
63     printf("OK!\n");
64     ifile++;
65    
66     printf("File %s processed.\n",fpath);
67     if(f) delete f;
68   }
69   
70   printf("%d processed.\n",ifile);
71
72   TFile outfile(newname,"recreate");
73
74   for(Int_t iMod=0; iMod<5; iMod++) {
75     for(Int_t iX=0; iX<64; iX++) {
76       for(Int_t iZ=0; iZ<56; iZ++) {
77         if(hst[iMod][iX][iZ]->GetEntries()) hst[iMod][iX][iZ]->Print();
78         hst[iMod][iX][iZ]->Write();
79       }
80     }
81   }
82   
83   hmgg->Write();
84   outfile.Close();
85 }