#include <BesMdcGeoParameter.hh>
Public Member Functions | |
BesMdcGeoParameter (void) | |
~BesMdcGeoParameter (void) | |
void | InitFromFile (void) |
void | InitFromSvc (void) |
void | Dump (void) |
double | SignalWireR () |
double | FieldWireR () |
int | Signal2Global (int x) |
BesMdcWire | Wire (int) |
BesMdcWire | SignalWire (int, int) |
int | LayerNo (void) |
int | SignalLayerNo (void) |
const BesMdcLayer & | Layer (int) const |
const BesMdcLayer & | SignalLayer (int) const |
int | SegmentNo (void) |
BesMdcMember | Segment (int x) |
Static Public Member Functions | |
static BesMdcGeoParameter * | GetGeo (void) |
Private Attributes | |
double | fSignalWireR |
double | fFieldWireR |
int | fLayerNo |
int | fWireNo |
int | fSignalLayerNo |
int | fSignalLayer [50] |
BesMdcLayer | fLayer [100] |
double | fWirePhi [30000] |
int | fSegmentNo |
BesMdcMember | fMdcSegment [100] |
Static Private Attributes | |
static BesMdcGeoParameter * | fPointer = 0 |
Definition at line 113 of file BesMdcGeoParameter.hh.
BesMdcGeoParameter::BesMdcGeoParameter | ( | void | ) |
Definition at line 78 of file BesMdcGeoParameter.cc.
References fPointer, G4Svc::GetMdcDataInput(), InitFromFile(), and InitFromSvc().
Referenced by GetGeo().
00078 { 00079 ISvcLocator* svcLocator = Gaudi::svcLocator(); 00080 IG4Svc* tmpSvc; 00081 G4Svc* m_G4Svc; 00082 StatusCode sc=svcLocator->service("G4Svc", tmpSvc); 00083 m_G4Svc=dynamic_cast<G4Svc *>(tmpSvc); 00084 if (!sc.isSuccess()) 00085 std::cout<<"BesMdcGeoParameter::Could not open G4 Service"<<std::endl; 00086 if(m_G4Svc->GetMdcDataInput()== 0){ 00087 cout<<"------- get BesMdcGeoParameter from file --------"<<endl; 00088 InitFromFile(); 00089 } 00090 if(m_G4Svc->GetMdcDataInput()== 1) { 00091 cout<<"=======get BesMdcGeoParameter from MdcGeomSvc======="<<endl; 00092 InitFromSvc(); 00093 } 00094 00095 //Dump(); 00096 if(fPointer) 00097 { G4Exception("BesMdcGeoParameter constructed twice."); } 00098 fPointer=this; 00099 }
BesMdcGeoParameter::~BesMdcGeoParameter | ( | void | ) | [inline] |
void BesMdcGeoParameter::Dump | ( | void | ) |
Definition at line 303 of file BesMdcGeoParameter.cc.
References fFieldWireR, BesMdcLayer::FirstWire(), fLayer, fLayerNo, fMdcSegment, fSegmentNo, fSignalLayer, fSignalLayerNo, fSignalWireR, fWireNo, genRecEmupikp::i, ganga-rec::j, Name, BesMdcWire::Phi(), Phi(), pi, rb::R(), BesMdcWire::RotateCell(), and BesMdcLayer::ShiftPhi().
00303 { 00304 //cout<<"------BesMdcGeoParameter info :--------"<<endl; 00305 cout<<" fLayerNo: "<<fLayerNo<<endl; 00306 cout<<" fWireNo: "<<fWireNo<<endl; 00307 cout<<" fSignalLayerNo: "<<fSignalLayerNo<<endl; 00308 cout<<" fSignalWireR: "<<fSignalWireR<<endl; 00309 cout<<" fFieldWireR: "<<fFieldWireR<<endl; 00310 00311 cout<<"fSingalLayer:"<<endl; 00312 for(int i=0; i<fSignalLayerNo; i++){ 00313 cout<<fSignalLayer[i]+1<<' '; } 00314 cout<<endl; 00315 00316 for(int i=0;i<fLayerNo;i++){ 00317 cout<<"Layer["<<i<<"]: " 00318 <<" name:"<<fLayer[i].Name() <<" wireNo:"<<fLayer[i].WireNo() 00319 <<" length: "<<fLayer[i].Length() <<" r: "<<fLayer[i].R(); 00320 if (i<75) cout<<" phi:"<<fLayer[i].Phi()*180/pi; 00321 else cout<<" phi:"<<(fLayer[i].Phi()-fLayer[i].ShiftPhi())*180/pi; 00322 cout<<" firstWire: "<<fLayer[i].FirstWire() 00323 <<" rotateCell: "<<fLayer[i].RotateCell()<<endl; 00324 } 00325 00326 cout<<"fSegmentNo:"<<fSegmentNo<<endl; 00327 for(int j=0;j<fSegmentNo;j++){ 00328 cout<<"length:"<<fMdcSegment[j].Length() 00329 <<" innerR:"<<fMdcSegment[j].InnerR() 00330 <<" outR:"<<fMdcSegment[j].OutR() 00331 <<" z:"<<fMdcSegment[j].Z() 00332 <<" name:"<<fMdcSegment[j].Name()<<endl; 00333 } 00334 00335 }
double BesMdcGeoParameter::FieldWireR | ( | ) | [inline] |
Definition at line 124 of file BesMdcGeoParameter.hh.
References fFieldWireR.
Referenced by BesMdcConstruction::Construct().
00124 {return fFieldWireR;}
BesMdcGeoParameter * BesMdcGeoParameter::GetGeo | ( | void | ) | [static] |
Definition at line 34 of file BesMdcGeoParameter.cc.
References BesMdcGeoParameter(), and fPointer.
Referenced by BesMdcConstruction::BesMdcConstruction(), BesMdcDigitizer::BesMdcDigitizer(), BesMdcSD::BesMdcSD(), and BesRawDataWriter::BesRawDataWriter().
00034 { 00035 if (! fPointer) fPointer = new BesMdcGeoParameter(); 00036 return fPointer; 00037 }
void BesMdcGeoParameter::InitFromFile | ( | void | ) |
Definition at line 148 of file BesMdcGeoParameter.cc.
References fFieldWireR, fLayer, fLayerNo, fMdcSegment, fSegmentNo, fSignalLayer, fSignalLayerNo, fSignalWireR, fWireNo, fWirePhi, ReadBoostRoot::GetBoostRoot(), genRecEmupikp::i, ganga-rec::j, genRecEmupikp::line, pi, BesMdcLayer::SetBeginWireNo(), BesMdcLayer::SetFirstWire(), BesMdcMember::SetInnerR(), BesMdcMember::SetLength(), BesMdcWire::SetLength(), BesMdcMember::SetName(), BesMdcWire::SetName(), BesMdcMember::SetOutR(), BesMdcWire::SetPhi(), BesMdcWire::SetRadius(), BesMdcWire::SetRotateAngle(), BesMdcWire::SetRotateCell(), BesMdcLayer::SetShiftPhi(), BesMdcLayer::SetSumWireNo(), BesMdcLayer::SetWireNo(), BesMdcMember::SetZ(), BesMdcLayer::ShiftPhi(), deljobs::string, and wireNo.
Referenced by BesMdcGeoParameter().
00148 { 00149 int wireNo, firstWire; 00150 double length, phi, r, rotateCell,rotateAngle; 00151 double innerR, outR, z; 00152 string name, line; 00153 00154 G4String geoPath = ReadBoostRoot::GetBoostRoot(); 00155 if(!geoPath){ 00156 G4Exception("BOOST environment not set!"); 00157 } 00158 geoPath += "/dat/Mdc.txt"; 00159 00160 ifstream inFile(geoPath); 00161 if(!inFile.good()){ 00162 cout<<"Error, mdc parameters file not exist"<<endl; 00163 return; 00164 } 00165 00166 getline(inFile, line); 00167 inFile>>fLayerNo>>fWireNo>>fSignalLayerNo>>fSignalWireR>>fFieldWireR; 00168 00169 inFile.seekg(1,ios::cur); 00170 getline(inFile, line); 00171 int i,signalLayer; 00172 for(i=0; i<fSignalLayerNo; i++){ 00173 inFile>>signalLayer; 00174 fSignalLayer[i]=signalLayer-1; 00175 } 00176 00177 inFile.seekg(1,ios::cur); 00178 getline(inFile, line); 00179 getline(inFile, line); 00180 for( i=0; i<fLayerNo; i++){ 00181 inFile>>name>>wireNo>>length>>r>>phi>>firstWire>>rotateCell; 00182 getline(inFile, line); 00183 00184 rotateAngle=2*pi*rotateCell/wireNo; 00185 00186 fLayer[i].SetName(name);fLayer[i].SetRadius(r); 00187 fLayer[i].SetLength(length); fLayer[i].SetRotateCell(rotateCell); 00188 fLayer[i].SetRotateAngle(rotateAngle); fLayer[i].SetWireNo(wireNo); 00189 fLayer[i].SetShiftPhi(twopi/wireNo); fLayer[i].SetFirstWire(firstWire); 00190 00191 phi*=(pi/180); 00192 if(phi<0)phi += fLayer[i].ShiftPhi(); 00193 fLayer[i].SetPhi(phi); 00194 00195 if(i==0){ 00196 fLayer[i].SetSumWireNo(wireNo); fLayer[i].SetBeginWireNo(0); 00197 }else{ 00198 fLayer[i].SetBeginWireNo(fLayer[i-1].SumWireNo()); 00199 fLayer[i].SetSumWireNo(fLayer[i-1].SumWireNo()+wireNo); 00200 } 00201 00202 for(int j=0; j<wireNo; j++){ 00203 fWirePhi[fLayer[i].BeginWireNo()+j]=j*fLayer[i].ShiftPhi()+phi; 00204 } 00205 } 00206 00207 if(fLayer[fLayerNo-1].SumWireNo()!= fWireNo){ 00208 cout<<"Total wire number is not consistant!"<<endl; 00209 } 00210 00211 getline(inFile, line); 00212 inFile>>fSegmentNo; 00213 inFile.seekg(1,ios::cur); 00214 getline(inFile, line); 00215 getline(inFile, line); 00216 00217 for(i=0; i<fSegmentNo; i++){ 00218 inFile>>length>>innerR>>outR>>z>>name; 00219 getline(inFile,line); 00220 00221 fMdcSegment[i].SetLength(length); fMdcSegment[i].SetInnerR(innerR); 00222 fMdcSegment[i].SetOutR(outR); fMdcSegment[i].SetZ(z); 00223 fMdcSegment[i].SetName(name); 00224 } 00225 00226 }
void BesMdcGeoParameter::InitFromSvc | ( | void | ) |
Definition at line 229 of file BesMdcGeoParameter.cc.
References MdcGeomSvc::End(), fFieldWireR, MdcGeoGeneral::First(), fLayer, fLayerNo, fMdcSegment, fSegmentNo, fSignalLayer, fSignalLayerNo, fSignalWireR, fWireNo, fWirePhi, MdcGeoMisc::FWireR(), MdcGeomSvc::GeneralLayer(), MdcGeomSvc::getSegmentNo(), genRecEmupikp::i, MdcGeoEnd::InnerR(), ganga-rec::j, MdcGeomSvc::Layer(), MdcGeoGeneral::LayerName(), MdcGeoMisc::LayerNo(), MdcGeoEnd::Length(), MdcGeoGeneral::Length(), MdcGeomSvc::Misc(), MdcGeoEnd::Name(), MdcGeoGeneral::NCell(), MdcGeoGeneral::nomPhi(), MdcGeoGeneral::nomShift(), MdcGeoEnd::OutR(), pi, MdcGeoGeneral::Radius(), BesMdcLayer::SetBeginWireNo(), BesMdcLayer::SetFirstWire(), BesMdcMember::SetInnerR(), BesMdcMember::SetLength(), BesMdcWire::SetLength(), BesMdcMember::SetName(), BesMdcWire::SetName(), BesMdcMember::SetOutR(), BesMdcWire::SetPhi(), BesMdcWire::SetRadius(), BesMdcWire::SetRotateAngle(), BesMdcWire::SetRotateCell(), BesMdcLayer::SetShiftPhi(), BesMdcLayer::SetSumWireNo(), BesMdcLayer::SetWireNo(), BesMdcMember::SetZ(), MdcGeoLayer::SLayer(), MdcGeoMisc::SLayerNo(), deljobs::string, MdcGeoMisc::SWireR(), wireNo, MdcGeoMisc::WireNo(), and MdcGeoEnd::Z().
Referenced by BesMdcGeoParameter().
00229 { 00230 ISvcLocator* svcLocator = Gaudi::svcLocator(); 00231 IMdcGeomSvc* ISvc; 00232 MdcGeomSvc* mdcGeomSvc; 00233 StatusCode sc=svcLocator->service("MdcGeomSvc", ISvc); 00234 mdcGeomSvc=dynamic_cast<MdcGeomSvc *>(ISvc); 00235 if (!sc.isSuccess()) 00236 std::cout<<"BesMdcGeoParameter::Could not open Geometry Service"<<std::endl; 00237 00238 fLayerNo= mdcGeomSvc->Misc()->LayerNo(); 00239 fWireNo=mdcGeomSvc->Misc()->WireNo(); 00240 fSignalLayerNo=mdcGeomSvc->Misc()->SLayerNo(); 00241 fSignalWireR=mdcGeomSvc->Misc()->SWireR(); 00242 fFieldWireR=mdcGeomSvc->Misc()->FWireR(); 00243 00244 int i,signalLayer; 00245 for(i=0; i<fSignalLayerNo; i++){ 00246 signalLayer=mdcGeomSvc->Layer(i)->SLayer(); 00247 fSignalLayer[i]=signalLayer-1; 00248 } 00249 00250 string name; 00251 int wireNo,firstWire; 00252 double length, r, phi,rotateCell,rotateAngle; 00253 for(i=0;i<fLayerNo;i++){ 00254 name=mdcGeomSvc->GeneralLayer(i)->LayerName(); 00255 wireNo=mdcGeomSvc->GeneralLayer(i)->NCell()*2; 00256 length= mdcGeomSvc->GeneralLayer(i)->Length(); 00257 r= mdcGeomSvc->GeneralLayer(i)->Radius(); 00258 phi=mdcGeomSvc->GeneralLayer(i)->nomPhi(); 00259 firstWire=mdcGeomSvc->GeneralLayer(i)->First(); 00260 rotateCell= mdcGeomSvc->GeneralLayer(i)->nomShift(); 00261 00262 rotateAngle=2*pi*rotateCell/wireNo; 00263 00264 fLayer[i].SetName(name);fLayer[i].SetRadius(r); 00265 fLayer[i].SetLength(length); fLayer[i].SetRotateCell(rotateCell); 00266 fLayer[i].SetRotateAngle(rotateAngle); fLayer[i].SetWireNo(wireNo); 00267 fLayer[i].SetShiftPhi(twopi/wireNo); fLayer[i].SetFirstWire(firstWire); 00268 fLayer[i].SetPhi(phi); 00269 00270 if(i==0){ 00271 fLayer[i].SetSumWireNo(wireNo); fLayer[i].SetBeginWireNo(0); 00272 }else{ 00273 fLayer[i].SetBeginWireNo(fLayer[i-1].SumWireNo()); 00274 fLayer[i].SetSumWireNo(fLayer[i-1].SumWireNo()+wireNo); 00275 } 00276 00277 for(int j=0; j<wireNo; j++){ 00278 fWirePhi[fLayer[i].BeginWireNo()+j]=j*fLayer[i].ShiftPhi()+phi; 00279 } 00280 } 00281 00282 if(fLayer[fLayerNo-1].SumWireNo()!= fWireNo){ 00283 cout<<"Total wire number is not consistant!"<<endl; 00284 } 00285 00286 00287 double innerR,outR,z; 00288 fSegmentNo=mdcGeomSvc->getSegmentNo(); 00289 for(i=0;i<fSegmentNo;i++){ 00290 length=mdcGeomSvc->End(i)->Length(); 00291 innerR=mdcGeomSvc->End(i)->InnerR(); 00292 outR=mdcGeomSvc->End(i)->OutR(); 00293 z=mdcGeomSvc->End(i)->Z(); 00294 name=mdcGeomSvc->End(i)->Name(); 00295 00296 fMdcSegment[i].SetLength(length); fMdcSegment[i].SetInnerR(innerR); 00297 fMdcSegment[i].SetOutR(outR); fMdcSegment[i].SetZ(z); 00298 fMdcSegment[i].SetName(name); 00299 } 00300 00301 }
const BesMdcLayer & BesMdcGeoParameter::Layer | ( | int | ) | const |
Definition at line 133 of file BesMdcGeoParameter.cc.
References fLayer.
Referenced by BesMdcConstruction::Construct().
00133 { 00134 if(layerNumber<0 || layerNumber>89){ 00135 cout<<"Error: Wrong layerNo: "<<layerNumber<<endl; 00136 } 00137 return fLayer[layerNumber]; 00138 }
int BesMdcGeoParameter::LayerNo | ( | void | ) | [inline] |
BesMdcMember BesMdcGeoParameter::Segment | ( | int | x | ) | [inline] |
Definition at line 136 of file BesMdcGeoParameter.hh.
References fMdcSegment.
Referenced by BesMdcConstruction::Construct().
00136 {return fMdcSegment[x];}
int BesMdcGeoParameter::SegmentNo | ( | void | ) | [inline] |
Definition at line 135 of file BesMdcGeoParameter.hh.
References fSegmentNo.
Referenced by BesMdcConstruction::Construct().
00135 {return fSegmentNo;}
int BesMdcGeoParameter::Signal2Global | ( | int | x | ) | [inline] |
Definition at line 125 of file BesMdcGeoParameter.hh.
References fSignalLayer.
Referenced by BesMdcConstruction::Construct().
00125 {return fSignalLayer[x];}
const BesMdcLayer & BesMdcGeoParameter::SignalLayer | ( | int | ) | const |
Definition at line 140 of file BesMdcGeoParameter.cc.
References fLayer, and fSignalLayer.
Referenced by BesMdcDigitizer::AddNoise(), and BesMdcDigitizer::AddNoise2().
00140 { 00141 if(layerNumber<0 || layerNumber>42){ 00142 cout<<"Error: Wrong SignallayerNo: "<<layerNumber<<endl; 00143 } 00144 return fLayer[fSignalLayer[layerNumber]]; 00145 }
int BesMdcGeoParameter::SignalLayerNo | ( | void | ) | [inline] |
Definition at line 131 of file BesMdcGeoParameter.hh.
References fSignalLayerNo.
Referenced by BesMdcDigitizer::AddNoise(), BesMdcDigitizer::AddNoise2(), and BesMdcDigitizer::Digitize().
00131 {return fSignalLayerNo;}
BesMdcWire BesMdcGeoParameter::SignalWire | ( | int | , | |
int | ||||
) |
Definition at line 118 of file BesMdcGeoParameter.cc.
References BesMdcLayer::FirstWire(), fLayer, fSignalLayer, fWirePhi, genRecEmupikp::i, BesMdcWire::Phi(), rb::R(), BesMdcLayer::ShiftPhi(), and subSeperate::temp.
Referenced by BesMdcSD::ProcessHits().
00119 { 00120 00121 int i=fSignalLayer[signalLayerNo]; 00122 int wireNoInLayer=2*wireNo+1-fLayer[i].FirstWire();//FirstWire():0,field;1,signal 00123 double phi=fLayer[i].Phi(); 00124 double shiftPhi=fLayer[i].ShiftPhi(); 00125 double wirePhi; 00126 wirePhi= wireNoInLayer*shiftPhi+phi; 00127 00128 BesMdcWire temp(fLayer[i].Length(), fWirePhi[fLayer[i].BeginWireNo()+wireNoInLayer], fLayer[i].R(),fLayer[i].RotateAngle()); 00129 return temp; 00130 }
double BesMdcGeoParameter::SignalWireR | ( | ) | [inline] |
Definition at line 123 of file BesMdcGeoParameter.hh.
References fSignalWireR.
Referenced by BesMdcConstruction::Construct().
00123 {return fSignalWireR;}
BesMdcWire BesMdcGeoParameter::Wire | ( | int | ) |
Definition at line 102 of file BesMdcGeoParameter.cc.
References fLayer, fLayerNo, fWirePhi, genRecEmupikp::i, rb::R(), and subSeperate::temp.
00102 { 00103 00104 int i; 00105 for(i=0; i<fLayerNo; i++){ 00106 if(fLayer[i].BeginWireNo()<=wireNo && wireNo<fLayer[i].SumWireNo()){ 00107 00108 break; 00109 } 00110 } 00111 00112 BesMdcWire temp(fLayer[i].Length(), fWirePhi[wireNo], fLayer[i].R(), fLayer[i].RotateAngle()); 00113 return temp; 00114 }
double BesMdcGeoParameter::fFieldWireR [private] |
Definition at line 141 of file BesMdcGeoParameter.hh.
Referenced by Dump(), FieldWireR(), InitFromFile(), and InitFromSvc().
BesMdcLayer BesMdcGeoParameter::fLayer[100] [private] |
Definition at line 146 of file BesMdcGeoParameter.hh.
Referenced by Dump(), InitFromFile(), InitFromSvc(), Layer(), SignalLayer(), SignalWire(), and Wire().
int BesMdcGeoParameter::fLayerNo [private] |
Definition at line 142 of file BesMdcGeoParameter.hh.
Referenced by Dump(), InitFromFile(), InitFromSvc(), LayerNo(), and Wire().
BesMdcMember BesMdcGeoParameter::fMdcSegment[100] [private] |
Definition at line 151 of file BesMdcGeoParameter.hh.
Referenced by Dump(), InitFromFile(), InitFromSvc(), and Segment().
BesMdcGeoParameter * BesMdcGeoParameter::fPointer = 0 [static, private] |
Definition at line 153 of file BesMdcGeoParameter.hh.
Referenced by BesMdcGeoParameter(), and GetGeo().
int BesMdcGeoParameter::fSegmentNo [private] |
Definition at line 150 of file BesMdcGeoParameter.hh.
Referenced by Dump(), InitFromFile(), InitFromSvc(), and SegmentNo().
int BesMdcGeoParameter::fSignalLayer[50] [private] |
Definition at line 144 of file BesMdcGeoParameter.hh.
Referenced by Dump(), InitFromFile(), InitFromSvc(), Signal2Global(), SignalLayer(), and SignalWire().
int BesMdcGeoParameter::fSignalLayerNo [private] |
Definition at line 143 of file BesMdcGeoParameter.hh.
Referenced by Dump(), InitFromFile(), InitFromSvc(), and SignalLayerNo().
double BesMdcGeoParameter::fSignalWireR [private] |
Definition at line 141 of file BesMdcGeoParameter.hh.
Referenced by Dump(), InitFromFile(), InitFromSvc(), and SignalWireR().
int BesMdcGeoParameter::fWireNo [private] |
Definition at line 142 of file BesMdcGeoParameter.hh.
Referenced by Dump(), InitFromFile(), and InitFromSvc().
double BesMdcGeoParameter::fWirePhi[30000] [private] |
Definition at line 148 of file BesMdcGeoParameter.hh.
Referenced by InitFromFile(), InitFromSvc(), SignalWire(), and Wire().