]> git.uio.no Git - u/mrichter/AliRoot.git/blame - TRD/Macros/AliTRDCreateVector2DSum.C
Protection in case of fITune >= 0 in kPyJets
[u/mrichter/AliRoot.git] / TRD / Macros / AliTRDCreateVector2DSum.C
CommitLineData
8470c96e 1#if !defined( __CINT__) || defined(__MAKECINT__)
2
3#include <vector>
4#include <TChain.h>
8dd46aaa 5#include <TObjArray.h>
8470c96e 6#include <TFile.h>
8dd46aaa 7#include <TGraphErrors.h>
8470c96e 8#include <TTree.h>
8dd46aaa 9#include <TDirectory.h>
10#include <TROOT.h>
8470c96e 11#include <TString.h>
12#include <Riostream.h>
13#include <TSystem.h>
14#include <TH1F.h>
15#include <AliCDBManager.h>
8dd46aaa 16#include "../TRD/AliTRDCalibra.h"
8470c96e 17
18#endif
19
20
21Bool_t AliTRDCreateVector2DSum(const char* variablecali, const char* noime, const char* dire, const char* namefile){
22 //
8dd46aaa 23 // After having simulated and reconstructed events in subrepertories 000%d of dire
8470c96e 24 // this macro searchs in the subdirectories the file TRD.calibration.root
25 // takes the vectors and merge them
26 // variablecali can be treeCH2d, treePH2d or treePRF2d
27 // noime is the name of the "sum" tree
28 // namefile is the name of the file where noime will be written
29 //
30
31
32 // The tree
33 TChain *treeChain = new TChain(variablecali);
34
35
36 //Variables
8dd46aaa 37 TObjArray *vectorplace = new TObjArray();
38 TObjArray *whereinthechain = new TObjArray();
8470c96e 39
40
41 //TRDCalibra
42 AliCDBManager *man = AliCDBManager::Instance();
162637e4 43 man->SetDefaultStorage("local://$ALICE_ROOT/OCDB");
8470c96e 44 man->SetRun(0);
45 AliTRDCalibra *calibra = AliTRDCalibra::Instance();
46
47 //The patterns
48 const char *name="TRD.calibration.root";
49 const char *patterndir="0";
50 const char *namesubdir = 0x0;
51 char dir[200];
52
53 //Open the directory dire
54 void * dircu = gSystem->OpenDirectory(dire);
55 while((namesubdir = gSystem->GetDirEntry(dircu))) {
56 if(strstr(namesubdir,patterndir)) {
57 sprintf(dir,"%s/%s",dire,namesubdir);
58 printf("process subdirectories: %s\n",dir);
59
60 //full name of the file and tree
61 char fullname[255] = "";
62
63 sprintf(fullname,"%s/%s",dir,name);
64 printf("Process file: %s\n",fullname);
8dd46aaa 65 TFile *file = new TFile(fullname,"READ");
8470c96e 66 if(!file) continue;
67 TTree *treecurrent = (TTree *) file->Get(variablecali);
68 if(!treecurrent) continue;
8dd46aaa 69 gDirectory = gROOT;
70 TObjArray *vectorcurrent = calibra->ConvertTreeVector(treecurrent);
71 printf("Size of the current tree: %d\n",(Int_t) vectorcurrent->GetEntriesFast());
72 printf("Size of whereinthechain: %d\n",(Int_t) whereinthechain->GetEntriesFast());
8470c96e 73 printf("Size of the chain: %d\n", (Int_t) treeChain->GetEntries());
74 Int_t j = (Int_t) treeChain->GetEntries();
8dd46aaa 75 for(Int_t jui = 0; jui < (Int_t) vectorcurrent->GetEntriesFast(); jui++){
8470c96e 76 //Search if already found
8dd46aaa 77 Int_t place = calibra->SearchInTreeVector(vectorplace,((AliTRDCalibra::AliTRDPlace *)vectorcurrent->At(jui))->GetPlace());
8470c96e 78 //Create a new element in the two std vectors
79 if(place == -1){
8dd46aaa 80 AliTRDCalibra::AliTRDPlace *placejui = new AliTRDCalibra::AliTRDPlace();
81 placejui->SetPlace(j+jui);
82 TObjArray *chainplace = new TObjArray();
83 chainplace->Add((TObject *) placejui);
84 vectorplace->Add((TObject *) (vectorcurrent->At(jui)));
85 whereinthechain->Add((TObject *) chainplace);
8470c96e 86 }
87 //Update the element at the place "place" in the std vector whereinthechain
88 else {
8dd46aaa 89 AliTRDCalibra::AliTRDPlace *placejui = new AliTRDCalibra::AliTRDPlace();
90 placejui->SetPlace((j+jui));
91 TObjArray *chainplace = ((TObjArray *) whereinthechain->At(place));
92 chainplace->Add((TObject *) placejui);
93 whereinthechain->AddAt((TObject *)chainplace, place);
8470c96e 94 }
95 }
96 treeChain->AddFile(fullname);
97 delete file;
98 }//if pattern
99 }// in the sub
100
101 //Take care of the profile
102 const char* pattern = "P";
103 TTree *tree;
104
105 if(!strstr(variablecali,pattern)){
106 //Ready to read the chain
107 TH1F *his = 0x0;
108 treeChain->SetBranchAddress("histo",&his);
109
110 //Initialise the final tree
111 Int_t group = -1;
112 TH1F *histsum = 0x0;
113
114 tree = new TTree(noime,noime);
115 tree->Branch("groupnumber",&group,"groupnumber/I");
116 tree->Branch("histo","TH1F",&histsum,32000,0);
117
118 //Init histsum
119 if(treeChain->GetEntries() < 1) return kFALSE;
120
8dd46aaa 121 printf("FINAL Size of the chain: %d\n", (Int_t) treeChain->GetEntriesFast());
122 printf("FINAL Size of vectorplace: %d\n", (Int_t) vectorplace->GetEntriesFast());
123 for(Int_t h = 0; h < (Int_t) vectorplace->GetEntriesFast(); h++){
124 group = ((AliTRDCalibra::AliTRDPlace *)vectorplace->At(h))->GetPlace();
125 TObjArray *chainplace = ((TObjArray *)whereinthechain->At(h));
126 treeChain->GetEntry(((AliTRDCalibra::AliTRDPlace *)chainplace->At(0))->GetPlace());
8470c96e 127 //Init for the first time
128 if(h == 0) {
129 histsum = new TH1F("","",his->GetXaxis()->GetNbins(),his->GetXaxis()->GetBinLowEdge(1),his->GetXaxis()->GetBinUpEdge(his->GetXaxis()->GetNbins()));
130 histsum->Sumw2();
131 }
132 //Reset for each new group
133 histsum->SetEntries(0);
134 for(Int_t l = 0; l <= histsum->GetXaxis()->GetNbins(); l++){
135 histsum->SetBinContent(l,0.0);
136 histsum->SetBinError(l,0.0);
137 }
138 histsum->Add(his,1);
8dd46aaa 139 if((Int_t) chainplace->GetEntriesFast() > 1){
140 for(Int_t s = 1; s < (Int_t)chainplace->GetEntriesFast(); s++){
141 treeChain->GetEntry(((AliTRDCalibra::AliTRDPlace *)chainplace->At(s))->GetPlace());
8470c96e 142 histsum->Add(his,1);
143 }
144 }
145 tree->Fill();
146 }
147 }
148 else {
149 //Ready to read the chain
150 TGraphErrors *his = 0x0;
151 treeChain->SetBranchAddress("histo",&his);
152
153 //Initialise the final tree
154 Int_t group = -1;
155 TGraphErrors *histsum = 0x0;
156 Double_t *xref = 0x0;
157
158
159 tree = new TTree(noime,noime);
160 tree->Branch("groupnumber",&group,"groupnumber/I");
161 tree->Branch("histo","TGraphErrors",&histsum,32000,0);
162
163 //Init histsum
164 if(treeChain->GetEntries() < 1) return kFALSE;
165
8dd46aaa 166 printf("FINAL Size of the chain: %d\n", (Int_t) treeChain->GetEntriesFast());
167 printf("FINAL Size of vectorplace: %d\n", (Int_t) vectorplace->GetEntriesFast());
168 for(Int_t h = 0; h < (Int_t) vectorplace->GetEntriesFast(); h++){
169 group = ((AliTRDCalibra::AliTRDPlace *)vectorplace->At(h))->GetPlace();
170 TObjArray *chainplace = ((TObjArray *)whereinthechain->At(h));
171 treeChain->GetEntry(((AliTRDCalibra::AliTRDPlace *)chainplace->At(0))->GetPlace());
8470c96e 172 //Init for the fisrt time
173 Int_t nbins = his->GetN();
174 Double_t *x;
175 x = new Double_t[nbins];
176 xref = his->GetX();
177 Double_t *ex;
178 ex = new Double_t[nbins];
179 Double_t *y;
180 y = new Double_t[nbins];
181 Double_t *ey;
182 ey = new Double_t[nbins];
183
184 for(Int_t lo = 0; lo < nbins; lo++){
185 x[lo] = xref[lo];
186 ex[lo] = 0.0;
187 y[lo] = 0.0;
188 ey[lo] = 0.0;
189 }
190 delete histsum;
191 histsum = new TGraphErrors(nbins,x,y,ex,ey);
192 //Reset for each group
193 Double_t *xp;
194 xp = histsum->GetX();
195 Double_t *exp;
196 exp = histsum->GetEX();
197 Double_t *yp;
198 yp = histsum->GetY();
199 Double_t *eyp;
200 eyp = histsum->GetEY();
201
202 //Add the first
203 histsum = calibra->AddProfiles(his,histsum);
8dd46aaa 204 if((Int_t) chainplace->GetEntriesFast() > 1){
205 for(Int_t s = 1; s < (Int_t)chainplace->GetEntriesFast(); s++){
206 treeChain->GetEntry(((AliTRDCalibra::AliTRDPlace *)chainplace->At(s))->GetPlace());
8470c96e 207 histsum = calibra->AddProfiles(his,histsum);
208 }
209 }
210 tree->Fill();
211 }
212
213 }
214
215
216 //Write in a file
217 TFile *fout = TFile::Open((const char*) namefile,"UPDATE");
218 fout->WriteTObject(tree,tree->GetName(),(Option_t *) "kOverWrite");
219 fout->Close();
220
221 return kTRUE;
222}