TargetData.cxx
00001 #include "TargetData.h" 00002 ClassImp(TargetData) 00004 TargetData::TargetData(void) 00005 :RawTargetData() 00006 {} 00007 00008 TargetData::TargetData(RawTargetData *rawPtr) 00009 :RawTargetData(*rawPtr) 00010 { 00011 unpackData(); 00012 } 00014 TargetData::~TargetData(void) 00015 {} 00017 TargetData::TargetData(unsigned short rawData[]) 00018 :RawTargetData(rawData) 00019 { 00020 unpackData(); 00021 } 00022 00024 void TargetData::unpackData() 00025 { 00026 unsigned int raw_temp[NUM_TARGETS]; 00027 unsigned int raw_rovdd[NUM_TARGETS]; 00028 unsigned int raw_scaler[NUM_TARGETS][3]; 00029 int count = 1; 00030 int chip,channel,samp; 00031 int j; 00032 00033 for(chip=0; chip<NUM_TARGETS; chip++){ 00034 memAddrSpace[chip] = raw[count]; 00035 count++; 00036 for(channel=0; channel<NUM_CHANNELS; channel++){ 00037 for(samp=0; samp<SAMPLES_PER_COL; samp++){ 00038 data[chip][channel][samp] = raw[count]; 00039 count++; 00040 } 00041 } 00042 for(j=0; j<3; j++){ 00043 raw_scaler[chip][j] = raw[count]; 00044 count++; 00045 } 00046 thresh[chip] = raw[count]; 00047 count++; 00048 raw_rovdd[chip] = raw[count]; 00049 count++; 00050 wbias[chip] = raw[count]; 00051 count++; 00052 feedback[chip] = raw[count]; 00053 count++; 00054 raw_temp[chip] = raw[count]; 00055 count++; 00056 } 00057 00058 for(chip=0; chip<NUM_TARGETS; chip++){ 00059 temperature[chip] = (float)raw_temp[chip]*0.03125;//degree C 00060 rovdd[chip] = (float)raw_rovdd[chip]*2.5/4096;//volts 00061 for(j=0; j<3; j++){ 00062 scaler[chip][j] = (float)raw_scaler[chip][j]/60.0;//Hz 00063 } 00064 } 00065 unpackMemAddrSpace(); 00066 unpackFeedback(); 00067 } 00069 void TargetData::unpackMemAddrSpace() 00070 { 00071 const unsigned int MASK_ROW = 0x00000E00; 00072 const unsigned int MASK_COL = 0x000001F0; 00073 const unsigned int MASK_HITBIT = 0x00008000; 00074 for(int chip=0;chip<NUM_TARGETS;chip++) { 00075 rowLoc[chip] = memAddrSpace[chip] & MASK_ROW; 00076 rowLoc[chip] = rowLoc[chip] >> 9; 00077 00078 colLoc[chip] = memAddrSpace[chip] & MASK_COL; 00079 pixLoc[chip] = colLoc[chip]; 00080 colLoc[chip] = colLoc[chip] >> 4; 00081 00082 hitBit[chip] = memAddrSpace[chip] & MASK_HITBIT; 00083 hitBit[chip] = hitBit[chip] >> 15; 00084 } 00085 } 00087 void TargetData::unpackFeedback() 00088 { 00089 const unsigned int MASK_SGN = 0x00001000; 00090 const unsigned int MASK_ROW = 0x00000E00; 00091 const unsigned int MASK_COL = 0x000001F0; 00092 const unsigned int MASK_TERM = 0x0000000E; 00093 const unsigned int MASK_EN_PED = 0x00000001; 00094 for(int chip=0;chip<NUM_TARGETS;chip++) { 00095 sign[chip] = feedback[chip] & MASK_SGN; 00096 sign[chip] = sign[chip] >> 12; 00097 00098 pedRowAddr[chip] = feedback[chip] & MASK_ROW; 00099 pedRowAddr[chip] = pedRowAddr[chip] >> 9; 00100 00101 pedColAddr[chip] = feedback[chip] & MASK_COL; 00102 pedColAddr[chip] = pedColAddr[chip] >> 4; 00103 00104 term[chip] = feedback[chip] & MASK_TERM; 00105 term[chip] = term[chip] >> 1; 00106 00107 enPed[chip] = feedback[chip] & MASK_EN_PED; 00108 } 00109 } 00111 00112 00113 TGraph *TargetData::getChannel(int chip, int channel) 00114 { 00115 if(chip<0 || chip>=NUM_TARGETS) return NULL; 00116 if(channel<0 || channel>=NUM_CHANNELS) return NULL; 00117 00118 Double_t timeVals[SAMPLES_PER_COL]={0}; 00119 Double_t voltVals[SAMPLES_PER_COL]={0}; 00120 for(int samp=0;samp<SAMPLES_PER_COL;samp++) { 00121 timeVals[samp]=Double_t(samp); //Should multiple by delta t here 00122 voltVals[samp]=fVoltBuffer[chip][channel][samp]; 00123 } 00124 TGraph *gr = new TGraph(SAMPLES_PER_COL,timeVals,voltVals); 00125 return gr; 00126 }
Generated on Tue Nov 24 19:05:00 2009 for CREAM TEA -- MCP/TARGET Readout by
1.3.9.1