00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00019
00020
00021
00022
00023
00024
00026
00027 #include <Stiostream.h>
00028 #include "Stiostream.h"
00029 #include <stdio.h>
00030 #include <unistd.h>
00031 #include <errno.h>
00032 #include <sys/types.h>
00033 #include <sys/stat.h>
00034 #include <fcntl.h>
00035 #include <math.h>
00036 #include <string.h>
00037
00038 #include "TFile.h"
00039 #include "TH1.h"
00040 #include "TH2.h"
00041 #include "TH3.h"
00042 #include "TNtuple.h"
00043
00044 #include "St_DataSetIter.h"
00045
00046 #include "StDAQMaker/StDAQReader.h"
00047 #include "StDaqLib/TPC/fee_pin.h"
00048
00049 #include "StTpcBadChanMaker.h"
00050 #include "StTpcCalibSetup.h"
00051 #include "StTpcCalibSector.h"
00052
00053 ClassImp(StTpcBadChanMaker)
00054
00055
00056
00057
00058 StTpcBadChanMaker::StTpcBadChanMaker(const char *aMakerName,
00059 const StTpcCalibSetup* aSetup)
00060 :
00061 StMaker(aMakerName),
00062 mSetup(aSetup)
00063 {
00064
00065 }
00066
00067
00068
00069
00070 StTpcBadChanMaker::~StTpcBadChanMaker(){
00071 delete [] mTpcCalibSector;
00072 }
00073
00074
00075
00076 Int_t StTpcBadChanMaker::Init(){
00077
00078 cout << "StTpcBadChanMaker::Init()" << endl;
00079
00080 int tNumberOfSector=24;
00081
00082 static int tNPadAtRow[45]={
00083 88,96,104,112,118,126,134,142,150,158,166,174,182,
00084 98,100,102,104,106,106,108,110,112,112,114,116,118,120,122,122,
00085 124,126,128,128,130,132,134,136,138,138,140,142,144,144,144,144};
00086 mTpcCalibSector = new StTpcCalibSector*[tNumberOfSector];
00087 for(int tiSect=0;
00088 tiSect<tNumberOfSector;
00089 tiSect++){
00090 mTpcCalibSector[tiSect]= new StTpcCalibSector(mSetup,(tiSect+1),tNPadAtRow);
00091 }
00092
00093 return StMaker::Init();
00094 }
00095
00096
00097
00098
00099 Int_t StTpcBadChanMaker::Make(){
00100
00101 int tNumberOfSector=24;
00102
00103 St_DataSet * tDataSet=GetDataSet("StDAQReader");
00104
00105 StDAQReader *tDAQReader=(StDAQReader*)(tDataSet->GetObject());
00106
00107 StTPCReader *tRMSReader=tDAQReader->getTPCReader();
00108
00109 if(!tRMSReader) {
00110 cout << "Coudln't get the TPC reader " << endl;
00111 return kStWarn;
00112 }
00113 for(int tiSect=0;
00114 tiSect< tNumberOfSector;
00115 tiSect++){
00116 mTpcCalibSector[tiSect]->updateBad(tRMSReader);
00117 }
00118 delete tDataSet;
00119 delete tDAQReader;
00120 delete tRMSReader;
00121
00122 return kStEOF;
00123 }
00124
00125 void StTpcBadChanMaker::PrintInfo(){
00126 printf("**************************************************************\n");
00127 printf("* $Id: StTpcBadChanMaker.cxx,v 1.9 2007/04/28 17:57:14 perev Exp $\n");
00128 printf("**************************************************************\n");
00129 if (Debug()) StMaker::PrintInfo();
00130 }
00131
00132 void StTpcBadChanMaker::CalcElectronicConvertor(int** aPadToFeeConvertor,
00133 int** aPadToRDOConvertor){
00134
00135
00136 for(int tiFee=0;tiFee<182;tiFee++){
00137 for(int tiPin=0;tiPin<32;tiPin++){
00138 if(row_vs_fee[tiFee][tiPin]!=0 && pad_vs_fee[tiFee][tiPin]!=0){
00139
00140
00141
00142 aPadToFeeConvertor[(row_vs_fee[tiFee][tiPin]-1)]
00143 [(pad_vs_fee[tiFee][tiPin]-1)]=(tiFee+1);
00144 aPadToRDOConvertor[(row_vs_fee[tiFee][tiPin]-1)]
00145 [(pad_vs_fee[tiFee][tiPin]-1)]=rdo_vs_fee[tiFee][tiPin];
00146 }
00147 }
00148 }
00149
00150
00151
00152
00153
00154
00155
00156
00157
00158
00159
00160
00161 }
00162
00163 Int_t StTpcBadChanMaker::Finish(){
00164 cout << "StTpcBadChanMaker::Finish()" << endl;
00165
00166
00167 int tNumberOfSector=24;
00168
00169 TFile *tHFile = new TFile(mSetup->getRootOutFileName(),"recreate");
00170 ofstream* tBadFile = new ofstream(mSetup->getBadFileName());
00171
00172 int** tPadToFeeConvertor= new int*[45];
00173 int** tPadToRDOConvertor= new int*[45];
00174 for(int tiRow=0;tiRow<45;tiRow++){
00175 tPadToFeeConvertor[tiRow]= new int[182];
00176 tPadToRDOConvertor[tiRow]= new int[182];
00177 }
00178 CalcElectronicConvertor(tPadToFeeConvertor,tPadToRDOConvertor);
00179
00180 for(int tiSect=0;
00181 tiSect<tNumberOfSector;
00182 tiSect++){
00183 mTpcCalibSector[tiSect]->findBad();
00184 mTpcCalibSector[tiSect]->findBadElectronics(tPadToFeeConvertor,
00185 tPadToRDOConvertor);
00186 mTpcCalibSector[tiSect]->writeBadHisto();
00187 mTpcCalibSector[tiSect]->writeBadTable(tBadFile);
00188
00189 }
00190
00191 tHFile->Close();
00192 tBadFile->close();
00193 return kStOK;
00194 }
00195
00196
00197