11 |
#include <TSQLRow.h> |
#include <TSQLRow.h> |
12 |
#include <TTree.h> |
#include <TTree.h> |
13 |
#include <TGraph.h> |
#include <TGraph.h> |
14 |
|
#include <TDatime.h> |
15 |
#include <TF1.h> |
#include <TF1.h> |
16 |
|
|
17 |
#include <cOrbit.h> |
#include <cOrbit.h> |
34 |
|
|
35 |
extern "C" { |
extern "C" { |
36 |
#include <dirent.h> |
#include <dirent.h> |
37 |
|
//INITIZE(YEAR,DIMO) |
38 |
|
extern void initize_(); |
39 |
|
//FELDCOF(YEAR,DIMO) |
40 |
|
extern void feldcof_(float*, float*); |
41 |
|
//FELDG(LATI,LONGI,HEIGHT,BNORTH,BEAST,BDOWN,BABS) |
42 |
|
extern void feldg_(float*, float*, float*, float*, float*, float*, float*); |
43 |
|
//SHELLG(LATI,LONGI,HEIGHT,DIMO,XL,ICODE,BAB1) |
44 |
|
extern void shellg_(float*, float*, float*, float*, float*, float*, float*); |
45 |
|
//FINDB0(STPS,BDEL,VALUE,BEQU,RR0) |
46 |
|
extern void findb0_(float*, float*, bool*, float*, float*); |
47 |
} |
} |
48 |
|
|
49 |
using namespace log4cxx; |
using namespace log4cxx; |
311 |
getPacketsNames(packetsNames); |
getPacketsNames(packetsNames); |
312 |
for(Iter = packetsNames.begin(); Iter != packetsNames.end(); Iter++){ |
for(Iter = packetsNames.begin(); Iter != packetsNames.end(); Iter++){ |
313 |
tr = (TTree*)file->Get(*Iter); |
tr = (TTree*)file->Get(*Iter); |
314 |
|
if (tr == NULL || tr->IsZombie()) { |
315 |
|
cout << "Missing Tree: " << *Iter << "\n"; |
316 |
|
continue; |
317 |
|
} |
318 |
nevents = tr->GetEntries(); |
nevents = tr->GetEntries(); |
319 |
tr->SetBranchAddress("Header", &eh); |
tr->SetBranchAddress("Header", &eh); |
320 |
for (UInt_t i = 0; i < nevents; i++){ |
for (UInt_t i = 0; i < nevents; i++){ |
767 |
if (secRow == NULL) throw YSQLQueryException("No Timesync!"); |
if (secRow == NULL) throw YSQLQueryException("No Timesync!"); |
768 |
id_Raw = (ULong64_t)atof(secRow->GetField(0)); |
id_Raw = (ULong64_t)atof(secRow->GetField(0)); |
769 |
} |
} |
|
|
|
770 |
} |
} |
|
|
|
771 |
} |
} |
772 |
|
|
773 |
//Collect the TM_HEADER to assign them the correct TIMESYNC |
//Collect the TM_HEADER to assign them the correct TIMESYNC |
786 |
while (true) { |
while (true) { |
787 |
row = result->Next(); |
row = result->Next(); |
788 |
if (row == 0) break; |
if (row == 0) break; |
|
//diff = 1; |
|
|
//if (syncOBT < (unsigned long)atol(row->GetField(0))) diff = -1; |
|
|
//absTime = (syncTIME + konstant)*1000 + diff*((unsigned long)atol(row->GetField(0)) - syncOBT); |
|
789 |
absTime = (ULong64_t)atof(row->GetField(0)) + syncTIME; |
absTime = (ULong64_t)atof(row->GetField(0)) + syncTIME; |
790 |
oss.str(""); |
oss.str(""); |
791 |
oss << " UPDATE TM_HEADER " |
oss << " UPDATE TM_HEADER " |
840 |
throw (YSQLNotConnectedException, YSQLQueryException, YNotExistingFileException, YExistingFileException) { |
throw (YSQLNotConnectedException, YSQLQueryException, YNotExistingFileException, YExistingFileException) { |
841 |
if (conn == 0) throw YSQLNotConnectedException("Connection missing"); |
if (conn == 0) throw YSQLNotConnectedException("Connection missing"); |
842 |
|
|
843 |
|
stringstream oss; |
844 |
|
TSQLResult *result, *secResult; |
845 |
|
TSQLRow *row, *secRow; |
846 |
|
ULong64_t offset_date; |
847 |
|
|
848 |
|
/*Took all the root file related to a specific raw file*/ |
849 |
|
oss.str(""); |
850 |
|
oss << "SELECT OFFSET_DATE FROM GL_RAW WHERE ID = '" << idRaw << "'"; |
851 |
|
result = conn->Query(oss.str().c_str()); |
852 |
|
row = result->Next(); |
853 |
|
if (row != NULL && row != 0 && row->GetField(0) != NULL && row->GetField(0) != ""){ |
854 |
|
offset_date = TDatime(row->GetField(0)).Convert(); |
855 |
|
} else { |
856 |
|
return NOK; |
857 |
|
} |
858 |
|
|
859 |
///TBD: Put the check "IF THE REGISTRY ALREDY EXISTS" before this try. |
///TBD: Put the check "IF THE REGISTRY ALREDY EXISTS" before this try. |
860 |
try { |
try { |
861 |
if (insertPamelaTM_HEADER(conn, idRaw)){ |
if (insertPamelaTM_HEADER(conn, idRaw)){ |
870 |
return NOK; |
return NOK; |
871 |
} |
} |
872 |
|
|
|
stringstream oss; |
|
|
TSQLResult *result, *secResult; |
|
|
TSQLRow *row, *secRow; |
|
|
|
|
873 |
const char *idRoot; |
const char *idRoot; |
874 |
string registryName; |
string registryName; |
875 |
RegistryEvent *registry = new RegistryEvent(); |
RegistryEvent *registry = new RegistryEvent(); |
882 |
oss.str(""); |
oss.str(""); |
883 |
oss << "SELECT ID, PATH, NAME FROM GL_ROOT WHERE ID_RAW = '" << idRaw << "'"; |
oss << "SELECT ID, PATH, NAME FROM GL_ROOT WHERE ID_RAW = '" << idRaw << "'"; |
884 |
result = conn->Query(oss.str().c_str()); |
result = conn->Query(oss.str().c_str()); |
|
//cout << oss.str().c_str() << "\n"; |
|
|
//if (result->GetRowCount() == 0) throw YSQLQueryException(oss.str().c_str()); |
|
885 |
row = result->Next(); |
row = result->Next(); |
886 |
if (row == 0) return NOK; |
if (row == 0) return NOK; |
887 |
|
|
888 |
idRoot = row->GetField(0); |
idRoot = row->GetField(0); |
889 |
oss.str(""); |
oss.str(""); |
890 |
oss << row->GetField(1) << "/" << row->GetField(2); |
oss << row->GetField(1) << "/" << row->GetField(2); |
891 |
|
|
892 |
file = YFile::Open(oss.str().c_str(), "UPDATE"); |
file = YFile::Open(oss.str().c_str(), "UPDATE"); |
893 |
pcksList packetsNames; |
pcksList packetsNames; |
894 |
pcksList::iterator Iter; |
pcksList::iterator Iter; |
897 |
for(Iter = packetsNames.begin(); Iter != packetsNames.end(); Iter++){ |
for(Iter = packetsNames.begin(); Iter != packetsNames.end(); Iter++){ |
898 |
//cout << "Tree Name: " << *Iter << "\n"; |
//cout << "Tree Name: " << *Iter << "\n"; |
899 |
tr = (TTree*)file->Get(*Iter); |
tr = (TTree*)file->Get(*Iter); |
900 |
|
if (tr == NULL || tr->IsZombie()) { |
901 |
|
cout << "Missing Tree: " << *Iter << "\n"; |
902 |
|
continue; |
903 |
|
} |
904 |
//Branch Registry exist? |
//Branch Registry exist? |
905 |
if (!tr->GetBranchStatus("Registry")){ |
if (!tr->GetBranchStatus("Registry")){ |
906 |
branch = tr->Branch("Registry", "pamela::RegistryEvent", ®istry); |
branch = tr->Branch("Registry", "pamela::RegistryEvent", ®istry); |
911 |
branch->Reset(); |
branch->Reset(); |
912 |
} |
} |
913 |
|
|
|
//This select s temporary. Better selection on time should be done, |
|
914 |
oss.str(""); |
oss.str(""); |
915 |
oss << "SELECT TLE1, TLE2, TLE3" |
oss << "SELECT TLE1, TLE2, TLE3" |
916 |
<< " FROM GL_TLE " |
<< " FROM GL_TLE " |
917 |
<< " WHERE VALID_FROM_TIME = 0 "; |
<< " WHERE FROM_TIME >= 0 "; |
918 |
//cout << oss.str().c_str() << "\n"; |
//cout << oss.str().c_str() << "\n"; |
919 |
result = conn->Query(oss.str().c_str()); |
result = conn->Query(oss.str().c_str()); |
920 |
row = result->Next(); |
row = result->Next(); |
921 |
if (!(row == 0)){ |
if (!(row == NULL)){ |
922 |
string tle1 = row->GetField(0); |
string tle1 = row->GetField(0); |
923 |
string tle2 = row->GetField(1); |
string tle2 = row->GetField(1); |
924 |
string tle3 = row->GetField(2); |
string tle3 = row->GetField(2); |
925 |
cTle tle(tle1, tle2, tle3); |
cTle tle(tle1, tle2, tle3); |
926 |
orbit = new cOrbit(tle); |
orbit = new cOrbit(tle); |
927 |
|
} else { |
928 |
|
cout << "TLE table empty." << "\n"; |
929 |
|
return NOK; |
930 |
} |
} |
931 |
|
|
932 |
|
|
933 |
/*Took all the TM_HEADER rows related to a specific root file and TREE_NAME*/ |
/*Took all the TM_HEADER rows related to a specific root file and TREE_NAME*/ |
934 |
oss.str(""); |
oss.str(""); |
935 |
oss << "SELECT EVENT, TIME FROM TM_HEADER WHERE ID_ROOT = '" << idRoot << "' " |
oss << "SELECT EVENT, TIME FROM TM_HEADER WHERE ID_ROOT = '" << idRoot << "' " |
939 |
|
|
940 |
//Fill the 'Registry' TBranch |
//Fill the 'Registry' TBranch |
941 |
secRow = secResult->Next(); |
secRow = secResult->Next(); |
942 |
while (!(secRow == 0)){ |
initize_(); |
943 |
|
while (secRow != NULL){ |
944 |
registry->event = (unsigned int)atoi(secRow->GetField(0)); |
registry->event = (unsigned int)atoi(secRow->GetField(0)); |
945 |
registry->absTime = (ULong64_t)atof(secRow->GetField(1)); |
registry->absTime = (ULong64_t)atof(secRow->GetField(1)) + (offset_date*1000); |
946 |
|
setGeo(orbit, registry); |
947 |
branch->Fill(); |
branch->Fill(); |
948 |
secRow = secResult->Next(); |
secRow = secResult->Next(); |
949 |
/* |
/* |
2494 |
return row->GetField(0); |
return row->GetField(0); |
2495 |
} |
} |
2496 |
|
|
2497 |
const char* PamelaDBOperations::setGeo(cOrbit *orbit, RegistryEvent ®) |
const char* PamelaDBOperations::setGeo(cOrbit *orbit, RegistryEvent* ®) |
2498 |
throw (YSQLNotConnectedException, YSQLQueryException){ |
throw (YSQLNotConnectedException, YSQLQueryException){ |
2499 |
cEci eci; |
cEci eci; |
2500 |
cCoordGeo coo; |
cCoordGeo coo; |
2501 |
orbit->getPosition(reg.absTime, &eci); |
TDatime time = TDatime((reg->absTime/1000)); |
2502 |
|
orbit->getPosition( (time.GetYear() + time.GetMonth()/12.), &eci); |
2503 |
coo = eci.toGeo(); |
coo = eci.toGeo(); |
2504 |
reg.m_Lat = rad2deg(coo.m_Lat); |
reg->m_Lat = rad2deg(coo.m_Lat); |
2505 |
reg.m_Lon = rad2deg(coo.m_Lon); |
reg->m_Lon = rad2deg(coo.m_Lon); |
2506 |
reg.m_Alt = coo.m_Alt; |
reg->m_Alt = coo.m_Alt; |
2507 |
//rate->Fill(rad2deg(coo.m_Lon), rad2deg(coo.m_Lat)); |
cout << "coo.m_Lat " << dec << coo.m_Lat << "\n"; |
2508 |
|
cout << "rad2deg(coo.m_Lat) " << dec << rad2deg(coo.m_Lat) << "\n"; |
2509 |
|
float dimo = 0.0; |
2510 |
|
float year = time.GetYear(); |
2511 |
|
float bnorth, beast, bdown, babs; |
2512 |
|
float xl, icode, bab1; |
2513 |
|
float stps = 0.05; |
2514 |
|
float bdel = 0.001; |
2515 |
|
bool value = 0; |
2516 |
|
year = 2004; |
2517 |
|
float bequ, rr0; |
2518 |
|
feldcof_(&year, &dimo); |
2519 |
|
feldg_(®->m_Lat, ®->m_Lon, ®->m_Alt, &bnorth, &beast, &bdown, &babs); |
2520 |
|
shellg_(®->m_Lat, ®->m_Lon, ®->m_Alt, &dimo, &xl, &icode, &bab1); |
2521 |
|
findb0_(&stps, &bdel, &value, &bequ, &rr0); |
2522 |
|
reg->magnGeo = YMagnGeo(); |
2523 |
|
reg->magnGeo.setBNorth(bnorth); |
2524 |
|
reg->magnGeo.setBEast(beast); |
2525 |
|
reg->magnGeo.setBDown(bdown); |
2526 |
|
reg->magnGeo.setBAbs(babs); |
2527 |
|
reg->magnGeo.setL(xl); |
2528 |
|
reg->magnGeo.setBvsB0(babs/bequ); |
2529 |
} |
} |