00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018 #include <string.h>
00019 #include <stdio.h>
00020 #include <errno.h>
00021 #include <assert.h>
00022 #include "StDAQReader.h"
00023 #include "StPMDReader.h"
00024 #include "StDaqLib/PMD/PMD_Reader.hh"
00025
00026 typedef EventInfo DAQEventInfo;
00027
00028 StPMDReader::StPMDReader(StDAQReader *daqr) {
00029 fDAQReader = daqr;
00030 fPMDImpReader = ::getPMDReader(daqr->getEventReader());
00031
00032 getPMD_ADC();
00033
00034 }
00035
00036
00037 StPMDReader::~StPMDReader() {
00038 }
00039
00040 int StPMDReader::close() {
00041 return 1;
00042 }
00043
00044 int StPMDReader::Update() {
00045 delete fPMDImpReader;
00046 fPMDImpReader = ::getPMDReader(fDAQReader->getEventReader());
00047 getPMD_ADC();
00048
00049 return 1;
00050 }
00051
00052
00053
00054
00055
00056
00057
00058
00059 int StPMDReader::NPMDHits()
00060 {
00061 return (fPMDImpReader) ? fPMDImpReader->NPMDHits():0;
00062 }
00063
00064 void StPMDReader::getPMD_ADC()
00065 {
00066 if (fPMDImpReader) {mPmd = fPMDImpReader->getPMD_ADC();}
00067 else {memset(&mPmd,0,sizeof(mPmd)); }
00068 }
00069
00070 int StPMDReader::getNoOfChannelsInCramBlock(int sec, int cram, int blk)
00071 {
00072 return mPmd.no_of_channels_in_cram_blk[sec][cram][blk] ;
00073 }
00074
00075 int StPMDReader::getAllPmdCpvData(int *adc)
00076 {
00077 int no_ch=0;
00078 for(int sec=0; sec<PMD_SECTOR; sec++){
00079 for(int cram=0; cram< PMD_CRAMS_MAX; cram++){
00080 for(int blk=0; blk <PMD_CRAMS_BLOCK; blk++ ){
00081 for( int ch=0; ch < PMD_CRAMS_CH_MAX; ch++, adc++){
00082 *adc=mPmd.adc[sec][cram][blk][ch];
00083 no_ch++;
00084 }
00085 }
00086 }
00087 }
00088 return no_ch;
00089 }
00090
00091 int StPMDReader::getAllPmdCpvDataChannelByChannel(int sec, int cram, int blk, int channel)
00092 {
00093 return mPmd.adc[sec][cram][blk][channel];
00094 }
00095
00096 int StPMDReader::getNoOfChannelsInPmdChain(int chain_no)
00097 {
00098 int sec, cram, blk;
00099 cram=chain_no; blk=0;
00100 if (chain_no < 12 )
00101 sec=0;
00102 else
00103 sec=1;
00104 return mPmd.no_of_channels_in_cram_blk[sec][cram][blk] ;
00105 }
00106
00107 int StPMDReader::getPmdChainData(int chain_no, int *data)
00108 {
00109 int sec, cram, blk, channel;
00110 cram=chain_no; blk=0;
00111 if (chain_no < 12 )
00112 sec=0;
00113 else
00114 sec=1;
00115 for(channel=0; channel < PMD_CRAMS_CH_MAX; channel++ , data++){
00116 *data= mPmd.adc[sec][cram][blk][channel];
00117 }
00118
00119 return mPmd.no_of_channels_in_cram_blk[sec][cram][blk] ;
00120 }
00121
00122
00123 int StPMDReader::getNoOfChannelsInCpvChain(int chain_no)
00124 {
00125 int sec, cram, blk;
00126 cram=chain_no; blk=1;
00127 if (chain_no < 12 )
00128 sec=0;
00129 else
00130 sec=1;
00131 return mPmd.no_of_channels_in_cram_blk[sec][cram][blk] ;
00132 }
00133
00134 int StPMDReader::getCpvChainData(int chain_no, int *data)
00135 {
00136 int sec, cram, blk, channel;
00137 cram=chain_no; blk=1;
00138 if (chain_no < 12 )
00139 sec=0;
00140 else
00141 sec=1;
00142 for(channel=0; channel <PMD_CRAMS_CH_MAX; channel++ , data++){
00143 *data= mPmd.adc[sec][cram][blk][channel];
00144 }
00145
00146 return mPmd.no_of_channels_in_cram_blk[sec][cram][blk] ;
00147 }
00148
00149 int StPMDReader::getAllPmdCpvPed(int *ped)
00150 {
00151 int no_ch=0;
00152 for(int sec=0; sec<PMD_SECTOR; sec++){
00153 for(int cram=0; cram< PMD_CRAMS_MAX; cram++){
00154 for(int blk=0; blk <PMD_CRAMS_BLOCK; blk++ ){
00155 for( int ch=0; ch < PMD_CRAMS_CH_MAX; ch++, ped++){
00156 *ped=mPmd.ped[sec][cram][blk][ch];
00157 if(mPmd.ped[sec][cram][blk][ch]>0)no_ch++;
00158 }
00159 }
00160 }
00161 }
00162 return no_ch;
00163 }
00164 int StPMDReader::getAllPmdCpvRms(int *rms)
00165 {
00166 int no_ch=0;
00167 for(int sec=0; sec<PMD_SECTOR; sec++){
00168 for(int cram=0; cram< PMD_CRAMS_MAX; cram++){
00169 for(int blk=0; blk <PMD_CRAMS_BLOCK; blk++ ){
00170 for( int ch=0; ch < PMD_CRAMS_CH_MAX; ch++, rms++){
00171 *rms=mPmd.rms[sec][cram][blk][ch];
00172 if(mPmd.rms[sec][cram][blk][ch]>0)no_ch++;
00173 no_ch++;
00174 }
00175 }
00176 }
00177 }
00178 return no_ch;
00179 }