00001 #include <iostream.h>
00002 #include <fstream.h>
00003
00004 void fms_db_pp_qt_merge(char* opt, int year) {
00005
00006 TString option(opt);
00007 std::cout << "Opt =" << opt << "\n";
00008 std::cout << "merge (read fmsPatchPanelmap and fmsQTmap from DB and merge to create fmsMap) = " << option.Contains("merge") << "\n";
00009 std::cout << "readdb (read fmsMap from DB) = " << option.Contains("readdb") << "\n";
00010 std::cout << "writedb (write fmsMap from DB) = " << option.Contains("writedb") << "\n";
00011 std::cout << "writetext (write fmsMap from DB )= " << option.Contains("writetext") << "\n";
00012 std::cout << "\n";
00013
00014 TString filename;
00015 TString storeTime;
00016 int date,time;
00017 std::cout << "year = " << year << "\n";
00018 if(year==8){
00019 storeTime="2007-11-09 00:00:01";
00020 date = 20080301;
00021 time = 0;
00022 }elseif(year==9){
00023 storeTime="2008-11-09 00:00:00";
00024 date = 20090101;
00025 time = 0;
00026 }else{
00027 std::cout << "Please specify year\n";
00028 exit;
00029 }
00030 std::cout << "storetime =" << storeTime << "\n";
00031 std::cout << "date,time =" << date <<" "<< time << "\n";
00032 if(option.Contains("merge")) filename="fms_db_pp_qt_merge.txt";
00033 if(option.Contains("readdb")) filename="fms_db_pp_qt_merge.txt_dbout";
00034
00035
00036 gROOT->Macro("LoadLogger.C");
00037 gSystem->Load("St_base.so");
00038 gSystem->Load("libStDb_Tables.so");
00039 gSystem->Load("StDbLib.so");
00040
00041
00042 int maxch[4] = {578,578,288,288};
00043 int nsmap[4] = { 0, 1, 0, 1};
00044 const Int_t MAX_PP_MAP = 4;
00045 const Int_t MAX_QT_MAP = 2;
00046 const Int_t MAX_MAP = 578 + 578 + 288 + 288;
00047 int nmap = 0;
00048
00049
00050 fmsPatchPanelMap_st ppmap[MAX_PP_MAP];
00051 fmsQTMap_st qtmap[MAX_QT_MAP];
00052 fmsMap_st map[MAX_MAP];
00053
00054 gSystem->Load("StChain");
00055 gSystem->Load("StBFChain");
00056 gSystem->Load("StUtilities");
00057 gSystem->Load("StIOMaker");
00058 gSystem->Load("StarClassLibrary");
00059 gSystem->Load("St_Tables");
00060 gSystem->Load("StDbLib");
00061 gSystem->Load("StDbBroker");
00062 gSystem->Load("St_db_Maker");
00063
00064 St_db_Maker *dbMk=new St_db_Maker("db", "MySQL:StarDb", "$STAR/StarDb");
00065 dbMk->SetDebug();
00066 dbMk->SetDateTime(date,time);
00067 dbMk->SetFlavor("ofl");
00068
00069 dbMk->Init();
00070 dbMk->Make();
00071
00072
00073 TDataSet *DB = 0;
00074
00075
00076 DB = dbMk->GetInputDB("Calibrations/fms/mapping");
00077 if (!DB) { std::cout << "ERROR: no db maker?" << std::endl; return 0;}
00078
00079 if(option.Contains("merge")){
00080 gSystem->Unsetenv("DB_ACCESS_MODE");
00081 gSystem->Unsetenv("DB_SERVER_LOCAL_CONFIG");
00082
00083
00084 St_fmsPatchPanelMap *dbppmap = 0;
00085 dbppmap = (St_fmsPatchPanelMap*) DB->Find("fmsPatchPanelMap");
00086
00087 if (dbppmap) {
00088 std::cout << "Reading fmsPatchPanelMap table\n";
00089 fmsPatchPanelMap_st *pptable = dbppmap->GetTable();
00090 memcpy(ppmap,pptable,sizeof(ppmap));
00091 } else {
00092 std::cout << "WARNING: No data in fmsPatchPanelMap table (wrong timestamp?). Nothing to return, then.\n";
00093 }
00094
00095
00096 St_fmsQTMap *dbqtmap = 0;
00097 dbqtmap = (St_fmsQTMap*) DB->Find("fmsQTMap");
00098
00099 if (dbqtmap){
00100 std::cout << "Reading fmsQTMap table\n";
00101 fmsQTMap_st *qttable = dbqtmap->GetTable();
00102 memcpy(qtmap,qttable,sizeof(qtmap));
00103 } else {
00104 std::cout << "WARNING: No data in fmsQTMap table (wrong timestamp?). Nothing to return, then.\n";
00105 }
00106
00107
00108 nmap=0;
00109 for(int mod=0; mod<4; mod++){
00110 int detid = mod+8;
00111 int ns=nsmap[mod];
00112 printf("mod=%d detid=%d ns=%d maxch=%d\n",mod,detid,ns,maxch[mod]);
00113 for(int ch=0; ch<maxch[mod]; ch++){
00114 int pp = ppmap[mod].ppPanel[ch];
00115 int row = ppmap[mod].ppRow[ch];
00116 int col = ppmap[mod].ppColumn[ch];
00117 map[nmap].detectorId = detid;
00118 map[nmap].ch = ch+1;
00119 if(pp==0 && row==0 && col==0){
00120 map[nmap].qtCrate = 0;
00121 map[nmap].qtSlot = 0;
00122 map[nmap].qtChannel = 0;
00123 }else{
00124 map[nmap].qtCrate = qtmap[ns].qtCrate[pp-1][row-1][col-1];
00125 map[nmap].qtSlot = qtmap[ns].qtSlot[pp-1][row-1][col-1];
00126 map[nmap].qtChannel = qtmap[ns].qtChannel[pp-1][row-1][col-1];
00127 }
00128 nmap++;
00129
00130
00131 }
00132 }
00133 }
00134
00135 if(option.Contains("readdb")){
00136 gSystem->Unsetenv("DB_ACCESS_MODE");
00137 gSystem->Unsetenv("DB_SERVER_LOCAL_CONFIG");
00138 nmap=0;
00139
00140 St_fmsMap *dbmap = 0;
00141 dbmap = (St_fmsMap*) DB->Find("fmsMap");
00142
00143 if (dbmap) {
00144 fmsMap_st *table = dbmap->GetTable();
00145 nmap = dbmap->GetNRows();
00146
00147 std::cout << "Reading fmsMap table with nrow = "<<nmap<<"\n";
00148 memcpy(map,table,sizeof(fmsMap_st)*nmap);
00149 } else {
00150 std::cout << "WARNING: No data in fmsMap table (wrong timestamp?). Nothing to return, then.\n";
00151 }
00152 }
00153
00154 if(option.Contains("writetext")){
00155 char* file=filename.Data();
00156 FILE* fp;
00157 int crt,slt,ch;
00158 cout << "Writing "<<file<<"\n";
00159 if(fp=fopen(file,"w")){
00160 fprintf(fp,"%d\n",nmap);
00161 for(int i=0; i<nmap; i++){
00162 fprintf(fp,"%3d %4d %3d %3d %3d\n",map[i].detectorId,map[i].ch,
00163 map[i].qtCrate, map[i].qtSlot, map[i].qtChannel);
00164 }
00165 }
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("fmsMap");
00174 mgr->setStoreTime(storeTime.Data());
00175
00176 table->SetTable((char*)&map,nmap);
00177
00178 mgr->storeDbTable(table);
00179 gSystem->Unsetenv("DB_ACCESS_MODE");
00180 std::cout << "Done with database upload \n";
00181 }
00182 }
00183