AraEvent/AtriSensorHkData.cxx
00001 00002 00003 00004 00005 00006 00007 00008 00009 #include "AtriSensorHkData.h" 00010 #include "TMath.h" 00011 #include <iostream> 00012 #include <fstream> 00013 #include <cstring> 00014 ClassImp(AtriSensorHkData); 00015 00016 AtriSensorHkData::AtriSensorHkData() 00017 { 00018 //Default Constructor 00019 } 00020 00021 AtriSensorHkData::~AtriSensorHkData() { 00022 //Default Destructor 00023 } 00024 00025 00026 AtriSensorHkData::AtriSensorHkData(AraSensorHk_t *theHk) 00027 :RawAraGenericHeader(&(theHk->gHdr)) 00028 { 00029 00030 unixTime=theHk->unixTime; 00031 unixTimeUs=theHk->unixTimeUs; 00032 00033 atriVoltage=theHk->atriVoltage; 00034 atriCurrent=theHk->atriCurrent; 00035 memcpy(ddaTemp,theHk->ddaTemp,sizeof(UShort_t)*DDA_PER_ATRI); 00036 memcpy(tdaTemp,theHk->tdaTemp,sizeof(UShort_t)*TDA_PER_ATRI); 00037 memcpy(ddaVoltageCurrent,theHk->ddaVoltageCurrent,sizeof(UInt_t)*DDA_PER_ATRI); 00038 memcpy(tdaVoltageCurrent,theHk->tdaVoltageCurrent,sizeof(UInt_t)*DDA_PER_ATRI); 00039 00040 } 00041 00042 00043 Double_t AtriSensorHkData::getDdaVoltage(Int_t dda){ 00044 if(dda >= DDA_PER_ATRI || dda < 0) return -99; 00045 uint32_t ddaVoltageADC = (ddaVoltageCurrent[dda] & 0xff) << 4; 00046 ddaVoltageADC = ddaVoltageADC | (ddaVoltageCurrent[dda] & 0xf00000)>>20; 00047 Double_t ddaVoltageVolts = (6.65/4096)*ddaVoltageADC; 00048 return ddaVoltageVolts; 00049 } 00050 Double_t AtriSensorHkData::getDdaCurrent(Int_t dda){ 00051 if(dda >= DDA_PER_ATRI) return -99; 00052 uint32_t ddaCurrentADC = (ddaVoltageCurrent[dda] & 0x00ff00) >> 4; 00053 ddaCurrentADC = ddaCurrentADC | (ddaVoltageCurrent[dda] & 0x0f0000)>>16 ; 00054 Double_t ddaCurrentAmps = ddaCurrentADC * (0.10584/4096) / 0.1; 00055 return ddaCurrentAmps; 00056 00057 } 00058 00059 Double_t AtriSensorHkData::getTdaVoltage(Int_t tda){ 00060 if(tda >= TDA_PER_ATRI || tda < 0) return -99; 00061 uint32_t tdaVoltageADC = (tdaVoltageCurrent[tda] & 0xff) << 4; 00062 tdaVoltageADC = tdaVoltageADC | (tdaVoltageCurrent[tda] & 0xf00000)>>20; 00063 Double_t tdaVoltageVolts = (6.65/4096)*tdaVoltageADC; 00064 return tdaVoltageVolts; 00065 00066 } 00067 Double_t AtriSensorHkData::getTdaCurrent(Int_t tda){ 00068 if(tda >= TDA_PER_ATRI) return -99; 00069 uint32_t tdaCurrentADC = (tdaVoltageCurrent[tda] & 0x00ff00) >> 4; 00070 tdaCurrentADC = tdaCurrentADC | (tdaVoltageCurrent[tda] & 0x0f0000)>>16 ; 00071 Double_t tdaCurrentAmps = tdaCurrentADC * (0.10584/4096) / 0.2; 00072 return tdaCurrentAmps; 00073 00074 } 00075 00076 Double_t AtriSensorHkData::getDdaTemp(Int_t dda){ 00077 if(dda>= DDA_PER_ATRI) return -99; 00078 //Two's complement 00079 00080 bool isNegative = false; 00081 uint16_t msb = ddaTemp[dda] << 4; 00082 uint16_t lsb = ddaTemp[dda] >> 12; 00083 00084 if(msb&0x0800) isNegative=true; 00085 00086 uint16_t tempADC = msb | lsb; 00087 00088 if(isNegative){ 00089 tempADC=~tempADC+1; 00090 tempADC=tempADC&0x0fff; 00091 } 00092 Double_t temperature = tempADC * 0.0625; 00093 if(isNegative) temperature = -1*temperature; 00094 00095 return temperature; 00096 00097 } 00098 00099 Double_t AtriSensorHkData::getTdaTemp(Int_t tda){ 00100 if(tda>=TDA_PER_ATRI) return -99; 00101 00102 bool isNegative = false; 00103 uint16_t msb = tdaTemp[tda] << 4; 00104 uint16_t lsb = tdaTemp[tda] >> 12; 00105 00106 if(msb&0x0800) isNegative=true; 00107 00108 uint16_t tempADC = msb | lsb; 00109 00110 if(isNegative){ 00111 tempADC=~tempADC+1; 00112 tempADC=tempADC&0x0fff; 00113 } 00114 Double_t temperature = tempADC * 0.0625; 00115 if(isNegative) temperature=-1*temperature; 00116 00117 return temperature; 00118 00119 }
Generated on Tue Jul 16 16:58:01 2013 for ARA ROOT v3.10 Software by
