| 6 | */ | */ | 
| 7 | // | // | 
| 8 | #include <sstream> | #include <sstream> | 
| 9 |  | #include <iostream> | 
| 10 | // | // | 
| 11 | #include <TFile.h> | #include <TFile.h> | 
| 12 | #include <TTree.h> | #include <TTree.h> | 
| 14 | #include <PscuHeader.h> | #include <PscuHeader.h> | 
| 15 | // | // | 
| 16 | #include <GLTables.h> | #include <GLTables.h> | 
| 17 |  | #include <sgp4.h> | 
| 18 | // | // | 
| 19 | ClassImp(GL_TRK_CALIB); | ClassImp(GL_TRK_CALIB); | 
| 20 | ClassImp(GL_RUN); | ClassImp(GL_RUN); | 
| 23 | ClassImp(GL_S4_CALIB); | ClassImp(GL_S4_CALIB); | 
| 24 | ClassImp(GL_CALO_CALIB); | ClassImp(GL_CALO_CALIB); | 
| 25 | ClassImp(GL_TIMESYNC); | ClassImp(GL_TIMESYNC); | 
| 26 |  | ClassImp(GL_TLE); | 
| 27 | // | // | 
| 28 | using namespace std; | using namespace std; | 
| 29 |  |  | 
| 158 | OBT0     = 0; | OBT0     = 0; | 
| 159 | TIMESYNC = 0; | TIMESYNC = 0; | 
| 160 | TYPE     = 0; | TYPE     = 0; | 
| 161 | }// **************************************************** | } | 
| 162 |  |  | 
| 163 |  | GL_TLE::GL_TLE(){ | 
| 164 |  | } | 
| 165 |  |  | 
| 166 |  | // **************************************************** | 
| 167 |  |  | 
| 168 | void GL_RUN::SetEV_FROM(UInt_t evfrom){ | void GL_RUN::SetEV_FROM(UInt_t evfrom){ | 
| 169 | EV_FROM = evfrom; | EV_FROM = evfrom; | 
| 1121 | * @param tzone Time Zone, can be UTC,GMT,CET,CEST,MSD default is MSK | * @param tzone Time Zone, can be UTC,GMT,CET,CEST,MSD default is MSK | 
| 1122 | * | * | 
| 1123 | */ | */ | 
| 1124 | TString GL_TIMESYNC::ConvertTime(TString tzone, UInt_t dbt){ | TString GL_TIMESYNC::ConvertTime(TString &tzone, UInt_t dbt){ | 
| 1125 | // | // | 
| 1126 | TDatime *time = new TDatime(); | TDatime *time = new TDatime(); | 
| 1127 | TString rtime; | TString rtime; | 
| 1128 |  | Bool_t found = false; | 
| 1129 | // | // | 
| 1130 | time->Set(dbt,false); // MSK = Moscow Winter Time | time->Set(dbt,false); // UTC (Coordinated Universal Time) | 
| 1131 | // | // | 
| 1132 | if ( !strcmp(tzone.Data(),"UTC") || !strcmp(tzone.Data(),"GMT") ){ | if ( !strcmp(tzone.Data(),"MSK") || !strcmp(tzone.Data(),"MWT") ){ | 
| 1133 | // | // | 
| 1134 | UInt_t timeUTC = time->Convert() - 60*60*3; // UTC (Coordinated Universal Time) = Moscow Winter Time - 3 hs | UInt_t timeMSK = time->Convert() + 60*60*3; // UTC (Coordinated Universal Time) + 3hs = Moscow Winter Time | 
| 1135 | time->Set(timeUTC,false); | time->Set(timeMSK,false); | 
| 1136 |  | found = true; | 
| 1137 | // | // | 
| 1138 | }; | }; | 
| 1139 | // | // | 
| 1140 | if ( !strcmp(tzone.Data(),"CET") ){ | if ( !strcmp(tzone.Data(),"CET") ){ | 
| 1141 | // | // | 
| 1142 | UInt_t timeCET = time->Convert() - 60*60*2; // CET (Central European Time) = Moscow Winter Time - 2 hs | UInt_t timeCET = time->Convert() + 60*60*1; // CET (Central European Time) = UTC + 1 hs | 
| 1143 | time->Set(timeCET,false); | time->Set(timeCET,false); | 
| 1144 |  | found = true; | 
| 1145 | // | // | 
| 1146 | }; | }; | 
| 1147 | // | // | 
| 1148 | if ( !strcmp(tzone.Data(),"CEST") ){ | if ( !strcmp(tzone.Data(),"CEST") ){ | 
| 1149 | // | // | 
| 1150 | UInt_t timeCEST = time->Convert() - 60*60*1; // CEST (Central European Summer Time) = Moscow Winter Time - 1 h | UInt_t timeCEST = time->Convert() + 60*60*2; // CEST (Central European Summer Time) = UTC + 2 h | 
| 1151 | time->Set(timeCEST,false); | time->Set(timeCEST,false); | 
| 1152 |  | found = true; | 
| 1153 | // | // | 
| 1154 | }; | }; | 
| 1155 | // | // | 
| 1156 | if ( !strcmp(tzone.Data(),"MSD") ){ | if ( !strcmp(tzone.Data(),"MSD") || !strcmp(tzone.Data(),"MST")){ | 
| 1157 | // | // | 
| 1158 | UInt_t timeMSD = time->Convert() + 60*60*1; // MSD (Moscow Summer Time) = Moscow Winter Time + 1 h | UInt_t timeMSD = time->Convert() + 60*60*4; // MSD (Moscow Summer Time) = UTC + 4 h | 
| 1159 | time->Set(timeMSD,false); | time->Set(timeMSD,false); | 
| 1160 |  | found = true; | 
| 1161 | // | // | 
| 1162 | }; | }; | 
| 1163 | // | // | 
| 1164 |  | if ( !found && strcmp(tzone.Data(),"UTC") && strcmp(tzone.Data(),"GMT") && strcmp(tzone.Data(),"") ){ | 
| 1165 |  | printf("\n Unknown time zone %s using UTC \n",tzone.Data()); | 
| 1166 |  | tzone = "UTC"; | 
| 1167 |  | }; | 
| 1168 |  | // | 
| 1169 | rtime = time->AsSQLString(); | rtime = time->AsSQLString(); | 
| 1170 | // | // | 
| 1171 | return(rtime); | return(rtime); | 
| 1179 | * @param tzone Time Zone, can be UTC,GMT,CET,CEST,MSD default is MSK | * @param tzone Time Zone, can be UTC,GMT,CET,CEST,MSD default is MSK | 
| 1180 | * | * | 
| 1181 | */ | */ | 
| 1182 | TString GL_TIMESYNC::UnConvertTime(TString tzone, UInt_t dbt){ | TString GL_TIMESYNC::UnConvertTime(TString &tzone, UInt_t dbt){ | 
| 1183 | // | // | 
| 1184 | TDatime *time = new TDatime(); | TDatime *time = new TDatime(); | 
| 1185 | TString rtime; | TString rtime; | 
| 1186 | // | // | 
| 1187 | time->Set(dbt,false); // MSK = Moscow Winter Time | Bool_t found = false; | 
| 1188 | // | // | 
| 1189 | if ( !strcmp(tzone.Data(),"UTC") || !strcmp(tzone.Data(),"GMT") ){ | time->Set(dbt,false); // tzone | 
| 1190 |  | // | 
| 1191 |  | if ( !strcmp(tzone.Data(),"MSK") || !strcmp(tzone.Data(),"MWT") ){ | 
| 1192 | // | // | 
| 1193 | UInt_t timeUTC = time->Convert() + 60*60*3; // UTC (Coordinated Universal Time) +3 hs = Moscow Winter Time | UInt_t timeUTC = time->Convert() - 60*60*3; // UTC (Coordinated Universal Time) = Moscow Winter Time - 3hs | 
| 1194 | time->Set(timeUTC,false); | time->Set(timeUTC,false); | 
| 1195 |  | found = true; | 
| 1196 | // | // | 
| 1197 | }; | }; | 
| 1198 | // | // | 
| 1199 | if ( !strcmp(tzone.Data(),"CET") ){ | if ( !strcmp(tzone.Data(),"CET") ){ | 
| 1200 | // | // | 
| 1201 | UInt_t timeCET = time->Convert() + 60*60*2; // CET (Central European Time) + 2 hs = Moscow Winter Time | UInt_t timeCET = time->Convert() - 60*60*1; // CET (Central European Time) - 1 hs = UTC | 
| 1202 | time->Set(timeCET,false); | time->Set(timeCET,false); | 
| 1203 |  | found = true; | 
| 1204 | // | // | 
| 1205 | }; | }; | 
| 1206 | // | // | 
| 1207 | if ( !strcmp(tzone.Data(),"CEST") ){ | if ( !strcmp(tzone.Data(),"CEST") ){ | 
| 1208 | // | // | 
| 1209 | UInt_t timeCEST = time->Convert() + 60*60*1; // CEST (Central European Summer Time) + 1 h = Moscow Winter Time | UInt_t timeCEST = time->Convert() - 60*60*2; // CEST (Central European Summer Time) - 2 h = UTC | 
| 1210 | time->Set(timeCEST,false); | time->Set(timeCEST,false); | 
| 1211 |  | found = true; | 
| 1212 | // | // | 
| 1213 | }; | }; | 
| 1214 | // | // | 
| 1215 | if ( !strcmp(tzone.Data(),"MSD") ){ | if ( !strcmp(tzone.Data(),"MSD") || !strcmp(tzone.Data(),"MST") ){ | 
| 1216 | // | // | 
| 1217 | UInt_t timeMSD = time->Convert() - 60*60*1; // MSD (Moscow Summer Time) - 1 h = Moscow Winter Time | UInt_t timeMSD = time->Convert() - 60*60*4; // MSD (Moscow Summer Time) - 4 h = UTC | 
| 1218 | time->Set(timeMSD,false); | time->Set(timeMSD,false); | 
| 1219 |  | found = true; | 
| 1220 |  | // | 
| 1221 |  | }; | 
| 1222 |  | // | 
| 1223 |  | if ( !found && strcmp(tzone.Data(),"UTC") && strcmp(tzone.Data(),"GMT") && strcmp(tzone.Data(),"") ){ | 
| 1224 | // | // | 
| 1225 |  | printf("\n Unknown time zone %s using UTC \n",tzone.Data()); | 
| 1226 |  | tzone = "UTC"; | 
| 1227 | }; | }; | 
| 1228 | // | // | 
| 1229 | rtime = time->AsSQLString(); | rtime = time->AsSQLString(); | 
| 1230 | // | // | 
| 1231 | return(rtime); | return(rtime); | 
| 1232 | } | } | 
| 1233 |  |  | 
| 1234 |  |  | 
| 1235 |  | // **************************************************** | 
| 1236 |  | /** | 
| 1237 |  | * Function to query the GL_TLE table of the DB. | 
| 1238 |  | * | 
| 1239 |  | * time is the unix time for which a good tle is requested. | 
| 1240 |  | * | 
| 1241 |  | * Return the pointer to a cTle object that has the closest and | 
| 1242 |  | * previous date compared with time. | 
| 1243 |  | * | 
| 1244 |  | * If errors occurs it returns NULL. | 
| 1245 |  | */ | 
| 1246 |  | cTle* GL_TLE::Query_GL_TLE(UInt_t time, TSQLServer *dbc){ | 
| 1247 |  | stringstream myquery; | 
| 1248 |  | myquery.str(""); | 
| 1249 |  |  | 
| 1250 |  | myquery << "SELECT TLE1, TLE2, TLE3 FROM GL_TLE " | 
| 1251 |  | << "WHERE FROM_TIME < FROM_UNIXTIME(" << time << ") ORDER BY FROM_TIME DESC LIMIT 1;"; | 
| 1252 |  |  | 
| 1253 |  |  | 
| 1254 |  | return Query_GL_TLE_go(myquery.str(), dbc); | 
| 1255 |  | } | 
| 1256 |  |  | 
| 1257 |  |  | 
| 1258 |  | // **************************************************** | 
| 1259 |  | /** | 
| 1260 |  | * Function to query the GL_TLE table of the DB. | 
| 1261 |  | * | 
| 1262 |  | * date is a datetime format YYYY-MM-DD hh:mm:ss for which a good tle | 
| 1263 |  | * is requested. | 
| 1264 |  | * | 
| 1265 |  | * Return the pointer to a cTle object that has the closest and | 
| 1266 |  | * previous date compared with time. | 
| 1267 |  | * | 
| 1268 |  | * If errors occurs it returns NULL. | 
| 1269 |  | */ | 
| 1270 |  | cTle* GL_TLE::Query_GL_TLE(TString date, TSQLServer *dbc){ | 
| 1271 |  | stringstream myquery; | 
| 1272 |  | myquery.str(""); | 
| 1273 |  |  | 
| 1274 |  | myquery << "SELECT TLE1, TLE2, TLE3 FROM GL_TLE " | 
| 1275 |  | << "WHERE FROM_TIME < '" << date.Data() << "' ORDER BY FROM_TIME DESC LIMIT 1;"; | 
| 1276 |  |  | 
| 1277 |  |  | 
| 1278 |  | return Query_GL_TLE_go(myquery.str(), dbc); | 
| 1279 |  | } | 
| 1280 |  |  | 
| 1281 |  |  | 
| 1282 |  | // **************************************************** | 
| 1283 |  | /** | 
| 1284 |  | * Private function used by Query_GL_TLE methods. | 
| 1285 |  | * | 
| 1286 |  | * myquery is the query string. | 
| 1287 |  | * | 
| 1288 |  | * Return the pointer to a cTle object that has the closest and | 
| 1289 |  | * previous date compared with time. | 
| 1290 |  | * | 
| 1291 |  | * If errors occurs it returns NULL. | 
| 1292 |  | */ | 
| 1293 |  | cTle* GL_TLE::Query_GL_TLE_go(TString myquery, TSQLServer *dbc){ | 
| 1294 |  | cTle *tle; | 
| 1295 |  | string tle1, tle2, tle3; | 
| 1296 |  |  | 
| 1297 |  | // MySQL variables | 
| 1298 |  | TSQLResult *result; | 
| 1299 |  | TSQLRow *row; | 
| 1300 |  |  | 
| 1301 |  | result = dbc->Query(myquery.Data()); | 
| 1302 |  | if(! result->GetRowCount() ) return NULL; | 
| 1303 |  |  | 
| 1304 |  | row = result->Next(); | 
| 1305 |  | tle1 = row->GetField(0); | 
| 1306 |  | tle2 = row->GetField(1); | 
| 1307 |  | tle3 = row->GetField(2); | 
| 1308 |  |  | 
| 1309 |  | tle = new cTle(tle1, tle2, tle3); | 
| 1310 |  |  | 
| 1311 |  | delete result; | 
| 1312 |  | delete row; | 
| 1313 |  |  | 
| 1314 |  | return tle; | 
| 1315 |  | } |