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 "StTpcDeadChanMaker.h"
00050 #include "StTpcCalibSetup.h"
00051 #include "StTpcCalibSector.h"
00052
00053 ClassImp(StTpcDeadChanMaker)
00054
00055
00056
00057
00058 StTpcDeadChanMaker::StTpcDeadChanMaker(const char *aMakerName,
00059 const StTpcCalibSetup* aSetup)
00060 :
00061 StMaker(aMakerName),
00062 mSetup(aSetup)
00063 {
00064
00065 }
00066
00067
00068
00069
00070 StTpcDeadChanMaker::~StTpcDeadChanMaker(){
00071 delete [] mTpcCalibSector;
00072 }
00073
00074
00075
00076 Int_t StTpcDeadChanMaker::Init(){
00077
00078 cout << "StTpcDeadChanMaker::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 ifstream* tBadFile = new ifstream(mSetup->getBadFileName());
00087 if(tBadFile->fail()) {
00088 cout << "!!!! Couldn't open bad file "
00089 << mSetup->getBadFileName() << endl
00090 << "Please run this macro with CalibType=1 before" << endl;
00091 return kStFatal;
00092 }
00093 mTpcCalibSector = new StTpcCalibSector*[tNumberOfSector];
00094 for(int tiSect=0;
00095 tiSect<tNumberOfSector;
00096 tiSect++){
00097 mTpcCalibSector[tiSect]= new StTpcCalibSector(mSetup,(tiSect+1),
00098 tNPadAtRow);
00099 mTpcCalibSector[tiSect]->readBadTable(tBadFile);
00100 }
00101 tBadFile->close();
00102 delete tBadFile;
00103
00104 return kStOK;
00105 }
00106
00107
00108
00109
00110 Int_t StTpcDeadChanMaker::Make(){
00111
00112 int tNumberOfSector=24;
00113
00114 static St_DataSet * tDataSet=GetDataSet("StDAQReader");
00115
00116 static StDAQReader *tDAQReader=(StDAQReader*)(tDataSet->GetObject());
00117
00118 static StTPCReader *tZSupReader=tDAQReader->getTPCReader();
00119
00120 if(!tZSupReader) {
00121 cout << "Coudln't get the reader " << endl;
00122 return kStWarn;
00123 }
00124
00125 for(int tiSect=0;
00126 tiSect< tNumberOfSector;
00127 tiSect++){
00128 mTpcCalibSector[tiSect]->updateDead(tZSupReader);
00129 }
00130
00131
00132
00133
00134 return kStOK;
00135 }
00136
00137 void StTpcDeadChanMaker::PrintInfo(){
00138 printf("**************************************************************\n");
00139 printf("* $Id: StTpcDeadChanMaker.cxx,v 1.8 2007/04/28 17:57:16 perev Exp $\n");
00140 printf("**************************************************************\n");
00141 if (Debug()) StMaker::PrintInfo();
00142 }
00143
00144 void StTpcDeadChanMaker::CalcElectronicConvertor(int** aPadToFeeConvertor,
00145 int** aPadToRDOConvertor){
00146
00147
00148 for(int tiFee=0;tiFee<182;tiFee++){
00149 for(int tiPin=0;tiPin<32;tiPin++){
00150 if(row_vs_fee[tiFee][tiPin]!=0 && pad_vs_fee[tiFee][tiPin]!=0){
00151 aPadToFeeConvertor[(row_vs_fee[tiFee][tiPin]-1)]
00152 [(pad_vs_fee[tiFee][tiPin]-1)]=(tiFee+1);
00153 aPadToRDOConvertor[(row_vs_fee[tiFee][tiPin]-1)]
00154 [(pad_vs_fee[tiFee][tiPin]-1)]=
00155 rdo_vs_fee[tiFee][tiPin];
00156 }
00157 }
00158 }
00159 }
00160
00161 Int_t StTpcDeadChanMaker::Finish(){
00162 cout << "StTpcDeadChanMaker::Finish()" << endl;
00163
00164
00165 int tNumberOfSector=24;
00166
00167 TFile *tHFile = new TFile(mSetup->getRootOutFileName(),"recreate");
00168 ofstream* tDeadFile = new ofstream(mSetup->getDeadFileName());
00169
00170 int** tPadToFeeConvertor= new int*[45];
00171 int** tPadToRDOConvertor= new int*[45];
00172 for(int tiRow=0;tiRow<45;tiRow++){
00173 tPadToFeeConvertor[tiRow]= new int[182];
00174 tPadToRDOConvertor[tiRow]= new int[182];
00175 }
00176 CalcElectronicConvertor(tPadToFeeConvertor,tPadToRDOConvertor);
00177
00178 for(int tiSect=0;
00179 tiSect<tNumberOfSector;
00180 tiSect++){
00181 mTpcCalibSector[tiSect]->findDead();
00182 mTpcCalibSector[tiSect]->findDeadElectronics(tPadToFeeConvertor,
00183 tPadToRDOConvertor);
00184 mTpcCalibSector[tiSect]->writeDeadHisto();
00185 mTpcCalibSector[tiSect]->writeDeadTable(tDeadFile);
00186
00187 }
00188
00189 tHFile->Close();
00190 tDeadFile->close();
00191 return kStOK;
00192 }
00193
00194
00195