#include <MuonSpectrometer.h>
Public Member Functions | |
MuonResolutionCalculator (const char *filename) | |
~MuonResolutionCalculator () | |
double | calculateResolution (const HepLorentzVector &avec) |
void | dump (std::string indent) |
Private Member Functions | |
std::map< int, std::string > | makeSectorMap (DOMNode *boundaries) |
Private Attributes | |
std::vector< ProtoSpectrometer > | m_protoSpectrometers |
std::vector< MuonSpectrometer > | m_muonSpectrometers |
Definition at line 107 of file MuonSpectrometer.h.
Atlfast::MuonResolutionCalculator::MuonResolutionCalculator | ( | const char * | filename | ) |
Definition at line 403 of file MuonSpectrometer.cxx.
00403 { 00404 00405 DOMDocument* dom = parseFileForDocument(filename); 00406 00407 if(dom == 0){ 00408 std::cout<<"Could not parse " <<filename<<std::endl; 00409 } 00410 00411 DOMElement* docElement = dom->getDocumentElement(); 00412 00413 if(docElement == 0){ 00414 std::cout<<"Could not get DOMElement from DOMDocument"<<std::endl; 00415 } 00416 00417 // get the node containing information for interpreting the resolutions 00418 XMLCh* s = XMLString::transcode("interpretation"); 00419 DOMNodeList* binTags = 00420 docElement->getElementsByTagName(s); 00421 XMLString::release(&s); 00422 00423 DOMNode* boundaries = binTags->item(0); 00424 00425 // get the node needed to build a spectrometer 00426 s = XMLString::transcode("ptbinres"); 00427 DOMNodeList* ptbinresTags = 00428 docElement->getElementsByTagName(s); 00429 XMLString::release(&s); 00430 00431 // build the spectrometers 00432 00433 for(XMLSize_t ptr=0; ptr<ptbinresTags->getLength();++ptr){ 00434 00435 ProtoSpectrometer thisPS(boundaries, 00436 ptbinresTags->item(ptr), 00437 ptr==0, 00438 ptr==(ptbinresTags->getLength()-1)); 00439 00440 m_protoSpectrometers.push_back(thisPS); 00441 00442 } 00443 00444 std::map<int,std::string> sectorMap = makeSectorMap(boundaries); 00445 00446 std::vector<ProtoSpectrometer>::iterator psItr = m_protoSpectrometers.begin(); 00447 for (; psItr!=m_protoSpectrometers.end()-1; ++psItr){ 00448 00449 MuonSpectrometer newMS = (*psItr).combine(*(psItr+1)); 00450 newMS.setSectorMap(sectorMap); 00451 m_muonSpectrometers.push_back(newMS); 00452 00453 } 00454 00455 // Free up memory from the ProtoSpectrometers as they're no longer needed 00456 m_protoSpectrometers.clear(); 00457 00458 // Delete the DOMDocument 00459 delete dom; 00460 00461 // Clean up xerces-style. This should deallocate all memory used by Xerces 00462 // but doesn't seem to work. Nice one. 00463 XMLPlatformUtils::Terminate(); 00464 00465 }
Atlfast::MuonResolutionCalculator::~MuonResolutionCalculator | ( | ) | [inline] |
double Atlfast::MuonResolutionCalculator::calculateResolution | ( | const HepLorentzVector & | avec | ) |
Definition at line 484 of file MuonSpectrometer.cxx.
00484 { 00485 00486 // check for appropriate MuonSpectrometer 00487 IsCorrectMuonSpectrometer icms(avec.perp()); 00488 std::vector<MuonSpectrometer>::iterator msitr = find_if(m_muonSpectrometers.begin(), 00489 m_muonSpectrometers.end(), 00490 icms); 00491 if ( msitr == m_muonSpectrometers.end() ){ 00492 // Could not find correct MuonSpectrometer, returning resolution of 1.0 00493 return 1.; 00494 } 00495 00496 return (*msitr).calculateResolution(avec); 00497 }
void Atlfast::MuonResolutionCalculator::dump | ( | std::string | indent | ) |
Definition at line 499 of file MuonSpectrometer.cxx.
00499 { 00500 indent += " "; 00501 std::cout<<indent<<"\nDump for MuonResolutionCalculator:\n"; 00502 std::for_each(m_protoSpectrometers.begin(), 00503 m_protoSpectrometers.end(), 00504 AddToDump(indent)); 00505 std::for_each(m_muonSpectrometers.begin(), 00506 m_muonSpectrometers.end(), 00507 AddToDump(indent)); 00508 00509 }
std::map< int, std::string > Atlfast::MuonResolutionCalculator::makeSectorMap | ( | DOMNode * | boundaries | ) | [private] |
Definition at line 467 of file MuonSpectrometer.cxx.
00467 { 00468 00469 00470 00471 DOMNode* node = getFirstChildTagByName(boundaries, "sectortypes"); 00472 00473 std::vector<DOMNode*> sectorTypeNodes = 00474 getAllChildTagsByName(node, "sectortype"); 00475 00476 AddToMap atm; 00477 std::map<int,std::string> sectorMap = std::for_each(sectorTypeNodes.begin(), 00478 sectorTypeNodes.end(), 00479 atm).getMap(); 00480 return sectorMap; 00481 00482 }
std::vector<ProtoSpectrometer> Atlfast::MuonResolutionCalculator::m_protoSpectrometers [private] |
Definition at line 115 of file MuonSpectrometer.h.
std::vector<MuonSpectrometer> Atlfast::MuonResolutionCalculator::m_muonSpectrometers [private] |
Definition at line 116 of file MuonSpectrometer.h.