/[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.1 - (hide annotations) (download)
Thu Dec 13 17:08:10 2007 UTC (16 years, 11 months ago) by mocchiut
Branch: MAIN
Some changes implemented

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

  ViewVC Help
Powered by ViewVC 1.1.23