/[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.4 - (hide annotations) (download)
Tue Nov 29 13:52:24 2011 UTC (13 years ago) by pam-fi
Branch: MAIN
CVS Tags: v10RED, v10REDr01, HEAD
Changes since 1.3: +2 -0 lines
Some fixes to prevent memory leaks or double delete.

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 mocchiut 1.3 printf("\n -host name for the host [default = mysql://localhost/pamelaprod]\n");
33     printf("\n -user username for the DB [default = anonymous] \n");
34     printf("\n -psw password for the DB [default = \"\"]\n");
35 mocchiut 1.1 printf("\n Notice that parameter order does not matter. \n");
36     printf("\nExample: \n\nRunInfo -idRun 1085 -processFile nomefile.root\n\n");
37     };
38     //
39     Bool_t existfile(TString filename){
40     ifstream myfile;
41     myfile.open(filename.Data());
42     if ( !myfile ){
43     return(false);
44     };
45     myfile.close();
46     return(true);
47     }
48     //
49     Bool_t debug = false;
50     //
51     //
52     // Here the main
53     //
54     int main(int numinp, char *inps[]){
55     //
56     // Variables booking
57     //
58     int nul = 0;
59     Int_t error = 0;
60     Bool_t beverbose = false;
61 mocchiut 1.2 UInt_t run = 0;
62 mocchiut 1.1 TString filename;
63     TString processFolder = "runinfoFolder";
64     TSQLServer *dbc = 0;
65     Bool_t givenid = false;
66 mocchiut 1.3 TString host = "mysql://localhost/pamelaprod";
67     TString user = "anonymous";
68     TString psw = "";
69 mocchiut 1.1 //
70     // Checking input parameters
71     //
72     if ( numinp > 1 ){
73     for ( int i = 0; i < numinp; i++ ){
74     if ( !strcmp(inps[i],"--version") ){
75     RunInfoInfo(true);
76     exit(0);
77     };
78     if ( !strcmp(inps[i],"-h") || !strcmp(inps[i],"--help") ){
79     usage();
80     exit(0);
81     };
82     if ( !strcmp(inps[i],"-idRun") ) {
83     if ( numinp-1 < i+1 ){
84     usage();
85     exit(-3);
86     };
87     givenid = true;
88 mocchiut 1.2 run = (UInt_t)atoll(inps[i+1]);
89 mocchiut 1.1 };
90     if ( !strcmp(inps[i],"-processFile") ) {
91     if ( numinp-1 < i+1 ){
92     usage();
93     exit(-3);
94     };
95     filename = (TString)inps[i+1];
96     };
97     if ( !strcmp(inps[i],"-processFolder") ) {
98     if ( numinp-1 < i+1 ){
99     usage();
100     exit(-3);
101     };
102     processFolder = (TString)inps[i+1];
103     };
104 mocchiut 1.3 if ( !strcmp(inps[i],"-host") ) {
105     if ( numinp-1 < i+1 ){
106     usage();
107     exit(-3);
108     };
109     host = (TString)inps[i+1];
110     };
111     if ( !strcmp(inps[i],"-user") ) {
112     if ( numinp-1 < i+1 ){
113     usage();
114     exit(-3);
115     };
116     user = (TString)inps[i+1];
117     };
118     if ( !strcmp(inps[i],"-psw") ) {
119     if ( numinp-1 < i+1 ){
120     usage();
121     exit(-3);
122     };
123     psw = (TString)inps[i+1];
124     };
125 mocchiut 1.1 if ( !strcmp(inps[i],"-v") || !strcmp(inps[i],"--verbose") ) beverbose = true;
126     };
127     } else {
128     //
129     // no input parameters exit with error, we need at least the run id.
130     //
131     printf(" RunInfo - ERROR: you must provide a run number (at least -1)\n");
132     exit(-1);
133     };
134     //
135     // If not in verbose mode redirect to /dev/null the stdout and stderr
136     //
137     if ( !beverbose ){
138     nul = open("/dev/null", O_CREAT | O_RDWR,S_IREAD | S_IWRITE);
139     dup2(nul,1);
140     dup2(nul,2);
141     };
142     //
143     // Check that an input run number has been given
144     //
145     if ( !givenid ) {
146     printf(" RunInfo - ERROR: you must provide a run number (at least -1)\n");
147     exit(-1);
148     };
149     //
150     char *version = RunInfoInfo(false);
151     //
152     // Start:
153     //
154     printf("\n Welcome to the RunInfo software, version %s \n",version);
155     //
156     // Connect to the DB
157     //
158     printf("\nConnecting to database... \n");
159     //
160 mocchiut 1.3 //
161     dbc = TSQLServer::Connect(host.Data(),user.Data(),psw.Data());
162 mocchiut 1.2 //
163 mocchiut 1.1 if( !dbc ) {
164     printf(" RunInfo - ERROR: problems connecting to the DB (check username and passwd), exiting...\n\n");
165     exit(-2);
166     };
167     bool connect = dbc->IsConnected();
168     //
169     if( !connect ) {
170     printf(" RunInfo - ERROR: problems connecting to the DB (check username and passwd), exiting...\n\n");
171     exit(-2);
172     };
173     printf("...connected! \n\n");
174     //
175     //
176     //
177     stringstream name;
178     name.str("");
179 mocchiut 1.2 if ( run != 0 ){
180 mocchiut 1.1 //
181     // Run is not 0, we must process only one run .
182     //
183     //
184     // If no filename is given, use the deafult one run_id.Level2.root.
185     //
186     if ( !strcmp(filename.Data(),"") ){
187     name << run << ".Level2.root";
188     } else {
189     name << filename.Data();
190     };
191     //
192     } else {
193     //
194     // Run is 0, we must process all entries in the given file.
195     //
196     //
197     // OUCH! no filename has been given, run out!
198     //
199     if ( !strcmp(filename.Data(),"") ) {
200     printf(" RunInfo - ERROR: processing all runs but no filename is given\n");
201     exit(-4);
202     };
203     name << filename.Data();
204     //
205     };
206     TString outputfile;
207     ItoRunInfo *runinfo = 0;
208     TFile *file = 0;
209     //
210     stringstream temprname;
211     const char* routdir = gSystem->WorkingDirectory();
212     temprname.str("");
213     temprname << routdir;
214     temprname << "/" << processFolder.Data();
215     //
216     // Output file is "outputfile"
217     //
218     outputfile = name.str().c_str();
219     printf("\n Output filename is: \n %s \n\n",outputfile.Data());
220     //
221     // Check if file exists, if not exit with error (calorimeter needs tracker data).
222     //
223     if ( !existfile(outputfile.Data()) ) {
224     printf(" RunInfo: creating LEVEL2 file \n");
225     };
226     //
227     // OK, file exists, open it in "update" mode.
228     //
229     file = new TFile(outputfile.Data(),"UPDATE");
230     if ( !file->IsOpen() ){
231     printf(" RunInfo - ERROR: cannot open file for writing\n");
232     error = -802;
233     goto theend;
234     };
235     //
236     runinfo = new ItoRunInfo(dbc,file,processFolder);
237     error = runinfo->Update(run,"NONE","");
238     gSystem->Unlink(temprname.str().c_str());
239     // if ( error < 0 ) goto theend;
240     runinfo->Close();
241     if ( file ){
242     file->Write();
243     file->Close();
244     };
245     //
246     theend:
247     //
248     // Close the DB connection
249     //
250     printf("\nClose the connection to the database... \n");
251     dbc->Close();
252 pam-fi 1.4 delete dbc;
253     dbc = 0;
254 mocchiut 1.1 printf("...connection terminated!\n\n");
255     //
256     // Close redirection if the case.
257     //
258     if ( !beverbose ) close(nul);
259     //
260     // Return "error"
261     //
262     exit(error);
263     }

  ViewVC Help
Powered by ViewVC 1.1.23