00001 #include <iostream.h>
00002 #include <fstream.h>
00003
00004 void fms_db_detectorposition(char* opt, char* dataspec) {
00005
00006
00007 TString data(dataspec);
00008 if(data.Contains("run8") && data.Contains("dAu200"))
00009 TString storeTime = "2007-11-09 12:00:00";
00010 else
00011 if(data.Contains("run8") && data.Contains("pp200"))
00012 TString storeTime = "2008-01-28 12:00:00";
00013 else
00014 if(data.Contains("run9") && data.Contains("pp200"))
00015 TString storeTime = "2009-01-16 00:00:00";
00016 else std::cout<<"Invalid year range"<<std::endl;
00017
00018
00019 int readDate = 20091005;
00020 int readTime = 0;
00021
00022 TString option(opt);
00023 std::cout << "Opt =" << opt << "\n";
00024 std::cout << "testinput = " << option.Contains("testinput") << "\n";
00025 std::cout << "readtext = " << option.Contains("readtext") << "\n";
00026 std::cout << "readdb = " << option.Contains("readdb") << "\n";
00027 std::cout << "writedb = " << option.Contains("writedb") << "\n";
00028 std::cout << "writetext = " << option.Contains("writetext") << "\n";
00029
00030 gROOT->Macro("LoadLogger.C");
00031 gSystem->Load("St_base.so");
00032 gSystem->Load("libStDb_Tables.so");
00033 gSystem->Load("StDbLib.so");
00034
00035
00036 const Int_t MAX = 6;
00037
00038
00039 fmsDetectorPosition_st detposition[MAX];
00040
00041 if(option.Contains("testinput")){
00042
00043 detposition[0].detectorId = 2;
00044 detposition[0].xwidth = 7;
00045 detposition[0].ywidth = .15;
00046 detposition[1].detectorId = 2;
00047 detposition[1].xwidth = 7;
00048 detposition[1].ywidth = .15;
00049 }
00050
00051
00052 if(option.Contains("readtext")){
00053 FILE* fp;
00054 int rdetid;
00055 float rzoffset, rxoffset, ryoffset, rxwidth, rywidth;
00056 cout << "Reading "<<dataspec<<"\n";
00057 if(fp=fopen(dataspec,"r")){
00058 for(int i=0; i<MAX; i++){
00059 if(!feof(fp)) fscanf(fp,"%d %f %f %f %f %f",&rdetid,&rzoffset, &rxoffset, &ryoffset, &rxwidth, &rywidth);
00060 detposition[i].detectorId=rdetid;
00061 detposition[i].xwidth=rxwidth;
00062 detposition[i].ywidth=rywidth;
00063 detposition[i].xoffset=rxoffset;
00064 detposition[i].yoffset=ryoffset;
00065 detposition[i].zoffset=rzoffset;
00066
00067 }
00068 }
00069 fclose(fp);
00070 }
00071
00072 if(option.Contains("readdb")){
00073 gSystem->Load("StChain");
00074 gSystem->Load("StBFChain");
00075 gSystem->Load("StUtilities");
00076 gSystem->Load("StIOMaker");
00077 gSystem->Load("StarClassLibrary");
00078 gSystem->Load("St_Tables");
00079 gSystem->Load("StDbLib");
00080 gSystem->Load("StDbBroker");
00081 gSystem->Load("St_db_Maker");
00082
00083 St_db_Maker *dbMk=new St_db_Maker("db", "MySQL:StarDb", "$STAR/StarDb");
00084 dbMk->SetDebug();
00085 dbMk->SetDateTime(readDate,readTime);
00086 dbMk->SetFlavor("ofl");
00087
00088 dbMk->Init();
00089 dbMk->Make();
00090
00091
00092 TDataSet *DB = 0;
00093
00094
00095 DB = dbMk->GetInputDB("Geometry/fms");
00096 if (!DB) { std::cout << "ERROR: no db maker?" << std::endl; }
00097
00098
00099 St_fmsDetectorPosition *dbppmap = 0;
00100 dbppmap = (St_fmsDetectorPosition*) DB->Find("fmsDetectorPosition");
00101
00102 if (dbppmap) {
00103 std::cout << "Reading fmsDetectorPosition table\n";
00104 fmsDetectorPosition_st *pptable = dbppmap->GetTable();
00105 for(int i=0; i<MAX; i++)
00106 printf("%5d%8.1f%6.1%5.1f%6.3f%6.3f\n",pptable[i].detectorId,pptable[i].zoffset,pptable[i].xoffset,
00107 pptable[i].yoffset,pptable[i].xwidth,pptable[i].ywidth);
00108 memcpy(detposition,pptable,sizeof(detposition));
00109 }
00110 else
00111 std::cout << "WARNING: No data in fmsDetposition table (wrong timestamp?). Nothing to return, then.\n";
00112 }
00113
00114
00115 if(option.Contains("writetext")){
00116 int ii = data.Length();
00117 data.Insert(ii-4,"_out");
00118 char* file=data.Data();
00119 FILE* fp;
00120 cout << "Writing "<<file<<"\n";
00121 if(fp=fopen(file,"w"))
00122 for(int i=0; i<MAX; i++){
00123 fprintf(fp,"%8d%10.1f%10.2f%8.1f%10.3f%10.3f\n", detposition[i].detectorId, detposition[i].zoffset, detposition[i].xoffset,
00124 detposition[i].yoffset, detposition[i].xwidth, detposition[i].ywidth);
00125 }
00126 fclose(fp);
00127 }
00128
00129 if(option.Contains("writedb")) {
00130 gSystem->Setenv("DB_ACCESS_MODE","write");
00131
00132
00133
00134 StDbManager* mgr = StDbManager::Instance();
00135 StDbConfigNode* node = mgr->initConfig("Geometry_fms");
00136 StDbTable* table = node->addDbTable("fmsDetectorPosition");
00137 mgr->setStoreTime(storeTime.Data());
00138
00139 table->SetTable((char*)&detposition,MAX);
00140
00141
00142 mgr->storeDbTable(table);
00143
00144
00145 gSystem->Unsetenv("DB_ACCESS_MODE");
00146
00147 std::cout << "Done with database upload \n";
00148 }
00149 }
00150