/[PAMELA software]/calo/flight/CaloFranzini/src/CaloCreateMatrix.cpp
ViewVC logotype

Contents of /calo/flight/CaloFranzini/src/CaloCreateMatrix.cpp

Parent Directory Parent Directory | Revision Log Revision Log


Revision 1.2 - (show annotations) (download)
Tue Dec 18 09:55:06 2007 UTC (16 years, 11 months ago) by mocchiut
Branch: MAIN
Changes since 1.1: +13 -23 lines
Upgrade

1 //
2 #include <stdlib.h>
3 #include <iostream>
4 //
5 #include <TTree.h>
6 #include <TChain.h>
7 #include <TFile.h>
8 #include <TList.h>
9 #include <TROOT.h>
10 #include <TString.h>
11 #include <TBenchmark.h>
12 #include <TFriendElement.h>
13 #include <TObjectTable.h>
14 //
15 #include <PamLevel2.h>
16 //
17 using namespace std;
18
19 //===================================
20 // global variables
21 //===================================
22 Bool_t DEBUG;
23 Bool_t MATRIX;
24 TString DIR;
25 TString LIST;
26 TString I_OPTIONS;
27 TString O_OPTIONS;
28 ULong64_t MINEV;
29 ULong64_t MAXEV;
30 TString OUTFILE;
31
32 PamLevel2 *event = NULL;
33 TFile *outfh = NULL;
34
35
36 //====================================
37 // Functions to be provided externally
38 //====================================
39 bool Select(PamLevel2*);
40 void CreateHistos(PamLevel2*, TString);
41 void FindAverage(PamLevel2*,int);
42 void FindMatrix(PamLevel2*,int);
43 void SaveHistos();
44 void CalculateAverage();
45
46 //==========================================
47 //000000000000000000000000000000000000000000
48 //==========================================
49 bool Begin(TString outfile){
50
51 //------------------------------
52 // create output histos/trees
53 //------------------------------
54 CreateHistos(event,outfile);
55 cout << "\nBegin() - done\n\n";
56 return 1;
57
58 }
59 //==========================================
60 //000000000000000000000000000000000000000000
61 //==========================================
62
63 bool Process1(int iev){
64
65
66 if( !Select(event) )return false;
67
68 if ( MATRIX ){
69 FindMatrix(event,iev);
70 } else {
71 FindAverage(event,iev);
72 };
73 return true;
74
75 }
76
77 //==========================================
78 //000000000000000000000000000000000000000000
79 //==========================================
80
81 bool Finish(){
82
83 SaveHistos();
84 cout << "Finish() - done\n";
85
86 return 1;
87 }
88
89 //==========================================
90 //000000000000000000000000000000000000000000
91 //==========================================
92 Int_t Loop(TString ddir,TString list, ULong64_t nmax, ULong64_t nmin, TString ioptions, TString ooptions, TString outfile){
93
94 // -------------------
95 // create output files
96 // -------------------
97 TTree::SetMaxTreeSize(1000*Long64_t(2000000000)); //m 070308 + dimensione oltre la quale divide il file di uscita: 2TB
98
99 // --------------------
100 // read input file/list
101 // --------------------
102 event = new PamLevel2(ddir,list,ioptions);
103
104 // tree->SetCacheSize(0);
105
106 // ---------------
107 // initializations
108 // ---------------
109 if( !Begin(outfile) )return 0;;
110
111 // -----------------
112 // loop over events
113 // -----------------
114 ULong64_t nevents = event->GetEntries();
115 if(!nmax)nmax = numeric_limits<ULong64_t>::max();
116 if(nevents < nmax)nmax=nevents;
117 nmax=nmax-nmin;
118
119 cout << endl<<" Start loop over events: "<< nmax <<endl;
120
121 TString current_file = "";
122
123 for(ULong64_t iev=nmin; iev<nmin+nmax; iev++){
124 //
125 event->Clear();
126 if( event->GetEntry(iev) ){
127 Process1(iev);
128 }else{
129 cout << "Chain entry "<<iev<<" -- ERROR --"<<endl;
130 };
131
132 };
133
134 if ( !MATRIX ) CalculateAverage();
135
136 event->Clear();
137 // --------------
138 // close and exit
139 // --------------
140 Finish();
141
142 return 0;
143
144 }
145
146 /////////////////////////////////////////////////////////////////
147
148 void usage(){
149
150 cout << "------------------------------------------------------------"<<endl;
151 cout << "Loop over events (on one or more Level2-files), applying some selection cuts, \n";
152 cout << "creating output histograms and/or trees with selected events. \n \n ";
153 cout << "USAGE:"<<endl;
154 cout << "-processFile file - list of files (.txt) or single file (.root) to be analysed \n";
155 cout << "-outputFile PATH - name of the output file \n";
156 cout << "-NumEvents XXX - number of events to be analysed \n";
157 cout << "-FirstEvent XXX - first event to be analysed \n";
158 cout << "--debug, -g - debug mode \n";
159 cout << "--help, -h - print this help \n";
160 cout << "-input-options [ options ] - options: \n";
161 cout << " +(-)ALL --> inlcude(exclude) all default level1/level2 trees and branches \n " ;
162 cout << " +(-)TRK1 +(-)TRK2 +(-)CAL1 +(-)CAL2 +(-)TOF +(-)TRG +(-)ND +(-)S4 +(-)ORB --> inlcude(exclude) level1/level2 trees and branches \n" ;
163 cout << " +TRK0 +CAL0 +TOF0 --> include level0 branches \n" ;
164 cout << "-output-options [ options ] - options: \n";
165 cout << " fillHistos --> create an output file with histograms \n";
166 cout << " fillTree --> create an output file with trees storing the selected events \n ";
167 cout << " == NB == "<<endl;
168 cout << " output level1/level2 tree is created with the same trees/branches as read from input file."<<endl;
169 cout << " in order to modify the output structure use the following options:"<<endl;
170 cout << " +(-)ALL --> inlcude(exclude) all trees and branches \n " ;
171 cout << " +(-)TRK1 +(-)TRK2 +(-)CAL1 +(-)CAL2 +(-)TOF +(-)TRG +(-)ND +(-)S4 +(-)ORB --> inlcude(exclude) trees and branches \n" ;
172 cout << "------------------------------------------------------------"<<endl;
173 }
174 //
175 int HandleInputPar(int argc, char **argv){
176
177 if(argc>1){
178
179 if(!strcmp(argv[1], "-h") || !strcmp(argv[1], "--help") ){
180 usage();
181 return(1);
182 };
183 // -----------------------
184 // Read input parameters
185 // -----------------------
186 DEBUG = false;
187 MATRIX = false;
188 DIR = gSystem->WorkingDirectory();
189 LIST = "";
190 OUTFILE = "";
191 I_OPTIONS = "+AUTO ";
192 O_OPTIONS = "fillHistos";
193 MAXEV = 0;
194 MINEV = 0;
195
196
197 for (int i = 1; i < argc; i++){
198 // -----------------------------------------------------//
199 if (!strcmp(argv[i], "-processFile")){
200 if (++i >= argc) throw -1;
201 LIST = argv[i];
202 cout << "processFile "<<LIST<<endl;
203 continue;
204 }
205 // -----------------------------------------------------//
206 else if (!strcmp(argv[i], "-processDir")){
207 if (++i >= argc) throw -1;
208 DIR = argv[i];
209 cout << "processDir "<<DIR<<endl;
210 continue;
211 }
212 // -----------------------------------------------------//
213 else if (!strcmp(argv[i], "-outputFile")){
214 if (++i >= argc) throw -1;
215 OUTFILE = argv[i];
216 cout << "outputFile "<<OUTFILE<<endl;
217 continue;
218 }
219 // -----------------------------------------------------//
220 else if (!strcmp(argv[i], "-FirstEvent")){
221 if (++i >= argc) throw -1;
222 MINEV = atoi(argv[i]);
223 cout << "FirstEvent "<<MINEV<<endl;
224 continue;
225 }
226 // -----------------------------------------------------//
227 else if (!strcmp(argv[i], "-NumEvents")){
228 if (++i >= argc) throw -1;
229 MAXEV = atoi(argv[i]);
230 cout << "NumEvents "<<MAXEV<<endl;
231 continue;
232 }
233 // -----------------------------------------------------//
234 else if (!strcmp(argv[i], "-input-options")){
235 if (++i >= argc) throw -1;
236 I_OPTIONS = argv[i];
237 if( I_OPTIONS.Contains("[") ){
238 do{
239 if (++i >= argc) throw -1;
240 I_OPTIONS.Append(argv[i]);
241 }while(!I_OPTIONS.Contains("]"));
242 }else cout << "wrong option format --> ignoring " << endl;
243 }
244 // -----------------------------------------------------//
245 else if (!strcmp(argv[i], "-output-options")){
246 if (++i >= argc) throw -1;
247 O_OPTIONS = argv[i];
248 if( O_OPTIONS.Contains("[") ){
249 do{
250 if (++i >= argc) throw -1;
251 O_OPTIONS.Append(argv[i]);
252 }while(!O_OPTIONS.Contains("]"));
253 }else cout << "wrong option format --> ignoring " << endl;
254 }
255 // -----------------------------------------------------//
256 else if (!strcmp(argv[i], "--debug") || !strcmp(argv[i], "-g")){
257 DEBUG = true;
258 continue;
259 }
260 //
261 else if (!strcmp(argv[i], "-matrix")){
262 MATRIX = true;
263 continue;
264 }
265 // -----------------------------------------------------//
266 else{
267 cout << "Unidentified input parameter. Ignored."<< endl;
268 };
269 };
270 }else{
271 usage();
272 return(1);
273 };
274 // -----------------------
275 // Check input parameters
276 // -----------------------
277
278
279 return(0);
280
281 };
282 //
283
284 int main(int argc, char **argv)
285 {
286
287 if( HandleInputPar(argc,argv) )return(1);
288
289 cout << "INPUT OPTIONS "<<I_OPTIONS<<endl;
290 cout << "OUTPUT OPTIONS "<<O_OPTIONS<<endl;
291 Loop(DIR,LIST,MAXEV,MINEV,I_OPTIONS,O_OPTIONS,OUTFILE);
292
293 cout << "Back to main - end"<<endl;
294
295 return 0;
296
297 };
298

  ViewVC Help
Powered by ViewVC 1.1.23