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 //For araSoft versions earlier than 4.2 the voltage and current are the wrong way round 00034 if(verId > 4 || (verId == 4 && subVerId > 1)){ 00035 atriVoltage=theHk->atriVoltage; 00036 atriCurrent=theHk->atriCurrent; 00037 } 00038 else{ 00039 atriVoltage=theHk->atriCurrent; 00040 atriCurrent=theHk->atriVoltage; 00041 } 00042 memcpy(ddaTemp,theHk->ddaTemp,sizeof(UShort_t)*DDA_PER_ATRI); 00043 memcpy(tdaTemp,theHk->tdaTemp,sizeof(UShort_t)*TDA_PER_ATRI); 00044 memcpy(ddaVoltageCurrent,theHk->ddaVoltageCurrent,sizeof(UInt_t)*DDA_PER_ATRI); 00045 memcpy(tdaVoltageCurrent,theHk->tdaVoltageCurrent,sizeof(UInt_t)*DDA_PER_ATRI); 00046 00047 } 00048 00049 00050 Double_t AtriSensorHkData::getDdaVoltage(Int_t dda){ 00051 if(dda >= DDA_PER_ATRI || dda < 0) return -99; 00052 uint32_t ddaVoltageADC = (ddaVoltageCurrent[dda] & 0xff) << 4; 00053 ddaVoltageADC = ddaVoltageADC | (ddaVoltageCurrent[dda] & 0xf00000)>>20; 00054 Double_t ddaVoltageVolts = (6.65/4096)*ddaVoltageADC; 00055 return ddaVoltageVolts; 00056 } 00057 Double_t AtriSensorHkData::getDdaCurrent(Int_t dda){ 00058 if(dda >= DDA_PER_ATRI) return -99; 00059 uint32_t ddaCurrentADC = (ddaVoltageCurrent[dda] & 0x00ff00) >> 4; 00060 ddaCurrentADC = ddaCurrentADC | (ddaVoltageCurrent[dda] & 0x0f0000)>>16 ; 00061 Double_t ddaCurrentAmps = ddaCurrentADC * (0.10584/4096) / 0.1; 00062 return ddaCurrentAmps; 00063 00064 } 00065 00066 Double_t AtriSensorHkData::getTdaVoltage(Int_t tda){ 00067 if(tda >= TDA_PER_ATRI || tda < 0) return -99; 00068 uint32_t tdaVoltageADC = (tdaVoltageCurrent[tda] & 0xff) << 4; 00069 tdaVoltageADC = tdaVoltageADC | (tdaVoltageCurrent[tda] & 0xf00000)>>20; 00070 Double_t tdaVoltageVolts = (6.65/4096)*tdaVoltageADC; 00071 return tdaVoltageVolts; 00072 00073 } 00074 Double_t AtriSensorHkData::getTdaCurrent(Int_t tda){ 00075 if(tda >= TDA_PER_ATRI) return -99; 00076 uint32_t tdaCurrentADC = (tdaVoltageCurrent[tda] & 0x00ff00) >> 4; 00077 tdaCurrentADC = tdaCurrentADC | (tdaVoltageCurrent[tda] & 0x0f0000)>>16 ; 00078 Double_t tdaCurrentAmps = tdaCurrentADC * (0.10584/4096) / 0.2; 00079 return tdaCurrentAmps; 00080 00081 } 00082 00083 Double_t AtriSensorHkData::getDdaTemp(Int_t dda){ 00084 if(dda>= DDA_PER_ATRI) return -99; 00085 //Two's complement 00086 00087 bool isNegative = false; 00088 uint16_t msb = ddaTemp[dda] << 4; 00089 uint16_t lsb = ddaTemp[dda] >> 12; 00090 00091 if(msb&0x0800) isNegative=true; 00092 00093 uint16_t tempADC = msb | lsb; 00094 00095 if(isNegative){ 00096 tempADC=~tempADC+1; 00097 tempADC=tempADC&0x0fff; 00098 } 00099 Double_t temperature = tempADC * 0.0625; 00100 if(isNegative) temperature = -1*temperature; 00101 00102 return temperature; 00103 00104 } 00105 00106 Double_t AtriSensorHkData::getTdaTemp(Int_t tda){ 00107 if(tda>=TDA_PER_ATRI) return -99; 00108 00109 bool isNegative = false; 00110 uint16_t msb = tdaTemp[tda] << 4; 00111 uint16_t lsb = tdaTemp[tda] >> 12; 00112 00113 if(msb&0x0800) isNegative=true; 00114 00115 uint16_t tempADC = msb | lsb; 00116 00117 if(isNegative){ 00118 tempADC=~tempADC+1; 00119 tempADC=tempADC&0x0fff; 00120 } 00121 Double_t temperature = tempADC * 0.0625; 00122 if(isNegative) temperature=-1*temperature; 00123 00124 return temperature; 00125 00126 } 00127 00128 Double_t AtriSensorHkData::getAtriVoltage(){ 00129 //For versions of araSoft before 4.2 the voltage and current are the wrong way round 00130 //Data files built with AraRootVersion > 3.11 take this into account 00131 if( (verId > 4 || (verId == 4 && subVerId > 1)) || (softVerMajor > 3 || (softVerMajor == 3 && softVerMinor > 11))) 00132 { 00133 return 0.0605*atriVoltage; 00134 } 00135 else{ 00136 return 0.0605*atriCurrent; 00137 } 00138 } 00139 00140 Double_t AtriSensorHkData::getAtriCurrent(){ 00141 //For versions of araSoft before 4.2 the voltage and current are the wrong way round 00142 //Data files built with AraRootVersion > 3.11 take this into account 00143 if( (verId > 4 || (verId == 4 && subVerId > 1)) || (softVerMajor > 3 || (softVerMajor == 3 && softVerMinor > 11))) 00144 { 00145 return 0.0755*atriCurrent; 00146 } 00147 else{ 00148 return 0.0755*atriVoltage; 00149 } 00150 } 00151
Generated on Mon Dec 9 13:20:21 2013 for ARA ROOT v3.13 Software by
