#include <BesMucEfficiency.hh>
Public Member Functions | |
BesMucEfficiency () | |
~BesMucEfficiency () | |
void | Initialize (G4String filename) |
void | CheckCalibSvc () |
void | SetHit (BesMucHit *hit) |
void | GetPosLengthWidth (G4VPhysicalVolume *pvStrip) |
G4int | GetPad () |
G4double | GetEfficiency () |
Static Public Member Functions | |
static BesMucEfficiency * | Instance (void) |
Public Attributes | |
IMessageSvc * | msgSvc |
Private Attributes | |
BesMucHit * | m_pHit |
G4double | m_Pos_Hit |
G4double | m_Pos_Strip |
G4double | m_Length |
G4double | m_Width |
G4int | m_Strip |
G4double | m_effi [part_Max][seg_Max][gap_Max][strip_Max][pad_Max] |
G4double | IsAddEffi |
IMucCalibConstSvc * | m_ptrCalibSvc |
Static Private Attributes | |
static BesMucEfficiency * | fPointer = 0 |
Definition at line 31 of file BesMucEfficiency.hh.
BesMucEfficiency::BesMucEfficiency | ( | ) |
Definition at line 27 of file BesMucEfficiency.cc.
References fPointer.
Referenced by Instance().
00028 { 00029 if(fPointer) 00030 {G4Exception("BesMucEfficiency constructed twice.");} 00031 fPointer=this; 00032 00033 }
BesMucEfficiency::~BesMucEfficiency | ( | ) |
void BesMucEfficiency::CheckCalibSvc | ( | ) |
Definition at line 96 of file BesMucEfficiency.cc.
References m_ptrCalibSvc.
Referenced by BesMucSD::ProcessHits().
00097 { 00098 00099 ISvcLocator* svcLocator = Gaudi::svcLocator(); 00100 //IMucCalibConstSvc* m_ptrCalibSvc; 00101 StatusCode sc = svcLocator->service("MucCalibConstSvc", m_ptrCalibSvc, true); 00102 00103 if( sc != StatusCode::SUCCESS){ 00104 G4cout<< "Can not use MucCalibConstSvc!" << G4endl; 00105 } 00106 00107 }
G4double BesMucEfficiency::GetEfficiency | ( | ) |
Definition at line 141 of file BesMucEfficiency.cc.
References IMucCalibConstSvc::getEff(), BesMucHit::GetGap(), GetPad(), BesMucHit::GetPart(), BesMucHit::GetSeg(), m_pHit, m_ptrCalibSvc, and m_Strip.
Referenced by BesMucSD::ProcessHits().
00142 { 00143 // look up table with (part;seg;gap;m_Strip) 00144 G4int part = m_pHit->GetPart(); 00145 G4int seg = m_pHit->GetSeg(); 00146 G4int gap = m_pHit->GetGap(); 00147 G4int strip = m_Strip; 00148 G4int pad = GetPad(); 00149 00150 G4double eff = 0; 00151 if( 0 != m_ptrCalibSvc ){ 00152 eff = m_ptrCalibSvc->getEff(part, seg, gap, strip); 00153 //G4cout << "Prt: " << part << "\tseg: " << seg << "\tlay: " << gap << "\tstr: " << m_Strip 00154 // << "\t:" << eff << endl; 00155 } 00156 else 00157 { 00158 //G4cout << "CalibSvc unavailable!" << G4endl; 00159 eff = 0.95; 00160 } 00161 //G4cout<<part<<"\t"<<seg<<"\t"<<gap<<"\t"<<m_Strip<<"\t"<<eff<<G4endl; 00162 return eff; 00163 }
G4int BesMucEfficiency::GetPad | ( | ) |
Definition at line 129 of file BesMucEfficiency.cc.
References abs, m_Length, m_Pos_Hit, m_Pos_Strip, and m_Width.
Referenced by GetEfficiency().
00130 {//it will be better to put this function into Class BesMucDigit 00131 G4double pad1 = (m_Pos_Hit+m_Length/2-m_Pos_Strip)/m_Width; 00132 G4int pad =G4int(pad1); 00133 //G4cout<<"---in Effi::GetPad()--- hit: "<<m_Pos_Hit<<" part: "<<m_pHit->GetPart()<<" gap: "<<m_pHit->GetGap()<<" L: "<<m_Length<<" strip: "<<m_Pos_Strip<<" width: "<<m_Width<<" pad: "<<pad<<G4endl; 00134 if(abs(m_Pos_Hit-m_Pos_Strip)<m_Length/2) 00135 return pad; 00136 else 00137 return -999; 00138 00139 }
void BesMucEfficiency::GetPosLengthWidth | ( | G4VPhysicalVolume * | pvStrip | ) |
Definition at line 165 of file BesMucEfficiency.cc.
References BesMucHit::GetGap(), BesMucHit::GetPart(), m_Length, m_pHit, m_Pos_Strip, m_Width, and subSeperate::temp.
Referenced by SetHit().
00166 { 00167 m_Pos_Strip = 1.0e38; 00168 00169 G4int part = m_pHit->GetPart(); 00170 G4int gap = m_pHit->GetGap(); 00171 00172 m_Pos_Strip = pvStrip->GetObjectTranslation().y(); 00173 if ( (part == 1 && gap%2 != 0) || (part != 1 && gap%2 == 0) ) { 00174 m_Pos_Strip = pvStrip->GetObjectTranslation().x(); 00175 } 00176 00177 G4String striptype= pvStrip->GetLogicalVolume()->GetSolid()->GetEntityType(); 00178 // G4String striplenght= pvStrip->GetLogicalVolume()->GetName(); 00179 G4Box *temp; 00180 temp = (G4Box *)pvStrip->GetLogicalVolume()->GetSolid(); 00181 m_Width = temp->GetXHalfLength()*2; 00182 m_Length = temp->GetYHalfLength()*2; 00183 if ( (part == 1 && gap%2 != 0) || (part != 1 && gap%2 == 0) ) { 00184 m_Width =temp->GetYHalfLength()*2; 00185 m_Length=temp->GetXHalfLength()*2; 00186 } 00187 //G4cout<<"in Set "<<m_Length<<" "<<temp->GetXHalfLength()<<" "<<m_Width<<" "<<m_Pos_Strip<<G4endl; 00188 00189 }
void BesMucEfficiency::Initialize | ( | G4String | filename | ) |
Definition at line 40 of file BesMucEfficiency.cc.
References IsAddEffi, m_effi, num, and strip_Max.
00041 { G4int part,seg,gap,strip,pad; 00042 G4double effi; 00043 // for(G4int part=0;part<3;part++){ 00044 // for(G4int seg=0;seg<8;seg++){ 00045 // for(G4int gap=0;gap<gap_Max;gap++){ 00046 // for(G4int strip=0;strip<strip_Max;strip++){ 00047 // for(G4int pad=0;pad<pad_Max;pad++){ 00048 // m_effi[part][seg][gap][strip][pad]=1; 00049 // } 00050 // } 00051 // } 00052 // } 00053 //} 00054 // G4cout<<"in BesMucEfficiency::Initialize()"<<G4endl; 00055 00056 // TFile *f=new TFile("muc-effi.root"); 00057 // TTree *t1=(TTree*)f->Get("t1"); 00058 00059 00060 std::ifstream fin(filename); 00061 00062 char buffer[100]; 00063 G4int num=0; 00064 00065 fin.getline(buffer,100,'\n'); //get info whether add effi or not 00066 std::istringstream stringBuf(buffer); 00067 stringBuf>>IsAddEffi; 00068 //G4cout<<"IsAddEffi ="<<IsAddEffi<<G4endl; 00069 fin.getline(buffer,100,'\n'); 00070 00071 if(!fin){ 00072 G4cout<<"error opening effi data"<<G4endl; 00073 IsAddEffi = 1.0; // no effi data. set effi = 1.0 00074 } 00075 00076 // fin.getline(buffer,100,'\n'); 00077 // std::istringstream stringBuf2(buffer); 00078 // stringBuf2>>part>>seg>>gap>>strip>>pad; 00079 // G4cout<<"---------- "<<pad<<endl; 00080 00081 while(fin.getline(buffer,100,'\n')){ 00082 std::istringstream stringBuf2(buffer); 00083 stringBuf2>>part>>seg>>gap>>strip>>pad>>effi; 00084 m_effi[part][seg][gap][strip][pad] = effi; 00085 num++; 00086 } 00087 for(G4int seg=0;seg<8;seg++){ 00088 for(G4int strip=0;strip<strip_Max;strip++){ 00089 m_effi[1][seg][0][strip][105]=0; 00090 } 00091 } 00092 00093 //G4cout<<"------------in Effi::init()---- "<<num<<G4endl; 00094 }
BesMucEfficiency * BesMucEfficiency::Instance | ( | void | ) | [static] |
Definition at line 21 of file BesMucEfficiency.cc.
References BesMucEfficiency(), and fPointer.
Referenced by BesMucSD::BesMucSD().
00021 { 00022 if(!fPointer)fPointer = new BesMucEfficiency(); 00023 return fPointer; 00024 00025 }
void BesMucEfficiency::SetHit | ( | BesMucHit * | hit | ) |
Definition at line 109 of file BesMucEfficiency.cc.
References BesMucHit::GetGap(), BesMucDigit::GetNearestStrip(), BesMucDigit::GetNearestStripNo(), BesMucHit::GetPart(), GetPosLengthWidth(), BesMucHit::GetPosLocal(), m_pHit, m_Pos_Hit, m_Strip, and BesMucDigit::SetHit().
Referenced by BesMucSD::ProcessHits().
00110 { 00111 m_pHit = hit; 00112 G4int part = m_pHit->GetPart(); 00113 G4int gap = m_pHit->GetGap(); 00114 m_Pos_Hit = m_pHit->GetPosLocal().y(); //different from BesMucdigit 00115 if ( (part == 1 && gap%2 != 0) || (part != 1 && gap%2 == 0) ) { 00116 m_Pos_Hit = m_pHit->GetPosLocal().x(); 00117 } 00118 00119 //set m_Strip, m_Pos_Strip, m_Length, m_Width 00120 BesMucDigit aDigit; 00121 aDigit.SetHit(m_pHit); 00122 m_Strip = aDigit.GetNearestStripNo(); 00123 // G4VPhysicalVolume* pvGasChamber = m_pHit->GetVolume(); 00124 GetPosLengthWidth(aDigit.GetNearestStrip()); 00125 00126 // G4cout<<"m_Pos_Hit = "<<m_Pos_Hit<<G4endl; 00127 }
BesMucEfficiency * BesMucEfficiency::fPointer = 0 [static, private] |
Definition at line 58 of file BesMucEfficiency.hh.
Referenced by BesMucEfficiency(), and Instance().
G4double BesMucEfficiency::IsAddEffi [private] |
G4double BesMucEfficiency::m_effi[part_Max][seg_Max][gap_Max][strip_Max][pad_Max] [private] |
G4double BesMucEfficiency::m_Length [private] |
BesMucHit* BesMucEfficiency::m_pHit [private] |
Definition at line 51 of file BesMucEfficiency.hh.
Referenced by GetEfficiency(), GetPosLengthWidth(), and SetHit().
G4double BesMucEfficiency::m_Pos_Hit [private] |
G4double BesMucEfficiency::m_Pos_Strip [private] |
IMucCalibConstSvc* BesMucEfficiency::m_ptrCalibSvc [private] |
Definition at line 61 of file BesMucEfficiency.hh.
Referenced by CheckCalibSvc(), and GetEfficiency().
G4int BesMucEfficiency::m_Strip [private] |
G4double BesMucEfficiency::m_Width [private] |
IMessageSvc* BesMucEfficiency::msgSvc |
Definition at line 48 of file BesMucEfficiency.hh.