/[PAMELA software]/DarthVader/src/R2-D2.cpp
ViewVC logotype

Annotation of /DarthVader/src/R2-D2.cpp

Parent Directory Parent Directory | Revision Log Revision Log


Revision 1.11 - (hide annotations) (download)
Thu Nov 2 12:32:59 2006 UTC (18 years, 1 month ago) by mocchiut
Branch: MAIN
CVS Tags: HEAD
Changes since 1.10: +0 -0 lines
FILE REMOVED
R2-D2 moved to YodaProfiler package

1 mocchiut 1.1 //
2     // C/C++ headers
3     //
4     #include <iostream>
5     #include <sstream>
6     //
7     // ROOT headers
8     //
9     #include <TString.h>
10     #include <TSQLServer.h>
11     #include <TFile.h>
12     #include <TSystem.h>
13     //
14     // Detector's package headers
15     //
16     #include <GLTables.h>
17     //
18     using namespace std;
19     //
20     //
21     //
22     #include <DarthVaderVerl2.h>
23     //
24     // Usage subroutine
25     //
26     void r2d2usage(){
27     printf("\nUsage:\n");
28     printf("\n DarthVader [-h | --help] [--version] [-idRun ID_RUN] [-filename filename]\n");
29     printf("\n [-host host] [-user username] [-psw password] \n");
30     printf("\n --version print informations about compilation and exit\n");
31     printf("\n -h | --help print this help and exit \n");
32     printf("\n -v | --verbose be verbose [default: print nothing on STDOUT]\n");
33 mocchiut 1.10 printf("\n -idRun run ID_RUN: ID number of the run \n");
34     printf("\n -filename file output yoda filename \n");
35 mocchiut 1.5 printf("\n -host name for the host [default = $PAM_DBHOST or mysql://localhost/pamelaprod]\n");
36     printf("\n -user username for the DB [default = $PAM_DBUSER or \"anonymous\"] \n");
37     printf("\n -psw password for the DB [default = $PAM_DBPSW or \"\"]\n");
38 mocchiut 1.8 printf("\n -tzone timezone the time zone: UTC,GMT,MSK,MSD,CET,CEST are accepted \n");
39     printf("\n -convert dbtime convert the dbtime given in seconds (from the DB) to a string\n");
40     printf("\n -runat time returns run number which contains the given date,\n");
41     printf("\n for time use the SQL format \"yyyy-mm-dd hh:mm:ss\" \n");
42 mocchiut 1.10 printf("\n -tsfile file yoda filename for the time sync (to be used with -obt)\n");
43     printf("\n -obt OBT OBT in ms returns a date (to be used with -tsfile)\n");
44 mocchiut 1.1 printf("\nExamples: \n");
45     printf("\n R2-D2 -idRun 1085 \n");
46     printf("\n R2-D2 -filename DW_050208_00900.root \n");
47     printf("\n R2-D2 -idRun 1085 -filename DW_050208_00900.root \n");
48     };
49     //
50     // Here the main
51     //
52     int main(int numinp, char *inps[]){
53     //
54     // Variables booking
55     //
56     TString message;
57     Int_t error = 0;
58     //
59 mocchiut 1.3 UInt_t run = 0ULL;
60 mocchiut 1.1 //
61     TString filename = "";
62     //
63     TSQLServer *dbc = 0;
64     TString host = "mysql://localhost/pamelaprod";
65     TString user = "anonymous";
66     TString psw = "";
67 mocchiut 1.5 //
68     const char *pamdbhost=gSystem->Getenv("PAM_DBHOST");
69     const char *pamdbuser=gSystem->Getenv("PAM_DBUSER");
70     const char *pamdbpsw=gSystem->Getenv("PAM_DBPSW");
71 mocchiut 1.8 if ( !pamdbhost ) pamdbhost = "";
72     if ( !pamdbuser ) pamdbuser = "";
73     if ( !pamdbpsw ) pamdbpsw = "";
74 mocchiut 1.5 if ( strcmp(pamdbhost,"") ) host = pamdbhost;
75     if ( strcmp(pamdbuser,"") ) user = pamdbuser;
76     if ( strcmp(pamdbpsw,"") ) psw = pamdbpsw;
77     //
78 mocchiut 1.6 // printf(" host %s user %s psw %s \n",host.Data(),user.Data(),psw.Data());
79 mocchiut 1.5 //
80 mocchiut 1.9 TString tzone = "UTC";
81 mocchiut 1.3 TString runtime = "1970-01-01 00:00:00";
82     UInt_t dbti = 0;
83     Bool_t convert = false;
84     Bool_t ruti = false;
85 mocchiut 1.10 Bool_t convobt = false;
86     Bool_t convobtts = false;
87     //
88     UInt_t obt = 0;
89     TString tsfile = "";
90 mocchiut 1.1 //
91 mocchiut 1.4 TSQLResult *pResult;
92     TSQLRow *Row;
93     int t;
94     int r;
95     stringstream myquery;
96 mocchiut 1.1 //
97     // Checking input parameters
98     //
99     Int_t i = 0;
100     if ( numinp > 1 ){
101     while ( i < numinp ){
102     if ( !strcmp(inps[i],"--version") ){
103     DarthVaderInfo(true);
104     exit(0);
105     };
106     if ( !strcmp(inps[i],"-h") || !strcmp(inps[i],"--help") ){
107     r2d2usage();
108     exit(0);
109     };
110     if ( !strcmp(inps[i],"-idRun") ) {
111     if ( numinp-1 < i+1 ) {
112     r2d2usage();
113     exit(-3);
114     };
115 mocchiut 1.3 run = (UInt_t)atoll(inps[i+1]);
116 mocchiut 1.1 };
117     if ( !strcmp(inps[i],"-filename") ) {
118     if ( numinp-1 < i+1 ){
119     r2d2usage();
120     exit(-3);
121     };
122     filename = (TString)inps[i+1];
123     };
124     if ( !strcmp(inps[i],"-host") ) {
125     if ( numinp-1 < i+1 ){
126     r2d2usage();
127     exit(-3);
128     };
129     host = (TString)inps[i+1];
130     };
131     if ( !strcmp(inps[i],"-user") ) {
132     if ( numinp-1 < i+1 ){
133     r2d2usage();
134     exit(-3);
135     };
136     user = (TString)inps[i+1];
137     };
138     if ( !strcmp(inps[i],"-psw") ) {
139     if ( numinp-1 < i+1 ){
140     r2d2usage();
141     exit(-3);
142     };
143     psw = (TString)inps[i+1];
144     };
145 mocchiut 1.3 //
146 mocchiut 1.10 if ( !strcmp(inps[i],"-tsfile") ) {
147     convobtts = true;
148     if ( numinp-1 < i+1 ){
149     r2d2usage();
150     exit(-3);
151     };
152     tsfile = (TString)inps[i+1];
153     };
154     //
155     if ( !strcmp(inps[i],"-obt") ) {
156     convobt = true;
157     if ( numinp-1 < i+1 ){
158     r2d2usage();
159     exit(-3);
160     };
161     obt = (UInt_t)atoll(inps[i+1]);
162     };
163     //
164     //
165 mocchiut 1.8 if ( !strcmp(inps[i],"-tzone") ) {
166     if ( numinp-1 < i+1 ){
167     r2d2usage();
168     exit(-3);
169     };
170     tzone = (TString)inps[i+1];
171     };
172     //
173 mocchiut 1.3 if ( !strcmp(inps[i],"-convert") ) {
174     convert = true;
175 mocchiut 1.8 if ( numinp-1 < i+1 ){
176     r2d2usage();
177     exit(-3);
178 mocchiut 1.3 };
179 mocchiut 1.8 dbti = (UInt_t)atoll(inps[i+1]);
180 mocchiut 1.3 };
181     //
182 mocchiut 1.4 if ( !strcmp(inps[i],"-runat") ) {
183     ruti = true;
184 mocchiut 1.8 if ( numinp-1 < i+1 ){
185     r2d2usage();
186     exit(-3);
187 mocchiut 1.4 };
188 mocchiut 1.8 runtime = (TString)inps[i+1];
189 mocchiut 1.4 };
190     //
191 mocchiut 1.1 i++;
192     };
193     //
194     } else {
195     //
196     // no input parameters exit with error, we need at least the run id.
197     //
198     r2d2usage();
199     exit(-2);
200     };
201     //
202     // Connect to the DB
203     //
204     dbc = TSQLServer::Connect(host.Data(),user.Data(),psw.Data());
205     if( !dbc ) throw -2;
206     //
207     bool connect = dbc->IsConnected();
208     //
209     if( !connect ){
210     printf(" Error, not connected to DB\n");
211     exit(-1);
212     };
213     //
214     GL_ROOT *glroot = new GL_ROOT();
215     GL_RUN *glrun = new GL_RUN();
216 mocchiut 1.3 GL_TIMESYNC *dbtime = new GL_TIMESYNC();
217     //
218     // At which date correspond the DB time "dbti"?
219     //
220     if ( convert ){
221 mocchiut 1.8 printf("\n DB time %u is %s %s \n",dbti,dbtime->ConvertTime(tzone,dbti).Data(),tzone.Data());
222 mocchiut 1.3 };
223 mocchiut 1.1 //
224 mocchiut 1.10 //
225     //
226     if ( convobt && convobtts ){
227     UInt_t id = 0;
228     myquery.str("");
229     myquery << "select ";
230     myquery << " ID";
231     myquery << " from GL_ROOT where NAME=\"" << tsfile.Data() << "\";";
232     pResult = dbc->Query(myquery.str().c_str());
233     if ( pResult ){
234     Row = pResult->Next();
235     if ( Row ){
236     id = (UInt_t)atoll(Row->GetField(0));
237     delete pResult;
238     GL_TIMESYNC *ctime = new GL_TIMESYNC(id,"ID",dbc);
239     UInt_t abtime = ctime->DBabsTime(obt);
240     TString UTC="UTC";
241     TString thetime = dbtime->ConvertTime(tzone,abtime);
242     printf("\n OBT %u in the file %s corresponds to DBtime %u and date %s %s \n",obt,tsfile.Data(),abtime,thetime.Data(),tzone.Data());
243     delete ctime;
244     };
245     };
246     };
247     if ( (convobt && !convobtts) || (convobtts && !convobt) ){
248     printf("\n To convert a OBT to a date you must provide both OBT and file to be used for time sync \n");
249     };
250     //
251 mocchiut 1.3 // Which run contains the date "runtime"?
252     //
253     if ( ruti ){
254 mocchiut 1.4 //
255     TDatime *time = new TDatime(runtime.Data());
256     UInt_t dbti = time->Convert();
257     //
258 mocchiut 1.8 TString thetime = dbtime->UnConvertTime(tzone,dbti);
259 mocchiut 1.4 //
260     TDatime *time2 = new TDatime(thetime.Data());
261     UInt_t mytime = time2->Convert();
262     //
263     myquery.str("");
264     myquery << "select ";
265     myquery << " ID ";
266     myquery << " from GL_RUN where RUNHEADER_TIME<=" << mytime << " AND "
267     << " RUNTRAILER_TIME>=" << mytime << " ;";
268     // printf("myquery is %s \n",myquery.str().c_str());
269     pResult = dbc->Query(myquery.str().c_str());
270     for( r=0; r < 1000; r++){
271     Row = pResult->Next();
272     if ( !r && !Row ){
273 mocchiut 1.8 printf("\n No run contains date %s %s (DB time %u )\n",runtime.Data(),tzone.Data(),mytime);
274 mocchiut 1.4 };
275     if( Row == NULL ) break;
276 mocchiut 1.8 printf("\n Date %s %s (DB time %u ) is contained in run %u \n",runtime.Data(),tzone.Data(),mytime,(UInt_t)atoll(Row->GetField(0)));
277 mocchiut 1.4 };
278 mocchiut 1.3 };
279     //
280     // To which file the run "run" belongs?
281     //
282     if ( run != 0 ){
283     glrun->Clear();
284 mocchiut 1.1 error = glrun->Query_GL_RUN(run,dbc);
285 mocchiut 1.3 glroot->Clear();
286     error = glroot->Query_GL_ROOT(glrun->ID_ROOT_L0,dbc);
287 mocchiut 1.7 if ( !glrun->ID_ROOT_L0 ){
288 mocchiut 1.3 printf("\n No run with ID=%u in the DB!\n",run);
289     } else {
290 mocchiut 1.7 if ( error ){
291     printf(" Error querying the DB! \n");
292     exit(-4);
293     };
294 mocchiut 1.3 printf("\n Run %u belongs to file %s \n",run,(glroot->PATH+glroot->NAME).Data());
295     };
296 mocchiut 1.1 };
297 mocchiut 1.3 //
298     // Which runs are contained in the file "filename"?
299     //
300 mocchiut 1.1 if ( strcmp(filename.Data(),"") ){
301     // ----------------
302     Int_t ID = 0;
303     Int_t ID_RAW = 0;
304     //
305 mocchiut 1.2 const char *rawpath = "";
306     const char *rawname = "";
307 mocchiut 1.1 //
308     myquery.str("");
309     myquery << "select ";
310     myquery << " ID";
311     myquery << ",ID_RAW";
312     myquery << ",PATH";
313     myquery << ",NAME";
314     myquery << " from GL_ROOT where NAME=\"" << filename.Data() << "\";";
315     pResult = dbc->Query(myquery.str().c_str());
316     for( r=0; r < 1000; r++){
317     Row = pResult->Next();
318     if( Row == NULL ) break;
319     for( t = 0; t < pResult->GetFieldCount(); t++){
320     if(t==0) ID = atoi(Row->GetField(t));
321     if(t==1) ID_RAW = atoi(Row->GetField(t));
322     };
323     };
324     delete pResult;
325 mocchiut 1.3 if ( !ID && !ID_RAW ){
326     printf("\n No file with name %s in the DB!\n",filename.Data());
327     } else {
328     myquery.str("");
329     myquery << "select ";
330     myquery << " ID,RUNHEADER_TIME,RUNTRAILER_TIME ";
331     myquery << " from GL_RUN where ID_ROOT_L0=" << ID << ";";
332     pResult = dbc->Query(myquery.str().c_str());
333     for( r=0; r < 1000; r++){
334     Row = pResult->Next();
335     if ( !r && !Row ){
336 mocchiut 1.4 printf("\n No run associated to the file %s \n",filename.Data());
337 mocchiut 1.3 };
338     if( Row == NULL ) break;
339 mocchiut 1.4 if ( !r ) printf("\n File %s contains the following runs: \n\n",filename.Data());
340 mocchiut 1.8 TString UTC="UTC";
341     printf(" => ID = %i _-_-_ the run started at %s UTC ended at %s UTC \n\n",(UInt_t)atoll(Row->GetField(0)),dbtime->ConvertTime(UTC,(UInt_t)atoll(Row->GetField(1))).Data(),dbtime->ConvertTime(UTC,(UInt_t)atoll(Row->GetField(2))).Data());
342 mocchiut 1.1 };
343 mocchiut 1.3 delete pResult;
344     myquery.str("");
345     myquery << "select ";
346     myquery << " PATH,NAME";
347     myquery << " from GL_RAW where ID=" << ID_RAW << ";";
348     pResult = dbc->Query(myquery.str().c_str());
349     for( r=0; r < 1000; r++){
350     Row = pResult->Next();
351     if( Row == NULL ) break;
352     for( t = 0; t < pResult->GetFieldCount(); t++){
353     if(t==0) rawpath = Row->GetField(t);
354     if(t==1) rawname = Row->GetField(t);
355     };
356 mocchiut 1.1 };
357 mocchiut 1.3 delete pResult;
358 mocchiut 1.4 printf("\n File %s belongs to raw data file %s/%s \n",filename.Data(),rawpath,rawname);
359 mocchiut 1.1 };
360     };
361     //
362     // Close the DB connection
363     //
364     if ( dbc ) dbc->Close();
365     //
366     printf("\n");
367     //
368     exit(0);
369     }

  ViewVC Help
Powered by ViewVC 1.1.23