]>
Commit | Line | Data |
---|---|---|
60da4435 | 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 | } |