/home/bes3soft/bes3soft/Boss/7.0.2/dist/7.0.2/Event/TrigEvent/TrigEvent-00-01-02/src/TrigEACC.cxx

Go to the documentation of this file.
00001 #include <iostream>
00002 #include <fstream>
00003 #include "TrigEvent/TrigEACC.h"
00004 using namespace std;
00005 
00006 TrigEACC::TrigEACC(const char* name)
00007 {
00008   m_name = name;
00009 }
00010 
00011 TrigEACC::~TrigEACC() {
00012 }
00013 
00014 void TrigEACC::initialize(){
00015   //initialize
00016   for(uint32_t i = 0; i < 11; i++) 
00017     for(uint32_t j = 0; j < 32; j++) 
00018       for(uint32_t k = 0; k < 32; k++) {
00019         if(j < 30) TC[i][j][k] = 0;
00020         if(i == 0) { TC_E[j][k] = 0; TC_W[j][k] = 0; }
00021         if(i == 0 && j < 16) { midCondi[j] = 0; emcTrigCondi[j][k] = 0; }
00022         if(i == 0 && j < 12) { E_blk[j] = 0; T_blk[j] = 0; }
00023         if(i == 0 && j < 2)  { E_blkE[j] = 0; T_blkE[j] = 0; E_blkW[j] = 0; T_blkW[j] = 0; }
00024   }
00025   E_B_Etot = 0;
00026   T_B_Etot = 0;
00027   E_E_Etot = 0;
00028   T_E_Etot = 0;
00029   E_blkAll = 0;
00030   T_blkAll = 0;
00031   E_eastHalf = 0;
00032   T_eastHalf = 0;
00033   E_westHalf = 0;
00034   T_westHalf = 0;
00035   E_eastEndHalf = 0;
00036   T_eastEndHalf = 0;
00037   E_westEndHalf = 0;
00038   T_westEndHalf = 0;
00039 }
00040 
00041 void TrigEACC::setEACCTrigData( uint32_t boardId, uint32_t window, uint32_t datasize, const uint32_t* data) {
00042   if(boardId != 0xd7) std::cerr << "ERROR: You set the wrong board data to TrigEACC!!!" << std::endl;
00043 
00044   m_window = window;
00045 
00046   uint32_t charge_mask = 0xFFFF;
00047   uint32_t time_mask   = 0xFF0000;
00048   for(uint32_t i = 0; i < datasize; i++) {
00049     if(i < 12) { 
00050       E_blk[i] = ((data[i]) & charge_mask);
00051       T_blk[i] = ((data[i]) & time_mask) >> 16;
00052     }
00053     if(i >= 12 && i < 14) { 
00054       E_blkE[i-12] = ((data[i]) & charge_mask);
00055       T_blkE[i-12] = ((data[i]) & time_mask) >> 16;
00056     }
00057     if(i >= 14 && i < 16) {
00058       E_blkW[i-14] = ((data[i]) & charge_mask);
00059       T_blkW[i-14] = ((data[i]) & time_mask) >> 16;
00060     }
00061     if(i >= 16 && i < 23) {
00062       if(i == 16) { E_B_Etot = ((data[i]) & charge_mask); T_B_Etot = ((data[i]) & time_mask) >> 16; }
00063       if(i == 17) { E_E_Etot = ((data[i]) & charge_mask); T_E_Etot = ((data[i]) & time_mask) >> 16; }
00064       if(i == 18) { E_blkAll = ((data[i]) & charge_mask); T_blkAll = ((data[i]) & time_mask) >> 16; }
00065       if(i == 19) { E_eastHalf = ((data[i]) & charge_mask); T_eastHalf = ((data[i]) & time_mask) >> 16; }
00066       if(i == 20) { E_westHalf = ((data[i]) & charge_mask); T_westHalf = ((data[i]) & time_mask) >> 16; }
00067       if(i == 21) { E_eastEndHalf = ((data[i]) & charge_mask); T_eastEndHalf = ((data[i]) & time_mask) >> 16; }
00068       if(i == 22) { E_westEndHalf = ((data[i]) & charge_mask); T_westEndHalf = ((data[i]) & time_mask) >> 16; }
00069     }
00070     if(i == 23) {
00071       for(uint32_t j = 0, mask = 1; j < 16; j++, mask <<= 1) {
00072         if(data[i] & mask) midCondi[j] = 1;
00073       }
00074     }
00075     if(i >= 24 && i < 24 + 20*window) {
00076       uint32_t winId = uint32_t ((i-24)/20);
00077       uint32_t id = i - (24+winId*20);
00078       if(i >= (24+winId*20) && i < (39+winId*20)) {
00079         for(uint32_t j = 0, mask = 1; j < 24; j++, mask <<= 1) {
00080           if(j < 11) { 
00081             if(data[i] & mask) TC[j][2*id+1][winId] = 1;
00082           }
00083           if(j >= 12 && j < 23) {
00084             if(data[i] & mask) TC[j-12][2*id][winId] = 1;
00085           }
00086         }
00087       }
00088       if(i == (39+winId*20)) {
00089         for(uint32_t j = 0, mask = 1; j < 16; j++, mask <<= 1) {
00090           if(data[i] & mask) TC_E[j][winId] = 1;
00091         }
00092       }
00093       if(i == (40+winId*20)) {
00094         for(uint32_t j = 0, mask = 1; j < 16; j++, mask <<= 1) {
00095           if(data[i] & mask) TC_E[j+16][winId] = 1;
00096         }
00097       }
00098       if(i == (41+winId*20)) {
00099         for(uint32_t j = 0, mask = 1; j < 16; j++, mask <<= 1) {
00100           if(data[i] & mask) TC_W[j][winId] = 1;
00101         }
00102       }
00103       if(i == (42+winId*20)) {
00104         for(uint32_t j = 0, mask = 1; j < 16; j++, mask <<= 1) {
00105           if(data[i] & mask) TC_W[j+16][winId] = 1;
00106         }
00107       }
00108       if(i == (43+winId*20)) {
00109         for(uint32_t j = 0, mask = 1; j < 16; j++, mask <<= 1) {
00110           if(data[i] & mask) emcTrigCondi[j][winId] = 1;
00111         }
00112       }
00113     }
00114   }
00115   if(24 + 20*window != datasize) std::cerr << "ERROR: The data in EACC are not complete" << std::endl;
00116 }
00117 
00118 void TrigEACC::print() {
00119 }

Generated on Tue Nov 29 23:11:43 2016 for BOSS_7.0.2 by  doxygen 1.4.7