Main Page   Class Hierarchy   Compound List   File List   Compound Members   File Members   Related Pages  

CalCalibLogs.cpp

Go to the documentation of this file.
00001 #include "CalRecon/CalCalibLogs.h"
00002 // #include "Event/messageManager.h"
00003 #include <fstream>
00004 #include "xml/IFile.h"
00005 
00006 CalCalibLog::CalCalibLog(int ilayer, int iview, int icolumn)
00007 :CalLogID(ilayer,iview,icolumn){}
00008 
00009 //######################################
00010 CalCalibLog* CalCalibLogs::getLogID(int logID) const
00011 //######################################
00012 {
00013         int jlog = -1;
00014         for (int ilog = 0; ilog < m_List.size(); ilog++) {
00015                 if (m_List[ilog]->logID() == logID) {
00016                         jlog  = ilog;
00017                         break;
00018                 }
00019         }
00020         return m_List[jlog];
00021 }
00022 
00023 void CalCalibLogs::ini(int nLogs, int nLayers)
00024 {
00025         
00026         for (int ilayer = 0; ilayer < nLayers; ilayer++) {
00027                 for (int ilog = 0; ilog < nLogs; ilog++) {
00028                         m_List.push_back(new CalCalibLog(ilayer,CalDetGeo::X,ilog));
00029                         m_List.push_back(new CalCalibLog(ilayer,CalDetGeo::Y,ilog));
00030                 }
00031         }
00032         
00033         m_GainFile = "";
00034         m_IntlinFile = "";
00035         m_RailFile = "";
00036         m_SlopeFile = "";
00037 }
00038 
00039 //######################################
00040 CalCalibLogs::~CalCalibLogs()
00041 //######################################
00042 {
00043         for (int ilog = 0; ilog < m_List.size(); ilog++) delete m_List[ilog];
00044 }
00045 
00046 /*
00047 //######################################
00048 void CalCalibLogs::defineOption()
00049 //######################################
00050 {
00051         optionVI::defineOption("GainFileName",&m_GainFile);
00052         optionVI::defineOption("RailFileName",&m_RailFile);
00053         optionVI::defineOption("IntlinFileName",&m_IntlinFile);
00054         optionVI::defineOption("SlopeFileName",&m_SlopeFile);
00055 }
00056 */
00057 
00058 void CalCalibLogs::make()
00059 {
00060         readGain();
00061         readSlope();
00062         readIntlin();
00063         readRail();
00064 }
00065 void CalCalibLogs::readIntlin()
00066 {       
00067         xml::IFile::extractEnvVar(&m_IntlinFile);
00068         std::cout << " Calorimeter linearity file : "+m_IntlinFile << std::endl;
00069         if (m_IntlinFile == "") return;
00070 
00071         std::ifstream file;
00072         file.open(m_IntlinFile.c_str());
00073         while(file.good()){
00074                 int range;
00075                 int side;
00076                 int col;
00077                 int layer;
00078 
00079                 file >> range;
00080                 file >> side;
00081                 file >> col;
00082                 file >> layer;
00083                 if(!file.good())break;
00084 
00085                 int view = 1 - layer%2; layer /= 2;
00086                   side = 1-side; layer = 3-layer;
00087 
00088                 CalCalibLog* log = 
00089                 getLogID(CalLogID::ID(layer,CalDetGeo::makeAxis(view),col));
00090                 log->readIntlin(file,side,range);
00091         }
00092         file.close();
00093 }
00094 
00095 void CalCalibLogs::readGain()
00096 {       
00097         xml::IFile::extractEnvVar(&m_GainFile);
00098         std::cout << " Calorimeter gain file : "+m_GainFile << std::endl;
00099         if (m_GainFile == "") return;
00100 
00101         std::ifstream file;
00102         file.open(m_GainFile.c_str());
00103         while(file.good()){
00104                 int side;
00105                 int col;
00106                 int layer;
00107 
00108                 file >> side;
00109                 file >> col;
00110                 file >> layer;
00111                 if(!file.good())break;
00112 
00113                 int view = 1 - layer%2; layer /= 2;
00114                  side = 1-side; layer = 3-layer;
00115 
00116                 CalCalibLog* log = 
00117                 getLogID(CalLogID::ID(layer,CalDetGeo::makeAxis(view),col));
00118                 log->readGain(file,side);
00119         }
00120         file.close();
00121 }
00122 void CalCalibLogs::readRail()
00123 {       
00124         xml::IFile::extractEnvVar(&m_RailFile);
00125         std::cout << " Calorimeter rails file : "+m_RailFile << std::endl;
00126         if (m_RailFile == "") return;
00127 
00128         std::ifstream file;
00129         file.open(m_RailFile.c_str());
00130         while(file.good()){
00131                 int side;
00132                 int col;
00133                 int layer;
00134 
00135                 file >> side;
00136                 file >> col;
00137                 file >> layer;
00138                 if(!file.good())break;
00139 
00140                 int view =1-layer%2; layer /= 2;
00141                  side = 1-side; layer = 3-layer;
00142 
00143                 CalCalibLog* log = 
00144                 getLogID(CalLogID::ID(layer,CalDetGeo::makeAxis(view),col));
00145                 log->readRail(file,side);
00146         }
00147         file.close();
00148 }
00149 void CalCalibLogs::readSlope()
00150 {       
00151         xml::IFile::extractEnvVar(&m_SlopeFile);
00152         std::cout << " Calorimeter  light asymmetry file : "+m_SlopeFile << std::endl;
00153         if (m_SlopeFile == "") return;
00154 
00155         std::ifstream file;
00156         file.open(m_SlopeFile.c_str());
00157         while(file.good()){
00158                 int col;
00159                 int layer;
00160 
00161                 file >> col;
00162                 file >> layer;
00163                 if(!file.good())break;
00164                 int view = 1-layer%2; layer /= 2;
00165             layer = 3-layer;
00166 
00167                 CalCalibLog* log = 
00168                 getLogID(CalLogID::ID(layer,CalDetGeo::makeAxis(view),col));
00169                 log->readSlope(file);
00170         }
00171         file.close();
00172 }
00173 void CalCalibLog::readIntlin(std::istream& file, int side, int range)
00174 {
00175         file >> m_brkpt[side][range];
00176         int i = 0;
00177         for ( ;i<3;i++) file >> m_coefa[i][side][range] ;
00178         for (i=0;i<3;i++)       file >> m_coefb[i][side][range] ;
00179 }
00180 
00181 void CalCalibLog::readGain(std::istream& file, int side)
00182 {       const double g[4] = {2.1, 2.1, 8.4, 8.4};
00183         double gain;
00184         for ( int i=0;i<CALNRANGES;i++){        file >>gain;
00185         m_gain[side][i] = gain>0? gain : g[i];
00186         }
00187 }
00188 
00189 void CalCalibLog::readRail(std::istream& file, int side)
00190 {
00191         for ( int i=0;i<CALNRANGES;i++) file >> m_rail[side][i];
00192 }
00193 
00194 void CalCalibLog::readSlope(std::istream& file)
00195 {
00196         for ( int i=0;i<CALNRANGES;i++) file >> m_slope[i];
00197 }
00198 
00199 double CalCalibLog::adc_to_MeV(double adc, int s, int r) const
00200 {
00201         double a[3];
00202         double bp = getBrkpt(s,r);
00203         for( int i = 0; i<3; i++)
00204                 a[i] = adc<bp ? getCoefa(i,s,r):getCoefb(i,s,r);
00205         return (a[0]+(a[1]+a[2]*adc)*adc)*getGain(s,r);
00206 }

Generated on Thu Nov 29 16:38:48 2001 by doxygen1.2.12 written by Dimitri van Heesch, © 1997-2001