ARA ROOT v3.10 Software

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 doxygen 1.4.7