ARA ROOT v3.13 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   //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 doxygen 1.4.7