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

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

Parent Directory Parent Directory | Revision Log Revision Log


Revision 1.3 - (hide annotations) (download)
Thu Jan 3 10:02:27 2008 UTC (16 years, 11 months ago) by mocchiut
Branch: MAIN
CVS Tags: HEAD
Changes since 1.2: +34 -2 lines
A lot of upgrades

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

  ViewVC Help
Powered by ViewVC 1.1.23