/[PAMELA software]/DarthVader/RunInfo/src/RunInfoLevel2.cpp
ViewVC logotype

Annotation of /DarthVader/RunInfo/src/RunInfoLevel2.cpp

Parent Directory Parent Directory | Revision Log Revision Log


Revision 1.1 - (hide annotations) (download)
Fri May 19 13:15:47 2006 UTC (18 years, 6 months ago) by mocchiut
Branch: MAIN
Branch point for: DarthVader
Initial revision

1 mocchiut 1.1 //
2     // C/C++ headers
3     //
4     #include <fstream>
5     #include <sstream>
6     #include <iostream>
7     //
8     // ROOT headers
9     //
10     #include <TSystem.h>
11     #include <TString.h>
12     #include <TSQLServer.h>
13     //
14     // This package headers
15     //
16     #include <RunInfo.h>
17     #include <RunInfoVerl2.h>
18     //
19     using namespace std;
20     //
21     // Usage subroutine
22     //
23     void usage(){
24     printf("\nUsage:\n");
25     printf("\n RunInfo [-v] [-h] [--version] -idRun ID_RUN [-processFile filename] [-processFolder folder]\n");
26     printf("\n --version print informations about compilation and exit\n");
27     printf("\n -h | --help print this help and exit \n");
28     printf("\n -v | --verbose be verbose [default: print nothing on STDOUT]\n");
29     printf("\n -idRun ID_RUN: ID number of the run to be processed \n");
30     printf("\n -processFile filename : output filename [default ID_RUN.Level2.root]\n");
31     printf("\n -processFolder where to store temporary data [default \"runinfoFolder\"]\n");
32     printf("\n Notice that parameter order does not matter. \n");
33     printf("\nExample: \n\nRunInfo -idRun 1085 -processFile nomefile.root\n\n");
34     };
35     //
36     Bool_t existfile(TString filename){
37     ifstream myfile;
38     myfile.open(filename.Data());
39     if ( !myfile ){
40     return(false);
41     };
42     myfile.close();
43     return(true);
44     }
45     //
46     Bool_t debug = false;
47     //
48     //
49     // Here the main
50     //
51     int main(int numinp, char *inps[]){
52     //
53     // Variables booking
54     //
55     int nul = 0;
56     Int_t error = 0;
57     Bool_t beverbose = false;
58     ULong64_t run = 0;
59     TString filename;
60     TString processFolder = "runinfoFolder";
61     TSQLServer *dbc = 0;
62     Bool_t givenid = false;
63     //
64     // Checking input parameters
65     //
66     if ( numinp > 1 ){
67     for ( int i = 0; i < numinp; i++ ){
68     if ( !strcmp(inps[i],"--version") ){
69     RunInfoInfo(true);
70     exit(0);
71     };
72     if ( !strcmp(inps[i],"-h") || !strcmp(inps[i],"--help") ){
73     usage();
74     exit(0);
75     };
76     if ( !strcmp(inps[i],"-idRun") ) {
77     if ( numinp-1 < i+1 ){
78     usage();
79     exit(-3);
80     };
81     givenid = true;
82     char *pEnd;
83     run = strtoull(inps[i+1],&pEnd,0);
84     };
85     if ( !strcmp(inps[i],"-processFile") ) {
86     if ( numinp-1 < i+1 ){
87     usage();
88     exit(-3);
89     };
90     filename = (TString)inps[i+1];
91     };
92     if ( !strcmp(inps[i],"-processFolder") ) {
93     if ( numinp-1 < i+1 ){
94     usage();
95     exit(-3);
96     };
97     processFolder = (TString)inps[i+1];
98     };
99     if ( !strcmp(inps[i],"-v") || !strcmp(inps[i],"--verbose") ) beverbose = true;
100     };
101     } else {
102     //
103     // no input parameters exit with error, we need at least the run id.
104     //
105     printf(" RunInfo - ERROR: you must provide a run number (at least -1)\n");
106     exit(-1);
107     };
108     //
109     // If not in verbose mode redirect to /dev/null the stdout and stderr
110     //
111     if ( !beverbose ){
112     nul = open("/dev/null", O_CREAT | O_RDWR,S_IREAD | S_IWRITE);
113     dup2(nul,1);
114     dup2(nul,2);
115     };
116     //
117     // Check that an input run number has been given
118     //
119     if ( !givenid ) {
120     printf(" RunInfo - ERROR: you must provide a run number (at least -1)\n");
121     exit(-1);
122     };
123     //
124     char *version = RunInfoInfo(false);
125     //
126     // Start:
127     //
128     printf("\n Welcome to the RunInfo software, version %s \n",version);
129     //
130     // Connect to the DB
131     //
132     printf("\nConnecting to database... \n");
133     //
134     dbc = TSQLServer::Connect("mysql://localhost/pamelaprod","anonymous","");
135     //
136     if( !dbc ) {
137     printf(" RunInfo - ERROR: problems connecting to the DB (check username and passwd), exiting...\n\n");
138     exit(-2);
139     };
140     bool connect = dbc->IsConnected();
141     //
142     if( !connect ) {
143     printf(" RunInfo - ERROR: problems connecting to the DB (check username and passwd), exiting...\n\n");
144     exit(-2);
145     };
146     printf("...connected! \n\n");
147     //
148     //
149     //
150     stringstream name;
151     name.str("");
152     if ( run != 0ULL ){
153     //
154     // Run is not 0, we must process only one run .
155     //
156     //
157     // If no filename is given, use the deafult one run_id.Level2.root.
158     //
159     if ( !strcmp(filename.Data(),"") ){
160     name << run << ".Level2.root";
161     } else {
162     name << filename.Data();
163     };
164     //
165     } else {
166     //
167     // Run is 0, we must process all entries in the given file.
168     //
169     //
170     // OUCH! no filename has been given, run out!
171     //
172     if ( !strcmp(filename.Data(),"") ) {
173     printf(" RunInfo - ERROR: processing all runs but no filename is given\n");
174     exit(-4);
175     };
176     name << filename.Data();
177     //
178     };
179     TString outputfile;
180     ItoRunInfo *runinfo = 0;
181     TFile *file = 0;
182     //
183     stringstream temprname;
184     const char* routdir = gSystem->WorkingDirectory();
185     temprname.str("");
186     temprname << routdir;
187     temprname << "/" << processFolder.Data();
188     //
189     // Output file is "outputfile"
190     //
191     outputfile = name.str().c_str();
192     printf("\n Output filename is: \n %s \n\n",outputfile.Data());
193     //
194     // Check if file exists, if not exit with error (calorimeter needs tracker data).
195     //
196     if ( !existfile(outputfile.Data()) ) {
197     printf(" RunInfo: creating LEVEL2 file \n");
198     };
199     //
200     // OK, file exists, open it in "update" mode.
201     //
202     file = new TFile(outputfile.Data(),"UPDATE");
203     if ( !file->IsOpen() ){
204     printf(" RunInfo - ERROR: cannot open file for writing\n");
205     error = -802;
206     goto theend;
207     };
208     //
209     runinfo = new ItoRunInfo(dbc,file,processFolder);
210     error = runinfo->Update(run,"NONE","");
211     gSystem->Unlink(temprname.str().c_str());
212     // if ( error < 0 ) goto theend;
213     runinfo->Close();
214     if ( file ){
215     file->Write();
216     file->Close();
217     };
218     //
219     theend:
220     //
221     // Close the DB connection
222     //
223     printf("\nClose the connection to the database... \n");
224     dbc->Close();
225     printf("...connection terminated!\n\n");
226     //
227     // Close redirection if the case.
228     //
229     if ( !beverbose ) close(nul);
230     //
231     // Return "error"
232     //
233     exit(error);
234     }

  ViewVC Help
Powered by ViewVC 1.1.23