00001 #include <iostream.h>
00002 #include <fstream.h>
00003
00004 void fms_db_qtmap(char* opt,int year) {
00005
00006 TString option(opt);
00007 std::cout << "Opt =" << opt << "\n";
00008 std::cout << "testinput = " << option.Contains("testinput") << "\n";
00009 std::cout << "readtext = " << option.Contains("readtext") << "\n";
00010 std::cout << "readdb = " << option.Contains("readdb") << "\n";
00011 std::cout << "writedb = " << option.Contains("writedb") << "\n";
00012 std::cout << "writetext = " << option.Contains("writetext") << "\n";
00013 std::cout << "\n";
00014
00015 TString filename;
00016 TString storeTime;
00017 int date,time;
00018 std::cout << "year = " << year << "\n";
00019 if(year==8){
00020 filename="qtmap_run8.txt";
00021 storeTime="2007-11-09 00:00:00";
00022 date = 20080301;
00023 time = 0;
00024 }elseif(year==9){
00025 filename="qtmap2009V1.txt";
00026 storeTime="2008-11-09 00:00:00";
00027 date = 20090301;
00028 time = 0;
00029 }else{
00030 std::cout << "Please specify year\n";
00031 exit;
00032 }
00033 std::cout << "filename =" << filename << "\n";
00034 std::cout << "storetime =" << storeTime << "\n";
00035 std::cout << "date,time =" << date <<" "<< time << "\n";
00036
00037 gROOT->Macro("LoadLogger.C");
00038 gSystem->Load("St_base.so");
00039 gSystem->Load("libStDb_Tables.so");
00040 gSystem->Load("StDbLib.so");
00041
00042
00043 const Int_t MAX_QT_MAP = 2;
00044
00045
00046 fmsQTMap_st qtmap[MAX_QT_MAP];
00047
00048 if(option.Contains("testinput")){
00049
00050 qtmap[0].qtCrate[0][0][0] = 15;
00051 qtmap[0].qtSlot[0][0][0] = 15;
00052 qtmap[0].qtChannel[0][0][0] = 15;
00053
00054 qtmap[1].qtCrate[0][0][0] = 17;
00055 qtmap[1].qtSlot[0][0][0] = 17;
00056 qtmap[1].qtChannel[0][0][0] = 17;
00057 }
00058
00059 if(option.Contains("readtext")){
00060 char* file=filename.Data();
00061 FILE* fp;
00062 int rns,rpp,rrow,rcol,rqt,rcrt,rch;
00063 cout << "Reading "<<file<<"\n";
00064 if(fp=fopen(file,"r")){
00065 for(int ns=0; ns<2; ns++){
00066 for(int pp=0; pp<2; pp++){
00067 for(int row=0; row<20; row++){
00068 for(int col=0; col<16; col++){
00069 if(!feof(fp)) fscanf(fp,"%d %d %d %d %d %d %d",&rns,&rpp,&rrow,&rcol,&rqt,&rcrt,&rch);
00070
00071 if(rns == -1 && rpp == -1 && rrow == -1 && rcol == -1){
00072 qtmap[ns].qtCrate[pp][row][col] = 0;
00073 qtmap[ns].qtSlot[pp][row][col] = 0;
00074 qtmap[ns].qtChannel[pp][row][col] = 0;
00075 }else{
00076 if(rns !=ns +1) cout << "Error ns# ="<<rns <<" "<<ns +1<<"\n";
00077 if(rpp !=pp +1) cout << "Error pp# ="<<rpp <<" "<<pp +1<<"\n";
00078 if(rrow!=row+1) cout << "Error row# ="<<rrow<<" "<<row+1<<"\n";
00079 if(rcol!=col+1) cout << "Error col# ="<<rcol<<" "<<col+1<<"\n";
00080 qtmap[ns].qtCrate[pp][row][col] = rqt;
00081 qtmap[ns].qtSlot[pp][row][col] = rcrt;
00082 qtmap[ns].qtChannel[pp][row][col] = rch;
00083 }
00084 }
00085 }
00086 }
00087 }
00088 }
00089 fclose(fp);
00090 }
00091
00092 if(option.Contains("readdb")){
00093 gSystem->Unsetenv("DB_ACCESS_MODE");
00094 gSystem->Unsetenv("DB_SERVER_LOCAL_CONFIG");
00095
00096 gSystem->Load("StChain");
00097 gSystem->Load("StBFChain");
00098 gSystem->Load("StUtilities");
00099 gSystem->Load("StIOMaker");
00100 gSystem->Load("StarClassLibrary");
00101 gSystem->Load("St_Tables");
00102 gSystem->Load("StDbLib");
00103 gSystem->Load("StDbBroker");
00104 gSystem->Load("St_db_Maker");
00105
00106 St_db_Maker *dbMk=new St_db_Maker("db", "MySQL:StarDb", "$STAR/StarDb");
00107 dbMk->SetDebug();
00108 dbMk->SetDateTime(date,time);
00109 dbMk->SetFlavor("ofl");
00110
00111 dbMk->Init();
00112 dbMk->Make();
00113
00114
00115 TDataSet *DB = 0;
00116
00117
00118 DB = dbMk->GetInputDB("Calibrations/fms/mapping");
00119 if (!DB) { std::cout << "ERROR: no db maker?" << std::endl; }
00120
00121
00122 St_fmsQTMap *dbmap = 0;
00123 dbmap = (St_fmsQTMap*) DB->Find("fmsQTMap");
00124
00125 if (dbmap){
00126 std::cout << "Reading fmsQTMap table\n";
00127 fmsQTMap_st *qttable = dbmap->GetTable();
00128 memcpy(qtmap,qttable,sizeof(qtmap));
00129 } else {
00130 std::cout << "WARNING: No data in fmsQTMap table (wrong timestamp?). Nothing to return, then.\n";
00131 }
00132 }
00133
00134 if(option.Contains("writetext")){
00135 filename+="_dbout";
00136 char* file=filename.Data();
00137 FILE* fp;
00138 int crt,slt,ch;
00139 cout << "Writing "<<file<<"\n";
00140 if(fp=fopen(file,"w")){
00141 for(int ns=0; ns<2; ns++){
00142 for(int pp=0; pp<2; pp++){
00143 for(int row=0; row<20; row++){
00144 for(int col=0; col<16; col++){
00145 if(qtmap[ns].qtCrate[pp][row][col] ==0 &&
00146 qtmap[ns].qtSlot[pp][row][col] ==0 &&
00147 qtmap[ns].qtChannel[pp][row][col] ==0 ){
00148 if(year==8) fprintf(fp,"%3d %2d %3d %3d %3d %3d %3d\n",-1,-1,-1,-1,-1,-1,-1);
00149 if(year==9) fprintf(fp,"%3d %3d %4d %4d %4d %4d %4d\n",-1,-1,-1,-1,-1,-1,-1);
00150 }else{
00151 if(year==8) fprintf(fp,"%3d %2d %3d %3d %3d %3d %3d\n",ns+1,pp+1,row+1,col+1,
00152 qtmap[ns].qtCrate[pp][row][col],
00153 qtmap[ns].qtSlot[pp][row][col],
00154 qtmap[ns].qtChannel[pp][row][col]);
00155 if(year==9) fprintf(fp,"%3d %3d %4d %4d %4d %4d %4d\n",ns+1,pp+1,row+1,col+1,
00156 qtmap[ns].qtCrate[pp][row][col],
00157 qtmap[ns].qtSlot[pp][row][col],
00158 qtmap[ns].qtChannel[pp][row][col]);
00159 }
00160 }
00161 }
00162 }
00163 }
00164 }
00165 fclose(fp);
00166 }
00167
00168 if(option.Contains("writedb")) {
00169 gSystem->Setenv("DB_ACCESS_MODE","write");
00170 cout << "DB_ACCESS_MODE="<<gSystem->Getenv("DB_ACCESS_MODE")<<endl;
00171 StDbManager* mgr = StDbManager::Instance();
00172 StDbConfigNode* node = mgr->initConfig("Calibrations_fms");
00173 StDbTable* table = node->addDbTable("fmsQTMap");
00174 mgr->setStoreTime(storeTime.Data());
00175
00176 table->SetTable((char*)&qtmap,MAX_QT_MAP);
00177
00178
00179 mgr->storeDbTable(table);
00180 gSystem->Unsetenv("DB_ACCESS_MODE");
00181 std::cout << "Done with database upload \n";
00182 }
00183 }
00184