00001 #include "CalibData/Mdc/MdcCalibData.h"
00002
00003 #include "GaudiKernel/MsgStream.h"
00004 namespace CalibData {
00005 MdcCalibData::MdcCalibData(){
00006 newXtTreesBuf = NULL;
00007 r2tTreesBuf = NULL;
00008 newXtTreesArray = NULL;
00009 r2tTreesArray = NULL;
00010 for(int layid=0; layid<43; layid++){
00011 m_r2t[layid] = NULL;
00012 for(int entr=0; entr<18; entr++){
00013 for(int lr=0; lr<2; lr++){
00014 m_newxt[layid][entr][lr] = NULL;
00015 }
00016 }
00017 }
00018 }
00019
00020 MdcCalibData::~MdcCalibData(){
00021 for(int layid=0; layid<43; layid++){
00022 delete m_r2t[layid];
00023 for(int entr=0; entr<18; entr++){
00024 for(int lr=0; lr<2; lr++){
00025 if(m_newxt[layid][entr][lr]!=NULL) delete m_newxt[layid][entr][lr];
00026 }
00027 }
00028 }
00029 if(newXtTreesBuf!=NULL) newXtTreesBuf->Clear();
00030 if(r2tTreesBuf!=NULL) r2tTreesBuf->Clear();
00031 if(newXtTreesArray!=NULL) delete newXtTreesArray;
00032 if(r2tTreesArray!=NULL) delete r2tTreesArray;
00033 }
00034
00035 StatusCode MdcCalibData::update(CalibBase1& other, MsgStream* log)
00036 {
00037 MdcCalibData& other1 = dynamic_cast<MdcCalibData& >(other);
00038 std::cout<<"\n"<<"here is the update in the MdcCalConst"<<std::endl;
00039 CalibBase1::update(other, log);
00040 clear();
00041 m_xtmap = other1.m_xtmap;
00042 m_t0 = other1.m_t0;
00043 m_delt0 = other1.m_delt0;
00044 m_qtpar0 = other1.m_qtpar0;
00045 m_qtpar1 = other1.m_qtpar1;
00046 m_sdmap = other1.m_sdmap;
00047 return StatusCode::SUCCESS;
00048 }
00049
00050 void MdcCalibData::setXtpar(int xtkey,double val){
00051 m_xtmap.insert( valType( int(xtkey), val) );
00052 }
00053
00054 void MdcCalibData::setNewXtpar(TObjArray* newXtTrees){
00055
00056 TBufferFile* tempBuf = new TBufferFile(TBuffer::kWrite);
00057 newXtTrees->Streamer(*tempBuf);
00058
00059
00060 newXtTreesBuf = new TBufferFile(TBuffer::kRead);
00061 newXtTreesBuf->SetBuffer(tempBuf->Buffer(), tempBuf->BufferSize());
00062
00063 newXtTreesArray = new TObjArray();
00064 newXtTreesArray->Streamer(*newXtTreesBuf);
00065 for(int layid=0; layid<43; layid++){
00066 for(int entr=0; entr<18; entr++){
00067 for(int lr=0; lr<2; lr++){
00068 char newXtTreeName[20];
00069 sprintf(newXtTreeName,"trNewXt%02d_%02d_%d",layid,entr,lr);
00070 m_newxt[layid][entr][lr] = (TTree*)newXtTreesArray->FindObject(newXtTreeName);;
00071 }
00072 }
00073 }
00074 delete tempBuf;
00075 }
00076
00077 void MdcCalibData::setR2tpar(TObjArray* r2tTrees){
00078
00079 TBufferFile* tempBuf = new TBufferFile(TBuffer::kWrite);
00080 r2tTrees->Streamer(*tempBuf);
00081
00082
00083 r2tTreesBuf = new TBufferFile(TBuffer::kRead);
00084 r2tTreesBuf->SetBuffer(tempBuf->Buffer(), tempBuf->BufferSize());
00085
00086 r2tTreesArray = new TObjArray();
00087 r2tTreesArray->Streamer(*r2tTreesBuf);
00088 for(int layid=0; layid<43; layid++){
00089 char r2tTreeName[20];
00090 sprintf(r2tTreeName,"r2t%02d",layid);
00091 m_r2t[layid] = (TTree*)r2tTreesArray->FindObject(r2tTreeName);;
00092 }
00093 delete tempBuf;
00094 }
00095
00096 void MdcCalibData::setT0(double val){
00097 m_t0.push_back( val );
00098 }
00099 void MdcCalibData::setDelT0( double val){
00100 m_delt0.push_back( val );
00101 }
00102
00103 void MdcCalibData::setQtpar0(double val){
00104 m_qtpar0.push_back( val );
00105 }
00106
00107 void MdcCalibData::setQtpar1(double val){
00108 m_qtpar1.push_back( val );
00109 }
00110
00111 void MdcCalibData::setSdpar(int sdkey, double val){
00112 m_sdmap.insert( valType( int(sdkey), val) );
00113 }
00114
00115
00116 double MdcCalibData::getXtpar(int layid, int entr, int lr, int order){
00117 double xtpar = -999.0;
00118 int key = getXtKey(layid, entr, lr, order);
00119 if( 1 == m_xtmap.count(key) )
00120 xtpar = m_xtmap[key];
00121
00122 return xtpar;
00123 }
00124
00125
00126 TTree* MdcCalibData::getNewXtpar(int layid, int entr, int lr){
00127 return m_newxt[layid][entr][lr];
00128 }
00129
00130
00131 TTree* MdcCalibData::getR2tpar(int layid){
00132 return m_r2t[layid];
00133 }
00134
00135
00136 double MdcCalibData::getSdpar(int layid, int entr, int lr, int bin){
00137 double sdpar = -999.0;
00138 int key = getSdKey(layid, entr, lr, bin);
00139 if( 1 == m_sdmap.count(key) ){
00140 return m_sdmap[key];
00141 }
00142
00143 return sdpar;
00144 }
00145
00146
00147 int MdcCalibData::getXtKey(int layid, int entr, int lr, int order){
00148 int key;
00149
00150 key = ( (layid << XTLAYER_INDEX) & XTLAYER_MASK ) |
00151 ( (entr << XTENTRA_INDEX) & XTENTRA_MASK ) |
00152 ( (lr << XTLR_INDEX) & XTLR_MASK ) |
00153 ( (order << XTORDER_INDEX) & XTORDER_MASK );
00154
00155 return key;
00156 }
00157
00158
00159 int MdcCalibData::getSdKey(int layid, int entr, int lr, int bin){
00160 int key;
00161
00162 key = ( (layid << SDLAYER_INDEX) & SDLAYER_MASK ) |
00163 ( (entr << SDENTRA_INDEX) & SDENTRA_MASK ) |
00164 ( (lr << SDLR_INDEX) & SDLR_MASK ) |
00165 ( (bin << SDBIN_INDEX) & SDBIN_MASK );
00166
00167 return key;
00168 }
00169
00170 void MdcCalibData::setXtBegin(){
00171 m_xtiter = m_xtmap.begin();
00172 }
00173
00174 int MdcCalibData::getNextXtpar(int& key, double& xtpar){
00175 if( m_xtiter != m_xtmap.end() ){
00176 key = (*m_xtiter).first;
00177 xtpar = (*m_xtiter).second;
00178 m_xtiter++;
00179 return 1;
00180 }
00181 else return 0;
00182 }
00183
00184 void MdcCalibData::setSdBegin(){
00185 m_sditer = m_sdmap.begin();
00186 }
00187
00188 int MdcCalibData::getNextSdpar(int& key, double& sdpar){
00189 if( m_sditer != m_sdmap.end() ){
00190 key = (*m_sditer).first;
00191 sdpar = (*m_sditer).second;
00192 m_sditer++;
00193 return 1;
00194 }
00195 else return 0;
00196 }
00197 void MdcCalibData::clear(){
00198 m_xtmap.clear();
00199 m_t0.clear();
00200 m_delt0.clear();
00201 m_qtpar0.clear();
00202 m_qtpar1.clear();
00203 m_sdmap.clear();
00204 }
00205
00206 }