BesMucEfficiency Class Reference

#include <BesMucEfficiency.hh>

List of all members.

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 BesMucEfficiencyInstance (void)

Public Attributes

IMessageSvc * msgSvc

Private Attributes

BesMucHitm_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
IMucCalibConstSvcm_ptrCalibSvc

Static Private Attributes

static BesMucEfficiencyfPointer = 0


Detailed Description

Definition at line 31 of file BesMucEfficiency.hh.


Constructor & Destructor Documentation

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 (  ) 

Definition at line 35 of file BesMucEfficiency.cc.

00036 {
00037 }


Member Function Documentation

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 }


Member Data Documentation

BesMucEfficiency * BesMucEfficiency::fPointer = 0 [static, private]

Definition at line 58 of file BesMucEfficiency.hh.

Referenced by BesMucEfficiency(), and Instance().

G4double BesMucEfficiency::IsAddEffi [private]

Definition at line 59 of file BesMucEfficiency.hh.

Referenced by Initialize().

G4double BesMucEfficiency::m_effi[part_Max][seg_Max][gap_Max][strip_Max][pad_Max] [private]

Definition at line 57 of file BesMucEfficiency.hh.

Referenced by Initialize().

G4double BesMucEfficiency::m_Length [private]

Definition at line 54 of file BesMucEfficiency.hh.

Referenced by GetPad(), and GetPosLengthWidth().

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]

Definition at line 52 of file BesMucEfficiency.hh.

Referenced by GetPad(), and SetHit().

G4double BesMucEfficiency::m_Pos_Strip [private]

Definition at line 53 of file BesMucEfficiency.hh.

Referenced by GetPad(), and GetPosLengthWidth().

IMucCalibConstSvc* BesMucEfficiency::m_ptrCalibSvc [private]

Definition at line 61 of file BesMucEfficiency.hh.

Referenced by CheckCalibSvc(), and GetEfficiency().

G4int BesMucEfficiency::m_Strip [private]

Definition at line 56 of file BesMucEfficiency.hh.

Referenced by GetEfficiency(), and SetHit().

G4double BesMucEfficiency::m_Width [private]

Definition at line 55 of file BesMucEfficiency.hh.

Referenced by GetPad(), and GetPosLengthWidth().

IMessageSvc* BesMucEfficiency::msgSvc

Definition at line 48 of file BesMucEfficiency.hh.


Generated on Tue Nov 29 23:17:33 2016 for BOSS_7.0.2 by  doxygen 1.4.7