diff --git a/DataQuality/DataQualityTools/src/DQTGlobalWZFinderTool.cxx b/DataQuality/DataQualityTools/src/DQTGlobalWZFinderTool.cxx index 740e1dee82af254ebf30d80d607b2287553b6164..e0cd0a9481a5afd9b3e7ebe829ff855a9a7d4002 100644 --- a/DataQuality/DataQualityTools/src/DQTGlobalWZFinderTool.cxx +++ b/DataQuality/DataQualityTools/src/DQTGlobalWZFinderTool.cxx @@ -431,6 +431,7 @@ StatusCode DQTGlobalWZFinderTool::fillHistograms() std::vector<const xAOD::Electron*> goodelectrons; std::vector<const xAOD::Muon*> goodmuonsZ; + std::vector<const xAOD::Muon*> goodmuonsTP; std::vector<CLHEP::HepLorentzVector> goodmuonsJPsi; std::vector<Int_t> goodmuonJPsicharge; @@ -526,47 +527,50 @@ StatusCode DQTGlobalWZFinderTool::fillHistograms() } - ATH_MSG_DEBUG("Muon accept: " << m_muonSelectionTool->accept(**muonItr)); - ATH_MSG_DEBUG("Muon pt: " << (*muonItr)->pt() << " " << m_muonPtCut*GeV); - ATH_MSG_DEBUG("Muon iso: " << m_isolationSelectionTool->accept(**muonItr)); - ATH_MSG_DEBUG("Muon d0sig: " << d0sig); - ATH_MSG_DEBUG("Muon Good vtx: " << pVtx); - if (pVtx) - ATH_MSG_DEBUG("Muon z0sinth: " << fabs((muTrk->z0()+muTrk->vz()-pVtx->z())*std::sin(muTrk->theta())) << " " << 0.5*mm); - ATH_MSG_DEBUG("Muon isBad: " << isBad); + ATH_MSG_DEBUG("Muon accept: " << m_muonSelectionTool->accept(**muonItr)); + ATH_MSG_DEBUG("Muon pt: " << (*muonItr)->pt() << " " << m_muonPtCut*GeV); + ATH_MSG_DEBUG("Muon iso: " << m_isolationSelectionTool->accept(**muonItr)); + ATH_MSG_DEBUG("Muon d0sig: " << d0sig); + ATH_MSG_DEBUG("Muon Good vtx: " << pVtx); + if (pVtx) ATH_MSG_DEBUG("Muon z0sinth: " << fabs((muTrk->z0()+muTrk->vz()-pVtx->z())*std::sin(muTrk->theta())) << " " << 0.5*mm); + ATH_MSG_DEBUG("Muon isBad: " << isBad); - if ( m_muonSelectionTool->accept(**muonItr) && - ((*muonItr)->pt() > m_muonPtCut*GeV) && - m_isolationSelectionTool->accept(**muonItr) && - fabs(d0sig) < 3 && - pVtx && - fabs((muTrk->z0()+muTrk->vz()-pVtx->z())*std::sin(muTrk->theta())) < 0.5*mm && - !isBad - ) { + if (m_muonSelectionTool->accept(**muonItr) && + ((*muonItr)->pt() > 0.8*m_muonPtCut*GeV) && + m_isolationSelectionTool->accept(**muonItr) && + fabs(d0sig) < 3 && + pVtx && + fabs((muTrk->z0()+muTrk->vz()-pVtx->z())*std::sin(muTrk->theta())) < 0.5*mm && + !isBad) + { + goodmuonsTP.push_back(*muonItr); + if (((*muonItr)->pt() > m_muonPtCut*GeV)) + { MuZ_N++; - - m_muon_Pt->Fill((*muonItr)->pt()/GeV, m_evtWeight); - m_muon_Eta->Fill((*muonItr)->eta(), m_evtWeight); + m_muon_Pt->Fill((*muonItr)->pt()/GeV, m_evtWeight); + m_muon_Eta->Fill((*muonItr)->eta(), m_evtWeight); goodmuonsZ.push_back(*muonItr); - } - if ( ((*muonItr)->pt() > minptCutJPsi) ) { - MuJPsi_N++; - - Float_t px = (*muonItr)->p4().Px(); - Float_t py = (*muonItr)->p4().Py(); - Float_t pz = (*muonItr)->p4().Pz(); - Float_t e = (*muonItr)->p4().E(); - Int_t charge = 0;//(Int_t)((*muonItr)->charge()); // TODO update when xAODMuon-00-06-00 - - CLHEP::HepLorentzVector thislepton; - thislepton.setPx(px); - thislepton.setPy(py); - thislepton.setPz(pz); - thislepton.setE(e); - goodmuonsJPsi.push_back(thislepton); - goodmuonJPsicharge.push_back(charge); - } + } + } + + + if (((*muonItr)->pt() > minptCutJPsi)){ + MuJPsi_N++; + Float_t px = (*muonItr)->p4().Px(); + Float_t py = (*muonItr)->p4().Py(); + Float_t pz = (*muonItr)->p4().Pz(); + Float_t e = (*muonItr)->p4().E(); + Int_t charge = 0;//(Int_t)((*muonItr)->charge()); // TODO update when xAODMuon-00-06-00 + + CLHEP::HepLorentzVector thislepton; + thislepton.setPx(px); + thislepton.setPy(py); + thislepton.setPz(pz); + thislepton.setE(e); + goodmuonsJPsi.push_back(thislepton); + goodmuonJPsicharge.push_back(charge); + } } if (thisEventInfo->eventType(xAOD::EventInfo::IS_SIMULATION)) { @@ -582,16 +586,16 @@ StatusCode DQTGlobalWZFinderTool::fillHistograms() for (UInt_t iEle = 0; iEle < allElectrons.size(); iEle++) { Float_t pt = allElectrons[iEle]->pt(); ATH_MSG_DEBUG("Ele pt " << pt); - if (! leadingAllEle || pt > leadingAllEle->pt()) { + if (!leadingAllEle || pt > leadingAllEle->pt()){ subleadingAllEle = leadingAllEle; leadingAllEle = allElectrons[iEle]; } - else if (! subleadingAllEle || pt > subleadingAllEle->pt()) { + else if (!subleadingAllEle || pt > subleadingAllEle->pt()){ subleadingAllEle = allElectrons[iEle]; } } - doMuonLooseTP(goodmuonsZ, pVtx); + doMuonLooseTP(goodmuonsTP, pVtx); doMuonInDetTP(goodmuonsZ, pVtx); doEleTP(leadingAllEle, subleadingAllEle, pVtx, thisEventInfo, isBad); doEleContainerTP(allElectrons, goodelectrons); @@ -1240,77 +1244,78 @@ void DQTGlobalWZFinderTool::doMuonTruthEff(std::vector<const xAOD::Muon*>& goodm } } -void DQTGlobalWZFinderTool::doMuonLooseTP(std::vector<const xAOD::Muon*>& goodmuonsZ, const xAOD::Vertex* pVtx) { +void DQTGlobalWZFinderTool::doMuonLooseTP(std::vector<const xAOD::Muon*>& goodmuonsTP, const xAOD::Vertex* pVtx) { const xAOD::TrackParticleContainer* idTracks(0); evtStore()->retrieve(idTracks, "InDetTrackParticles"); if (!idTracks) { ATH_MSG_FATAL("Unable to retrieve ID tracks to do muon T&P"); return; } - for (const auto& tagmu : goodmuonsZ) { + for (const auto& tagmu : goodmuonsTP) { // only consider trigger-matched tags to avoid bias on probes bool matched = false; for (const auto chain: m_Z_mm_trigger) { if (m_muTrigMatchTool->match(tagmu, chain) || ! m_doTrigger) { - matched=true; - break; + matched=true; + break; } } + if (!matched) continue; auto tagmup4(tagmu->p4()); for (const auto& trk : *idTracks) { - if (trk->pt() < m_muonPtCut*GeV || fabs(trk->eta()) > m_muonMaxEta) { - continue; - } - if (fabs((trk->z0()+trk->vz()-pVtx->z())*std::sin(trk->theta())) > 2*mm) { - continue; - } + if (trk->pt() < m_muonPtCut*GeV || fabs(trk->eta()) > m_muonMaxEta) continue; + if (fabs((trk->z0()+trk->vz()-pVtx->z())*std::sin(trk->theta())) > 2*mm) continue; + auto trkp4(trk->p4()); Float_t mass = (tagmup4+trkp4).M(); - if (mass > m_zCutLow*GeV && mass < m_zCutHigh*GeV) { - bool matched = false; - for (const auto& mu2 : goodmuonsZ) { - if (tagmu == mu2) continue; - auto idlink = mu2->inDetTrackParticleLink(); - if (*(idlink.cptr()) == trk) { - //if (mu2->author() != 1) { ATH_MSG_WARNING("MATCH WOOO, author " << mu2->author()); }; - ATH_MSG_DEBUG("MATCH WOOO, authors " << mu2->allAuthors()); - if (trk->charge() != tagmu->charge()) { - m_muloosetp_match_os->Fill(mass); + if (mass < m_zCutLow*GeV || mass > m_zCutHigh*GeV) continue; + + bool matched = false; + for (const auto& mu2 : goodmuonsTP) { + if (tagmu == mu2) continue; + auto idlink = mu2->inDetTrackParticleLink(); + if (*(idlink.cptr()) == trk) { + //if (mu2->author() != 1) { ATH_MSG_WARNING("MATCH WOOO, author " << mu2->author()); }; + ATH_MSG_DEBUG("MATCH WOOO, authors " << mu2->allAuthors()); + (trk->charge() != tagmu->charge()) ? m_muloosetp_match_os->Fill(mass) : m_muloosetp_match_ss->Fill(mass); + matched = true; + break; } else { - m_muloosetp_match_ss->Fill(mass); - } - matched = true; - break; - } else { ATH_MSG_DEBUG("MUON NO MATCH, author " << mu2->author()); - ATH_MSG_DEBUG("MUON NO MATCH, pt " << mu2->pt()/GeV << " " << trk->pt()/GeV << " eta " << mu2->eta() << " " << trk->eta()); -} - } - if (!matched) { - ATH_MSG_DEBUG("NO MATCH BOOO"); - ATH_MSG_DEBUG("idtrk pt " << trk->pt()/GeV); - if (trk->charge() != tagmu->charge()) { - m_muloosetp_nomatch_os->Fill(mass); - } else { - m_muloosetp_nomatch_ss->Fill(mass); + ATH_MSG_DEBUG("MUON NO MATCH, author " << mu2->author()); + ATH_MSG_DEBUG("MUON NO MATCH, pt " << mu2->pt()/GeV << " " << trk->pt()/GeV << " eta " << mu2->eta() << " " << trk->eta()); + } } - } - } + + if (!matched) { + ATH_MSG_DEBUG("NO MATCH BOOO"); + ATH_MSG_DEBUG("idtrk pt " << trk->pt()/GeV); + (trk->charge() != tagmu->charge()) ? m_muloosetp_nomatch_os->Fill(mass) : m_muloosetp_nomatch_ss->Fill(mass); + } } } } - - void DQTGlobalWZFinderTool::doMuonInDetTP(std::vector<const xAOD::Muon*>& goodmuonsZ, const xAOD::Vertex* pVtx) { const xAOD::EventInfo* thisEventInfo; StatusCode sc = evtStore()->retrieve(thisEventInfo); - const xAOD::TrackParticleContainer* msTracks(0); evtStore()->retrieve(msTracks, "ExtrapolatedMuonTrackParticles"); + + const xAOD::TrackParticleContainer* msTracks(0); + evtStore()->retrieve(msTracks, "ExtrapolatedMuonTrackParticles"); + + const xAOD::TrackParticleContainer* idTracks(0); + evtStore()->retrieve(idTracks, "InDetTrackParticles"); + + if (!idTracks) { + ATH_MSG_FATAL("Unable to retrieve ID tracks to do muon T&P"); + return; + } if (!msTracks) { ATH_MSG_FATAL("Unable to retrieve MS tracks to do muon T&P"); return; } - + + for (const auto& tagmu : goodmuonsZ) { bool matched = false; for (const auto chain: m_Z_mm_trigger) { @@ -1319,28 +1324,41 @@ void DQTGlobalWZFinderTool::doMuonInDetTP(std::vector<const xAOD::Muon*>& goodmu break; } } - if (!matched) continue; auto tagmup4(tagmu->p4()); + // For Every ID track.... for (const auto& trk : *msTracks) { - if (trk->pt() < m_muonPtCut*GeV || fabs(trk->eta()) > m_muonMaxEta) continue; - + if (trk->pt() < m_muonPtCut*GeV || fabs(trk->eta()) > m_muonMaxEta) + continue; + if (fabs((trk->z0()+trk->vz()-pVtx->z())*std::sin(trk->theta())) > 2*mm) + continue; + auto trkp4(trk->p4()); Float_t mass = (tagmup4+trkp4).M(); bool matched = false; - + if (mass < m_zCutLow*GeV || mass > m_zCutHigh*GeV) continue; - for (const auto& mu2 : goodmuonsZ) { - auto mslink = mu2->extrapolatedMuonSpectrometerTrackParticleLink(); - if (*(mslink.cptr()) == trk) { - (trk->charge() != tagmu->charge()) ? static_cast<void>(m_mu_InDet_tp_match_os->Fill(mass)) : static_cast<void>(m_mu_InDet_tp_match_ss->Fill(mass)); - matched = true; - break; - } - } + + //for all ms tracks + for (const auto& mu2 : *idTracks) { + auto idtrkp4(mu2->p4()); + auto mstrkp4(trk->p4()); + + Float_t dR = idtrkp4.DeltaR(mstrkp4); + Float_t dPT = mstrkp4.Pt() - idtrkp4.Pt(); + + if (fabs(dPT) < 10000 && dR < 0.05) + matched = true; + + if (!matched) + continue; - if (!matched) - (trk->charge() != tagmu->charge()) ? static_cast<void>(m_mu_InDet_tp_nomatch_os->Fill(mass)) : static_cast<void>(m_mu_InDet_tp_nomatch_ss->Fill(mass)); + (trk->charge() != tagmu->charge()) ? static_cast<void>(m_mu_InDet_tp_match_os->Fill(mass)) : static_cast<void>(m_mu_InDet_tp_match_ss->Fill(mass)); + return; // once a match is found no need to continue + } + + // should only reach this point if a match was not made + (trk->charge() != tagmu->charge()) ? static_cast<void>(m_mu_InDet_tp_nomatch_os->Fill(mass)) : static_cast<void>(m_mu_InDet_tp_nomatch_ss->Fill(mass)); } } @@ -1348,8 +1366,6 @@ void DQTGlobalWZFinderTool::doMuonInDetTP(std::vector<const xAOD::Muon*>& goodmu - - //---------------------------------------------------------------------------------- StatusCode DQTGlobalWZFinderTool::checkHists(bool /* fromFinalize */) //---------------------------------------------------------------------------------- diff --git a/DataQuality/DataQualityUtils/src/HanOutputFile.cxx b/DataQuality/DataQualityUtils/src/HanOutputFile.cxx index bb631d39ade94f1df266ab698b8b9fdb7e95024e..6ebc31a951b3416cfee4c90c712e8058a93a5f84 100644 --- a/DataQuality/DataQualityUtils/src/HanOutputFile.cxx +++ b/DataQuality/DataQualityUtils/src/HanOutputFile.cxx @@ -852,7 +852,7 @@ void getImageBuffer(TImage* img, TCanvas* myC, char** x, int* y){ bool HanOutputFile::saveHistogramToFile( std::string nameHis, std::string location, TDirectory* groupDir, bool drawRefs,std::string run_min_LB, std::string pathName,int cnvsType){ std::pair<std::string,std::string> pngAndJson = getHistogram(nameHis,groupDir,drawRefs,run_min_LB,pathName,cnvsType); //std::string tosave = getHistogramPNG(nameHis, groupDir, drawRefs, run_min_LB, pathName); - if (pngAndJson.first== "") { + if (pngAndJson.first== ""&&pngAndJson.second=="") { return false; } std::string namePNG = nameHis; @@ -874,12 +874,12 @@ bool HanOutputFile::saveHistogramToFile( std::string nameHis, std::string locati std::string HanOutputFile:: getHistogramPNG( std::string nameHis, TDirectory* groupDir, bool drawRefs,std::string run_min_LB, std::string pathName){ - int cnvsType = 0; + int cnvsType = 1; return getHistogram(nameHis, groupDir,drawRefs,run_min_LB,pathName,cnvsType).first; } std::pair<std::string,std::string> HanOutputFile:: getHistogramJSON( std::string nameHis, TDirectory* groupDir, bool drawRefs,std::string run_min_LB, std::string pathName){ - int cnvsType = 1; + int cnvsType = 2; return getHistogram(nameHis, groupDir,drawRefs,run_min_LB,pathName,cnvsType); } diff --git a/InnerDetector/InDetDigitization/PixelRadDamDigitization/src/SensorSimPlanarTool.cxx b/InnerDetector/InDetDigitization/PixelRadDamDigitization/src/SensorSimPlanarTool.cxx index c50b4379e5fa9c2bbdab25c9ed641c5bca6b30d0..6d88a5e06d46a4a267d47e8afe63cd2c253f24bc 100644 --- a/InnerDetector/InDetDigitization/PixelRadDamDigitization/src/SensorSimPlanarTool.cxx +++ b/InnerDetector/InDetDigitization/PixelRadDamDigitization/src/SensorSimPlanarTool.cxx @@ -124,7 +124,7 @@ StatusCode SensorSimPlanarTool::initialize() { else if(m_fluence==1){ ATH_MSG_INFO("Use benchmark point 1!"); mapsPath_list.push_back( PathResolverFindCalibFile("PixelDigitization/maps_IBL_PL_80V_fl0em10.root") ); //IBL PL - Barrel - mapsPath_list.push_back( PathResolverFindCalibFile("PixelDigitization/maps_PIX_150V_fl7e13.root") ); //B-Layer - Barrel + mapsPath_list.push_back( PathResolverFindCalibFile("PixelDigitization/maps_PIX_250V_fl7e13.root") ); //B-Layer - Barrel mapsPath_list.push_back( PathResolverFindCalibFile("PixelDigitization/maps_PIX_150V_fl3e13.root") ); //Layer-1 - Barrel mapsPath_list.push_back( PathResolverFindCalibFile("PixelDigitization/maps_PIX_150V_fl2e13.root") ); //Layer-2 - Barrel @@ -134,7 +134,7 @@ StatusCode SensorSimPlanarTool::initialize() { m_fluence_layers.push_back(2e13); m_voltage_layers.push_back(80); - m_voltage_layers.push_back(150); + m_voltage_layers.push_back(250); m_voltage_layers.push_back(150); m_voltage_layers.push_back(150); } @@ -142,8 +142,8 @@ StatusCode SensorSimPlanarTool::initialize() { ATH_MSG_INFO("Use benchmark point 2!"); mapsPath_list.push_back( PathResolverFindCalibFile("PixelDigitization/maps_IBL_PL_80V_fl1e14.root") ); - mapsPath_list.push_back( PathResolverFindCalibFile("PixelDigitization/maps_PIX_150V_fl1.2e14.root") ); - mapsPath_list.push_back( PathResolverFindCalibFile("PixelDigitization/maps_PIX_150V_fl5e13.root") ); + mapsPath_list.push_back( PathResolverFindCalibFile("PixelDigitization/maps_PIX_350V_fl1_2e14.root") ); + mapsPath_list.push_back( PathResolverFindCalibFile("PixelDigitization/maps_PIX_200V_fl0_5e14.root") ); mapsPath_list.push_back( PathResolverFindCalibFile("PixelDigitization/maps_PIX_150V_fl3e13.root") ); m_fluence_layers.push_back(1e14); @@ -152,14 +152,14 @@ StatusCode SensorSimPlanarTool::initialize() { m_fluence_layers.push_back(3e13); m_voltage_layers.push_back(80); - m_voltage_layers.push_back(150); - m_voltage_layers.push_back(150); + m_voltage_layers.push_back(350); + m_voltage_layers.push_back(200); m_voltage_layers.push_back(150); }else if(m_fluence==3){ ATH_MSG_INFO("Use benchmark point 3!"); mapsPath_list.push_back( PathResolverFindCalibFile("PixelDigitization/maps_IBL_PL_80V_fl2e14.root") ); - mapsPath_list.push_back( PathResolverFindCalibFile("PixelDigitization/maps_PIX_150V_fl1.7e14.root") ); - mapsPath_list.push_back( PathResolverFindCalibFile("PixelDigitization/maps_PIX_150V_fl7e13.root") ); + mapsPath_list.push_back( PathResolverFindCalibFile("PixelDigitization/maps_PIX_350V_fl1_7e14.root") ); + mapsPath_list.push_back( PathResolverFindCalibFile("PixelDigitization/maps_PIX_200V_fl0_7e14.root") ); mapsPath_list.push_back( PathResolverFindCalibFile("PixelDigitization/maps_PIX_150V_fl4e13.root") ); m_fluence_layers.push_back(2e14); @@ -168,15 +168,15 @@ StatusCode SensorSimPlanarTool::initialize() { m_fluence_layers.push_back(4e13); m_voltage_layers.push_back(80); - m_voltage_layers.push_back(150); - m_voltage_layers.push_back(150); + m_voltage_layers.push_back(350); + m_voltage_layers.push_back(200); m_voltage_layers.push_back(150); }else if(m_fluence==4){ ATH_MSG_INFO("Use benchmark point 4!"); mapsPath_list.push_back( PathResolverFindCalibFile("PixelDigitization/maps_IBL_PL_150V_fl2e14.root") ); - mapsPath_list.push_back( PathResolverFindCalibFile("PixelDigitization/maps_PIX_350V_fl1.7e14.root") ); - mapsPath_list.push_back( PathResolverFindCalibFile("PixelDigitization/maps_PIX_250V_fl7e13.root") ); + mapsPath_list.push_back( PathResolverFindCalibFile("PixelDigitization/maps_PIX_350V_fl1_7e14.root") ); + mapsPath_list.push_back( PathResolverFindCalibFile("PixelDigitization/maps_PIX_200V_fl0_7e14.root") ); mapsPath_list.push_back( PathResolverFindCalibFile("PixelDigitization/maps_PIX_150V_fl4e13.root") ); m_fluence_layers.push_back(2e14); @@ -186,14 +186,14 @@ StatusCode SensorSimPlanarTool::initialize() { m_voltage_layers.push_back(150); m_voltage_layers.push_back(350); - m_voltage_layers.push_back(250); + m_voltage_layers.push_back(200); m_voltage_layers.push_back(150); }else if(m_fluence==5){ ATH_MSG_INFO("Use benchmark point 5!"); mapsPath_list.push_back( PathResolverFindCalibFile("PixelDigitization/maps_IBL_PL_350V_fl5e14.root") ); - mapsPath_list.push_back( PathResolverFindCalibFile("PixelDigitization/maps_PIX_350V_fl3.1e14.root") ); - mapsPath_list.push_back( PathResolverFindCalibFile("PixelDigitization/maps_PIX_250V_fl1.3e14.root") ); + mapsPath_list.push_back( PathResolverFindCalibFile("PixelDigitization/maps_PIX_350V_fl3_1e14.root") ); + mapsPath_list.push_back( PathResolverFindCalibFile("PixelDigitization/maps_PIX_200V_fl1_3e14.root") ); mapsPath_list.push_back( PathResolverFindCalibFile("PixelDigitization/maps_PIX_150V_fl8e13.root") ); m_fluence_layers.push_back(5e14); @@ -203,16 +203,15 @@ StatusCode SensorSimPlanarTool::initialize() { m_voltage_layers.push_back(350); m_voltage_layers.push_back(350); - m_voltage_layers.push_back(250); + m_voltage_layers.push_back(200); m_voltage_layers.push_back(150); }else if(m_fluence==6){ ATH_MSG_INFO("Use benchmark point 6!"); mapsPath_list.push_back( PathResolverFindCalibFile("PixelDigitization/maps_IBL_400V_fl8_7e14.root") ); mapsPath_list.push_back( PathResolverFindCalibFile("PixelDigitization/maps_PIX_400V_fl4_6e14.root") ); - mapsPath_list.push_back( PathResolverFindCalibFile("PixelDigitization/maps_PIX_250V_fl2_1e14.root") ); - mapsPath_list.push_back( PathResolverFindCalibFile("PixelDigitization/maps_PIX_150V_fl1_3e14.root") ); + mapsPath_list.push_back( PathResolverFindCalibFile("PixelDigitization/maps_PIX_250V_fl1_3e14.root") ); m_fluence_layers.push_back(8.7e14); m_fluence_layers.push_back(4.6e14); @@ -222,13 +221,12 @@ StatusCode SensorSimPlanarTool::initialize() { m_voltage_layers.push_back(400); m_voltage_layers.push_back(400); m_voltage_layers.push_back(250); - m_voltage_layers.push_back(150); + m_voltage_layers.push_back(250); }else if(m_fluence==7){ ATH_MSG_INFO("Use benchmark point 7!"); mapsPath_list.push_back( PathResolverFindCalibFile("PixelDigitization/maps_IBL_endLHC.root") ); mapsPath_list.push_back( PathResolverFindCalibFile("PixelDigitization/maps_PIX_blayer_endLHC.root") ); - mapsPath_list.push_back( PathResolverFindCalibFile("PixelDigitization/maps_PIX_L1_endLHC.root") ); mapsPath_list.push_back( PathResolverFindCalibFile("PixelDigitization/maps_PIX_L2_endLHC.root") ); @@ -237,10 +235,10 @@ StatusCode SensorSimPlanarTool::initialize() { m_fluence_layers.push_back(2*2.1e14); m_fluence_layers.push_back(2*1.3e14); - m_voltage_layers.push_back(350); - m_voltage_layers.push_back(350); + m_voltage_layers.push_back(400); + m_voltage_layers.push_back(400); + m_voltage_layers.push_back(250); m_voltage_layers.push_back(250); - m_voltage_layers.push_back(150); } if(mapsPath_list.size()==0 ){ diff --git a/InnerDetector/InDetExample/InDetRecExample/python/InDetKeys.py b/InnerDetector/InDetExample/InDetRecExample/python/InDetKeys.py index 3b8d795ebcbbadb0f153340b78ea5569fb0632ea..f20a24a9b4c1e4c22a6c302861147128706059b0 100644 --- a/InnerDetector/InDetExample/InDetRecExample/python/InDetKeys.py +++ b/InnerDetector/InDetExample/InDetRecExample/python/InDetKeys.py @@ -431,6 +431,12 @@ class ExtendedTracksMapLargeD0(JobProperty): allowedTypes = ['str'] StoredValue = 'ExtendedTracksMapLargeD0' +class ExtendedTracksMapDSP(JobProperty): + """ Storegate key for new-tracking high-d0 extended tracks map""" + statusOn = True + allowedTypes = ['str'] + StoredValue = 'ExtendedTracksMapDSP' + class ExtendedTracks(JobProperty): """StoreGate key for unslimmed inside out tracks""" statusOn = True @@ -467,6 +473,12 @@ class ExtendedLargeD0Tracks(JobProperty): allowedTypes = ['str'] StoredValue = 'ExtendedLargeD0Tracks' +class ExtendedDSPTracks(JobProperty): + """ Storegate key for new-tracking extended high-d0 tracks""" + statusOn = True + allowedTypes = ['str'] + StoredValue = 'ExtendedDSPTracks' + class ProcessedESDTracks(JobProperty): """ Storegate key for already processed tracks from ESD""" statusOn = True @@ -757,6 +769,12 @@ class SiSpSeededLargeD0Tracks(JobProperty): allowedTypes = ['str'] StoredValue = 'SiSpSeededLargeD0Tracks' +class SiSpSeededDSPTracks(JobProperty): + """ Storegate key for new-tracking SP seeded displace soft-pion tracks""" + statusOn = True + allowedTypes = ['str'] + StoredValue = 'SiSpSeededDSPTracks' + class ResolvedTracks(JobProperty): """ Storegate key for new-tracking resolved tracks""" statusOn = True @@ -823,6 +841,12 @@ class ResolvedLargeD0Tracks(JobProperty): allowedTypes = ['str'] StoredValue = 'ResolvedLargeD0Tracks' +class ResolvedDSPTracks(JobProperty): + """ Storegate key for new-tracking resolved high-d0 tracks""" + statusOn = True + allowedTypes = ['str'] + StoredValue = 'ResolvedDSPTracks' + class HaloTracks(JobProperty): """StoreGate key for beam halo tracks """ statusOn = True @@ -1266,12 +1290,14 @@ jobproperties.InDetContainerKeys.add_JobProperty(ExtendedTracksMapSLHC) jobproperties.InDetContainerKeys.add_JobProperty(ExtendedTracksMapLowPt) jobproperties.InDetContainerKeys.add_JobProperty(ExtendedTracksMapBeamGas) jobproperties.InDetContainerKeys.add_JobProperty(ExtendedTracksMapLargeD0) +jobproperties.InDetContainerKeys.add_JobProperty(ExtendedTracksMapDSP) jobproperties.InDetContainerKeys.add_JobProperty(ExtendedTracks) jobproperties.InDetContainerKeys.add_JobProperty(ExtendedTracksPhase) jobproperties.InDetContainerKeys.add_JobProperty(ExtendedSLHCTracks) jobproperties.InDetContainerKeys.add_JobProperty(ExtendedLowPtTracks) jobproperties.InDetContainerKeys.add_JobProperty(ExtendedBeamGasTracks) jobproperties.InDetContainerKeys.add_JobProperty(ExtendedLargeD0Tracks) +jobproperties.InDetContainerKeys.add_JobProperty(ExtendedDSPTracks) jobproperties.InDetContainerKeys.add_JobProperty(ProcessedESDTracks) jobproperties.InDetContainerKeys.add_JobProperty(ExtendedDetailedTracksTruth) jobproperties.InDetContainerKeys.add_JobProperty(ExtendedTracksTruth) @@ -1323,6 +1349,7 @@ jobproperties.InDetContainerKeys.add_JobProperty(SiSpSeededForwardTracks) jobproperties.InDetContainerKeys.add_JobProperty(SiSpSeededSLHCConversionFindingTracks) jobproperties.InDetContainerKeys.add_JobProperty(SiSpSeededBeamGasTracks) jobproperties.InDetContainerKeys.add_JobProperty(SiSpSeededLargeD0Tracks) +jobproperties.InDetContainerKeys.add_JobProperty(SiSpSeededDSPTracks) jobproperties.InDetContainerKeys.add_JobProperty(ResolvedTracks) jobproperties.InDetContainerKeys.add_JobProperty(ResolvedSLHCTracks) jobproperties.InDetContainerKeys.add_JobProperty(ResolvedLowPtTracks) @@ -1334,6 +1361,7 @@ jobproperties.InDetContainerKeys.add_JobProperty(ResolvedSLHCConversionFindingTr jobproperties.InDetContainerKeys.add_JobProperty(ResolvedForwardTrackParticlesTruth) jobproperties.InDetContainerKeys.add_JobProperty(ResolvedBeamGasTracks) jobproperties.InDetContainerKeys.add_JobProperty(ResolvedLargeD0Tracks) +jobproperties.InDetContainerKeys.add_JobProperty(ResolvedDSPTracks) jobproperties.InDetContainerKeys.add_JobProperty(HaloTracks) jobproperties.InDetContainerKeys.add_JobProperty(ExtendedHaloTracks) jobproperties.InDetContainerKeys.add_JobProperty(ResolvedSiCosmicTracks) diff --git a/InnerDetector/InDetExample/InDetRecExample/share/InDetRec_jobOptions.py b/InnerDetector/InDetExample/InDetRecExample/share/InDetRec_jobOptions.py index 7b57015dfa300e601c61a32bdb3d5d8770f57b93..e91300517c68288a99a3daddec846369de8d2ffa 100755 --- a/InnerDetector/InDetExample/InDetRecExample/share/InDetRec_jobOptions.py +++ b/InnerDetector/InDetExample/InDetRecExample/share/InDetRec_jobOptions.py @@ -791,8 +791,8 @@ else: if InDetFlags.useExistingTracksAsInput(): InputCombinedInDetTracks += [ InDetKeys.ProcessedESDTracks() ] InDetDisplacedSoftPionSiPattern = ConfiguredNewTrackingSiPattern(InputCombinedInDetTracks, - InDetKeys.ResolvedLargeD0Tracks(), - InDetKeys.SiSpSeededLargeD0Tracks(), + InDetKeys.ResolvedDSPTracks(), #ResolvedLargeD0Tracks(), + InDetKeys.SiSpSeededDSPTracks(), #SiSpSeededLargeD0Tracks(), InDetNewTrackingCutsDisplacedSoftPion, TrackCollectionKeys, TrackCollectionTruthKeys) @@ -802,8 +802,8 @@ else: include ("InDetRecExample/ConfiguredNewTrackingTRTExtension.py") InDetDisplacedSoftPionTRTExtension = ConfiguredNewTrackingTRTExtension(InDetNewTrackingCutsDisplacedSoftPion, InDetDisplacedSoftPionSiPattern.SiTrackCollection(), - InDetKeys.ExtendedLargeD0Tracks(), - InDetKeys.ExtendedTracksMapLargeD0(), + InDetKeys.ExtendedDSPTracks(), #ExtendedLargeD0Tracks(), + InDetKeys.ExtendedTracksMapDSP(), #ExtendedTracksMapLargeD0(), TrackCollectionKeys, TrackCollectionTruthKeys, False) diff --git a/InnerDetector/InDetRecTools/TRT_ToT_Tools/TRT_ToT_Tools/TRT_ToT_dEdx.h b/InnerDetector/InDetRecTools/TRT_ToT_Tools/TRT_ToT_Tools/TRT_ToT_dEdx.h index 379686b07d2c8fa6d9e957bce8c7f359e124e3f8..1ccdccfde4239ff4d39cb4f5b39e19485d9e016b 100644 --- a/InnerDetector/InDetRecTools/TRT_ToT_Tools/TRT_ToT_Tools/TRT_ToT_dEdx.h +++ b/InnerDetector/InDetRecTools/TRT_ToT_Tools/TRT_ToT_Tools/TRT_ToT_dEdx.h @@ -62,6 +62,7 @@ class TRT_ToT_dEdx : virtual public ITRT_ToT_dEdx, public AthAlgTool const InDetDD::TRT_DetectorManager* m_trtman; // ID TRT detector manager // Algorithm switchers + bool m_applyBugfix; // If true - apply bugfixes for r21.0 concerning unused option DivideByL, wrong hit selection and truncation. Will calculate dEdx using recommended settings (DivideByL=true, useHThits=true, m_toolScenario=kAlgReweightTrunkOne) bool m_corrected; // If true - make correction using rs-distributions bool m_divideByL; // If true - divide ToT to the L of track in straw. bool m_useHThits; // If true - use HT hit for dEdX estimator calculation @@ -89,6 +90,8 @@ class TRT_ToT_dEdx : virtual public ITRT_ToT_dEdx, public AthAlgTool mutable int m_gasTypeInStraw; // Starw gas type. 0:Xenon, 1:Argon, 2:Krypton mutable double L; // Length in straw + static const unsigned int m_mask_last_bits=0xFFFFFF0; // 1 1 11111111 1 11111111 1 11110000 + public: /** AlgTool like constructor */ TRT_ToT_dEdx(const std::string&,const std::string&,const IInterface*); diff --git a/InnerDetector/InDetRecTools/TRT_ToT_Tools/src/TRT_ToT_dEdx.cxx b/InnerDetector/InDetRecTools/TRT_ToT_Tools/src/TRT_ToT_dEdx.cxx index a092bfb75a085cb04c6398c35784efba977842f8..0cf623e1e00aa32611e614413664aab3a05b2c84 100644 --- a/InnerDetector/InDetRecTools/TRT_ToT_Tools/src/TRT_ToT_dEdx.cxx +++ b/InnerDetector/InDetRecTools/TRT_ToT_Tools/src/TRT_ToT_dEdx.cxx @@ -49,6 +49,8 @@ TRT_ToT_dEdx::TRT_ToT_dEdx(const std::string& t, const std::string& n, const IIn void TRT_ToT_dEdx::SetDefaultConfiguration() { + //If this option is set to true, bugfixes for r21.0 are applied concerning unused option DivideByL, wrong hit selection and truncation + declareProperty("TRT_dEdx_applyBugfix",m_applyBugfix=false); declareProperty("TRT_dEdx_divideByL",m_divideByL=true); declareProperty("TRT_dEdx_useHThits",m_useHThits=true); declareProperty("TRT_dEdx_corrected",m_corrected=true); @@ -68,6 +70,7 @@ void TRT_ToT_dEdx::ShowDEDXSetup() const ATH_MSG_DEBUG("//////////////////////////////////////////////////////////////////"); ATH_MSG_DEBUG("/// TRT_ToT_Tool setup configuration ///"); ATH_MSG_DEBUG(" "); + ATH_MSG_DEBUG("m_applyBugfix ="<<m_applyBugfix<<""); ATH_MSG_DEBUG("m_divideByL ="<<m_divideByL<<""); ATH_MSG_DEBUG("m_useHThits ="<<m_useHThits<<""); ATH_MSG_DEBUG("m_corrected ="<<m_corrected<<""); @@ -152,6 +155,7 @@ StatusCode TRT_ToT_dEdx::initialize() ATH_MSG_INFO("//////////////////////////////////////////////////////////////////"); ATH_MSG_INFO("/// TRT_ToT_Tool setup configuration ///"); ATH_MSG_INFO(" "); + ATH_MSG_INFO("m_applyBugfix ="<<m_applyBugfix<<""); ATH_MSG_INFO("m_divideByL ="<<m_divideByL<<""); ATH_MSG_INFO("m_useHThits ="<<m_useHThits<<""); ATH_MSG_INFO("m_corrected ="<<m_corrected<<""); @@ -680,16 +684,26 @@ bool TRT_ToT_dEdx::isGood_Hit(const Trk::TrackStateOnSurface *itr) const double Trt_RHit = fabs(driftcircle->localParameters()[Trk::driftRadius]); double Trt_HitTheta = trkP->parameters()[Trk::theta]; double Trt_HitPhi = trkP->parameters()[Trk::phi]; - double error2 = 2*driftcircle->localCovariance()(Trk::driftRadius,Trk::driftRadius); - double distance2 = (Trt_Rtrack - Trt_RHit)*(Trt_Rtrack - Trt_RHit); Identifier DCId = driftcircle->identify(); int HitPart = m_trtId->barrel_ec(DCId); const InDetDD::TRT_BaseElement* element = m_trtman->getElement(DCId); double strawphi = element->center(DCId).phi(); + + if (m_applyBugfix){ + double error = sqrt(driftcircle->localCovariance()(Trk::driftRadius,Trk::driftRadius)); - if ( m_useZeroRHitCut && Trt_RHit==0) return false; // tube hit - if ( (Trt_Rtrack >= m_trackConfig_maxRtrack) || (Trt_Rtrack <= m_trackConfig_minRtrack) )return false; // drift radius close to wire or wall - if (distance2 > error2) return false; // Select precision hit only + if ( itr->type(Trk::TrackStateOnSurface::Outlier) ) return false; //Outliers + if ( m_useZeroRHitCut && Trt_RHit==0 && error>1.) return false; //Select precision hits only + if ( (Trt_Rtrack >= m_trackConfig_maxRtrack) || (Trt_Rtrack <= m_trackConfig_minRtrack) ) return false; // drift radius close to wire or wall + } + else{ + double error2 = 2*driftcircle->localCovariance()(Trk::driftRadius,Trk::driftRadius); + double distance2 = (Trt_Rtrack - Trt_RHit)*(Trt_Rtrack - Trt_RHit); + + if ( m_useZeroRHitCut && Trt_RHit==0) return false; // tube hit + if ( (Trt_Rtrack >= m_trackConfig_maxRtrack) || (Trt_Rtrack <= m_trackConfig_minRtrack) )return false; // drift radius close to wire or wall + if (distance2 > error2) return false; // Select precision hit only + } L = 0; if (std::abs(HitPart)==1) { //Barrel @@ -727,11 +741,35 @@ double TRT_ToT_dEdx::dEdx(const Trk::Track* track, bool DivideByL, bool useHThit if(corrected) SwitchOnRSCorrection(); else SwitchOffRSCorrection(); - if(DivideByL) SwitchOnDivideByL(); - else SwitchOffDivideByL(); + if (m_applyBugfix) { - if(useHThits) SwitchOnUseHThits(); - else SwitchOffUseHThits(); + if(DivideByL) SwitchOnDivideByL(); + else{ + ATH_MSG_WARNING("dEdx(): DivideByL=false is an unused option. DivideByL is set to true."); + SwitchOnDivideByL(); + } + + if(useHThits) SwitchOnUseHThits(); + else{ + ATH_MSG_WARNING("dEdx(): useHThits=false is an unused option. useHThits is set to true."); + SwitchOnUseHThits(); + } + + if (m_toolScenario!=kAlgReweightTrunkOne){ + ATH_MSG_WARNING("dEdx(): m_toolScenario is set to default kAlgReweightTrunkOne."); + m_toolScenario=kAlgReweightTrunkOne; + } + + m_trackConfig_minRtrack=0.15; + m_trackConfig_maxRtrack=1.85; + } + else { + if(DivideByL) SwitchOnDivideByL(); + else SwitchOffDivideByL(); + + if(useHThits) SwitchOnUseHThits(); + else SwitchOffUseHThits(); + } return dEdx(track); } @@ -845,36 +883,64 @@ double TRT_ToT_dEdx::dEdx(const Trk::Track* track) int ntrunk = 1; if(m_divideByL) { - if(m_toolScenario==kAlgReweight){ - if(nhitsXe>0) nhitsXe-=ntrunk; - if(nhitsAr>0) nhitsAr-=ntrunk; - if(nhitsKr>0) nhitsKr-=ntrunk; + if(m_applyBugfix){ + if(m_toolScenario==kAlgReweight){ + if(nhitsXe>ntrunk) nhitsXe-=ntrunk; + if(nhitsAr>ntrunk) nhitsAr-=ntrunk; + if(nhitsKr>ntrunk) nhitsKr-=ntrunk; } else // kAlgReweightTrunkOne - { - int trunkGas = kUnset; - double maxToT = 0.; - if(nhitsXe>0 && vecToT_Xe.at(nhitsXe-1)>maxToT) trunkGas = kXenon; - if(nhitsAr>0 && vecToT_Ar.at(nhitsAr-1)>maxToT) trunkGas = kArgon; + { + int trunkGas = kUnset; + double maxToT = 0.; + if(nhitsXe>0 && vecToT_Xe.at(nhitsXe-1)>maxToT){ + trunkGas = kXenon; + maxToT = vecToT_Xe.at(nhitsXe-1); + } + if(nhitsAr>0 && vecToT_Ar.at(nhitsAr-1)>maxToT){ + trunkGas = kArgon; + maxToT = vecToT_Ar.at(nhitsAr-1); + } + if(nhitsKr>0 && vecToT_Kr.at(nhitsKr-1)>maxToT) trunkGas = kKrypton; + if(trunkGas==kXenon) nhitsXe-=ntrunk; + else + if(trunkGas==kArgon) nhitsAr-=ntrunk; + else + if(trunkGas==kKrypton) nhitsKr-=ntrunk; + } + } + else { + if(m_toolScenario==kAlgReweight){ + if(nhitsXe>0) nhitsXe-=ntrunk; + if(nhitsAr>0) nhitsAr-=ntrunk; + if(nhitsKr>0) nhitsKr-=ntrunk; + } + else // kAlgReweightTrunkOne + { + int trunkGas = kUnset; + double maxToT = 0.; + if(nhitsXe>0 && vecToT_Xe.at(nhitsXe-1)>maxToT) trunkGas = kXenon; + if(nhitsAr>0 && vecToT_Ar.at(nhitsAr-1)>maxToT) trunkGas = kArgon; if(nhitsKr>0 && vecToT_Kr.at(nhitsKr-1)>maxToT) trunkGas = kKrypton; - + if(trunkGas==kXenon) nhitsXe-=ntrunk; else - if(trunkGas==kArgon) nhitsAr-=ntrunk; - else - if(trunkGas==kKrypton) nhitsKr-=ntrunk; - } - } - - m_useTrackPartWithGasType = gasTypeForCorrectNormalization; + if(trunkGas==kArgon) nhitsAr-=ntrunk; + else + if(trunkGas==kKrypton) nhitsKr-=ntrunk; + } + } + } - // Boost speed. - int nhits = nhitsXe + nhitsAr + nhitsKr; - if(nhits<1) return 0.0; + m_useTrackPartWithGasType = gasTypeForCorrectNormalization; - double ToTsumXe = 0; - double ToTsumAr = 0; - double ToTsumKr = 0; + // Boost speed. + int nhits = nhitsXe + nhitsAr + nhitsKr; + if(nhits<1) return 0.0; + + double ToTsumXe = 0; + double ToTsumAr = 0; + double ToTsumKr = 0; for (int i = 0; i < nhitsXe;i++){ ToTsumXe+=vecToT_Xe.at(i); } @@ -884,19 +950,19 @@ double TRT_ToT_dEdx::dEdx(const Trk::Track* track) for (int i = 0; i < nhitsKr;i++){ ToTsumKr+=vecToT_Kr.at(i); } - + if(nhitsXe>0) ToTsumXe/=nhitsXe; else ToTsumXe = 0; if(nhitsAr>0) ToTsumAr/=nhitsAr; else ToTsumAr = 0; if(nhitsKr>0) ToTsumKr/=nhitsKr; else ToTsumKr = 0; - - + + double ToTsum = ToTsumXe*nhitsXe + ToTsumAr*nhitsAr + ToTsumKr*nhitsKr; - + ToTsum*=correctNormalization(m_divideByL, m_isData, nVtx); - + return ToTsum/nhits; } @@ -909,13 +975,36 @@ double TRT_ToT_dEdx::dEdx(const Trk::Track* track) double TRT_ToT_dEdx::usedHits(const Trk::Track* track, bool DivideByL, bool useHThits) { - if(DivideByL) SwitchOnDivideByL(); - else SwitchOffDivideByL(); - if(useHThits) SwitchOnUseHThits(); - else SwitchOffUseHThits(); + if (m_applyBugfix){ + if(DivideByL) SwitchOnDivideByL(); + else{ + ATH_MSG_WARNING("usedHits(): DivideByL=false is an unused option. DivideByL is set to true."); + SwitchOnDivideByL(); + } - return usedHits(track); + if(useHThits) SwitchOnUseHThits(); + else{ + ATH_MSG_WARNING("usedHits(): useHThits=false is an unused option. useHThits is set to true."); + SwitchOnUseHThits(); + } + + if (m_toolScenario!=kAlgReweightTrunkOne){ + ATH_MSG_WARNING("usedHits(): m_toolScenario is set to default kAlgReweightTrunkOne."); + m_toolScenario=kAlgReweightTrunkOne; + } + + m_trackConfig_minRtrack=0.15; + m_trackConfig_maxRtrack=1.85; + } + else{ + if(DivideByL) SwitchOnDivideByL(); + else SwitchOffDivideByL(); + + if(useHThits) SwitchOnUseHThits(); + else SwitchOffUseHThits(); + } + return usedHits(track); } @@ -987,14 +1076,29 @@ double TRT_ToT_dEdx::usedHits(const Trk::Track* track) int ntrunk = 1; if(m_divideByL) { - if(m_toolScenario==kAlgReweight){ - if(nhitsXe>0) nhitsXe-=ntrunk; - if(nhitsAr>0) nhitsAr-=ntrunk; - if(nhitsKr>0) nhitsKr-=ntrunk; + if (m_applyBugfix){ + if(m_toolScenario==kAlgReweight){ + if(nhitsXe>ntrunk) nhitsXe-=ntrunk; + if(nhitsAr>ntrunk) nhitsAr-=ntrunk; + if(nhitsKr>ntrunk) nhitsKr-=ntrunk; + nhits = nhitsXe + nhitsAr + nhitsKr; + } + else { // kAlgReweightTrunkOne + nhits = nhitsXe + nhitsAr + nhitsKr; + if(nhits>ntrunk) + nhits -= ntrunk; + } } - else { // kAlgReweightTrunkOne - if(nhitsXe>0 || nhitsAr>0 || nhitsKr>0) - nhitsXe -= ntrunk; + else{ + if(m_toolScenario==kAlgReweight){ + if(nhitsXe>0) nhitsXe-=ntrunk; + if(nhitsAr>0) nhitsAr-=ntrunk; + if(nhitsKr>0) nhitsKr-=ntrunk; + } + else { // kAlgReweightTrunkOne + if(nhitsXe>0 || nhitsAr>0 || nhitsKr>0) + nhitsXe -= ntrunk; + } } } @@ -1687,20 +1791,26 @@ double TRT_ToT_dEdx::getToTlargerIsland(unsigned int BitPattern) const unsigned int best_length = 0; unsigned int current_length = 0; unsigned int k = 0; + unsigned int BitPattern_correct = BitPattern; + if (m_applyBugfix){ + //Set 4 last bits to zero (to match data and MC bitmasks) + BitPattern_correct = BitPattern & m_mask_last_bits; + } + //shift bitmask to the right until end; while (true) { - if (BitPattern & mask) { - ++current_length; + if (BitPattern_correct & mask) { + ++current_length; } else { - // remember longest island - if (current_length > best_length) - best_length = current_length; - current_length = 0; + // remember longest island + if (current_length > best_length) + best_length = current_length; + current_length = 0; } if (!mask) - break; + break; assert(k < 24); mask >>= 1; if (k == 7 || k == 15) diff --git a/MuonSpectrometer/MuonOverlay/CscOverlay/CscOverlay/CscOverlay.h b/MuonSpectrometer/MuonOverlay/CscOverlay/CscOverlay/CscOverlay.h index 4098222badab40597b8aead9c81f55e932d1046f..8b205c5e0bbfb2e3959ff1dec1395bf629991e06 100644 --- a/MuonSpectrometer/MuonOverlay/CscOverlay/CscOverlay/CscOverlay.h +++ b/MuonSpectrometer/MuonOverlay/CscOverlay/CscOverlay/CscOverlay.h @@ -92,6 +92,7 @@ private: std::string m_mainInputCSC_Name; std::string m_overlayInputCSC_Name; + bool m_isDataOverlay; const CscIdHelper * m_cscHelper; ToolHandle<ICscCalibTool> m_cscCalibTool; ToolHandle<IMuonDigitizationTool> m_digTool; diff --git a/MuonSpectrometer/MuonOverlay/CscOverlay/share/CscOverlay_jobOptions.py b/MuonSpectrometer/MuonOverlay/CscOverlay/share/CscOverlay_jobOptions.py index babfcbc43ce8ffd8e7a37f46d37ec961cebc8db7..76fa7c0b0f329066478bd99ecafab7e949ace6f1 100644 --- a/MuonSpectrometer/MuonOverlay/CscOverlay/share/CscOverlay_jobOptions.py +++ b/MuonSpectrometer/MuonOverlay/CscOverlay/share/CscOverlay_jobOptions.py @@ -17,6 +17,7 @@ job.CscOverlay.MakeRDOTool4.EvtStore = job.CscOverlay.MCStore job.CscOverlay.MakeRDOTool4.addNoise = False job.CscOverlay.MakeRDOTool4.NumSamples = 4 job.CscOverlay.RndmSvc = digitizationFlags.rndmSvc.get_Value() +job.CscOverlay.isDataOverlay = isRealData #job.CscOverlay.OutputLevel=VERBOSE #svcMgr.MessageSvc.defaultLimit=100000 diff --git a/MuonSpectrometer/MuonOverlay/CscOverlay/src/CscOverlay.cxx b/MuonSpectrometer/MuonOverlay/CscOverlay/src/CscOverlay.cxx index 9dbaf04add9e8978873766d3767c51a6b36311b8..2746e7907f0a9ea007f11c3a9191f22158a8b1d5 100644 --- a/MuonSpectrometer/MuonOverlay/CscOverlay/src/CscOverlay.cxx +++ b/MuonSpectrometer/MuonOverlay/CscOverlay/src/CscOverlay.cxx @@ -22,6 +22,7 @@ const uint16_t MAX_AMPL = 4095; // 12-bit ADC CscOverlay::CscOverlay(const std::string &name, ISvcLocator *pSvcLocator) : MuonOverlayBase(name, pSvcLocator), m_storeGateTemp("StoreGateSvc/BkgEvent_1_SG", name), + m_isDataOverlay(false), m_cscHelper(0), m_cscCalibTool( "CscCalibTool", this), m_digTool("CscDigitizationTool", this ), @@ -45,6 +46,7 @@ CscOverlay::CscOverlay(const std::string &name, ISvcLocator *pSvcLocator) : declareProperty("IsByteStream", m_isByteStream = false ); declareProperty("RndmSvc", m_rndmSvc, "Random Number Service used for CscDigitToCscRDOTool" ); declareProperty("RndmEngine", m_rndmEngineName, "Random engine name for CscDigitToCscRDOTool"); + declareProperty("isDataOverlay", m_isDataOverlay); } @@ -452,7 +454,7 @@ void CscOverlay::mergeCollections(CscRawDataCollection *out_coll, std::map< int,std::vector<uint16_t> > ovlSamples; uint32_t sigHash; uint32_t ovlHash; - uint32_t sigAddress = this->stripData( sigData, nSigSamples, sigSamples, sigHash, spuID, j , true); // real data + uint32_t sigAddress = this->stripData( sigData, nSigSamples, sigSamples, sigHash, spuID, j , m_isDataOverlay); // need to patch in the case of real data uint32_t ovlAddress = this->stripData( ovlData, nOvlSamples, ovlSamples, ovlHash, spuID, j , false); // simulation if (sigSamples.size()==0 && ovlSamples.size()==0) continue; @@ -525,8 +527,8 @@ void CscOverlay::mergeCollections(CscRawDataCollection *out_coll, if (measuresPhi) { int stationEta = ( ((address & 0x00001000) >> 12 ) == 0x0) ? -1 : 1; if (stationEta>0) { + msg<<MSG::VERBOSE<<"FLIP strip. Formerly strip="<<strip<<", now strip="<<49-strip<<endmsg; strip = 49-strip; - msg<<MSG::VERBOSE<<"FLIP strip, now strip="<<strip<<endmsg; } } insertedstrips.insert(strip);//for checks @@ -551,8 +553,12 @@ void CscOverlay::mergeCollections(CscRawDataCollection *out_coll, //check if (readstrips!=insertedstrips){ msg << MSG::WARNING << "Readstrips != Insertedstrips: "<<endmsg; - for (std::set<int>::const_iterator i = readstrips.begin(); i!=readstrips.end(); ++i){std::cout<<*i<<" ";} std::cout<<std::endl; - for (std::set<int>::const_iterator i = insertedstrips.begin(); i!=insertedstrips.end(); ++i){std::cout<<*i<<" ";} std::cout<<std::endl; + std::ostringstream readstream; + for (std::set<int>::const_iterator i = readstrips.begin(); i!=readstrips.end(); ++i){readstream<<*i<<" ";} + msg << MSG::WARNING << readstream.str()<<endmsg; + std::ostringstream insertstream; + for (std::set<int>::const_iterator i = insertedstrips.begin(); i!=insertedstrips.end(); ++i){insertstream<<*i<<" ";} + msg << MSG::WARNING << insertstream.str()<<endmsg; } } diff --git a/Reconstruction/egamma/egammaValidation/scripts/EgammaARTmonitoring_plotsMaker.py b/Reconstruction/egamma/egammaValidation/scripts/EgammaARTmonitoring_plotsMaker.py index 7798484e354378b204a26063a4835b54faf81e2d..3b7e4338d568e4dc7c00663fff1f8f690bf7fcc2 100755 --- a/Reconstruction/egamma/egammaValidation/scripts/EgammaARTmonitoring_plotsMaker.py +++ b/Reconstruction/egamma/egammaValidation/scripts/EgammaARTmonitoring_plotsMaker.py @@ -145,6 +145,20 @@ def make_comparison_plots(type, f_base, f_nightly, result_file): make_ratio_plot(h_base, h_nightly, folder['title'], result_file) + +def makeIQEPlots(inHist, name): + outHist = inHist.QuantilesX(0.75, "EResolution_IQE_mu") + outHist.GetXaxis().SetTitle("<#mu>") + outHist.GetYaxis().SetTitle("IQE") + outHist25 = inHist.QuantilesX(0.25, "EResolutio_IQE_mu_25") + outHist.Add(outHist25, -1) + outHist.Scale(1/1.349) + + return outHist.Clone(inHist.GetName() + "_"+ name) + + + + def make_profile_plots(f_base, f_nightly, result_file, particle_type): cluster_list_to_loop = cluster_list @@ -155,17 +169,26 @@ def make_profile_plots(f_base, f_nightly, result_file, particle_type): for histo in get_key_names(f_nightly, folder['name']): if '2D' not in histo: continue - h_base = f_base.Get(folder['name'] + '/' + histo) - h_base_profile = h_base.ProfileX(histo+"_ProfileB") - h_nightly = f_nightly.Get(folder['name'] + '/' + histo) - h_nightly_profile = h_nightly.ProfileX(histo+"_Profile") - h_base_profile.SetDirectory(0) - h_nightly_profile.SetDirectory(0) - - y_axis_label = "Mean %s" % (h_base_profile.GetTitle() ) - h_base_profile.SetTitle("") - - make_ratio_plot(h_base_profile, h_nightly_profile, folder['title'], result_file, y_axis_label) + if 'mu' in histo: + h_base = f_base.Get(folder['name'] + '/' + histo) + h_nightly = f_nightly.Get(folder['name'] + '/' + histo) + + h_base = makeIQEPlots(h_base,'IQE') + h_nightly = makeIQEPlots(h_nightly,'IQE') + make_ratio_plot(h_base, h_nightly, folder['title'], result_file, 'IQE') + + else: + h_base = f_base.Get(folder['name'] + '/' + histo) + h_base_profile = h_base.ProfileX(histo+"_ProfileB") + h_nightly = f_nightly.Get(folder['name'] + '/' + histo) + h_nightly_profile = h_nightly.ProfileX(histo+"_Profile") + h_base_profile.SetDirectory(0) + h_nightly_profile.SetDirectory(0) + + y_axis_label = "Mean %s" % (h_base_profile.GetTitle() ) + h_base_profile.SetTitle("") + + make_ratio_plot(h_base_profile, h_nightly_profile, folder['title'], result_file, y_axis_label) diff --git a/Reconstruction/egamma/egammaValidation/src/ClusterHistograms.cxx b/Reconstruction/egamma/egammaValidation/src/ClusterHistograms.cxx index bb42bb965a85d927a4987860ba0ee3579aa71bfe..d32ad1a47764e0ccda0aef8bad19e7aeabf6f4c3 100644 --- a/Reconstruction/egamma/egammaValidation/src/ClusterHistograms.cxx +++ b/Reconstruction/egamma/egammaValidation/src/ClusterHistograms.cxx @@ -18,7 +18,7 @@ StatusCode ClusterHistograms::initializePlots() { histo2DMap["number_cells_vs_et_in_layer_3_2D"] = (new TH2D(Form("%s_%s",m_name.c_str(),"number_cells_vs_et_in_layer_3_2D"), "Number of cells;E_{T}", 600,0,300,50, 0,100.)); histo2DMap["number_cell_in_layer"] = (new TH2D(Form("%s_%s",m_name.c_str(),"number_cell_in_layer"), ";Number of cells;Layer",100,0,200, 4,0,4)); - + histo2DMap["mu_energy_resolution_2D"] = (new TH2D(Form("%s_%s",m_name.c_str(),"mu_energy_resolution_2D"), ";<#mu>; Energy Resolution", 5,0,80,20,-1,1)); ATH_CHECK(m_rootHistSvc->regHist(m_folder+"Eraw_Etruth_vs_Etruth_2D", histo2DMap["Eraw_Etruth_vs_Etruth_2D"])); ATH_CHECK(m_rootHistSvc->regHist(m_folder+"Eraw_Etruth_vs_eta_2D", histo2DMap["Eraw_Etruth_vs_eta_2D"])); @@ -28,9 +28,9 @@ StatusCode ClusterHistograms::initializePlots() { ATH_CHECK(m_rootHistSvc->regHist(m_folder+"number_cells_vs_et_in_layer_2_2D", histo2DMap["number_cells_vs_et_in_layer_2_2D"])); ATH_CHECK(m_rootHistSvc->regHist(m_folder+"number_cells_vs_et_in_layer_3_2D", histo2DMap["number_cells_vs_et_in_layer_3_2D"])); - + ATH_CHECK(m_rootHistSvc->regHist(m_folder+"number_cell_in_layer", histo2DMap["number_cell_in_layer"])); - + ATH_CHECK(m_rootHistSvc->regHist(m_folder+"mu_energy_resolution_2D", histo2DMap["mu_energy_resolution_2D"])); @@ -44,17 +44,20 @@ void ClusterHistograms::fill(const xAOD::Egamma& egamma) { void ClusterHistograms::fill(const xAOD::Egamma& egamma, float mu = 0) { - (void)mu; - const xAOD::CaloCluster *cluster = egamma.caloCluster(); const xAOD::TruthParticle *truth_egamma = xAOD::TruthHelpers::getTruthParticle(egamma); + if ( !truth_egamma ) return; - histo2DMap["Eraw_Etruth_vs_Etruth_2D"]->Fill(truth_egamma->e()/1000,cluster->rawE()/truth_egamma->e()); - histo2DMap["Eraw_Etruth_vs_eta_2D"]->Fill(truth_egamma->eta(),cluster->rawE()/truth_egamma->e()); + const auto Ereco = cluster->rawE(); + const auto Etruth = truth_egamma->e(); + const auto Eres = (Ereco - Etruth)/Etruth; + histo2DMap["Eraw_Etruth_vs_Etruth_2D"]->Fill(truth_egamma->e()/1000,Ereco/Etruth); + histo2DMap["Eraw_Etruth_vs_eta_2D"]->Fill(truth_egamma->eta(),Ereco/Etruth); + histo2DMap["mu_energy_resolution_2D"]->Fill(mu,Eres); const CaloClusterCellLink* cellLinks = cluster->getCellLinks(); diff --git a/Reconstruction/egamma/egammaValidation/src/EgammaMonitoring.cxx b/Reconstruction/egamma/egammaValidation/src/EgammaMonitoring.cxx index 9d637b529a06bcf4fb8386da0968711f6dbef127..fcb169e2478924ed7896f0a2c05ba2005c643db4 100644 --- a/Reconstruction/egamma/egammaValidation/src/EgammaMonitoring.cxx +++ b/Reconstruction/egamma/egammaValidation/src/EgammaMonitoring.cxx @@ -276,6 +276,9 @@ StatusCode EgammaMonitoring::execute() { // Retrieve things from the event store const xAOD::EventInfo *eventInfo = nullptr; ANA_CHECK(evtStore()->retrieve(eventInfo, "EventInfo")); + const float mu = eventInfo->averageInteractionsPerCrossing(); + + // Retrieve egamma truth particles const xAOD::TruthParticleContainer *egTruthParticles = nullptr; @@ -325,9 +328,9 @@ StatusCode EgammaMonitoring::execute() { if (!electron) continue; - clusterPromptAll->fill(*electron); + clusterPromptAll->fill(*electron,mu); if (egtruth->pt() > 10*Gaudi::Units::GeV) { - clusterPrompt10GeV->fill(*electron); + clusterPrompt10GeV->fill(*electron,mu); } @@ -502,9 +505,9 @@ StatusCode EgammaMonitoring::execute() { for (auto elrec : *RecoEl) { if (!elrec) continue; - clusterAll->fill(*elrec); + clusterAll->fill(*elrec,mu); if (elrec->pt() > 10*Gaudi::Units::GeV) { - cluster10GeV->fill(*elrec); + cluster10GeV->fill(*elrec,mu); } recoElectronAll->fill(*elrec); showerShapesAll->fill(*elrec); @@ -579,9 +582,9 @@ StatusCode EgammaMonitoring::execute() { recoPhotonAll->fill(*phrec); isolationAll->fill(*phrec); showerShapesAll->fill(*phrec); - clusterAll->fill(*phrec); + clusterAll->fill(*phrec,mu); if (phrec->pt() > 10*Gaudi::Units::GeV) { - cluster10GeV->fill(*phrec); + cluster10GeV->fill(*phrec,mu); } if (phrec->pt() > 10*Gaudi::Units::GeV){ showerShapes10GeV->fill(*phrec); @@ -600,9 +603,9 @@ StatusCode EgammaMonitoring::execute() { if (!photon) continue; truthPhotonRecoPhoton->fill(*egtruth); - clusterPromptAll->fill(*photon); + clusterPromptAll->fill(*photon,mu); if (egtruth->pt() > 10*Gaudi::Units::GeV) { - clusterPrompt10GeV->fill(*photon); + clusterPrompt10GeV->fill(*photon,mu); } bool isRecoConv = xAOD::EgammaHelpers::isConvertedPhoton(photon); @@ -616,23 +619,23 @@ StatusCode EgammaMonitoring::execute() { truthPhotonConvRecoConv->fill(*egtruth); - clusterConvPhoton->fill(*photon); + clusterConvPhoton->fill(*photon,mu); if (convType == xAOD::EgammaParameters::singleSi) { truthPhotonConvRecoConv1Si->fill(*egtruth); - clusterConvPhotonSi->fill(*photon); + clusterConvPhotonSi->fill(*photon,mu); } else if (convType == xAOD::EgammaParameters::singleTRT) { truthPhotonConvRecoConv1TRT->fill(*egtruth); - clusterConvPhotonTRT->fill(*photon); + clusterConvPhotonTRT->fill(*photon,mu); } else if (convType == xAOD::EgammaParameters::doubleSi) { truthPhotonConvRecoConv2Si->fill(*egtruth); - clusterConvPhotonSiSi->fill(*photon); + clusterConvPhotonSiSi->fill(*photon,mu); } else if (convType == xAOD::EgammaParameters::doubleTRT) { truthPhotonConvRecoConv2TRT->fill(*egtruth); - clusterConvPhotonTRTTRT->fill(*photon); + clusterConvPhotonTRTTRT->fill(*photon,mu); } else if (convType == xAOD::EgammaParameters::doubleSiTRT) { truthPhotonConvRecoConv2SiTRT->fill(*egtruth); - clusterConvPhotonSiTRT->fill(*photon); + clusterConvPhotonSiTRT->fill(*photon,mu); } if (m_IsoFixedCutTight->accept(*photon)) recoPhotonConvIsoFixedCutTight->fill(*egtruth); @@ -641,7 +644,7 @@ StatusCode EgammaMonitoring::execute() { } // isRecoConv else { truthPhotonConvRecoUnconv->fill(*egtruth); - clusterUnconvPhoton->fill(*photon); + clusterUnconvPhoton->fill(*photon,mu); } } //isTrueConv diff --git a/Reconstruction/egamma/egammaValidation/test/test_electron_pileup.sh b/Reconstruction/egamma/egammaValidation/test/test_electron_pileup.sh new file mode 100755 index 0000000000000000000000000000000000000000..049e211840dd6ce30b7ec0b78f9324c338bd2e5e --- /dev/null +++ b/Reconstruction/egamma/egammaValidation/test/test_electron_pileup.sh @@ -0,0 +1,72 @@ +#!/bin/sh +# +# art-description: ART Monitoring Tool for electron Validation +# +# art-type: grid +# art-input: mc16_13TeV.423000.ParticleGun_single_electron_egammaET.recon.RDO.e3566_s3113_r10470 +# art-input-nfiles: 15 +# art-cores: 4 +# art-include: 21.0/Athena +# art-include: master/Athena +# art-output: *.hist.root +# art-output: *.txt +# art-output: *.png + +echo "ArtProcess: $ArtProcess" + +case $ArtProcess in + + "start") + echo "Starting" + echo "List of files = " ${ArtInFile} + ;; + + "end") + echo "Ending" + + echo "Merging AODs" + echo "Unsetting ATHENA_NUM_PROC=${ATHENA_NUM_PROC} and ATHENA_PROC_NUMBER=${ATHENA_PROC_NUMBER}" + unset ATHENA_NUM_PROC + unset ATHENA_PROC_NUMBER + + AODMerge_tf.py --inputAODFile=art_core_*/Nightly_AOD_electron.pool.root --outputAOD_MRGFile=Nightly_AOD_electron.pool.root --postExec "all:CILMergeAOD.removeItem(\"xAOD::CaloClusterAuxContainer#CaloCalTopoClustersAux.SECOND_R.SECOND_LAMBDA.CENTER_MAG.CENTER_LAMBDA.FIRST_ENG_DENS.ENG_FRAC_MAX.ISOLATION.ENG_BAD_CELLS.N_BAD_CELLS.BADLARQ_FRAC.ENG_POS.AVG_LAR_Q.AVG_TILE_Q.EM_PROBABILITY.BadChannelList\");CILMergeAOD.add(\"xAOD::CaloClusterAuxContainer#CaloCalTopoClustersAux.SECOND_R.SECOND_LAMBDA.CENTER_MAG.CENTER_LAMBDA.FIRST_ENG_DENS.ENG_FRAC_MAX.ISOLATION.ENG_BAD_CELLS.N_BAD_CELLS.BADLARQ_FRAC.ENG_POS.AVG_LAR_Q.AVG_TILE_Q.EM_PROBABILITY.BadChannelList.ENG_CALIB_TOT.ENG_CALIB_OUT_L.ENG_CALIB_EMB0.ENG_CALIB_EME0.ENG_CALIB_TILEG3.ENG_CALIB_DEAD_TOT.ENG_CALIB_DEAD_EMB0.ENG_CALIB_DEAD_TILE0.ENG_CALIB_DEAD_TILEG3.ENG_CALIB_DEAD_EME0.ENG_CALIB_DEAD_HEC0.ENG_CALIB_DEAD_FCAL.ENG_CALIB_DEAD_LEAKAGE.ENG_CALIB_DEAD_UNCLASS.ENG_CALIB_FRAC_EM.ENG_CALIB_FRAC_HAD.ENG_CALIB_FRAC_REST.LATERAL.ENG_FRAC_EM\");StreamAOD.ItemList=CILMergeAOD()" + + echo "art-result: $? AODMerge" + + set +e + + checkFile.py Nightly_AOD_electron.pool.root > checkFile_Nightly_electron.txt + + echo "art-result: $? checks_files" + + get_files -jo egamma_art_checker_joboptions.py + athena -c "particleType='electron'" egamma_art_checker_joboptions.py + + echo "art-result: $? athena_job" + + EgammaARTmonitoring_plotsMaker.py /cvmfs/atlas-nightlies.cern.ch/repo/data/data-art/egammaValidation/Baseline_Files/rootFiles/Baseline-monitoring_electron_pileup.hist.root Nightly-monitoring_electron.hist.root electron + + echo "art-result: $? final_comparison" + + ;; + + *) + echo "Test $ArtProcess" + + mkdir "art_core_${ArtProcess}" + cd "art_core_${ArtProcess}" + + IFS=',' read -r -a file <<< "${ArtInFile}" + file=${file[${ArtProcess}]} + x="../$file" + + echo "Unsetting ATHENA_NUM_PROC=${ATHENA_NUM_PROC} and ATHENA_PROC_NUMBER=${ATHENA_PROC_NUMBER}" + unset ATHENA_NUM_PROC + unset ATHENA_PROC_NUMBER + + Reco_tf.py --inputRDOFile=$x --outputAODFile=Nightly_AOD_electron.pool.root --maxEvents=2000 --autoConfiguration="everything" --preExec="from ParticleBuilderOptions.AODFlags import AODFlags; AODFlags.ThinGeantTruth.set_Value_and_Lock(False); rec.doTrigger=False; rec.doMuon=False; rec.doTau=False ; from RecExConfig.RecAlgsFlags import recAlgs; recAlgs.doMuonSpShower=False ; rec.doBTagging=False ; recAlgs.doEFlow=False ; recAlgs.doEFlowJet=False ; recAlgs.doMissingET=False ; recAlgs.doMissingETSig=False ; from JetRec.JetRecFlags import jetFlags ; jetFlags.Enabled=False ; " --postExec "ESDtoAOD:CILMergeAOD.removeItem(\"xAOD::CaloClusterAuxContainer#CaloCalTopoClustersAux.SECOND_R.SECOND_LAMBDA.CENTER_MAG.CENTER_LAMBDA.FIRST_ENG_DENS.ENG_FRAC_MAX.ISOLATION.ENG_BAD_CELLS.N_BAD_CELLS.BADLARQ_FRAC.ENG_POS.AVG_LAR_Q.AVG_TILE_Q.EM_PROBABILITY.BadChannelList\");CILMergeAOD.add(\"xAOD::CaloClusterAuxContainer#CaloCalTopoClustersAux.SECOND_R.LATERAL.ENG_FRAC_EM.SECOND_LAMBDA.CENTER_MAG.CENTER_LAMBDA.FIRST_ENG_DENS.ENG_FRAC_MAX.ISOLATION.ENG_BAD_CELLS.N_BAD_CELLS.BADLARQ_FRAC.ENG_POS.AVG_LAR_Q.AVG_TILE_Q.EM_PROBABILITY.BadChannelList.ENG_CALIB_TOT.ENG_CALIB_OUT_L.ENG_CALIB_EMB0.ENG_CALIB_EME0.ENG_CALIB_TILEG3.ENG_CALIB_DEAD_TOT.ENG_CALIB_DEAD_EMB0.ENG_CALIB_DEAD_TILE0.ENG_CALIB_DEAD_TILEG3.ENG_CALIB_DEAD_EME0.ENG_CALIB_DEAD_HEC0.ENG_CALIB_DEAD_FCAL.ENG_CALIB_DEAD_LEAKAGE.ENG_CALIB_DEAD_UNCLASS.ENG_CALIB_FRAC_EM.ENG_CALIB_FRAC_HAD.ENG_CALIB_FRAC_REST\");StreamAOD.ItemList=CILMergeAOD()" "POOLMergeAthenaMPAOD0:CILMergeAOD.removeItem(\"xAOD::CaloClusterAuxContainer#CaloCalTopoClustersAux.SECOND_R.SECOND_LAMBDA.CENTER_MAG.CENTER_LAMBDA.FIRST_ENG_DENS.ENG_FRAC_MAX.ISOLATION.ENG_BAD_CELLS.N_BAD_CELLS.BADLARQ_FRAC.ENG_POS.AVG_LAR_Q.AVG_TILE_Q.EM_PROBABILITY.BadChannelList\");CILMergeAOD.add(\"xAOD::CaloClusterAuxContainer#CaloCalTopoClustersAux.SECOND_R.LATERAL.ENG_FRAC_EM.SECOND_LAMBDA.CENTER_MAG.CENTER_LAMBDA.FIRST_ENG_DENS.ENG_FRAC_MAX.ISOLATION.ENG_BAD_CELLS.N_BAD_CELLS.BADLARQ_FRAC.ENG_POS.AVG_LAR_Q.AVG_TILE_Q.EM_PROBABILITY.BadChannelList.ENG_CALIB_TOT.ENG_CALIB_OUT_L.ENG_CALIB_EMB0.ENG_CALIB_EME0.ENG_CALIB_TILEG3.ENG_CALIB_DEAD_TOT.ENG_CALIB_DEAD_EMB0.ENG_CALIB_DEAD_TILE0.ENG_CALIB_DEAD_TILEG3.ENG_CALIB_DEAD_EME0.ENG_CALIB_DEAD_HEC0.ENG_CALIB_DEAD_FCAL.ENG_CALIB_DEAD_LEAKAGE.ENG_CALIB_DEAD_UNCLASS.ENG_CALIB_FRAC_EM.ENG_CALIB_FRAC_HAD.ENG_CALIB_FRAC_REST\");StreamAOD.ItemList=CILMergeAOD()" + + echo "art-result: $? reconstruction" + + ;; +esac diff --git a/Reconstruction/egamma/egammaValidation/test/test_gamma_pileup.sh b/Reconstruction/egamma/egammaValidation/test/test_gamma_pileup.sh new file mode 100755 index 0000000000000000000000000000000000000000..7ea71140b2e4bdfa3b32e63eb194e45f66a05ca6 --- /dev/null +++ b/Reconstruction/egamma/egammaValidation/test/test_gamma_pileup.sh @@ -0,0 +1,73 @@ +#!/bin/sh +# +# art-description: ART Monitoring Tool for gamma Validation +# +# art-type: grid +# art-input: mc16_13TeV.423001.ParticleGun_single_photon_egammaET.recon.RDO.e3566_s3113_r10470 +# art-input-nfiles: 15 +# art-cores: 4 +# art-include: 21.0/Athena +# art-include: master/Athena +# art-output: *.hist.root +# art-output: *.txt +# art-output: *.png +# art-output: log.* + +echo "ArtProcess: $ArtProcess" + +case $ArtProcess in + + "start") + echo "Starting" + echo "List of files = " ${ArtInFile} + ;; + + "end") + echo "Ending" + + echo "Merging AODs" + echo "Unsetting ATHENA_NUM_PROC=${ATHENA_NUM_PROC} and ATHENA_PROC_NUMBER=${ATHENA_PROC_NUMBER}" + unset ATHENA_NUM_PROC + unset ATHENA_PROC_NUMBER + + AODMerge_tf.py --inputAODFile=art_core_*/Nightly_AOD_gamma.pool.root --outputAOD_MRGFile=Nightly_AOD_gamma.pool.root --postExec "all:CILMergeAOD.removeItem(\"xAOD::CaloClusterAuxContainer#CaloCalTopoClustersAux.SECOND_R.SECOND_LAMBDA.CENTER_MAG.CENTER_LAMBDA.FIRST_ENG_DENS.ENG_FRAC_MAX.ISOLATION.ENG_BAD_CELLS.N_BAD_CELLS.BADLARQ_FRAC.ENG_POS.AVG_LAR_Q.AVG_TILE_Q.EM_PROBABILITY.BadChannelList\");CILMergeAOD.add(\"xAOD::CaloClusterAuxContainer#CaloCalTopoClustersAux.SECOND_R.SECOND_LAMBDA.CENTER_MAG.CENTER_LAMBDA.FIRST_ENG_DENS.ENG_FRAC_MAX.ISOLATION.ENG_BAD_CELLS.N_BAD_CELLS.BADLARQ_FRAC.ENG_POS.AVG_LAR_Q.AVG_TILE_Q.EM_PROBABILITY.BadChannelList.ENG_CALIB_TOT.ENG_CALIB_OUT_L.ENG_CALIB_EMB0.ENG_CALIB_EME0.ENG_CALIB_TILEG3.ENG_CALIB_DEAD_TOT.ENG_CALIB_DEAD_EMB0.ENG_CALIB_DEAD_TILE0.ENG_CALIB_DEAD_TILEG3.ENG_CALIB_DEAD_EME0.ENG_CALIB_DEAD_HEC0.ENG_CALIB_DEAD_FCAL.ENG_CALIB_DEAD_LEAKAGE.ENG_CALIB_DEAD_UNCLASS.ENG_CALIB_FRAC_EM.ENG_CALIB_FRAC_HAD.ENG_CALIB_FRAC_REST.LATERAL.ENG_FRAC_EM\");StreamAOD.ItemList=CILMergeAOD()" + + echo "art-result: $? AODMerge" + + set +e + + checkFile.py Nightly_AOD_gamma.pool.root > checkFile_Nightly_gamma.txt + + echo "art-result: $? checks_files" + + get_files -jo egamma_art_checker_joboptions.py + athena -c "particleType='gamma'" egamma_art_checker_joboptions.py + + echo "art-result: $? athena_job" + + EgammaARTmonitoring_plotsMaker.py /cvmfs/atlas-nightlies.cern.ch/repo/data/data-art/egammaValidation/Baseline_Files/rootFiles/Baseline-monitoring_gamma_pileup.hist.root Nightly-monitoring_gamma.hist.root gamma + + echo "art-result: $? final_comparison" + + ;; + + *) + echo "Test $ArtProcess" + + mkdir "art_core_${ArtProcess}" + cd "art_core_${ArtProcess}" + + IFS=',' read -r -a file <<< "${ArtInFile}" + file=${file[${ArtProcess}]} + x="../$file" + + echo "Unsetting ATHENA_NUM_PROC=${ATHENA_NUM_PROC} and ATHENA_PROC_NUMBER=${ATHENA_PROC_NUMBER}" + unset ATHENA_NUM_PROC + unset ATHENA_PROC_NUMBER + + Reco_tf.py --inputRDOFile=$x --outputAODFile=Nightly_AOD_gamma.pool.root --maxEvents=2000 --autoConfiguration="everything" --preExec="from ParticleBuilderOptions.AODFlags import AODFlags; AODFlags.ThinGeantTruth.set_Value_and_Lock(False); rec.doTrigger=False; rec.doMuon=False; rec.doTau=False ; from RecExConfig.RecAlgsFlags import recAlgs; recAlgs.doMuonSpShower=False ; rec.doBTagging=False ; recAlgs.doEFlow=False ; recAlgs.doEFlowJet=False ; recAlgs.doMissingET=False ; recAlgs.doMissingETSig=False ; from JetRec.JetRecFlags import jetFlags ; jetFlags.Enabled=False ; " --postExec "ESDtoAOD:CILMergeAOD.removeItem(\"xAOD::CaloClusterAuxContainer#CaloCalTopoClustersAux.SECOND_R.SECOND_LAMBDA.CENTER_MAG.CENTER_LAMBDA.FIRST_ENG_DENS.ENG_FRAC_MAX.ISOLATION.ENG_BAD_CELLS.N_BAD_CELLS.BADLARQ_FRAC.ENG_POS.AVG_LAR_Q.AVG_TILE_Q.EM_PROBABILITY.BadChannelList\");CILMergeAOD.add(\"xAOD::CaloClusterAuxContainer#CaloCalTopoClustersAux.SECOND_R.LATERAL.ENG_FRAC_EM.SECOND_LAMBDA.CENTER_MAG.CENTER_LAMBDA.FIRST_ENG_DENS.ENG_FRAC_MAX.ISOLATION.ENG_BAD_CELLS.N_BAD_CELLS.BADLARQ_FRAC.ENG_POS.AVG_LAR_Q.AVG_TILE_Q.EM_PROBABILITY.BadChannelList.ENG_CALIB_TOT.ENG_CALIB_OUT_L.ENG_CALIB_EMB0.ENG_CALIB_EME0.ENG_CALIB_TILEG3.ENG_CALIB_DEAD_TOT.ENG_CALIB_DEAD_EMB0.ENG_CALIB_DEAD_TILE0.ENG_CALIB_DEAD_TILEG3.ENG_CALIB_DEAD_EME0.ENG_CALIB_DEAD_HEC0.ENG_CALIB_DEAD_FCAL.ENG_CALIB_DEAD_LEAKAGE.ENG_CALIB_DEAD_UNCLASS.ENG_CALIB_FRAC_EM.ENG_CALIB_FRAC_HAD.ENG_CALIB_FRAC_REST\");StreamAOD.ItemList=CILMergeAOD()" "POOLMergeAthenaMPAOD0:CILMergeAOD.removeItem(\"xAOD::CaloClusterAuxContainer#CaloCalTopoClustersAux.SECOND_R.SECOND_LAMBDA.CENTER_MAG.CENTER_LAMBDA.FIRST_ENG_DENS.ENG_FRAC_MAX.ISOLATION.ENG_BAD_CELLS.N_BAD_CELLS.BADLARQ_FRAC.ENG_POS.AVG_LAR_Q.AVG_TILE_Q.EM_PROBABILITY.BadChannelList\");CILMergeAOD.add(\"xAOD::CaloClusterAuxContainer#CaloCalTopoClustersAux.SECOND_R.LATERAL.ENG_FRAC_EM.SECOND_LAMBDA.CENTER_MAG.CENTER_LAMBDA.FIRST_ENG_DENS.ENG_FRAC_MAX.ISOLATION.ENG_BAD_CELLS.N_BAD_CELLS.BADLARQ_FRAC.ENG_POS.AVG_LAR_Q.AVG_TILE_Q.EM_PROBABILITY.BadChannelList.ENG_CALIB_TOT.ENG_CALIB_OUT_L.ENG_CALIB_EMB0.ENG_CALIB_EME0.ENG_CALIB_TILEG3.ENG_CALIB_DEAD_TOT.ENG_CALIB_DEAD_EMB0.ENG_CALIB_DEAD_TILE0.ENG_CALIB_DEAD_TILEG3.ENG_CALIB_DEAD_EME0.ENG_CALIB_DEAD_HEC0.ENG_CALIB_DEAD_FCAL.ENG_CALIB_DEAD_LEAKAGE.ENG_CALIB_DEAD_UNCLASS.ENG_CALIB_FRAC_EM.ENG_CALIB_FRAC_HAD.ENG_CALIB_FRAC_REST\");StreamAOD.ItemList=CILMergeAOD()" + + echo "art-result: $? reconstruction" + + ;; +esac diff --git a/Simulation/FastShower/FastCaloSim/src/FastShowerCellBuilderTool.cxx b/Simulation/FastShower/FastCaloSim/src/FastShowerCellBuilderTool.cxx index 809c9169f361c4f745e363f78af670648780bc2f..cc7aed96978d965068ea9833a214e95d72009729 100755 --- a/Simulation/FastShower/FastCaloSim/src/FastShowerCellBuilderTool.cxx +++ b/Simulation/FastShower/FastCaloSim/src/FastShowerCellBuilderTool.cxx @@ -1397,7 +1397,14 @@ StatusCode FastShowerCellBuilderTool::process_particle(CaloCellContainer* theCel return StatusCode::SUCCESS; } - if(p.E>=3 && p.E*Ein>2000) { + float ERatioThresh = 3; + if (std::abs(Epara->eta() - 1.37) < 0.01) { + // Increase threshold in the gap region. It's possible for a shower + // to fluctuate to have almost all its energy in TileGap3, which has + // a relatively small weight. + ERatioThresh = 4; + } + if(p.E>=ERatioThresh && p.E*Ein>2000) { ATH_MSG_WARNING("particle energy/truth="<<p.E); ATH_MSG_WARNING(" - "<<particle_info_str.str()); ATH_MSG_WARNING(" parametrization : "<< Epara->GetTitle()); diff --git a/Simulation/G4Utilities/G4UserActions/G4UserActions/RadiationMapsMaker.h b/Simulation/G4Utilities/G4UserActions/G4UserActions/RadiationMapsMaker.h index 3ab905b05174adf22d5be81f43aae86fe2e15012..b8701db37414ef49c8aee85cdfea5db62f0e1190 100644 --- a/Simulation/G4Utilities/G4UserActions/G4UserActions/RadiationMapsMaker.h +++ b/Simulation/G4Utilities/G4UserActions/G4UserActions/RadiationMapsMaker.h @@ -61,6 +61,11 @@ namespace G4UA int nBinslogEo = 45; double logEMino = -2.; // min log10(E_kin/MeV) double logEMaxo = 7.; // max log10(E_kin/MeV) + + // time dependent TID maps + int nBinslogT = 20; + double logTMin = -9.; // log10(t_cut/s); first bin for t < 1 ns + double logTMax = 11.; // log10(t_cut/s); last bin for t < 3169 a }; @@ -177,7 +182,14 @@ namespace G4UA std::vector<double> m_rz_rest_spec; /// vector of e^+/- spectra in log10(E/MeV) bins and the full 2d grid std::vector<double> m_full_rz_rest_spec; - + + // time dependent maps + + /// vector of time dependent TID in zoom 2d grid + std::vector<double> m_rz_tid_time; + /// vector of time dependent TID in full 2d grid + std::vector<double> m_full_rz_tid_time; + void merge(const Report& maps); }; diff --git a/Simulation/G4Utilities/G4UserActions/share/jobOptions.RadiationMapsMaker.py b/Simulation/G4Utilities/G4UserActions/share/jobOptions.RadiationMapsMaker.py index f5fed21f0be49d209ea76641ca208d8828db2098..1eac9d9a1e29d7e4ac8cbb83ecb353d2f745055b 100644 --- a/Simulation/G4Utilities/G4UserActions/share/jobOptions.RadiationMapsMaker.py +++ b/Simulation/G4Utilities/G4UserActions/share/jobOptions.RadiationMapsMaker.py @@ -10,6 +10,7 @@ from G4UserActions.G4UserActionsConf import G4UA__RadiationMapsMakerTool # radmaptool.NBinsZ = 240 # radmaptool.NBinsLogEn = 90 # radmaptool.NBinsLogEo = 45 +# radmaptool.NBinsLogTimeCut = 20 # radmaptool.NBinsR3D = 30 # radmaptool.NBinsZ3D = 60 # radmaptool.NBinsPhi3D = 32 @@ -27,6 +28,8 @@ from G4UserActions.G4UserActionsConf import G4UA__RadiationMapsMakerTool # radmaptool.LogEMaxn = 7.0 # in log10(E/MeV) # radmaptool.LogEMino = -2.0 # in log10(E/MeV) # radmaptool.LogEMaxo = 7.0 # in log10(E/MeV) +# radmaptool.LogTMin = -9.0 # in log10(t_cut/s) +# radmaptool.LogTMax = 11.0 # in log10(t_cut/s) # simFlags.OptionalUserActionList.addAction('G4UA::RadiationMapsMakerTool',['Run','Step']) diff --git a/Simulation/G4Utilities/G4UserActions/src/RadiationMapsMaker.cxx b/Simulation/G4Utilities/G4UserActions/src/RadiationMapsMaker.cxx index 4e791a49b6e7bc4b4e4ba61a7b554f2a41379ccb..1451e193c46f940e30508a4da7c6e0ca448d4983 100644 --- a/Simulation/G4Utilities/G4UserActions/src/RadiationMapsMaker.cxx +++ b/Simulation/G4Utilities/G4UserActions/src/RadiationMapsMaker.cxx @@ -105,6 +105,15 @@ namespace G4UA{ m_3d_chad[i] += maps.m_3d_chad[i]; } + // all time 2d vectors have same size + for(unsigned int i=0;i<maps.m_rz_tid_time.size();i++) { + // zoom 2d + m_rz_tid_time [i] += maps.m_rz_tid_time [i]; + + // full 2d + m_full_rz_tid_time [i] += maps.m_full_rz_tid_time [i]; + } + for(unsigned int i=0;i<maps.m_3d_vol.size();i++) { // need volume fraction only if particular material is selected m_3d_vol [i] += maps.m_3d_vol [i]; @@ -158,6 +167,9 @@ namespace G4UA{ m_maps.m_3d_neut.resize(0); m_maps.m_3d_chad.resize(0); + m_maps.m_rz_tid_time .resize(0); + m_maps.m_full_rz_tid_time .resize(0); + m_maps.m_rz_neut_spec .resize(0); m_maps.m_full_rz_neut_spec.resize(0); m_maps.m_rz_gamm_spec .resize(0); @@ -206,6 +218,9 @@ namespace G4UA{ m_maps.m_3d_neut.resize(m_config.nBinsz3d*m_config.nBinsr3d*m_config.nBinsphi3d,0.0); m_maps.m_3d_chad.resize(m_config.nBinsz3d*m_config.nBinsr3d*m_config.nBinsphi3d,0.0); + m_maps.m_rz_tid_time .resize(m_config.nBinsz*m_config.nBinsr*m_config.nBinslogT,0.0); + m_maps.m_full_rz_tid_time .resize(m_config.nBinsz*m_config.nBinsr*m_config.nBinslogT,0.0); + m_maps.m_rz_neut_spec .resize(m_config.nBinsz*m_config.nBinsr*m_config.nBinslogEn,0.0); m_maps.m_full_rz_neut_spec.resize(m_config.nBinsz*m_config.nBinsr*m_config.nBinslogEn,0.0); m_maps.m_rz_gamm_spec .resize(m_config.nBinsz*m_config.nBinsr*m_config.nBinslogEo,0.0); @@ -338,6 +353,23 @@ namespace G4UA{ double rho = aStep->GetTrack()->GetMaterial()->GetDensity()/CLHEP::g*CLHEP::cm3; + // get time of step as average between pre- and post-step point + G4StepPoint* pre_step_point = aStep->GetPreStepPoint(); + G4StepPoint* post_step_point = aStep->GetPostStepPoint(); + G4ThreeVector startPoint = pre_step_point->GetPosition(); + G4ThreeVector endPoint = post_step_point->GetPosition(); + G4ThreeVector p = (startPoint + endPoint) * 0.5; + + double timeOfFlight = (pre_step_point->GetGlobalTime() + + post_step_point->GetGlobalTime()) * 0.5; + + // then compute time difference to a particle traveling with speed of light until this position + double deltatime = (timeOfFlight - p.mag()/CLHEP::c_light)/CLHEP::s; + + // and use the log10 of that time difference in seconds to fill time-dependent histograms + // note that the upper bin boundary is the relevant cut. The first bin contains thus all times even shorter than the first lower bin boundary + double logt = (deltatime<0?m_config.logTMin-1:log10(deltatime)); + bool goodMaterial(false); if (m_config.material.empty()) { @@ -406,7 +438,10 @@ namespace G4UA{ double dE_ION = dE_TOT-dE_NIEL; for(unsigned int i=0;i<nStep;i++) { - double absz = fabs(z0+dz*(i+0.5)); + double abszorz = z0+dz*(i+0.5); + // if |z| instead of z take abs value + if ( m_config.zMinFull >= 0 ) abszorz = fabs(abszorz); + double rr = sqrt(pow(x0+dx*(i+0.5),2)+ pow(y0+dy*(i+0.5),2)); double pphi = atan2(y0+dy*(i+0.5),x0+dx*(i+0.5))*180/M_PI; @@ -418,15 +453,21 @@ namespace G4UA{ int vBinFullSpecn = -1; int vBinZoomSpeco = -1; int vBinFullSpeco = -1; + int vBinZoomTime = -1; + int vBinFullTime = -1; // zoom 2d - if ( m_config.zMinZoom < absz && - m_config.zMaxZoom > absz ) { - int iz = (absz-m_config.zMinZoom)/(m_config.zMaxZoom-m_config.zMinZoom)*m_config.nBinsz; + if ( m_config.zMinZoom < abszorz && + m_config.zMaxZoom > abszorz ) { + int iz = (abszorz-m_config.zMinZoom)/(m_config.zMaxZoom-m_config.zMinZoom)*m_config.nBinsz; if ( m_config.rMinZoom < rr && m_config.rMaxZoom > rr ) { int ir = (rr-m_config.rMinZoom)/(m_config.rMaxZoom-m_config.rMinZoom)*m_config.nBinsr; vBinZoom = m_config.nBinsr*iz+ir; + if ( m_config.logTMax > logt ){ + int ilt = (logt < m_config.logTMin?0:(logt-m_config.logTMin)/(m_config.logTMax-m_config.logTMin)*m_config.nBinslogT); + vBinZoomTime = m_config.nBinsr*m_config.nBinslogT*iz+ir*m_config.nBinslogT+ilt; + } if ( m_config.logEMinn < logEKin && m_config.logEMaxn > logEKin && (pdgid == 6 || pdgid == 7)) { @@ -443,13 +484,17 @@ namespace G4UA{ } // full 2d - if ( m_config.zMinFull < absz && - m_config.zMaxFull > absz ) { - int iz = (absz-m_config.zMinFull)/(m_config.zMaxFull-m_config.zMinFull)*m_config.nBinsz; + if ( m_config.zMinFull < abszorz && + m_config.zMaxFull > abszorz ) { + int iz = (abszorz-m_config.zMinFull)/(m_config.zMaxFull-m_config.zMinFull)*m_config.nBinsz; if ( m_config.rMinFull < rr && m_config.rMaxFull > rr ) { int ir = (rr-m_config.rMinFull)/(m_config.rMaxFull-m_config.rMinFull)*m_config.nBinsr; vBinFull = m_config.nBinsr*iz+ir; + if ( m_config.logTMax > logt ){ + int ilt = (logt < m_config.logTMin?0:(logt-m_config.logTMin)/(m_config.logTMax-m_config.logTMin)*m_config.nBinslogT); + vBinFullTime = m_config.nBinsr*m_config.nBinslogT*iz+ir*m_config.nBinslogT+ilt; + } if ( m_config.logEMinn < logEKin && m_config.logEMaxn > logEKin && (pdgid == 6 || pdgid == 7)) { @@ -466,9 +511,9 @@ namespace G4UA{ } // zoom 3d - if ( m_config.zMinZoom < absz && - m_config.zMaxZoom > absz ) { - int iz = (absz-m_config.zMinZoom)/(m_config.zMaxZoom-m_config.zMinZoom)*m_config.nBinsz3d; + if ( m_config.zMinZoom < abszorz && + m_config.zMaxZoom > abszorz ) { + int iz = (abszorz-m_config.zMinZoom)/(m_config.zMaxZoom-m_config.zMinZoom)*m_config.nBinsz3d; if ( m_config.rMinZoom < rr && m_config.rMaxZoom > rr ) { int ir = (rr-m_config.rMinZoom)/(m_config.rMaxZoom-m_config.rMinZoom)*m_config.nBinsr3d; @@ -503,6 +548,9 @@ namespace G4UA{ m_maps.m_rz_eion[vBinZoom] += dE_ION; } } + if ( goodMaterial && vBinZoomTime >=0 ) { + m_maps.m_rz_tid_time[vBinZoomTime] += dE_ION/rho; + } if ( goodMaterial && vBinFull >=0 ) { if ( pdgid == 999 ) { m_maps.m_full_rz_tid [vBinFull] += dl; @@ -513,6 +561,9 @@ namespace G4UA{ m_maps.m_full_rz_eion[vBinFull] += dE_ION; } } + if ( goodMaterial && vBinFullTime >=0 ) { + m_maps.m_full_rz_tid_time[vBinFullTime] += dE_ION/rho; + } if ( goodMaterial && vBin3d >=0 ) { if ( pdgid == 999 ) { m_maps.m_3d_tid [vBin3d] += dl; diff --git a/Simulation/G4Utilities/G4UserActions/src/RadiationMapsMakerTool.cxx b/Simulation/G4Utilities/G4UserActions/src/RadiationMapsMakerTool.cxx index 461f0d9f8824c77652cd8d6a25b4a923b153fc38..b9ee2a5c3de40da5411cd4b384871a1df0799f56 100644 --- a/Simulation/G4Utilities/G4UserActions/src/RadiationMapsMakerTool.cxx +++ b/Simulation/G4Utilities/G4UserActions/src/RadiationMapsMakerTool.cxx @@ -20,39 +20,44 @@ namespace G4UA{ /// Output Filename for the Radiation Maps declareProperty("RadMapsFileName", m_radMapsFileName); /// Name of the material to make radiation maps for (take all if empty) - declareProperty("Material" , m_config.material); + declareProperty("Material" , m_config.material); /// map granularities /// number of bins in r and z for all 2D maps - declareProperty("NBinsR" , m_config.nBinsr); - declareProperty("NBinsZ" , m_config.nBinsz); + declareProperty("NBinsR" , m_config.nBinsr); + declareProperty("NBinsZ" , m_config.nBinsz); /// number of bins in logE for energy spectra of neutrons in 2D grids - declareProperty("NBinsLogEn", m_config.nBinslogEn); + declareProperty("NBinsLogEn" , m_config.nBinslogEn); /// number of bins in logE for energy spectra of other particles in 2D grids - declareProperty("NBinsLogEo", m_config.nBinslogEo); + declareProperty("NBinsLogEo" , m_config.nBinslogEo); /// number of bins in r, z and phi for all 3D maps - declareProperty("NBinsR3D" , m_config.nBinsr3d); - declareProperty("NBinsZ3D" , m_config.nBinsz3d); - declareProperty("NBinsPhi3D", m_config.nBinsphi3d); + declareProperty("NBinsR3D" , m_config.nBinsr3d); + declareProperty("NBinsZ3D" , m_config.nBinsz3d); + declareProperty("NBinsPhi3D" , m_config.nBinsphi3d); + /// number of bins in logTimeCut for time dependent TID 2D maps + declareProperty("NBinsLogTimeCut", m_config.nBinslogT); /// map ranges /// for Zoomed area in 2D and 3D - declareProperty("RMinZoom" , m_config.rMinZoom); - declareProperty("RMaxZoom" , m_config.rMaxZoom); - declareProperty("ZMinZoom" , m_config.zMinZoom); - declareProperty("ZMaxZoom" , m_config.zMaxZoom); + declareProperty("RMinZoom" , m_config.rMinZoom); + declareProperty("RMaxZoom" , m_config.rMaxZoom); + declareProperty("ZMinZoom" , m_config.zMinZoom); + declareProperty("ZMaxZoom" , m_config.zMaxZoom); /// for Full detector in 2D - declareProperty("RMinFull" , m_config.rMinFull); - declareProperty("RMaxFull" , m_config.rMaxFull); - declareProperty("ZMinFull" , m_config.zMinFull); - declareProperty("ZMaxFull" , m_config.zMaxFull); + declareProperty("RMinFull" , m_config.rMinFull); + declareProperty("RMaxFull" , m_config.rMaxFull); + declareProperty("ZMinFull" , m_config.zMinFull); + declareProperty("ZMaxFull" , m_config.zMaxFull); /// for Zoomed area in 3D - declareProperty("PhiMinZoom", m_config.phiMinZoom); - declareProperty("PhiMaxZoom", m_config.phiMaxZoom); + declareProperty("PhiMinZoom" , m_config.phiMinZoom); + declareProperty("PhiMaxZoom" , m_config.phiMaxZoom); /// for logE of neutrons in 2D spectra - declareProperty("LogEMinn" , m_config.logEMinn); - declareProperty("LogEMaxn" , m_config.logEMaxn); + declareProperty("LogEMinn" , m_config.logEMinn); + declareProperty("LogEMaxn" , m_config.logEMaxn); /// for logE of other particles in 2D spectra - declareProperty("LogEMino" , m_config.logEMino); - declareProperty("LogEMaxo" , m_config.logEMaxo); + declareProperty("LogEMino" , m_config.logEMino); + declareProperty("LogEMaxo" , m_config.logEMaxo); + /// for logT in time-dependent TID 2D maps + declareProperty("LogTMin" , m_config.logTMin); + declareProperty("LogTMax" , m_config.logTMax); } //--------------------------------------------------------------------------- @@ -60,25 +65,27 @@ namespace G4UA{ //--------------------------------------------------------------------------- StatusCode RadiationMapsMakerTool::initialize() { - ATH_MSG_INFO( "Initializing " << name() << "\n" << - "OutputFile: " << m_radMapsFileName << "\n" << - "Material: " << m_config.material << "\n" << - "2D Maps: " << m_config.nBinsz << " |z|-bins, " << - m_config.nBinsr << " r-bins" << "\n" << - "Zoom: " << m_config.zMinZoom << " < |z|/cm < " << m_config.zMaxZoom << ", " << - m_config.rMinZoom << " < r/cm < " << m_config.rMaxZoom << "\n" << - "Full: " << m_config.zMinFull << " < |z|/cm < " << m_config.zMaxFull << ", " << - m_config.rMinFull << " < r/cm < " << m_config.rMaxFull << "\n" << - "Neutron Spectra: " << m_config.nBinslogEn << " log10E-bins" << ", " << - m_config.logEMinn << " < log10(E/MeV) < " << m_config.logEMaxn << "\n" << - "Other Spectra: " << m_config.nBinslogEo << " log10E-bins" << ", " << - m_config.logEMino << " < log10(E/MeV) < " << m_config.logEMaxo << "\n" << - "3D Maps: " << m_config.nBinsz3d << " |z|-bins, " << - m_config.nBinsr3d << " r-bins, " << - m_config.nBinsphi3d << " phi-bins" << "\n" << - "Zoom: " << m_config.zMinZoom << " < |z|/cm < " << m_config.zMaxZoom << ", " << - m_config.rMinZoom << " < r/cm < " << m_config.rMaxZoom << ", " << - m_config.phiMinZoom << " < phi/degrees < " << m_config.phiMaxZoom ); + ATH_MSG_INFO( "Initializing " << name() << "\n" << + "OutputFile: " << m_radMapsFileName << "\n" << + "Material: " << m_config.material << "\n" << + "2D Maps: " << m_config.nBinsz << (m_config.zMinFull<0?" z-bins, ":" |z|-bins, ") << + m_config.nBinsr << " r-bins" << "\n" << + "Zoom: " << m_config.zMinZoom << (m_config.zMinFull<0?" < z/cm < ":" < |z|/cm < ") << m_config.zMaxZoom << ", " << + m_config.rMinZoom << " < r/cm < " << m_config.rMaxZoom << "\n" << + "Full: " << m_config.zMinFull << (m_config.zMinFull<0?" < z/cm < ":" < |z|/cm < ") << m_config.zMaxFull << ", " << + m_config.rMinFull << " < r/cm < " << m_config.rMaxFull << "\n" << + "Neutron Spectra: " << m_config.nBinslogEn << " log10E-bins" << ", " << + m_config.logEMinn << " < log10(E/MeV) < " << m_config.logEMaxn << "\n" << + "Other Spectra: " << m_config.nBinslogEo << " log10E-bins" << ", " << + m_config.logEMino << " < log10(E/MeV) < " << m_config.logEMaxo << "\n" << + "3D Maps: " << m_config.nBinsz3d << (m_config.zMinFull<0?" z-bins, ":" |z|-bins, ") << + m_config.nBinsr3d << " r-bins, " << + m_config.nBinsphi3d << " phi-bins" << "\n" << + "Zoom: " << m_config.zMinZoom << (m_config.zMinFull<0?" < z/cm < ":" < |z|/cm < ") << m_config.zMaxZoom << ", " << + m_config.rMinZoom << " < r/cm < " << m_config.rMaxZoom << ", " << + m_config.phiMinZoom << " < phi/degrees < " << m_config.phiMaxZoom << "\n" << + "Time TID Maps: " << m_config.nBinslogT << " Time-cut bins, " << + m_config.logTMin << " < log10(t_cut/s) < " << m_config.logTMax ); return StatusCode::SUCCESS; } @@ -128,6 +135,9 @@ namespace G4UA{ m_report.m_rz_rest_spec .resize(0); m_report.m_full_rz_rest_spec.resize(0); + m_report.m_rz_tid_time .resize(0); + m_report.m_full_rz_tid_time .resize(0); + if (!m_config.material.empty()) { // need volume fraction only if particular material is selected // 2d zoom @@ -178,6 +188,10 @@ namespace G4UA{ m_report.m_full_rz_prot_spec.resize(m_config.nBinsz*m_config.nBinsr*m_config.nBinslogEo,0.0); m_report.m_rz_rest_spec .resize(m_config.nBinsz*m_config.nBinsr*m_config.nBinslogEo,0.0); m_report.m_full_rz_rest_spec.resize(m_config.nBinsz*m_config.nBinsr*m_config.nBinslogEo,0.0); + + m_report.m_rz_tid_time .resize(m_config.nBinsz*m_config.nBinsr*m_config.nBinslogT,0.0); + m_report.m_full_rz_tid_time .resize(m_config.nBinsz*m_config.nBinsr*m_config.nBinslogT,0.0); + if (!m_config.material.empty()) { // need volume fraction only if particular material is selected // 2d zoom @@ -203,12 +217,14 @@ namespace G4UA{ TH2D * h_rz_neut = new TH2D("rz_neut","rz_neut",m_config.nBinsz,m_config.zMinZoom,m_config.zMaxZoom,m_config.nBinsr,m_config.rMinZoom,m_config.rMaxZoom); TH2D * h_rz_chad = new TH2D("rz_chad","rz_chad",m_config.nBinsz,m_config.zMinZoom,m_config.zMaxZoom,m_config.nBinsr,m_config.rMinZoom,m_config.rMaxZoom); - h_rz_tid ->SetXTitle("|z| [cm]"); - h_rz_eion ->SetXTitle("|z| [cm]"); - h_rz_niel ->SetXTitle("|z| [cm]"); - h_rz_h20 ->SetXTitle("|z| [cm]"); - h_rz_neut ->SetXTitle("|z| [cm]"); - h_rz_chad ->SetXTitle("|z| [cm]"); + const char * xtitle = (m_config.zMinFull<0?"z [cm]":"|z| [cm]"); + + h_rz_tid ->SetXTitle(xtitle); + h_rz_eion ->SetXTitle(xtitle); + h_rz_niel ->SetXTitle(xtitle); + h_rz_h20 ->SetXTitle(xtitle); + h_rz_neut ->SetXTitle(xtitle); + h_rz_chad ->SetXTitle(xtitle); h_rz_tid ->SetYTitle("r [cm]"); h_rz_eion ->SetYTitle("r [cm]"); @@ -231,12 +247,12 @@ namespace G4UA{ TH2D *h_full_rz_neut = new TH2D("full_rz_neut","full_rz_neut",m_config.nBinsz,m_config.zMinFull,m_config.zMaxFull,m_config.nBinsr,m_config.rMinFull,m_config.rMaxFull); TH2D *h_full_rz_chad = new TH2D("full_rz_chad","full_rz_chad",m_config.nBinsz,m_config.zMinFull,m_config.zMaxFull,m_config.nBinsr,m_config.rMinFull,m_config.rMaxFull); - h_full_rz_tid ->SetXTitle("|z| [cm]"); - h_full_rz_eion ->SetXTitle("|z| [cm]"); - h_full_rz_niel ->SetXTitle("|z| [cm]"); - h_full_rz_h20 ->SetXTitle("|z| [cm]"); - h_full_rz_neut ->SetXTitle("|z| [cm]"); - h_full_rz_chad ->SetXTitle("|z| [cm]"); + h_full_rz_tid ->SetXTitle(xtitle); + h_full_rz_eion ->SetXTitle(xtitle); + h_full_rz_niel ->SetXTitle(xtitle); + h_full_rz_h20 ->SetXTitle(xtitle); + h_full_rz_neut ->SetXTitle(xtitle); + h_full_rz_chad ->SetXTitle(xtitle); h_full_rz_tid ->SetYTitle("r [cm]"); h_full_rz_eion ->SetYTitle("r [cm]"); @@ -259,12 +275,12 @@ namespace G4UA{ TH3D * h_3d_neut = new TH3D("h3d_neut","h3d_neut",m_config.nBinsz3d,m_config.zMinZoom,m_config.zMaxZoom,m_config.nBinsr3d,m_config.rMinZoom,m_config.rMaxZoom,m_config.nBinsphi3d,m_config.phiMinZoom,m_config.phiMaxZoom); TH3D * h_3d_chad = new TH3D("h3d_chad","h3d_chad",m_config.nBinsz3d,m_config.zMinZoom,m_config.zMaxZoom,m_config.nBinsr3d,m_config.rMinZoom,m_config.rMaxZoom,m_config.nBinsphi3d,m_config.phiMinZoom,m_config.phiMaxZoom); - h_3d_tid ->SetXTitle("|z| [cm]"); - h_3d_eion ->SetXTitle("|z| [cm]"); - h_3d_niel ->SetXTitle("|z| [cm]"); - h_3d_h20 ->SetXTitle("|z| [cm]"); - h_3d_neut ->SetXTitle("|z| [cm]"); - h_3d_chad ->SetXTitle("|z| [cm]"); + h_3d_tid ->SetXTitle(xtitle); + h_3d_eion ->SetXTitle(xtitle); + h_3d_niel ->SetXTitle(xtitle); + h_3d_h20 ->SetXTitle(xtitle); + h_3d_neut ->SetXTitle(xtitle); + h_3d_chad ->SetXTitle(xtitle); h_3d_tid ->SetYTitle("r [cm]"); h_3d_eion ->SetYTitle("r [cm]"); @@ -291,12 +307,12 @@ namespace G4UA{ TH3D *h_full_rz_neut_spec = new TH3D("full_rz_neut_spec","full_rz_neut_spec",m_config.nBinsz,m_config.zMinFull,m_config.zMaxFull,m_config.nBinsr,m_config.rMinFull,m_config.rMaxFull,m_config.nBinslogEn,m_config.logEMinn,m_config.logEMaxn); TH3D *h_rz_neut_spec = new TH3D("rz_neut_spec","rz_neut_spec",m_config.nBinsz,m_config.zMinZoom,m_config.zMaxZoom,m_config.nBinsr,m_config.rMinZoom,m_config.rMaxZoom,m_config.nBinslogEn,m_config.logEMinn,m_config.logEMaxn); - h_rz_neut_spec ->SetXTitle("|z| [cm]"); + h_rz_neut_spec ->SetXTitle(xtitle); h_rz_neut_spec ->SetYTitle("r [cm]"); h_rz_neut_spec ->SetZTitle("log_{10}(E/MeV)"); h_rz_neut_spec ->SetTitle("FLUX [n(log_{10}(E/MeV))/cm^{2}]"); - h_full_rz_neut_spec ->SetXTitle("|z| [cm]"); + h_full_rz_neut_spec ->SetXTitle(xtitle); h_full_rz_neut_spec ->SetYTitle("r [cm]"); h_full_rz_neut_spec ->SetZTitle("log_{10}(E/MeV)"); h_full_rz_neut_spec ->SetTitle("FLUX [n(log_{10}(E/MeV))/cm^{2}]"); @@ -305,12 +321,12 @@ namespace G4UA{ TH3D *h_full_rz_gamm_spec = new TH3D("full_rz_gamm_spec","full_rz_gamm_spec",m_config.nBinsz,m_config.zMinFull,m_config.zMaxFull,m_config.nBinsr,m_config.rMinFull,m_config.rMaxFull,m_config.nBinslogEo,m_config.logEMino,m_config.logEMaxo); TH3D *h_rz_gamm_spec = new TH3D("rz_gamm_spec","rz_gamm_spec",m_config.nBinsz,m_config.zMinZoom,m_config.zMaxZoom,m_config.nBinsr,m_config.rMinZoom,m_config.rMaxZoom,m_config.nBinslogEo,m_config.logEMino,m_config.logEMaxo); - h_rz_gamm_spec ->SetXTitle("|z| [cm]"); + h_rz_gamm_spec ->SetXTitle(xtitle); h_rz_gamm_spec ->SetYTitle("r [cm]"); h_rz_gamm_spec ->SetZTitle("log_{10}(E/MeV)"); h_rz_gamm_spec ->SetTitle("FLUX [#gamma(log_{10}(E/MeV))/cm^{2}]"); - h_full_rz_gamm_spec ->SetXTitle("|z| [cm]"); + h_full_rz_gamm_spec ->SetXTitle(xtitle); h_full_rz_gamm_spec ->SetYTitle("r [cm]"); h_full_rz_gamm_spec ->SetZTitle("log_{10}(E/MeV)"); h_full_rz_gamm_spec ->SetTitle("FLUX [#gamma(log_{10}(E/MeV))/cm^{2}]"); @@ -319,12 +335,12 @@ namespace G4UA{ TH3D *h_full_rz_elec_spec = new TH3D("full_rz_elec_spec","full_rz_elec_spec",m_config.nBinsz,m_config.zMinFull,m_config.zMaxFull,m_config.nBinsr,m_config.rMinFull,m_config.rMaxFull,m_config.nBinslogEo,m_config.logEMino,m_config.logEMaxo); TH3D *h_rz_elec_spec = new TH3D("rz_elec_spec","rz_elec_spec",m_config.nBinsz,m_config.zMinZoom,m_config.zMaxZoom,m_config.nBinsr,m_config.rMinZoom,m_config.rMaxZoom,m_config.nBinslogEo,m_config.logEMino,m_config.logEMaxo); - h_rz_elec_spec ->SetXTitle("|z| [cm]"); + h_rz_elec_spec ->SetXTitle(xtitle); h_rz_elec_spec ->SetYTitle("r [cm]"); h_rz_elec_spec ->SetZTitle("log_{10}(E/MeV)"); h_rz_elec_spec ->SetTitle("FLUX [e^{#pm}(log_{10}(E/MeV))/cm^{2}]"); - h_full_rz_elec_spec ->SetXTitle("|z| [cm]"); + h_full_rz_elec_spec ->SetXTitle(xtitle); h_full_rz_elec_spec ->SetYTitle("r [cm]"); h_full_rz_elec_spec ->SetZTitle("log_{10}(E/MeV)"); h_full_rz_elec_spec ->SetTitle("FLUX [e^{#pm}(log_{10}(E/MeV))/cm^{2}]"); @@ -333,12 +349,12 @@ namespace G4UA{ TH3D *h_full_rz_muon_spec = new TH3D("full_rz_muon_spec","full_rz_muon_spec",m_config.nBinsz,m_config.zMinFull,m_config.zMaxFull,m_config.nBinsr,m_config.rMinFull,m_config.rMaxFull,m_config.nBinslogEo,m_config.logEMino,m_config.logEMaxo); TH3D *h_rz_muon_spec = new TH3D("rz_muon_spec","rz_muon_spec",m_config.nBinsz,m_config.zMinZoom,m_config.zMaxZoom,m_config.nBinsr,m_config.rMinZoom,m_config.rMaxZoom,m_config.nBinslogEo,m_config.logEMino,m_config.logEMaxo); - h_rz_muon_spec ->SetXTitle("|z| [cm]"); + h_rz_muon_spec ->SetXTitle(xtitle); h_rz_muon_spec ->SetYTitle("r [cm]"); h_rz_muon_spec ->SetZTitle("log_{10}(E/MeV)"); h_rz_muon_spec ->SetTitle("FLUX [#mu^{#pm}(log_{10}(E/MeV))/cm^{2}]"); - h_full_rz_muon_spec ->SetXTitle("|z| [cm]"); + h_full_rz_muon_spec ->SetXTitle(xtitle); h_full_rz_muon_spec ->SetYTitle("r [cm]"); h_full_rz_muon_spec ->SetZTitle("log_{10}(E/MeV)"); h_full_rz_muon_spec ->SetTitle("FLUX [#mu^{#pm}(log_{10}(E/MeV))/cm^{2}]"); @@ -347,12 +363,12 @@ namespace G4UA{ TH3D *h_full_rz_pion_spec = new TH3D("full_rz_pion_spec","full_rz_pion_spec",m_config.nBinsz,m_config.zMinFull,m_config.zMaxFull,m_config.nBinsr,m_config.rMinFull,m_config.rMaxFull,m_config.nBinslogEo,m_config.logEMino,m_config.logEMaxo); TH3D *h_rz_pion_spec = new TH3D("rz_pion_spec","rz_pion_spec",m_config.nBinsz,m_config.zMinZoom,m_config.zMaxZoom,m_config.nBinsr,m_config.rMinZoom,m_config.rMaxZoom,m_config.nBinslogEo,m_config.logEMino,m_config.logEMaxo); - h_rz_pion_spec ->SetXTitle("|z| [cm]"); + h_rz_pion_spec ->SetXTitle(xtitle); h_rz_pion_spec ->SetYTitle("r [cm]"); h_rz_pion_spec ->SetZTitle("log_{10}(E/MeV)"); h_rz_pion_spec ->SetTitle("FLUX [#pi^{#pm}(log_{10}(E/MeV))/cm^{2}]"); - h_full_rz_pion_spec ->SetXTitle("|z| [cm]"); + h_full_rz_pion_spec ->SetXTitle(xtitle); h_full_rz_pion_spec ->SetYTitle("r [cm]"); h_full_rz_pion_spec ->SetZTitle("log_{10}(E/MeV)"); h_full_rz_pion_spec ->SetTitle("FLUX [#pi^{#pm}(log_{10}(E/MeV))/cm^{2}]"); @@ -361,12 +377,12 @@ namespace G4UA{ TH3D *h_full_rz_prot_spec = new TH3D("full_rz_prot_spec","full_rz_prot_spec",m_config.nBinsz,m_config.zMinFull,m_config.zMaxFull,m_config.nBinsr,m_config.rMinFull,m_config.rMaxFull,m_config.nBinslogEo,m_config.logEMino,m_config.logEMaxo); TH3D *h_rz_prot_spec = new TH3D("rz_prot_spec","rz_prot_spec",m_config.nBinsz,m_config.zMinZoom,m_config.zMaxZoom,m_config.nBinsr,m_config.rMinZoom,m_config.rMaxZoom,m_config.nBinslogEo,m_config.logEMino,m_config.logEMaxo); - h_rz_prot_spec ->SetXTitle("|z| [cm]"); + h_rz_prot_spec ->SetXTitle(xtitle); h_rz_prot_spec ->SetYTitle("r [cm]"); h_rz_prot_spec ->SetZTitle("log_{10}(E/MeV)"); h_rz_prot_spec ->SetTitle("FLUX [p(log_{10}(E/MeV))/cm^{2}]"); - h_full_rz_prot_spec ->SetXTitle("|z| [cm]"); + h_full_rz_prot_spec ->SetXTitle(xtitle); h_full_rz_prot_spec ->SetYTitle("r [cm]"); h_full_rz_prot_spec ->SetZTitle("log_{10}(E/MeV)"); h_full_rz_prot_spec ->SetTitle("FLUX [p(log_{10}(E/MeV))/cm^{2}]"); @@ -375,16 +391,26 @@ namespace G4UA{ TH3D *h_full_rz_rest_spec = new TH3D("full_rz_rest_spec","full_rz_rest_spec",m_config.nBinsz,m_config.zMinFull,m_config.zMaxFull,m_config.nBinsr,m_config.rMinFull,m_config.rMaxFull,m_config.nBinslogEo,m_config.logEMino,m_config.logEMaxo); TH3D *h_rz_rest_spec = new TH3D("rz_rest_spec","rz_rest_spec",m_config.nBinsz,m_config.zMinZoom,m_config.zMaxZoom,m_config.nBinsr,m_config.rMinZoom,m_config.rMaxZoom,m_config.nBinslogEo,m_config.logEMino,m_config.logEMaxo); - h_rz_rest_spec ->SetXTitle("|z| [cm]"); + h_rz_rest_spec ->SetXTitle(xtitle); h_rz_rest_spec ->SetYTitle("r [cm]"); h_rz_rest_spec ->SetZTitle("log_{10}(E/MeV)"); h_rz_rest_spec ->SetTitle("FLUX [rest(log_{10}(E/MeV))/cm^{2}]"); - h_full_rz_rest_spec ->SetXTitle("|z| [cm]"); + h_full_rz_rest_spec ->SetXTitle(xtitle); h_full_rz_rest_spec ->SetYTitle("r [cm]"); h_full_rz_rest_spec ->SetZTitle("log_{10}(E/MeV)"); h_full_rz_rest_spec ->SetTitle("FLUX [rest(log_{10}(E/MeV))/cm^{2}]"); + // time dependent TID maps + TH3D * h_rz_tid_time = new TH3D("rz_tid_time" ,"rz_tid_time" ,m_config.nBinsz,m_config.zMinZoom,m_config.zMaxZoom,m_config.nBinsr,m_config.rMinZoom,m_config.rMaxZoom,m_config.nBinslogT,m_config.logTMin,m_config.logTMax); + TH3D * h_full_rz_tid_time = new TH3D("full_rz_tid_time" ,"full_rz_tid_time" ,m_config.nBinsz,m_config.zMinFull,m_config.zMaxFull,m_config.nBinsr,m_config.rMinFull,m_config.rMaxFull,m_config.nBinslogT,m_config.logTMin,m_config.logTMax); + h_rz_tid_time ->SetXTitle(xtitle); + h_full_rz_tid_time->SetXTitle(xtitle); + h_rz_tid_time ->SetYTitle("r [cm]"); + h_full_rz_tid_time->SetYTitle("r [cm]"); + h_rz_tid_time ->SetZTitle("log_{10}(t_{cut}/s)"); + h_full_rz_tid_time->SetZTitle("log_{10}(t_{cut}/s)"); + TH2D * h_rz_vol = 0; TH2D * h_rz_norm = 0; TH2D * h_full_rz_vol = 0; @@ -406,8 +432,8 @@ namespace G4UA{ h_3d_vol = new TH3D("h3d_vol" ,"h3d_vol" ,m_config.nBinsz3d,m_config.zMinZoom,m_config.zMaxZoom,m_config.nBinsr3d,m_config.rMinZoom,m_config.rMaxZoom,m_config.nBinsphi3d,m_config.phiMinZoom,m_config.phiMaxZoom); h_3d_norm = new TH3D("h3d_norm","h3d_norm",m_config.nBinsz3d,m_config.zMinZoom,m_config.zMaxZoom,m_config.nBinsr3d,m_config.rMinZoom,m_config.rMaxZoom,m_config.nBinsphi3d,m_config.phiMinZoom,m_config.phiMaxZoom); - h_rz_vol ->SetXTitle("|z| [cm]"); - h_rz_norm ->SetXTitle("|z| [cm]"); + h_rz_vol ->SetXTitle(xtitle); + h_rz_norm ->SetXTitle(xtitle); h_rz_vol ->SetYTitle("r [cm]"); h_rz_norm ->SetYTitle("r [cm]"); std::string hname("Volume fraction of "); @@ -415,15 +441,15 @@ namespace G4UA{ h_rz_vol ->SetZTitle(hname.data()); h_rz_norm ->SetZTitle("Volume norm"); - h_full_rz_vol ->SetXTitle("|z| [cm]"); - h_full_rz_norm ->SetXTitle("|z| [cm]"); + h_full_rz_vol ->SetXTitle(xtitle); + h_full_rz_norm ->SetXTitle(xtitle); h_full_rz_vol ->SetYTitle("r [cm]"); h_full_rz_norm ->SetYTitle("r [cm]"); h_full_rz_vol ->SetZTitle(hname.data()); h_full_rz_norm ->SetZTitle("Volume norm"); - h_3d_vol ->SetXTitle("|z| [cm]"); - h_3d_norm ->SetXTitle("|z| [cm]"); + h_3d_vol ->SetXTitle(xtitle); + h_3d_norm ->SetXTitle(xtitle); h_3d_vol ->SetYTitle("r [cm]"); h_3d_norm ->SetYTitle("r [cm]"); h_3d_vol ->SetZTitle("#phi [#circ]"); @@ -432,7 +458,6 @@ namespace G4UA{ h_3d_norm ->SetTitle("Volume norm"); } - // normalize to volume element per bin for(int i=0;i<h_rz_tid->GetNbinsX();i++) { for(int j=0;j<h_rz_tid->GetNbinsY();j++) { @@ -442,7 +467,9 @@ namespace G4UA{ double r1=h_rz_tid->GetYaxis()->GetBinUpEdge(j+1); double z0=h_rz_tid->GetXaxis()->GetBinLowEdge(i+1); double z1=h_rz_tid->GetXaxis()->GetBinUpEdge(i+1); - double vol=2*(z1-z0)*M_PI*(r1*r1-r0*r0); + double vol=(z1-z0)*M_PI*(r1*r1-r0*r0); + // if |z| instead of z double the volume + if ( m_config.zMinFull >= 0 ) vol *= 2; double val; // TID val =m_report.m_rz_tid[vBin]; @@ -486,6 +513,13 @@ namespace G4UA{ val =m_report.m_rz_rest_spec[vBinE]; h_rz_rest_spec->SetBinContent(kBin,val/vol); } + // Time dependent TID maps + for(int k=0;k<h_rz_tid_time->GetNbinsZ();k++) { + int kBin = h_rz_tid_time->GetBin(i+1,j+1,k+1); + int vBinT = m_config.nBinsr*m_config.nBinslogT*i+j*m_config.nBinslogT+k; + val =m_report.m_rz_tid_time[vBinT]; + h_rz_tid_time->SetBinContent(kBin,val/vol); + } if (!m_config.material.empty()) { // need volume fraction only if particular material is selected // VOL @@ -510,6 +544,7 @@ namespace G4UA{ h_rz_pion_spec->Write(); h_rz_prot_spec->Write(); h_rz_rest_spec->Write(); + h_rz_tid_time->Write(); // normalize to volume element per bin for(int i=0;i<h_full_rz_tid->GetNbinsX();i++) { @@ -520,7 +555,9 @@ namespace G4UA{ double r1=h_full_rz_tid->GetYaxis()->GetBinUpEdge(j+1); double z0=h_full_rz_tid->GetXaxis()->GetBinLowEdge(i+1); double z1=h_full_rz_tid->GetXaxis()->GetBinUpEdge(i+1); - double vol=2*(z1-z0)*M_PI*(r1*r1-r0*r0); + double vol=(z1-z0)*M_PI*(r1*r1-r0*r0); + // if |z| instead of z double the volume + if ( m_config.zMinFull >= 0 ) vol *= 2; double val; // TID val =m_report.m_full_rz_tid[vBin]; @@ -564,6 +601,13 @@ namespace G4UA{ val =m_report.m_full_rz_rest_spec[vBinE]; h_full_rz_rest_spec->SetBinContent(kBin,val/vol); } + // Time dependent TID maps + for(int k=0;k<h_full_rz_tid_time->GetNbinsZ();k++) { + int kBin = h_full_rz_tid_time->GetBin(i+1,j+1,k+1); + int vBinT = m_config.nBinsr*m_config.nBinslogT*i+j*m_config.nBinslogT+k; + val =m_report.m_full_rz_tid_time[vBinT]; + h_full_rz_tid_time->SetBinContent(kBin,val/vol); + } if (!m_config.material.empty()) { // need volume fraction only if particular material is selected // VOL @@ -588,6 +632,7 @@ namespace G4UA{ h_full_rz_pion_spec->Write(); h_full_rz_prot_spec->Write(); h_full_rz_rest_spec->Write(); + h_full_rz_tid_time->Write(); // normalize to volume element per bin for(int i=0;i<h_3d_tid->GetNbinsX();i++) { /* |z| */ @@ -601,7 +646,9 @@ namespace G4UA{ double r1=h_3d_tid->GetYaxis()->GetBinUpEdge(j+1); double z0=h_3d_tid->GetXaxis()->GetBinLowEdge(i+1); double z1=h_3d_tid->GetXaxis()->GetBinUpEdge(i+1); - double vol=2*(z1-z0)*M_PI*(r1*r1-r0*r0)*(phi1-phi0)/360.; + double vol=(z1-z0)*M_PI*(r1*r1-r0*r0)*(phi1-phi0)/360.; + // if |z| instead of z double the volume + if ( m_config.zMinFull >= 0 ) vol *= 2; // assume that phi-range corresponds to full 360 degrees in case // lower phi boundary is 0 - i.e. all phi-segments mapped to first if ( m_config.phiMinZoom == 0 ) { diff --git a/Tools/PROCTools/python/RunTier0TestsTools.py b/Tools/PROCTools/python/RunTier0TestsTools.py index 3748d9b18c15fa190cebd15b9a071d736f5650f9..0f93fa2c55ad8a251c93208160065d39b49ee27a 100644 --- a/Tools/PROCTools/python/RunTier0TestsTools.py +++ b/Tools/PROCTools/python/RunTier0TestsTools.py @@ -23,8 +23,8 @@ ciRefFileMap = { 's3126-21.9' : 'v1', 's3126-22.0' : 'v1', # OverlayTier0Test_required-test - 'overlay-d1498-21.0' : 'v3', - 'overlay-d1498-22.0' : 'v1', + 'overlay-d1498-21.0' : 'v4', + 'overlay-d1498-22.0' : 'v17', 'overlay-bkg-21.0' : 'v1', 'overlay-bkg-22.0' : 'v1', } diff --git a/Tracking/TrkVertexFitter/TrkVKalVrtCore/src/CFit.cxx b/Tracking/TrkVertexFitter/TrkVKalVrtCore/src/CFit.cxx index 18c13688dbb84e96b8c6cb3458bc75f50ae25b4f..21e8bd1d43489468e5993f9c5cb43e3363c1649d 100755 --- a/Tracking/TrkVertexFitter/TrkVKalVrtCore/src/CFit.cxx +++ b/Tracking/TrkVertexFitter/TrkVKalVrtCore/src/CFit.cxx @@ -171,9 +171,9 @@ long int fitVertex(VKVertex * vk, long int iflag) { long int i, jerr, tk, it=0; - double chi2df, dparst[6]; + double dparst[6]; double chi2min, dxyzst[3], chi21s=11., chi22s=10., vShift; - double aermd[30],tmpd[30]; // temporary array + double aermd[6],tmpd[6]={0.}; // temporary arrays double tmpPer[5],tmpCov[15], tmpWgt[15]; double VrtMomCov[21],PartMom[4]; double vBx,vBy,vBz; @@ -189,6 +189,7 @@ long int fitVertex(VKVertex * vk, long int iflag) extern void cfsetdiag(long int , double *, double ); extern int cfInv5(double *cov, double *wgt ); extern void cfTrkCovarCorr(double *cov); + extern void FullMTXfill( VKVertex* , double *); // // New datastructure @@ -205,7 +206,6 @@ long int fitVertex(VKVertex * vk, long int iflag) VKTrack * trk=0; chi2min = 1e15; - chi2df = 0.; if( forcft_1.nmcnst && forcft_1.useMassCnst ) { //mass constraints are present std::vector<int> index; @@ -213,7 +213,7 @@ long int fitVertex(VKVertex * vk, long int iflag) if(forcft_.wmfit[ic]>0){ // new mass constraint index.clear(); for(tk=0; tk<NTRK; tk++){ if( forcft_.indtrkmc[ic*NTrkM + tk] )index.push_back(tk);} - vk->ConstraintList.push_back(new VKMassConstraint( NTRK, forcft_.wmfit[it], index, vk)); + vk->ConstraintList.push_back(new VKMassConstraint( NTRK, forcft_.wmfit[ic], index, vk)); } } //VKMassConstraint *ctmp=dynamic_cast<VKMassConstraint*>( vk->ConstraintList[0]); std::cout<<(*ctmp)<<'\n'; @@ -298,9 +298,9 @@ long int fitVertex(VKVertex * vk, long int iflag) myPropagator.Propagate(vk->TrackList[tk], vk->refV, targV, tmpPer, tmpCov); cfTrkCovarCorr(tmpCov); double eig5=cfSmallEigenvalue(tmpCov,5 ); - if(eig5<1.e-15 ){ + if(eig5>0 && eig5<1.e-15 ){ tmpCov[0]+=1.e-15; tmpCov[2]+=1.e-15; tmpCov[5]+=1.e-15; tmpCov[9]+=1.e-15; tmpCov[14]+=1.e-15; - }else if(tmpCov[0]>1.e9) { //Bad propagation with material. Try without it. + }else if(tmpCov[0]>1.e9 || eig5<0.) { //Bad propagation with material. Try without it. myPropagator.Propagate(-999, vk->TrackList[tk]->Charge, vk->TrackList[tk]->refPerig,vk->TrackList[tk]->refCovar, vk->refV, targV, tmpPer, tmpCov); @@ -386,8 +386,9 @@ long int fitVertex(VKVertex * vk, long int iflag) forcft_1.localbmag = vBz; vkalvrtbmag.bmag = vBz; vkalvrtbmag.bmagz = vBz; vkalvrtbmag.bmagy = vBy; vkalvrtbmag.bmagx = vBx; - if ( vk->passNearVertex ) { + if ( vk->passNearVertex && it>1 ) { //No necessary information at first iteration jerr = afterFit(vk, workarray_1.ader, vk->FVC.dcv, PartMom, VrtMomCov); + if(jerr!=0) return -17; // Non-invertable matrix for combined track cfdcopy( PartMom, &dparst[3], 3); //vertex part of it is filled above cfdcopy(VrtMomCov,vk->FVC.dcovf,21); //Used in chi2 caclulation later... cfdcopy( PartMom, vk->fitMom, 3); //save Momentum @@ -416,14 +417,15 @@ long int fitVertex(VKVertex * vk, long int iflag) } // // - if (chi22s > 1e8) { IERR = -1; return IERR; } // TOO HIGH CHI2 - BAD FIT + if (chi22s > 1e8) { return -1; } // TOO HIGH CHI2 - BAD FIT + if (chi22s != chi22s) { return -14; } // Chi2 == nan - BAD FIT for( i=0; i<3; i++) dxyzst[i] = vk->refIterV[i]+vk->fitV[i]; // fitted vertex in global frame //std::cout.precision(11); //std::cout<<"NNFIT Iter="<<it<<" Chi2ss="<< chi21s <<", "<<chi22s<<", "<<vShift<<'\n'; //std::cout<<"NNVertex="<<dxyzst[0]<<", "<<dxyzst[1]<<", "<<dxyzst[2]<<'\n'; //std::cout<<"-----------------------------------------------"<<'\n'; /* Test of convergence */ - chi2df = fabs(chi21s - chi22s); + double chi2df = fabs(chi21s - chi22s); /*---------------------Normal convergence--------------------*/ double PrecLimit = min(chi22s*1.e-4, forcft_1.IterationPrecision); //std::cout<<"Convergence="<< chi2df <<"<"<<PrecLimit<<" cnst="<<cnstRemnants<<"<"<<ConstraintAccuracy<<'\n'; @@ -443,7 +445,9 @@ long int fitVertex(VKVertex * vk, long int iflag) // Track near vertex constraint recalculation for next fit if ( vk->passNearVertex ) { - jerr = afterFit(vk, workarray_1.ader, vk->FVC.dcv, PartMom, VrtMomCov); + if(it==1)jerr = afterFit(vk, 0, vk->FVC.dcv, PartMom, VrtMomCov); + else jerr = afterFit(vk, workarray_1.ader, vk->FVC.dcv, PartMom, VrtMomCov); + if(jerr!=0) return -17; // Non-invertable matrix for combined track for( i=0; i<3; i++) dparst[i] = vk->refIterV[i]+vk->fitV[i]; // fitted vertex at global frame cfdcopy( PartMom, &dparst[3], 3); cfdcopy(VrtMomCov,vk->FVC.dcovf,21); //Used in chi2 caclulation later... diff --git a/Tracking/TrkVertexFitter/TrkVKalVrtCore/src/CascadeUtils.cxx b/Tracking/TrkVertexFitter/TrkVKalVrtCore/src/CascadeUtils.cxx index 37b4a10d780b8759eb60e64a4fb9e79d47483225..72fe6a2ca8cf9be3afcc6990a645bd1a56555999 100755 --- a/Tracking/TrkVertexFitter/TrkVKalVrtCore/src/CascadeUtils.cxx +++ b/Tracking/TrkVertexFitter/TrkVKalVrtCore/src/CascadeUtils.cxx @@ -87,9 +87,9 @@ int fixPseudoTrackPt(long int NPar, double * fullMtx, double * LSide) DerivT[iniPosTrk+it*3+2] = (sinth2sum*pt*cth)/(curv*ptsum); // dTheta/dC_i tpx+=pp[0]; tpy+=pp[1]; } - double iniV0Curv=myMagFld.getCnvCst()*vMagFld[iv]/sqrt(tpx*tpx+tpy*tpy); //initial PseudoTrack Curvature - if(csum<0)iniV0Curv *= -1.; - iniV0Curv *= vMagFld[ivnext]/vMagFld[iv]; //magnetic field correction +// double iniV0Curv=myMagFld.getCnvCst()*vMagFld[iv]/sqrt(tpx*tpx+tpy*tpy); //initial PseudoTrack Curvature +// if(csum<0)iniV0Curv *= -1.; +// iniV0Curv *= vMagFld[ivnext]/vMagFld[iv]; //magnetic field correction // //fill Full Matrix and left side vector // diff --git a/Tracking/TrkVertexFitter/TrkVKalVrtCore/src/Derclc1.cxx b/Tracking/TrkVertexFitter/TrkVKalVrtCore/src/Derclc1.cxx index 329f3ea469cef36fdccdfb877461f9a188094b1e..96e4ecf04868a9137b59c6ff165998b7df4436a0 100755 --- a/Tracking/TrkVertexFitter/TrkVKalVrtCore/src/Derclc1.cxx +++ b/Tracking/TrkVertexFitter/TrkVKalVrtCore/src/Derclc1.cxx @@ -2,103 +2,103 @@ Copyright (C) 2002-2017 CERN for the benefit of the ATLAS collaboration */ -#include <math.h> -#include "TrkVKalVrtCore/Derivt.h" -#include "TrkVKalVrtCore/CommonPars.h" -#include "TrkVKalVrtCore/TrkVKalVrtCore.h" -#include <iostream> - -namespace Trk { - - -// -// Mass constraint calculation in new data model. -// -// cnstV and cnstP values are used!!! -//----------------------------------------------- - -extern std::vector<double> getCnstParticleMom( VKTrack * ); - -void calcMassConstraint( VKMassConstraint * cnst ) -{ - int it,itc; - double ptot[4]={0.,0.,0.,0.}; - double cth, invR, pp2, pt; - VKConstraintBase * base_cnst = (VKConstraintBase*) cnst; - VKVertex * vk=cnst->getOriginVertex(); - int usedNTRK = cnst->usedParticles.size(); - VKTrack * trk; - std::vector< std::vector<double> > pp(usedNTRK); - for( itc=0; itc<usedNTRK; itc++){ - it = cnst->usedParticles[itc]; - trk = vk->TrackList.at(it); - pp[itc]=getCnstParticleMom( trk ); - ptot[0] += pp[itc][0]; - ptot[1] += pp[itc][1]; - ptot[2] += pp[itc][2]; - ptot[3] += pp[itc][3]; - } - - double temp = 1.e-10; - int ip=0; if( fabs(ptot[1]) > fabs(ptot[ip]) )ip=1; if( fabs(ptot[2]) > fabs(ptot[ip]) )ip=2; - int im=0; if( fabs(ptot[1]) < fabs(ptot[im]) )im=1; if( fabs(ptot[2]) < fabs(ptot[im]) )im=2; - int id=4; for(int i=0;i<3;i++) if(i!=ip && i!=im)id=i; - if(id==4){ - std::cout<<"ERROR in mass constraint!!!"<<'\n'; - temp=ptot[3]*ptot[3]-ptot[0]*ptot[0]-ptot[1]*ptot[1]-ptot[2]*ptot[2]; - } else { - temp = sqrt( (ptot[3]-ptot[ip])*(ptot[3]+ptot[ip]) ); - temp = sqrt( ( temp -ptot[id])*( temp +ptot[id]) ); - temp = ( temp -ptot[im])*( temp +ptot[im]); - } - if(temp<1.e-10)temp=1.e-10; //protection - temp=sqrt(temp); //system mass -// -// - int numCNST=0; //constraint number. Single constraint in this case -// -//Difference - base_cnst->aa[numCNST] = ( temp - cnst->targetMass ) * ( temp + cnst->targetMass ); -// -//Derivatives Here pp[][3] - particle energy, pp[][4] - squared particle mom - for( itc=0; itc<usedNTRK; itc++){ - it = cnst->usedParticles[itc]; - trk = vk->TrackList.at(it); - invR = trk->cnstP[2]; - cth = 1. / tan( trk->cnstP[0] ); - pt = sqrt(pp[itc][0]*pp[itc][0] + pp[itc][1]*pp[itc][1]); - pp2 = pp[itc][0]*pp[itc][0] + pp[itc][1]*pp[itc][1] + pp[itc][2]*pp[itc][2]; - base_cnst->f0t[it][numCNST].X = ptot[3] * (-pp2* cth / pp[itc][3]) - - ptot[2] * (-pt * (cth*cth + 1.)); - base_cnst->f0t[it][numCNST].Y = -ptot[0] * (-pp[itc][1]) - - ptot[1] * pp[itc][0]; - base_cnst->f0t[it][numCNST].Z = ptot[3] * (-pp2/ (invR * pp[itc][3])) - - ptot[0] * (-pp[itc][0] / invR) - - ptot[1] * (-pp[itc][1] / invR) - - ptot[2] * (-pp[itc][2] / invR); - - } - base_cnst->h0t[numCNST].X = 0.; - base_cnst->h0t[numCNST].Y = 0.; - base_cnst->h0t[numCNST].Z = 0.; -/* -- Relative normalisation. Now it is target mass (squared?) to make performance uniform */ - double Scale=0.025/(2.*cnst->targetMass+1.); //28.03.2011 wrong idea for cascade. VK 06.05.2011 actually correct! - //Scale=0.01; - for (it = 0; it < (int)vk->TrackList.size(); ++it) { - base_cnst->f0t[it][numCNST].X *= Scale * 2; - base_cnst->f0t[it][numCNST].Y *= Scale * 2; - base_cnst->f0t[it][numCNST].Z *= Scale * 2; - } - base_cnst->aa[numCNST] *= Scale; -//std::cout.precision(11); -//std::cout<<" mass="<<temp<<", "<<cnst->targetMass<<", "<<base_cnst->aa[numCNST]<<'\n'; -//std::cout<<base_cnst->f0t[0][numCNST].X<<", "<<base_cnst->f0t[0][numCNST].Y<<", " -// <<base_cnst->f0t[0][numCNST].Z<<'\n'; -//std::cout<<base_cnst->f0t[1][numCNST].X<<", "<<base_cnst->f0t[1][numCNST].Y<<", " -// <<base_cnst->f0t[1][numCNST].Z<<'\n'; -} - - - - -} /* End of namespace */ +#include <math.h> +#include "TrkVKalVrtCore/Derivt.h" +#include "TrkVKalVrtCore/CommonPars.h" +#include "TrkVKalVrtCore/TrkVKalVrtCore.h" +#include <iostream> + +namespace Trk { + + +// +// Mass constraint calculation in new data model. +// +// cnstV and cnstP values are used!!! +//----------------------------------------------- + +extern std::vector<double> getCnstParticleMom( VKTrack * ); + +void calcMassConstraint( VKMassConstraint * cnst ) +{ + int it,itc; + double ptot[4]={0.,0.,0.,0.}; + double cth, invR, pp2, pt; + VKConstraintBase * base_cnst = (VKConstraintBase*) cnst; + VKVertex * vk=cnst->getOriginVertex(); + int usedNTRK = cnst->usedParticles.size(); + VKTrack * trk; + std::vector< std::vector<double> > pp(usedNTRK); + for( itc=0; itc<usedNTRK; itc++){ + it = cnst->usedParticles[itc]; + trk = vk->TrackList.at(it); + pp[itc]=getCnstParticleMom( trk ); + ptot[0] += pp[itc][0]; + ptot[1] += pp[itc][1]; + ptot[2] += pp[itc][2]; + ptot[3] += pp[itc][3]; + } + + double temp = 1.e-10; + int ip=0; if( fabs(ptot[1]) > fabs(ptot[ip]) )ip=1; if( fabs(ptot[2]) > fabs(ptot[ip]) )ip=2; + int im=0; if( fabs(ptot[1]) < fabs(ptot[im]) )im=1; if( fabs(ptot[2]) < fabs(ptot[im]) )im=2; + int id=4; for(int i=0;i<3;i++) if(i!=ip && i!=im)id=i; + if(id==4){ + std::cout<<"ERROR in mass constraint!!!"<<'\n'; + temp=ptot[3]*ptot[3]-ptot[0]*ptot[0]-ptot[1]*ptot[1]-ptot[2]*ptot[2]; + } else { + temp = sqrt( (ptot[3]-ptot[ip])*(ptot[3]+ptot[ip]) ); + temp = sqrt( ( temp -ptot[id])*( temp +ptot[id]) ); + temp = ( temp -ptot[im])*( temp +ptot[im]); + } + if(temp<1.e-10)temp=1.e-10; //protection + temp=sqrt(temp); //system mass +// +// + int numCNST=0; //constraint number. Single constraint in this case +// +//Difference + base_cnst->aa[numCNST] = ( temp - cnst->targetMass ) * ( temp + cnst->targetMass ); +// +//Derivatives Here pp[][3] - particle energy, pp[][4] - squared particle mom + for( itc=0; itc<usedNTRK; itc++){ + it = cnst->usedParticles[itc]; + trk = vk->TrackList.at(it); + invR = trk->cnstP[2]; + cth = 1. / tan( trk->cnstP[0] ); + pt = sqrt(pp[itc][0]*pp[itc][0] + pp[itc][1]*pp[itc][1]); + pp2 = pp[itc][0]*pp[itc][0] + pp[itc][1]*pp[itc][1] + pp[itc][2]*pp[itc][2]; + base_cnst->f0t[it][numCNST].X = ptot[3] * (-pp2* cth / pp[itc][3]) + - ptot[2] * (-pt * (cth*cth + 1.)); + base_cnst->f0t[it][numCNST].Y = -ptot[0] * (-pp[itc][1]) + - ptot[1] * pp[itc][0]; + base_cnst->f0t[it][numCNST].Z = ptot[3] * (-pp2/ (invR * pp[itc][3])) + - ptot[0] * (-pp[itc][0] / invR) + - ptot[1] * (-pp[itc][1] / invR) + - ptot[2] * (-pp[itc][2] / invR); + + } + base_cnst->h0t[numCNST].X = 0.; + base_cnst->h0t[numCNST].Y = 0.; + base_cnst->h0t[numCNST].Z = 0.; +/* -- Relative normalisation. Now it is target mass (squared?) to make performance uniform */ + double Scale=0.025/(2.*cnst->targetMass+1.); //28.03.2011 wrong idea for cascade. VK 06.05.2011 actually correct! + //Scale=0.01; + for (it = 0; it < (int)vk->TrackList.size(); ++it) { + base_cnst->f0t[it][numCNST].X *= Scale * 2; + base_cnst->f0t[it][numCNST].Y *= Scale * 2; + base_cnst->f0t[it][numCNST].Z *= Scale * 2; + } + base_cnst->aa[numCNST] *= Scale; +//std::cout.precision(11); +//std::cout<<" mass="<<temp<<", "<<cnst->targetMass<<", "<<base_cnst->aa[numCNST]<<'\n'; +//std::cout<<base_cnst->f0t[0][numCNST].X<<", "<<base_cnst->f0t[0][numCNST].Y<<", " +// <<base_cnst->f0t[0][numCNST].Z<<'\n'; +//std::cout<<base_cnst->f0t[1][numCNST].X<<", "<<base_cnst->f0t[1][numCNST].Y<<", " +// <<base_cnst->f0t[1][numCNST].Z<<'\n'; +} + + + + +} /* End of namespace */ diff --git a/Tracking/TrkVertexFitter/TrkVKalVrtCore/src/VtCFit.cxx b/Tracking/TrkVertexFitter/TrkVKalVrtCore/src/VtCFit.cxx index 60afb03d080a2dbebb288e2472f26c0621cef201..ef43c98ed0a1e87933b1f52b0a90616e4dde406d 100755 --- a/Tracking/TrkVertexFitter/TrkVKalVrtCore/src/VtCFit.cxx +++ b/Tracking/TrkVertexFitter/TrkVKalVrtCore/src/VtCFit.cxx @@ -230,12 +230,13 @@ extern DerivT derivt_; deps[kt] = trk->a0() - eps; dzp[kt] = trk->z() - xyz[2]; // Precision + dzp[kt]-= zp; dtet[kt] = trk->theta() - theta_ini; dphi[kt] = trk->phi() - phi_ini; // Precision + dphi[kt]-= phip; drho[kt] = trk->invR() - invR_ini; - dzp[kt] -= zp; dphi[kt] -= phip; - zp += xyz[2]; //To gain precision - phip += phi_ini; //To gain precision + //zp += xyz[2]; //To recover standard zp definition in case of further use. Not needed + //phip += phi_ini; //To recover standard phip definition in case of further use. Not needed while(dphi[kt] > M_PI)dphi[kt]-=2.*M_PI; while(dphi[kt] < -M_PI)dphi[kt]+=2.*M_PI; //std::cout.precision(11); diff --git a/Tracking/TrkVertexFitter/TrkVKalVrtCore/src/VtCFitC.cxx b/Tracking/TrkVertexFitter/TrkVKalVrtCore/src/VtCFitC.cxx index c52c691e5ff643834608965a7bad2810d8f43457..cd500e425eb473901ea6e4dd64e738370339d310 100755 --- a/Tracking/TrkVertexFitter/TrkVKalVrtCore/src/VtCFitC.cxx +++ b/Tracking/TrkVertexFitter/TrkVKalVrtCore/src/VtCFitC.cxx @@ -62,6 +62,7 @@ int vtcfitc( VKVertex * vk ) tf0t.push_back( tmpVec ); } } + if(totNC==0)return 0; tmpVec.clear(); // std::vector< std::vector<double> > denom; diff --git a/Tracking/TrkVertexFitter/TrkVKalVrtCore/src/VtCFitE.cxx b/Tracking/TrkVertexFitter/TrkVKalVrtCore/src/VtCFitE.cxx index 19bc8713c81638dd3b7a55558bb27a4dd909c19f..751b662492a5171ed7b3671887f7ea6994a93680 100755 --- a/Tracking/TrkVertexFitter/TrkVKalVrtCore/src/VtCFitE.cxx +++ b/Tracking/TrkVertexFitter/TrkVKalVrtCore/src/VtCFitE.cxx @@ -2,401 +2,429 @@ Copyright (C) 2002-2017 CERN for the benefit of the ATLAS collaboration */ -#include <math.h> -#include "TrkVKalVrtCore/Derivt.h" -#include "TrkVKalVrtCore/WorkArray.h" -#include "TrkVKalVrtCore/CommonPars.h" -#include "TrkVKalVrtCore/TrkVKalVrtCore.h" -#include <iostream> - -namespace Trk { - - -extern WorkArray workarray_; -extern DerivT derivt_; - - -#define derivt_1 derivt_ -#define workarray_1 workarray_ - - -#define ader_ref(a_1,a_2) workarray_1.ader[(a_2)*(NTrkM*3+3) + (a_1) - (NTrkM*3+4)] - - -/* -------------------------------------------------------------- */ -/* RETURN FULL ERROR MATRIX AFTER THE FIT */ -/* ERRMTX SHOULD HAVE AT LEAST (3*NTRK+3)*(3*NTRK+4)/2. ELEMENTS */ - - -int fiterm(long int NTRK, double *errmtx) -{ - int ii=0, i, j; - int lim = (NTRK+1)*3; - if(workarray_.existFullCov){ - for (j = 1; j <= lim; ++j) { /* COLUMN */ - for (i = 1; i <= j; ++i) { /* ROW */ - errmtx[ii] = ader_ref(i, j); - ++ii; - } - } - return 0; - }else{ - return -1; - } -} - - -/* ------------------------------------------------------- */ -/* RETURN ERROR OF ANY VARIABLE AFTER THE FIT */ - -void cferrany_(long int *ntrk, double *deriv, double *covar) -{ - (*covar) = 0.; - - if (deriv==0) return; - --deriv; - - int lim, ic, jc; - - lim = ((*ntrk) + 1) * 3; - for (ic = 1; ic <= lim; ++ic) { - for (jc = 1; jc <= lim; ++jc) { - (*covar) += deriv[ic] * ader_ref(ic, jc) * deriv[jc]; - } - } -} - -#undef ader_ref - - - - - - - -/* ---------------------------------------------------------- */ -/* Entry for error matrix calculation after successful fit */ -/* Error matrix has a form V(X,Y,Z,PX,PY,PZ) */ -/* ADER - full covariance matrix after fit in form */ -/* (x,y,z,track1(1:3),track2(1:3),......) */ - -#define ader_ref(a_1,a_2) ader[(a_2)*(NTrkM*3+3) + (a_1) - (NTrkM*3+4)] -#define verr_ref(a_1,a_2) verr[(a_2)*6 + (a_1) - 7] -#define dcv_ref(a_1,a_2) dcv[(a_2)*6 + (a_1) - 7] - - -#define useWeightScheme 1 - -int getFullVrtCov(VKVertex * vk, double *ader, double *dcv, double *verr) -{ - extern void scaleg(double *, double *, long int ,long int ); - - int i,j,ic1,ic2; - - long int ic, jc, it, jt; - double cnt = 1e8; - - - extern void dsinv(long int *, double *, long int , long int *); - extern void FullMTXfill( VKVertex* , double *); - extern void vkSVDCmp(double**, int, int, double*, double**); - - TWRK * t_trk=0; - long int NTRK = vk->TrackList.size(); - long int IERR=0; - long int NVar = (NTRK + 1) * 3; - if(vk->passNearVertex) { /* Fit is with "pass near" constraint and then */ - /* matrix is already present */ - } else if ( vk->ConstraintList.size()>0 && useWeightScheme ) { -/* Full matrix inversion i */ -// - FullMTXfill( vk, ader); - Vect3DF th0t,tf0t; - for(ic1=0; ic1<(int)vk->ConstraintList.size();ic1++){ - for(ic2=0; ic2<vk->ConstraintList[ic1]->NCDim; ic2++){ - th0t = vk->ConstraintList[ic1]->h0t[ic2]; - ader_ref(1, 1) += cnt * th0t.X * th0t.X; - ader_ref(2, 1) += cnt * th0t.Y * th0t.X; - ader_ref(3, 1) += cnt * th0t.Z * th0t.X; - ader_ref(1, 2) += cnt * th0t.X * th0t.Y; - ader_ref(2, 2) += cnt * th0t.Y * th0t.Y; - ader_ref(3, 2) += cnt * th0t.Z * th0t.Y; - ader_ref(1, 3) += cnt * th0t.X * th0t.Z; - ader_ref(2, 3) += cnt * th0t.Y * th0t.Z; - ader_ref(3, 3) += cnt * th0t.Z * th0t.Z; - for (it = 1; it <= NTRK; ++it) { - tf0t = vk->ConstraintList[ic1]->f0t[it-1][ic2]; - ader_ref(1, it * 3 + 1) += cnt * th0t.X * tf0t.X; - ader_ref(2, it * 3 + 1) += cnt * th0t.Y * tf0t.X; - ader_ref(3, it * 3 + 1) += cnt * th0t.Z * tf0t.X; - ader_ref(1, it * 3 + 2) += cnt * th0t.X * tf0t.Y; - ader_ref(2, it * 3 + 2) += cnt * th0t.Y * tf0t.Y; - ader_ref(3, it * 3 + 2) += cnt * th0t.Z * tf0t.Y; - ader_ref(1, it * 3 + 3) += cnt * th0t.X * tf0t.Z; - ader_ref(2, it * 3 + 3) += cnt * th0t.Y * tf0t.Z; - ader_ref(3, it * 3 + 3) += cnt * th0t.Z * tf0t.Z; - } - } - } - - - for(ic1=0; ic1<(int)vk->ConstraintList.size();ic1++){ - for(ic2=0; ic2<vk->ConstraintList[ic1]->NCDim; ic2++){ - for (it = 1; it <= NTRK; ++it) { - for (jt = it; jt <= NTRK; ++jt) { - Vect3DF tf0ti = vk->ConstraintList[ic1]->f0t[it-1][ic2]; - Vect3DF tf0tj = vk->ConstraintList[ic1]->f0t[jt-1][ic2]; - ader_ref(it*3 + 1, jt*3 + 1) += cnt * tf0ti.X * tf0tj.X; - ader_ref(it*3 + 2, jt*3 + 1) += cnt * tf0ti.Y * tf0tj.X; - ader_ref(it*3 + 3, jt*3 + 1) += cnt * tf0ti.Z * tf0tj.X; - ader_ref(it*3 + 1, jt*3 + 2) += cnt * tf0ti.X * tf0tj.Y; - ader_ref(it*3 + 2, jt*3 + 2) += cnt * tf0ti.Y * tf0tj.Y; - ader_ref(it*3 + 3, jt*3 + 2) += cnt * tf0ti.Z * tf0tj.Y; - ader_ref(it*3 + 1, jt*3 + 3) += cnt * tf0ti.X * tf0tj.Z; - ader_ref(it*3 + 2, jt*3 + 3) += cnt * tf0ti.Y * tf0tj.Z; - ader_ref(it*3 + 3, jt*3 + 3) += cnt * tf0ti.Z * tf0tj.Z; - } - } - } - } -/* symmetrisation */ - for (i=1; i<=NVar-1; ++i) { - for (j = i+1; j<=NVar; ++j) { - ader_ref(j,i) = ader_ref(i,j); - } - } -//------------------------------------------------------------------------- -/* several checks for debugging */ -//std::cout.precision(12); -// for(ic1=0; ic1<(int)vk->ConstraintList.size();ic1++){ -// for(ic2=0; ic2<vk->ConstraintList[ic1]->NCDim; ic2++){ -// th0t = vk->ConstraintList[ic1]->h0t[ic2]; -//std::cout<<"h0t="<<th0t.X<<", "<<th0t.Y<<", "<<th0t.Z<<'\n'; -// for (it = 1; it <= NTRK; ++it) { -// tf0t = vk->ConstraintList[ic1]->f0t[it-1][ic2]; -//std::cout<<"f0t="<<tf0t.X<<", "<<tf0t.Y<<", "<<tf0t.Z<<'\n'; -// } } } -//if(NTRK==2){ -// for(i=1; i<=NVar; i++){std::cout<<" newmtx="; -// for(j=1; j<=NVar; j++)std::cout<<ader_ref(j,i)<<", "; std::cout<<'\n';} -//} -//------------------------------------------------------------------------- -/* weight matrix ready.Invert */ - double * Scale=new double[NVar]; scaleg(ader, Scale, NVar, NTrkM*3+3); // Balance matrix - double **ta = new double*[NVar+1]; for(i=0; i<NVar+1; i++) ta[i] = new double[NVar+1]; // Make a copy - for (i=1; i<=NVar; ++i) for (j = i; j<=NVar; ++j) ta[i][j] = ta[j][i] = ader_ref(i,j); // for failure treatment - dsinv(&NVar, ader, NTrkM*3+3, &IERR); - if ( IERR != 0) { - double **tv = new double*[NVar+1]; for(i=0; i<NVar+1; i++) tv[i] = new double[NVar+1]; - double **tr = new double*[NVar+1]; for(i=0; i<NVar+1; i++) tr[i] = new double[NVar+1]; - double *tw = new double[NVar+1]; - vkSVDCmp( ta, NVar, NVar, tw, tv); - double tmax=0; - for(i=1; i<NVar+1; i++) if(fabs(tw[i])>tmax)tmax=fabs(tw[i]); - //for(i=1; i<NVar+1; i++) std::cout<<tw[i]<<"; "; std::cout<<'\n'; - for(i=1; i<NVar+1; i++) if(fabs(tw[i])/tmax < 1.e-15) tw[i]=0.; - for(i=1; i<=NVar; i++){ for(j=1; j<=NVar; j++){ - tr[i][j]=0.; for(int k=1; k<=NVar; k++) if(tw[k]!=0.) tr[i][j] += ta[i][k]*tv[j][k]/tw[k]; - }} - for (i=1; i<=NVar; ++i) for (j=1; j<=NVar; ++j) ader_ref(i,j)=tr[i][j]; - for(i=0; i<NVar+1; i++) {delete[] tv[i];delete[] tr[i];} - delete[] tv; delete[] tr; delete[] tw; - IERR=0; //return IERR; - } - for (i=1; i<=NVar; ++i) for (j = 1; j<=NVar; ++j) ader_ref(i,j)*=Scale[i-1]*Scale[j-1]; - delete[] Scale; //Restore scale - for(i=0; i<NVar+1; i++) delete[] ta[i]; - delete[] ta; //Clean memory -/* ---------------------------------------- */ - } else { -/* ---------------------------------------- */ -/* Simple and fast without constraints */ - for (i=1; i<=NVar; i++) { - for (j=1; j<=NVar; j++) { - ader_ref(i,j)=0.; - } - } - double vcov[6]={vk->fitVcov[0],vk->fitVcov[1],vk->fitVcov[2],vk->fitVcov[3],vk->fitVcov[4],vk->fitVcov[5]}; - ader_ref(1,1) = vcov[0]; - ader_ref(1,2) = vcov[1]; - ader_ref(2,2) = vcov[2]; - ader_ref(1,3) = vcov[3]; - ader_ref(2,3) = vcov[4]; - ader_ref(3,3) = vcov[5]; - ader_ref(2,1) = ader_ref(1,2); - ader_ref(3,1) = ader_ref(1,3); - ader_ref(3,2) = ader_ref(2,3); - - for (it=1; it<=NTRK; it++) { - t_trk=vk->tmpArr[it-1]; - ader_ref(1, it*3 + 1) = -vcov[0] * t_trk->wbci[0] - - vcov[1] * t_trk->wbci[1] - - vcov[3] * t_trk->wbci[2]; - ader_ref(2, it*3 + 1) = -vcov[1] * t_trk->wbci[0] - - vcov[2] * t_trk->wbci[1] - - vcov[4] * t_trk->wbci[2]; - ader_ref(3, it*3 + 1) = -vcov[3] * t_trk->wbci[0] - - vcov[4] * t_trk->wbci[1] - - vcov[5] * t_trk->wbci[2]; - ader_ref(1, it*3 + 2) = -vcov[0] * t_trk->wbci[3] - - vcov[1] * t_trk->wbci[4] - - vcov[3] * t_trk->wbci[5]; - ader_ref(2, it*3 + 2) = -vcov[1] * t_trk->wbci[3] - - vcov[2] * t_trk->wbci[4] - - vcov[4] * t_trk->wbci[5]; - ader_ref(3, it*3 + 2) = -vcov[3] * t_trk->wbci[3] - - vcov[4] * t_trk->wbci[4] - - vcov[5] * t_trk->wbci[5]; - ader_ref(1, it*3 + 3) = -vcov[0] * t_trk->wbci[6] - - vcov[1] * t_trk->wbci[7] - - vcov[3] * t_trk->wbci[8]; - ader_ref(2, it*3 + 3) = -vcov[1] * t_trk->wbci[6] - - vcov[2] * t_trk->wbci[7] - - vcov[4] * t_trk->wbci[8]; - ader_ref(3, it*3 + 3) = -vcov[3] * t_trk->wbci[6] - - vcov[4] * t_trk->wbci[7] - - vcov[5] * t_trk->wbci[8]; - ader_ref(it*3 + 1, 1) = ader_ref(1, it*3 + 1); - ader_ref(it*3 + 1, 2) = ader_ref(2, it*3 + 1); - ader_ref(it*3 + 1, 3) = ader_ref(3, it*3 + 1); - ader_ref(it*3 + 2, 1) = ader_ref(1, it*3 + 2); - ader_ref(it*3 + 2, 2) = ader_ref(2, it*3 + 2); - ader_ref(it*3 + 2, 3) = ader_ref(3, it*3 + 2); - ader_ref(it*3 + 3, 1) = ader_ref(1, it*3 + 3); - ader_ref(it*3 + 3, 2) = ader_ref(2, it*3 + 3); - ader_ref(it*3 + 3, 3) = ader_ref(3, it*3 + 3); - } - - - for (it = 1; it<=NTRK; ++it) { - t_trk=vk->tmpArr[it-1]; - for (jt=1; jt<=NTRK; ++jt) { - int j3 = jt*3; - int i3 = it*3; - ader_ref( i3+1, j3+1) = -t_trk->wbci[0]*ader_ref(1, j3+1) - t_trk->wbci[1]*ader_ref(2, j3+1) - t_trk->wbci[2]*ader_ref(3, j3+1); - ader_ref( i3+2, j3+1) = -t_trk->wbci[3]*ader_ref(1, j3+1) - t_trk->wbci[4]*ader_ref(2, j3+1) - t_trk->wbci[5]*ader_ref(3, j3+1); - ader_ref( i3+3, j3+1) = -t_trk->wbci[6]*ader_ref(1, j3+1) - t_trk->wbci[7]*ader_ref(2, j3+1) - t_trk->wbci[8]*ader_ref(3, j3+1); - ader_ref( i3+1, j3+2) = -t_trk->wbci[0]*ader_ref(1, j3+2) - t_trk->wbci[1]*ader_ref(2, j3+2) - t_trk->wbci[2]*ader_ref(3, j3+2); - ader_ref( i3+2, j3+2) = -t_trk->wbci[3]*ader_ref(1, j3+2) - t_trk->wbci[4]*ader_ref(2, j3+2) - t_trk->wbci[5]*ader_ref(3, j3+2); - ader_ref( i3+3, j3+2) = -t_trk->wbci[6]*ader_ref(1, j3+2) - t_trk->wbci[7]*ader_ref(2, j3+2) - t_trk->wbci[8]*ader_ref(3, j3+2); - ader_ref( i3+1, j3+3) = -t_trk->wbci[0]*ader_ref(1, j3+3) - t_trk->wbci[1]*ader_ref(2, j3+3) - t_trk->wbci[2]*ader_ref(3, j3+3); - ader_ref( i3+2, j3+3) = -t_trk->wbci[3]*ader_ref(1, j3+3) - t_trk->wbci[4]*ader_ref(2, j3+3) - t_trk->wbci[5]*ader_ref(3, j3+3); - ader_ref( i3+3, j3+3) = -t_trk->wbci[6]*ader_ref(1, j3+3) - t_trk->wbci[7]*ader_ref(2, j3+3) - t_trk->wbci[8]*ader_ref(3, j3+3); - if (it == jt) { - ader_ref( i3+1, i3+1) += t_trk->wci[0]; - ader_ref( i3+1, i3+2) += t_trk->wci[1]; - ader_ref( i3+2, i3+1) += t_trk->wci[1]; - ader_ref( i3+2, i3+2) += t_trk->wci[2]; - ader_ref( i3+1, i3+3) += t_trk->wci[3]; - ader_ref( i3+3, i3+1) += t_trk->wci[3]; - ader_ref( i3+2, i3+3) += t_trk->wci[4]; - ader_ref( i3+3, i3+2) += t_trk->wci[4]; - ader_ref( i3+3, i3+3) += t_trk->wci[5]; - } - } - } -//for(int ii=1; ii<=9; ii++)std::cout<<ader_ref(ii,ii)<<", "; std::cout<<" fast full m NEW"<<'\n'; - if( vk->ConstraintList.size()>0 && !useWeightScheme ){ -//--------------------------------------------------------------------- -// Covariance matrix with constraints a la Avery. -// ader_ref() should contain nonconstraint covariance matrix -//--------------------------------------------------------------------- - long int totNC=0; //total number of constraints - std::vector<std::vector< Vect3DF> > tf0t; // derivative collectors - std::vector< Vect3DF > th0t; // derivative collectors - std::vector< double > taa; // derivative collectors - std::vector< Vect3DF > tmpVec; - for(int ii=0; ii<(int)vk->ConstraintList.size();ii++){ - totNC += vk->ConstraintList[ii]->NCDim; - for(ic=0; ic<(int)vk->ConstraintList[ii]->NCDim; ic++){ - taa.push_back( vk->ConstraintList[ii]->aa[ic] ); - th0t.push_back( vk->ConstraintList[ii]->h0t[ic] ); - tmpVec.clear(); - for(it=0; it<(int)vk->ConstraintList[ii]->f0t.size(); it++){ - tmpVec.push_back( vk->ConstraintList[ii]->f0t[it][ic] ); - } - tf0t.push_back( tmpVec ); - } - } -// R,RC[ic][i] - double **R =new double*[totNC]; for(ic=0; ic<totNC; ic++) R[ic]=new double[NVar]; - double **RC=new double*[totNC]; for(ic=0; ic<totNC; ic++)RC[ic]=new double[NVar]; - double *RCRt=new double[totNC*totNC]; - for(ic=0; ic<totNC; ic++){ - R[ic][0]=th0t[ic].X; - R[ic][1]=th0t[ic].Y; - R[ic][2]=th0t[ic].Z; - for(it=1; it<=NTRK; it++){ - R[ic][it*3+0]=tf0t[ic][it-1].X; - R[ic][it*3+1]=tf0t[ic][it-1].Y; - R[ic][it*3+2]=tf0t[ic][it-1].Z; - } - } -// R*Cov matrix - for(ic=0; ic<totNC; ic++){ - for(j=0; j<NVar; j++){ RC[ic][j]=0; - for(i=0; i<NVar; i++) RC[ic][j] += R[ic][i]*ader_ref(i+1,j+1); - } - } -// R*Cov*Rt matrix - Lagrange multiplyers errors - for(ic=0; ic<totNC; ic++){ - for(jc=0; jc<totNC; jc++){ RCRt[ic*totNC + jc] =0.; - for(i=0; i<NVar; i++) RCRt[ic*totNC + jc] += RC[ic][i]*R[jc][i]; - } - } - dsinv(&totNC, RCRt, totNC, &IERR); - if ( IERR != 0) return IERR; -// Correction matrix - for(i=0; i<NVar; i++){ - for(j=0; j<NVar; j++){ double COR=0.; - for(ic=0; ic<totNC; ic++){ - for(jc=0; jc<totNC; jc++){ - COR += RC[ic][i]*RC[jc][j]*RCRt[ic*totNC +jc]; - } - } - ader_ref(i+1, j+1) -= COR; - } - } -// Delete temporary matrices - for(ic=0; ic<totNC; ic++) delete[] R[ic]; - delete[] R; - for(ic=0; ic<totNC; ic++) delete[] RC[ic]; - delete[] RC; - delete[] RCRt; -//for(int ii=1; ii<=9; ii++)std::cout<<ader_ref(ii,ii)<<", "; std::cout<<" avery full m NEW"<<'\n'; - } //end of Avery matrix - - - - } // End of global IF() for matrix type selection - -//if(NTRK==2){ -// for(i=1; i<=NVar; i++){std::cout<<" new covfull="; -// for(j=1; j<=NVar; j++)std::cout<<ader_ref(j,i)<<", "; std::cout<<'\n';} -//} - -/* --Conversion to (X,Y,Z,Px,Py,Pz) form */ - for (i = 1; i <= 6; ++i) { - for (j = 1; j <= 6; ++j) { - verr_ref(i,j) = 0.; - for (ic=1; ic<=NVar; ++ic) { - if(dcv_ref(i, ic)==0.) continue; - for (jc=1; jc<=NVar; ++jc) { - if(dcv_ref(j, jc)==0.) continue; - verr_ref(i, j) += dcv_ref(i, ic) * ader_ref(ic, jc) * dcv_ref(j, jc); - } - } - } - } -//for(int ii=1; ii<=6; ii++)std::cout<<verr_ref(ii,ii)<<", "; std::cout<<" final m NEW"<<'\n'; - workarray_.existFullCov = 1; - return 0; -} -#undef dcv_ref -#undef verr_ref -#undef ader_ref - -#undef useWeightScheme - -} /* End of VKalVrtCore namespace*/ - +#include <math.h> +#include "TrkVKalVrtCore/Derivt.h" +#include "TrkVKalVrtCore/WorkArray.h" +#include "TrkVKalVrtCore/CommonPars.h" +#include "TrkVKalVrtCore/TrkVKalVrtCore.h" +#include <iostream> + +namespace Trk { + + +extern WorkArray workarray_; +extern DerivT derivt_; + + +#define derivt_1 derivt_ +#define workarray_1 workarray_ + + +#define ader_ref(a_1,a_2) workarray_1.ader[(a_2)*(NTrkM*3+3) + (a_1) - (NTrkM*3+4)] + + +/* -------------------------------------------------------------- */ +/* RETURN FULL ERROR MATRIX AFTER THE FIT */ +/* ERRMTX SHOULD HAVE AT LEAST (3*NTRK+3)*(3*NTRK+4)/2. ELEMENTS */ + + +int fiterm(long int NTRK, double *errmtx) +{ + int ii=0, i, j; + int lim = (NTRK+1)*3; + if(workarray_.existFullCov){ + for (j = 1; j <= lim; ++j) { /* COLUMN */ + for (i = 1; i <= j; ++i) { /* ROW */ + errmtx[ii] = ader_ref(i, j); + ++ii; + } + } + return 0; + }else{ + return -1; + } +} + + +/* ------------------------------------------------------- */ +/* RETURN ERROR OF ANY VARIABLE AFTER THE FIT */ + +void cferrany_(long int *ntrk, double *deriv, double *covar) +{ + (*covar) = 0.; + + if (deriv==0) return; + --deriv; + + int lim, ic, jc; + + lim = ((*ntrk) + 1) * 3; + for (ic = 1; ic <= lim; ++ic) { + for (jc = 1; jc <= lim; ++jc) { + (*covar) += deriv[ic] * ader_ref(ic, jc) * deriv[jc]; + } + } +} + +#undef ader_ref + + + + + + + +/* ---------------------------------------------------------- */ +/* Entry for error matrix calculation after successful fit */ +/* Error matrix has a form V(X,Y,Z,PX,PY,PZ) */ +/* ADER - full covariance matrix after fit in form */ +/* (x,y,z,track1(1:3),track2(1:3),......) */ + +#define ader_ref(a_1,a_2) ader[(a_2)*(NTrkM*3+3) + (a_1) - (NTrkM*3+4)] +#define verr_ref(a_1,a_2) verr[(a_2)*6 + (a_1) - 7] +#define dcv_ref(a_1,a_2) dcv[(a_2)*6 + (a_1) - 7] + + +#define useWeightScheme 1 + +int getFullVrtCov(VKVertex * vk, double *ader, double *dcv, double *verr) +{ + extern void scaleg(double *, double *, long int ,long int ); + + int i,j,ic1,ic2; + + long int ic, jc, it, jt; + double cnt = 1e8; + + + extern void dsinv(long int *, double *, long int , long int *); + extern void FullMTXfill( VKVertex* , double *); + extern void vkSVDCmp(double**, int, int, double*, double**); + + TWRK * t_trk=0; + long int NTRK = vk->TrackList.size(); + long int IERR=0; + long int NVar = (NTRK + 1) * 3; + if(vk->passNearVertex && vk->ConstraintList.size()==0) { + /* Fit is with "pass near" constraint and then */ + /* matrix is already present */ + } else if ( vk->ConstraintList.size()>0 && useWeightScheme ) { +/* Full matrix inversion i */ +// + FullMTXfill( vk, ader); + if ( vk->passNearVertex ) { + double drdpy[2][3]; + double dpipj[3][3]; + for (it = 1; it <= NTRK; ++it) { + drdpy[0][0] = vk->tmpArr[it-1]->drdp[0][0] * vk->FVC.ywgt[0] + vk->tmpArr[it-1]->drdp[1][0] * vk->FVC.ywgt[1]; + drdpy[1][0] = vk->tmpArr[it-1]->drdp[0][0] * vk->FVC.ywgt[1] + vk->tmpArr[it-1]->drdp[1][0] * vk->FVC.ywgt[2]; + drdpy[0][1] = vk->tmpArr[it-1]->drdp[0][1] * vk->FVC.ywgt[0] + vk->tmpArr[it-1]->drdp[1][1] * vk->FVC.ywgt[1]; + drdpy[1][1] = vk->tmpArr[it-1]->drdp[0][1] * vk->FVC.ywgt[1] + vk->tmpArr[it-1]->drdp[1][1] * vk->FVC.ywgt[2]; + drdpy[0][2] = vk->tmpArr[it-1]->drdp[0][2] * vk->FVC.ywgt[0] + vk->tmpArr[it-1]->drdp[1][2] * vk->FVC.ywgt[1]; + drdpy[1][2] = vk->tmpArr[it-1]->drdp[0][2] * vk->FVC.ywgt[1] + vk->tmpArr[it-1]->drdp[1][2] * vk->FVC.ywgt[2]; + for (jt = 1; jt <= NTRK; ++jt) { /* Matrix */ + for (int k = 0; k < 3; ++k) { + for (int l = 0; l < 3; ++l) { + dpipj[k][l] = 0.; + for (int j = 0; j < 2; ++j) { + dpipj[k][l] += vk->tmpArr[jt-1]->drdp[j][k] * drdpy[j][l]; + } + } + } + for (int k = 1; k <= 3; ++k) { + for (int l = 1; l <= 3; ++l) { + ader_ref(it * 3 + k, jt * 3 + l) += dpipj[l-1][k-1]; + } + } + } + } + } + Vect3DF th0t,tf0t; + for(ic1=0; ic1<(int)vk->ConstraintList.size();ic1++){ + for(ic2=0; ic2<vk->ConstraintList[ic1]->NCDim; ic2++){ + th0t = vk->ConstraintList[ic1]->h0t[ic2]; + ader_ref(1, 1) += cnt * th0t.X * th0t.X; + ader_ref(2, 1) += cnt * th0t.Y * th0t.X; + ader_ref(3, 1) += cnt * th0t.Z * th0t.X; + ader_ref(1, 2) += cnt * th0t.X * th0t.Y; + ader_ref(2, 2) += cnt * th0t.Y * th0t.Y; + ader_ref(3, 2) += cnt * th0t.Z * th0t.Y; + ader_ref(1, 3) += cnt * th0t.X * th0t.Z; + ader_ref(2, 3) += cnt * th0t.Y * th0t.Z; + ader_ref(3, 3) += cnt * th0t.Z * th0t.Z; + for (it = 1; it <= NTRK; ++it) { + tf0t = vk->ConstraintList[ic1]->f0t[it-1][ic2]; + ader_ref(1, it * 3 + 1) += cnt * th0t.X * tf0t.X; + ader_ref(2, it * 3 + 1) += cnt * th0t.Y * tf0t.X; + ader_ref(3, it * 3 + 1) += cnt * th0t.Z * tf0t.X; + ader_ref(1, it * 3 + 2) += cnt * th0t.X * tf0t.Y; + ader_ref(2, it * 3 + 2) += cnt * th0t.Y * tf0t.Y; + ader_ref(3, it * 3 + 2) += cnt * th0t.Z * tf0t.Y; + ader_ref(1, it * 3 + 3) += cnt * th0t.X * tf0t.Z; + ader_ref(2, it * 3 + 3) += cnt * th0t.Y * tf0t.Z; + ader_ref(3, it * 3 + 3) += cnt * th0t.Z * tf0t.Z; + } + } + } + + + for(ic1=0; ic1<(int)vk->ConstraintList.size();ic1++){ + for(ic2=0; ic2<vk->ConstraintList[ic1]->NCDim; ic2++){ + for (it = 1; it <= NTRK; ++it) { + for (jt = it; jt <= NTRK; ++jt) { + Vect3DF tf0ti = vk->ConstraintList[ic1]->f0t[it-1][ic2]; + Vect3DF tf0tj = vk->ConstraintList[ic1]->f0t[jt-1][ic2]; + ader_ref(it*3 + 1, jt*3 + 1) += cnt * tf0ti.X * tf0tj.X; + ader_ref(it*3 + 2, jt*3 + 1) += cnt * tf0ti.Y * tf0tj.X; + ader_ref(it*3 + 3, jt*3 + 1) += cnt * tf0ti.Z * tf0tj.X; + ader_ref(it*3 + 1, jt*3 + 2) += cnt * tf0ti.X * tf0tj.Y; + ader_ref(it*3 + 2, jt*3 + 2) += cnt * tf0ti.Y * tf0tj.Y; + ader_ref(it*3 + 3, jt*3 + 2) += cnt * tf0ti.Z * tf0tj.Y; + ader_ref(it*3 + 1, jt*3 + 3) += cnt * tf0ti.X * tf0tj.Z; + ader_ref(it*3 + 2, jt*3 + 3) += cnt * tf0ti.Y * tf0tj.Z; + ader_ref(it*3 + 3, jt*3 + 3) += cnt * tf0ti.Z * tf0tj.Z; + } + } + } + } +/* symmetrisation */ + for (i=1; i<=NVar-1; ++i) { + for (j = i+1; j<=NVar; ++j) { + ader_ref(j,i) = ader_ref(i,j); + } + } +//------------------------------------------------------------------------- +/* several checks for debugging */ +//std::cout.precision(12); +// for(ic1=0; ic1<(int)vk->ConstraintList.size();ic1++){ +// for(ic2=0; ic2<vk->ConstraintList[ic1]->NCDim; ic2++){ +// th0t = vk->ConstraintList[ic1]->h0t[ic2]; +//std::cout<<"h0t="<<th0t.X<<", "<<th0t.Y<<", "<<th0t.Z<<'\n'; +// for (it = 1; it <= NTRK; ++it) { +// tf0t = vk->ConstraintList[ic1]->f0t[it-1][ic2]; +//std::cout<<"f0t="<<tf0t.X<<", "<<tf0t.Y<<", "<<tf0t.Z<<'\n'; +// } } } +//if(NTRK==2){ +// for(i=1; i<=NVar; i++){std::cout<<" newmtx="; +// for(j=1; j<=NVar; j++)std::cout<<ader_ref(j,i)<<", "; std::cout<<'\n';} +//} +//------------------------------------------------------------------------- +/* weight matrix ready.Invert */ + double * Scale=new double[NVar]; scaleg(ader, Scale, NVar, NTrkM*3+3); // Balance matrix + double **ta = new double*[NVar+1]; for(i=0; i<NVar+1; i++) ta[i] = new double[NVar+1]; // Make a copy + for (i=1; i<=NVar; ++i) for (j = i; j<=NVar; ++j) ta[i][j] = ta[j][i] = ader_ref(i,j); // for failure treatment + dsinv(&NVar, ader, NTrkM*3+3, &IERR); + if ( IERR != 0) { + double **tv = new double*[NVar+1]; for(i=0; i<NVar+1; i++) tv[i] = new double[NVar+1]; + double **tr = new double*[NVar+1]; for(i=0; i<NVar+1; i++) tr[i] = new double[NVar+1]; + double *tw = new double[NVar+1]; + vkSVDCmp( ta, NVar, NVar, tw, tv); + double tmax=0; + for(i=1; i<NVar+1; i++) if(fabs(tw[i])>tmax)tmax=fabs(tw[i]); + //for(i=1; i<NVar+1; i++) std::cout<<tw[i]<<"; "; std::cout<<'\n'; + for(i=1; i<NVar+1; i++) if(fabs(tw[i])/tmax < 1.e-15) tw[i]=0.; + for(i=1; i<=NVar; i++){ for(j=1; j<=NVar; j++){ + tr[i][j]=0.; for(int k=1; k<=NVar; k++) if(tw[k]!=0.) tr[i][j] += ta[i][k]*tv[j][k]/tw[k]; + }} + for (i=1; i<=NVar; ++i) for (j=1; j<=NVar; ++j) ader_ref(i,j)=tr[i][j]; + for(i=0; i<NVar+1; i++) {delete[] tv[i];delete[] tr[i];} + delete[] tv; delete[] tr; delete[] tw; + IERR=0; //return IERR; + } + for (i=1; i<=NVar; ++i) for (j = 1; j<=NVar; ++j) ader_ref(i,j)*=Scale[i-1]*Scale[j-1]; + delete[] Scale; //Restore scale + for(i=0; i<NVar+1; i++) delete[] ta[i]; + delete[] ta; //Clean memory +/* ---------------------------------------- */ + } else { +/* ---------------------------------------- */ +/* Simple and fast without constraints */ + for (i=1; i<=NVar; i++) { + for (j=1; j<=NVar; j++) { + ader_ref(i,j)=0.; + } + } + double vcov[6]={vk->fitVcov[0],vk->fitVcov[1],vk->fitVcov[2],vk->fitVcov[3],vk->fitVcov[4],vk->fitVcov[5]}; + ader_ref(1,1) = vcov[0]; + ader_ref(1,2) = vcov[1]; + ader_ref(2,2) = vcov[2]; + ader_ref(1,3) = vcov[3]; + ader_ref(2,3) = vcov[4]; + ader_ref(3,3) = vcov[5]; + ader_ref(2,1) = ader_ref(1,2); + ader_ref(3,1) = ader_ref(1,3); + ader_ref(3,2) = ader_ref(2,3); + + for (it=1; it<=NTRK; it++) { + t_trk=vk->tmpArr[it-1]; + ader_ref(1, it*3 + 1) = -vcov[0] * t_trk->wbci[0] + - vcov[1] * t_trk->wbci[1] + - vcov[3] * t_trk->wbci[2]; + ader_ref(2, it*3 + 1) = -vcov[1] * t_trk->wbci[0] + - vcov[2] * t_trk->wbci[1] + - vcov[4] * t_trk->wbci[2]; + ader_ref(3, it*3 + 1) = -vcov[3] * t_trk->wbci[0] + - vcov[4] * t_trk->wbci[1] + - vcov[5] * t_trk->wbci[2]; + ader_ref(1, it*3 + 2) = -vcov[0] * t_trk->wbci[3] + - vcov[1] * t_trk->wbci[4] + - vcov[3] * t_trk->wbci[5]; + ader_ref(2, it*3 + 2) = -vcov[1] * t_trk->wbci[3] + - vcov[2] * t_trk->wbci[4] + - vcov[4] * t_trk->wbci[5]; + ader_ref(3, it*3 + 2) = -vcov[3] * t_trk->wbci[3] + - vcov[4] * t_trk->wbci[4] + - vcov[5] * t_trk->wbci[5]; + ader_ref(1, it*3 + 3) = -vcov[0] * t_trk->wbci[6] + - vcov[1] * t_trk->wbci[7] + - vcov[3] * t_trk->wbci[8]; + ader_ref(2, it*3 + 3) = -vcov[1] * t_trk->wbci[6] + - vcov[2] * t_trk->wbci[7] + - vcov[4] * t_trk->wbci[8]; + ader_ref(3, it*3 + 3) = -vcov[3] * t_trk->wbci[6] + - vcov[4] * t_trk->wbci[7] + - vcov[5] * t_trk->wbci[8]; + ader_ref(it*3 + 1, 1) = ader_ref(1, it*3 + 1); + ader_ref(it*3 + 1, 2) = ader_ref(2, it*3 + 1); + ader_ref(it*3 + 1, 3) = ader_ref(3, it*3 + 1); + ader_ref(it*3 + 2, 1) = ader_ref(1, it*3 + 2); + ader_ref(it*3 + 2, 2) = ader_ref(2, it*3 + 2); + ader_ref(it*3 + 2, 3) = ader_ref(3, it*3 + 2); + ader_ref(it*3 + 3, 1) = ader_ref(1, it*3 + 3); + ader_ref(it*3 + 3, 2) = ader_ref(2, it*3 + 3); + ader_ref(it*3 + 3, 3) = ader_ref(3, it*3 + 3); + } + + + for (it = 1; it<=NTRK; ++it) { + t_trk=vk->tmpArr[it-1]; + for (jt=1; jt<=NTRK; ++jt) { + int j3 = jt*3; + int i3 = it*3; + ader_ref( i3+1, j3+1) = -t_trk->wbci[0]*ader_ref(1, j3+1) - t_trk->wbci[1]*ader_ref(2, j3+1) - t_trk->wbci[2]*ader_ref(3, j3+1); + ader_ref( i3+2, j3+1) = -t_trk->wbci[3]*ader_ref(1, j3+1) - t_trk->wbci[4]*ader_ref(2, j3+1) - t_trk->wbci[5]*ader_ref(3, j3+1); + ader_ref( i3+3, j3+1) = -t_trk->wbci[6]*ader_ref(1, j3+1) - t_trk->wbci[7]*ader_ref(2, j3+1) - t_trk->wbci[8]*ader_ref(3, j3+1); + ader_ref( i3+1, j3+2) = -t_trk->wbci[0]*ader_ref(1, j3+2) - t_trk->wbci[1]*ader_ref(2, j3+2) - t_trk->wbci[2]*ader_ref(3, j3+2); + ader_ref( i3+2, j3+2) = -t_trk->wbci[3]*ader_ref(1, j3+2) - t_trk->wbci[4]*ader_ref(2, j3+2) - t_trk->wbci[5]*ader_ref(3, j3+2); + ader_ref( i3+3, j3+2) = -t_trk->wbci[6]*ader_ref(1, j3+2) - t_trk->wbci[7]*ader_ref(2, j3+2) - t_trk->wbci[8]*ader_ref(3, j3+2); + ader_ref( i3+1, j3+3) = -t_trk->wbci[0]*ader_ref(1, j3+3) - t_trk->wbci[1]*ader_ref(2, j3+3) - t_trk->wbci[2]*ader_ref(3, j3+3); + ader_ref( i3+2, j3+3) = -t_trk->wbci[3]*ader_ref(1, j3+3) - t_trk->wbci[4]*ader_ref(2, j3+3) - t_trk->wbci[5]*ader_ref(3, j3+3); + ader_ref( i3+3, j3+3) = -t_trk->wbci[6]*ader_ref(1, j3+3) - t_trk->wbci[7]*ader_ref(2, j3+3) - t_trk->wbci[8]*ader_ref(3, j3+3); + if (it == jt) { + ader_ref( i3+1, i3+1) += t_trk->wci[0]; + ader_ref( i3+1, i3+2) += t_trk->wci[1]; + ader_ref( i3+2, i3+1) += t_trk->wci[1]; + ader_ref( i3+2, i3+2) += t_trk->wci[2]; + ader_ref( i3+1, i3+3) += t_trk->wci[3]; + ader_ref( i3+3, i3+1) += t_trk->wci[3]; + ader_ref( i3+2, i3+3) += t_trk->wci[4]; + ader_ref( i3+3, i3+2) += t_trk->wci[4]; + ader_ref( i3+3, i3+3) += t_trk->wci[5]; + } + } + } +//for(int ii=1; ii<=9; ii++)std::cout<<ader_ref(ii,ii)<<", "; std::cout<<" fast full m NEW"<<'\n'; + if( vk->ConstraintList.size()>0 && !useWeightScheme ){ +//--------------------------------------------------------------------- +// Covariance matrix with constraints a la Avery. +// ader_ref() should contain nonconstraint covariance matrix +//--------------------------------------------------------------------- + long int totNC=0; //total number of constraints + std::vector<std::vector< Vect3DF> > tf0t; // derivative collectors + std::vector< Vect3DF > th0t; // derivative collectors + std::vector< double > taa; // derivative collectors + std::vector< Vect3DF > tmpVec; + for(int ii=0; ii<(int)vk->ConstraintList.size();ii++){ + totNC += vk->ConstraintList[ii]->NCDim; + for(ic=0; ic<(int)vk->ConstraintList[ii]->NCDim; ic++){ + taa.push_back( vk->ConstraintList[ii]->aa[ic] ); + th0t.push_back( vk->ConstraintList[ii]->h0t[ic] ); + tmpVec.clear(); + for(it=0; it<(int)vk->ConstraintList[ii]->f0t.size(); it++){ + tmpVec.push_back( vk->ConstraintList[ii]->f0t[it][ic] ); + } + tf0t.push_back( tmpVec ); + } + } +// R,RC[ic][i] + double **R =new double*[totNC]; for(ic=0; ic<totNC; ic++) R[ic]=new double[NVar]; + double **RC=new double*[totNC]; for(ic=0; ic<totNC; ic++)RC[ic]=new double[NVar]; + double *RCRt=new double[totNC*totNC]; + for(ic=0; ic<totNC; ic++){ + R[ic][0]=th0t[ic].X; + R[ic][1]=th0t[ic].Y; + R[ic][2]=th0t[ic].Z; + for(it=1; it<=NTRK; it++){ + R[ic][it*3+0]=tf0t[ic][it-1].X; + R[ic][it*3+1]=tf0t[ic][it-1].Y; + R[ic][it*3+2]=tf0t[ic][it-1].Z; + } + } +// R*Cov matrix + for(ic=0; ic<totNC; ic++){ + for(j=0; j<NVar; j++){ RC[ic][j]=0; + for(i=0; i<NVar; i++) RC[ic][j] += R[ic][i]*ader_ref(i+1,j+1); + } + } +// R*Cov*Rt matrix - Lagrange multiplyers errors + for(ic=0; ic<totNC; ic++){ + for(jc=0; jc<totNC; jc++){ RCRt[ic*totNC + jc] =0.; + for(i=0; i<NVar; i++) RCRt[ic*totNC + jc] += RC[ic][i]*R[jc][i]; + } + } + dsinv(&totNC, RCRt, totNC, &IERR); + if ( IERR != 0) return IERR; +// Correction matrix + for(i=0; i<NVar; i++){ + for(j=0; j<NVar; j++){ double COR=0.; + for(ic=0; ic<totNC; ic++){ + for(jc=0; jc<totNC; jc++){ + COR += RC[ic][i]*RC[jc][j]*RCRt[ic*totNC +jc]; + } + } + ader_ref(i+1, j+1) -= COR; + } + } +// Delete temporary matrices + for(ic=0; ic<totNC; ic++) delete[] R[ic]; + delete[] R; + for(ic=0; ic<totNC; ic++) delete[] RC[ic]; + delete[] RC; + delete[] RCRt; +//for(int ii=1; ii<=9; ii++)std::cout<<ader_ref(ii,ii)<<", "; std::cout<<" avery full m NEW"<<'\n'; + } //end of Avery matrix + + + + } // End of global IF() for matrix type selection + +//if(NTRK==2){ +// for(i=1; i<=NVar; i++){std::cout<<" new covfull="; +// for(j=1; j<=NVar; j++)std::cout<<ader_ref(j,i)<<", "; std::cout<<'\n';} +//} + +/* --Conversion to (X,Y,Z,Px,Py,Pz) form */ + for (i = 1; i <= 6; ++i) { + for (j = 1; j <= 6; ++j) { + verr_ref(i,j) = 0.; + for (ic=1; ic<=NVar; ++ic) { + if(dcv_ref(i, ic)==0.) continue; + for (jc=1; jc<=NVar; ++jc) { + if(dcv_ref(j, jc)==0.) continue; + verr_ref(i, j) += dcv_ref(i, ic) * ader_ref(ic, jc) * dcv_ref(j, jc); + } + } + } + } +//for(int ii=1; ii<=6; ii++)std::cout<<verr_ref(ii,ii)<<", "; std::cout<<" final m NEW"<<'\n'; + workarray_.existFullCov = 1; + return 0; +} +#undef dcv_ref +#undef verr_ref +#undef ader_ref + +#undef useWeightScheme + +} /* End of VKalVrtCore namespace*/ + diff --git a/Tracking/TrkVertexFitter/TrkVKalVrtCore/src/VtDeriv.cxx b/Tracking/TrkVertexFitter/TrkVKalVrtCore/src/VtDeriv.cxx index 6ca0a2b6579fbd7e0ef7829eb21724416ee40f37..5114e4812bc6833d530909e998668d084ed8ce07 100755 --- a/Tracking/TrkVertexFitter/TrkVKalVrtCore/src/VtDeriv.cxx +++ b/Tracking/TrkVertexFitter/TrkVKalVrtCore/src/VtDeriv.cxx @@ -27,7 +27,7 @@ void vpderiv(bool UseTrackErr, long int Charge, double *pari0, double *covi, dou /* Local variables */ double pari[6], covd[15], dcov[3], rvec[50]; /* was [2][6*4+1] */ double paro[5]; - long int jerr, j, ij, ip, ipp, id=0; + long int j, ij, ip, ipp, id=0; double dwgt0[3]={0.,0.,0.}, constB; //double deriv[6], dchi2[4*6+1]; //VK for debugging double cs, pp, sn, pt, rho; @@ -66,7 +66,6 @@ void vpderiv(bool UseTrackErr, long int Charge, double *pari0, double *covi, dou /* Function Body */ /* --------------------- */ - jerr = 0; //VK constB = *localbmag * .0029979246; constB =vkalvrtbmag.bmag * vkalMagCnvCst; @@ -181,7 +180,7 @@ void vpderiv(bool UseTrackErr, long int Charge, double *pari0, double *covi, dou /*---------------------------------------------------------------- */ // Weight matrix and chi2 for given shift // - jerr=cfdinv(dcov, &dwgt[0], -2); if(jerr){jerr=cfdinv(dcov, &dwgt[0], 2); if(jerr){dwgt[0]=dwgt[2]=1.e6; dwgt[1]=0.; jerr=0;}}; + int jerr=cfdinv(dcov, &dwgt[0], -2); if(jerr){jerr=cfdinv(dcov, &dwgt[0], 2); if(jerr){dwgt[0]=dwgt[2]=1.e6; dwgt[1]=0.;}}; //dchi2[ip] = sqrt(fabs(dwgt[0]*paro[0]*paro[0] + 2.*dwgt[1]*paro[0]*paro[1] + dwgt[2]*paro[1]*paro[1])); rvec_ref(1, ip) = paro[0]; rvec_ref(2, ip) = paro[1]; diff --git a/Tracking/TrkVertexFitter/TrkVKalVrtCore/src/cfImp.cxx b/Tracking/TrkVertexFitter/TrkVKalVrtCore/src/cfImp.cxx index 449c0c56ce24ae57353b2b24809859081cb3c35c..b58263ef1ceee289e224da4f8b8834a8a0b39081 100755 --- a/Tracking/TrkVertexFitter/TrkVKalVrtCore/src/cfImp.cxx +++ b/Tracking/TrkVertexFitter/TrkVKalVrtCore/src/cfImp.cxx @@ -2,185 +2,185 @@ Copyright (C) 2002-2017 CERN for the benefit of the ATLAS collaboration */ -#include <math.h> -#include "TrkVKalVrtCore/Propagator.h" -#include <iostream> - -namespace Trk { - -extern vkalPropagator myPropagator; -extern int cfdinv(double *, double *, long int); - -#define min(a,b) ((a) <= (b) ? (a) : (b)) -#define max(a,b) ((a) >= (b) ? (a) : (b)) - - - void cfimp(long int TrkID, long int ich, long int IFL, double *par, - double *err, double *vrt, double *vcov, double *rimp, - double *rcov, double *sign ) -{ - double dcov[3], errd[15], paro[5]; - double dwgt[3], errn[15]; - long int jerr, i__, j, ij; - - - double cs, sn; - - double cnv[6] /* was [2][3] */; -/* --------------------------------------------------------- */ -/* Impact parameter calculation */ -/* Input: */ -/* ICH -charge(-1,0,1) */ -/* IFL = 1 contribution from VRT is added */ -/* IFL =-1 contribution from VRT is subtructed */ -/* PAR(5),ERR(15) - peregee parameters and error matrix */ -/* VRT(3),VCOV(6) - vertex and its error matrix */ -/* */ -/* SIGNIFICANCE IS CALCULATED FOR PERIGEE POINT BY DEF. */ -/* (NOT FOR THE CLOSEST POINT!!!) */ -/* */ -/* Output: */ -/* RIMP(1) - impact in XY */ -/* RIMP(2) - impact in Z */ -/* RIMP(3) - Theta at new vertex */ -/* RIMP(4) - Phi at new vertex */ -/* RIMP(5) - curvature at vertex */ -/* RCOV(3) - error matrix for RIMP */ -/* SIGN - impact significance */ -/* Author: V.Kostyukhin */ -/* --------------------------------------------------------- */ - /* Parameter adjustments */ - --vcov; - - /* Function Body */ - for (int ii = 0; ii < 15; ++ii) {errd[ii] = err[ii];} - - - double Ref0[3]={0.,0.,0.}; //base reference point for standard perigee - myPropagator.Propagate( TrkID, ich, par, errd, Ref0, vrt, paro, errn); - -//std::cout <<" CFImp new par R,Z="<<paro[0]<<", "<<paro[1]<<'\n'; -/* ---------- */ - rimp[0] = paro[0]; - rimp[1] = paro[1]; - rimp[2] = paro[2]; - rimp[3] = paro[3]; - rimp[4] = paro[4]; -/* X=paro(1)*sn, Y=-paro(1)*cs */ - sn = sin(paro[3]); - cs = cos(paro[3]); -/* -- New error version */ - cnv[0] = -sn; - cnv[2] = cs; - cnv[4] = 0.; - cnv[1] = sn / tan(paro[2]); - cnv[3] = cs / tan(paro[2]); - cnv[5] = -1.; - dcov[0] = 0.; - dcov[1] = 0.; - dcov[2] = 0.; - for (i__ = 1; i__ <= 3; ++i__) { - for (j = 1; j <= 3; ++j) { - ij = max(i__,j); - ij = ij * (ij - 1) / 2 + min(i__,j); - dcov[0] += cnv[(i__ << 1) - 2] * cnv[(j << 1) - 2] * vcov[ij]; - dcov[2] += cnv[(i__ << 1) - 1] * cnv[(j << 1) - 1] * vcov[ij]; - dcov[1] += cnv[(i__ << 1) - 2] * cnv[(j << 1) - 1] * vcov[ij]; - } - } -/* --------------------------------------------------------------- */ - if (IFL == 1) { - rcov[0] = errn[0] + dcov[0]; - rcov[1] = errn[1] + dcov[1]; - rcov[2] = errn[2] + dcov[2]; - } else if (IFL == -1) { - rcov[0] = errn[0] - dcov[0]; - rcov[1] = errn[1] - dcov[1]; - rcov[2] = errn[2] - dcov[2]; - } else { - rcov[0] = errn[0]; - rcov[1] = errn[1]; - rcov[2] = errn[2]; - } - jerr=cfdinv(rcov, dwgt, -2); - if (jerr) {jerr=cfdinv(rcov, dwgt, 2); if(jerr){dwgt[0]=dwgt[2]=1.e6; dwgt[1]=0.; jerr=0;}} - (*sign) = sqrt(fabs(dwgt[0] * rimp[0] * rimp[0] + dwgt[1] * 2. * rimp[0] * rimp[1] + - dwgt[2] * rimp[1] * rimp[1])); -} - - - void cfimpc(long int TrkID, long int ich, long int IFL, double *par, - double *err, double *vrt, double *vcov, double *rimp, - double *rcov, double *sign ) -{ - double dcov[3], errd[15], paro[5]; - double dwgt[3], errn[15], cnv[6]; /* was [2][3] */ - long int jerr, i__, j, ij; - - - double cs, sn; - extern void cfClstPnt(double *p, double *, double *); -/* --------------------------------------------------------- */ -/* SIGNIFICANCE IS CALCULATED FOR THE CLOSEST POINT NOW!!!*/ -/* Author: V.Kostyukhin */ -/* --------------------------------------------------------- */ - /* Parameter adjustments */ - --vcov; - for (int ii = 0; ii < 15; ++ii) {errd[ii] = err[ii];} - - double Ref0[3]={0.,0.,0.}; //base reference point for standard perigee - myPropagator.Propagate( TrkID, ich, par, errd, Ref0, vrt, paro, errn); - - double tmpVrt[3]={0.,0.,0.}; double ClosestPnt[3]; - cfClstPnt( paro, tmpVrt, ClosestPnt); - paro[0]=sqrt(ClosestPnt[0]*ClosestPnt[0] + ClosestPnt[1]*ClosestPnt[1]); - paro[1]=ClosestPnt[2]; -/* ---------- */ - rimp[0] = paro[0]; - rimp[1] = paro[1]; - rimp[2] = paro[2]; - rimp[3] = paro[3]; - rimp[4] = paro[4]; - sn = sin(paro[3]); - cs = cos(paro[3]); -/* -- New error version */ - cnv[0] = -sn; - cnv[2] = cs; - cnv[4] = 0.; - cnv[1] = sn / tan(paro[2]); - cnv[3] = cs / tan(paro[2]); - cnv[5] = -1.; - dcov[0] = 0.; - dcov[1] = 0.; - dcov[2] = 0.; - for (i__ = 1; i__ <= 3; ++i__) { - for (j = 1; j <= 3; ++j) { - ij = max(i__,j); - ij = ij * (ij - 1) / 2 + min(i__,j); - dcov[0] += cnv[(i__ << 1) - 2] * cnv[(j << 1) - 2] * vcov[ij]; - dcov[2] += cnv[(i__ << 1) - 1] * cnv[(j << 1) - 1] * vcov[ij]; - dcov[1] += cnv[(i__ << 1) - 2] * cnv[(j << 1) - 1] * vcov[ij]; - } - } -/* --------------------------------------------------------------- */ - if (IFL == 1) { - rcov[0] = errn[0] + dcov[0]; - rcov[1] = errn[1] + dcov[1]; - rcov[2] = errn[2] + dcov[2]; - } else if (IFL == -1) { - rcov[0] = errn[0] - dcov[0]; - rcov[1] = errn[1] - dcov[1]; - rcov[2] = errn[2] - dcov[2]; - } else { - rcov[0] = errn[0]; - rcov[1] = errn[1]; - rcov[2] = errn[2]; - } - jerr=cfdinv(rcov, dwgt, -2); - if (jerr) {jerr=cfdinv(rcov, dwgt, 2);if(jerr){dwgt[0]=dwgt[2]=1.e6; dwgt[1]=0.; jerr=0;}} - (*sign) = sqrt(fabs(dwgt[0] * rimp[0] * rimp[0] + dwgt[1] * 2. * rimp[0] * rimp[1] + - dwgt[2] * rimp[1] * rimp[1])); -} - -} /* end of namespace */ - +#include <math.h> +#include "TrkVKalVrtCore/Propagator.h" +#include <iostream> + +namespace Trk { + +extern vkalPropagator myPropagator; +extern int cfdinv(double *, double *, long int); + +#define min(a,b) ((a) <= (b) ? (a) : (b)) +#define max(a,b) ((a) >= (b) ? (a) : (b)) + + + void cfimp(long int TrkID, long int ich, long int IFL, double *par, + double *err, double *vrt, double *vcov, double *rimp, + double *rcov, double *sign ) +{ + double dcov[3], errd[15], paro[5]; + double dwgt[3], errn[15]; + int i__, j, ij; + + + double cs, sn; + + double cnv[6] /* was [2][3] */; +/* --------------------------------------------------------- */ +/* Impact parameter calculation */ +/* Input: */ +/* ICH -charge(-1,0,1) */ +/* IFL = 1 contribution from VRT is added */ +/* IFL =-1 contribution from VRT is subtructed */ +/* PAR(5),ERR(15) - peregee parameters and error matrix */ +/* VRT(3),VCOV(6) - vertex and its error matrix */ +/* */ +/* SIGNIFICANCE IS CALCULATED FOR PERIGEE POINT BY DEF. */ +/* (NOT FOR THE CLOSEST POINT!!!) */ +/* */ +/* Output: */ +/* RIMP(1) - impact in XY */ +/* RIMP(2) - impact in Z */ +/* RIMP(3) - Theta at new vertex */ +/* RIMP(4) - Phi at new vertex */ +/* RIMP(5) - curvature at vertex */ +/* RCOV(3) - error matrix for RIMP */ +/* SIGN - impact significance */ +/* Author: V.Kostyukhin */ +/* --------------------------------------------------------- */ + /* Parameter adjustments */ + --vcov; + + /* Function Body */ + for (int ii = 0; ii < 15; ++ii) {errd[ii] = err[ii];} + + + double Ref0[3]={0.,0.,0.}; //base reference point for standard perigee + myPropagator.Propagate( TrkID, ich, par, errd, Ref0, vrt, paro, errn); + +//std::cout <<" CFImp new par R,Z="<<paro[0]<<", "<<paro[1]<<'\n'; +/* ---------- */ + rimp[0] = paro[0]; + rimp[1] = paro[1]; + rimp[2] = paro[2]; + rimp[3] = paro[3]; + rimp[4] = paro[4]; +/* X=paro(1)*sn, Y=-paro(1)*cs */ + sn = sin(paro[3]); + cs = cos(paro[3]); +/* -- New error version */ + cnv[0] = -sn; + cnv[2] = cs; + cnv[4] = 0.; + cnv[1] = sn / tan(paro[2]); + cnv[3] = cs / tan(paro[2]); + cnv[5] = -1.; + dcov[0] = 0.; + dcov[1] = 0.; + dcov[2] = 0.; + for (i__ = 1; i__ <= 3; ++i__) { + for (j = 1; j <= 3; ++j) { + ij = max(i__,j); + ij = ij * (ij - 1) / 2 + min(i__,j); + dcov[0] += cnv[(i__ << 1) - 2] * cnv[(j << 1) - 2] * vcov[ij]; + dcov[2] += cnv[(i__ << 1) - 1] * cnv[(j << 1) - 1] * vcov[ij]; + dcov[1] += cnv[(i__ << 1) - 2] * cnv[(j << 1) - 1] * vcov[ij]; + } + } +/* --------------------------------------------------------------- */ + if (IFL == 1) { + rcov[0] = errn[0] + dcov[0]; + rcov[1] = errn[1] + dcov[1]; + rcov[2] = errn[2] + dcov[2]; + } else if (IFL == -1) { + rcov[0] = errn[0] - dcov[0]; + rcov[1] = errn[1] - dcov[1]; + rcov[2] = errn[2] - dcov[2]; + } else { + rcov[0] = errn[0]; + rcov[1] = errn[1]; + rcov[2] = errn[2]; + } + int jerr=cfdinv(rcov, dwgt, -2); + if (jerr) {jerr=cfdinv(rcov, dwgt, 2); if(jerr){dwgt[0]=dwgt[2]=1.e6; dwgt[1]=0.;}} + (*sign) = sqrt(fabs(dwgt[0] * rimp[0] * rimp[0] + dwgt[1] * 2. * rimp[0] * rimp[1] + + dwgt[2] * rimp[1] * rimp[1])); +} + + + void cfimpc(long int TrkID, long int ich, long int IFL, double *par, + double *err, double *vrt, double *vcov, double *rimp, + double *rcov, double *sign ) +{ + double dcov[3], errd[15], paro[5]; + double dwgt[3], errn[15], cnv[6]; /* was [2][3] */ + int i__, j, ij; + + + double cs, sn; + extern void cfClstPnt(double *p, double *, double *); +/* --------------------------------------------------------- */ +/* SIGNIFICANCE IS CALCULATED FOR THE CLOSEST POINT NOW!!!*/ +/* Author: V.Kostyukhin */ +/* --------------------------------------------------------- */ + /* Parameter adjustments */ + --vcov; + for (int ii = 0; ii < 15; ++ii) {errd[ii] = err[ii];} + + double Ref0[3]={0.,0.,0.}; //base reference point for standard perigee + myPropagator.Propagate( TrkID, ich, par, errd, Ref0, vrt, paro, errn); + + double tmpVrt[3]={0.,0.,0.}; double ClosestPnt[3]; + cfClstPnt( paro, tmpVrt, ClosestPnt); + paro[0]=sqrt(ClosestPnt[0]*ClosestPnt[0] + ClosestPnt[1]*ClosestPnt[1]); + paro[1]=ClosestPnt[2]; +/* ---------- */ + rimp[0] = paro[0]; + rimp[1] = paro[1]; + rimp[2] = paro[2]; + rimp[3] = paro[3]; + rimp[4] = paro[4]; + sn = sin(paro[3]); + cs = cos(paro[3]); +/* -- New error version */ + cnv[0] = -sn; + cnv[2] = cs; + cnv[4] = 0.; + cnv[1] = sn / tan(paro[2]); + cnv[3] = cs / tan(paro[2]); + cnv[5] = -1.; + dcov[0] = 0.; + dcov[1] = 0.; + dcov[2] = 0.; + for (i__ = 1; i__ <= 3; ++i__) { + for (j = 1; j <= 3; ++j) { + ij = max(i__,j); + ij = ij * (ij - 1) / 2 + min(i__,j); + dcov[0] += cnv[(i__ << 1) - 2] * cnv[(j << 1) - 2] * vcov[ij]; + dcov[2] += cnv[(i__ << 1) - 1] * cnv[(j << 1) - 1] * vcov[ij]; + dcov[1] += cnv[(i__ << 1) - 2] * cnv[(j << 1) - 1] * vcov[ij]; + } + } +/* --------------------------------------------------------------- */ + if (IFL == 1) { + rcov[0] = errn[0] + dcov[0]; + rcov[1] = errn[1] + dcov[1]; + rcov[2] = errn[2] + dcov[2]; + } else if (IFL == -1) { + rcov[0] = errn[0] - dcov[0]; + rcov[1] = errn[1] - dcov[1]; + rcov[2] = errn[2] - dcov[2]; + } else { + rcov[0] = errn[0]; + rcov[1] = errn[1]; + rcov[2] = errn[2]; + } + int jerr=cfdinv(rcov, dwgt, -2); + if (jerr) {jerr=cfdinv(rcov, dwgt, 2);if(jerr){dwgt[0]=dwgt[2]=1.e6; dwgt[1]=0.;}} + (*sign) = sqrt(fabs(dwgt[0] * rimp[0] * rimp[0] + dwgt[1] * 2. * rimp[0] * rimp[1] + + dwgt[2] * rimp[1] * rimp[1])); +} + +} /* end of namespace */ + diff --git a/Tracking/TrkVertexFitter/TrkVKalVrtCore/src/cfNewPm.cxx b/Tracking/TrkVertexFitter/TrkVKalVrtCore/src/cfNewPm.cxx index 5c5a1e68545c5d631d32b56391f274947cee4030..6fc8a6a61acb1dc47174a66305602ad9c9344815 100755 --- a/Tracking/TrkVertexFitter/TrkVKalVrtCore/src/cfNewPm.cxx +++ b/Tracking/TrkVertexFitter/TrkVKalVrtCore/src/cfNewPm.cxx @@ -2,133 +2,134 @@ Copyright (C) 2002-2017 CERN for the benefit of the ATLAS collaboration */ -#include <math.h> -#include <iostream> -#include "TrkVKalVrtCore/VKalVrtBMag.h" -#include "TrkVKalVrtCore/Propagator.h" - -namespace Trk { - -extern vkalPropagator myPropagator; -extern VKalVrtBMag vkalvrtbmag; -extern vkalMagFld myMagFld; - - -extern double d_sign(double, double); -extern void cfnewp(long int *, double *, double *, double *, double *, double *); -extern void vkgrkuta_(double *, double *, double *, double *); - - -void cfnewpm(double *par, double *xyzStart, double *xyzEnd, double *ustep, double *parn, double *closePoint) -{ - double d__1, d__2,dist_left; - double vect[7], stmg, vout[7], dpar0[5]; - double p, perig[3], dstep, constB, xyzst[3], charge, fx, fy, fz, pt, px, py, pz; - double posold, poscur, totway, dp; - double dX, dY, dZ; - long int ich; - -/* --------------------------------------------------------- */ -/* The same as CFNEWP but for the case on nonuniform */ -/* magnetic field */ -/* */ -/* Propagation from xyzStart reference point to xyzEnd point*/ -/* PAR - perigee parameters wrt xyzStart */ -/* PARN - perigee parameters wrt xyzEnd */ -/* Author: V.Kostyukhin */ -/* --------------------------------------------------------- */ - /* Parameter adjustments */ - --par; - - d__1 = tan(par[3]); - totway = (*ustep) * sqrt(1. / (d__1 * d__1) + 1.); - - if (fabs(*ustep) < 10. && fabs(totway) < 20.) return; // Distance(mm) is small. Simplest propagation is used - - stmg = 40.; //Propagation step in mm for nonuniform field - - vect[0] = sin(par[4]) * par[1] +xyzStart[0]; - vect[1] = -cos(par[4]) * par[1] +xyzStart[1]; - vect[2] = par[2] +xyzStart[2]; - - myMagFld.getMagFld( vect[0],vect[1],vect[2],fx,fy,fz); - constB = fz * myMagFld.getCnvCst(); - - pt = constB / fabs(par[5]); - px = pt * cos(par[4]); - py = pt * sin(par[4]); - pz = pt / tan(par[3]); - p = sqrt(pt * pt + pz * pz); - - vect[3] = px / p; - vect[4] = py / p; - vect[5] = pz / p; - vect[6] = p; - charge = -d_sign( 1., par[5]); - poscur = 0.; -//std::cout <<"VkGrkuta vect="<<vect[0]<<", "<<vect[1]<<", "<<vect[2]<<", "<<vect[3]<<", " -// <<vect[4]<<", "<<vect[5]<<", "<<vect[6]<<'\n'; - while(fabs(poscur) < fabs(totway)) { - posold = poscur; - d__1 = fabs(poscur) + stmg; - d__2 = fabs(totway); - poscur = d__1 < d__2 ? d__1 : d__2; - poscur = d_sign(poscur, totway); - dstep = poscur - posold; - vkgrkuta_(&charge, &dstep, vect, vout); - vect[0] = vout[0]; - vect[1] = vout[1]; - vect[2] = vout[2]; - vect[3] = vout[3]; - vect[4] = vout[4]; - vect[5] = vout[5]; -// safety for strongly nonuniform field - dX = vect[0]-xyzEnd[0]; - dY = vect[1]-xyzEnd[1]; - dZ = vect[2]-xyzEnd[2]; - dist_left = sqrt( dX*dX + dY*dY + dZ*dZ); - if(dist_left < stmg) break; // arrived - } - -/* --- Now we are in the new point. Calculate track parameters */ -/* at new point with new mag.field */ - - myMagFld.getMagFld( xyzEnd[0],xyzEnd[1],xyzEnd[2],fx,fy,fz); - //myMagFld.getMagFld( vect[0], vect[1], vect[2], fx, fy, fz); - constB = fz * myMagFld.getCnvCst(); - - dpar0[0] = 0.; - dpar0[1] = 0.; - dpar0[2] = acos(vout[5]); - dpar0[3] = atan2(vout[4], vout[3]); -// if (dpar0[3] < 0.) dpar0[3] += 6.2831853071794; - - px = vect[3] * vect[6]; - py = vect[4] * vect[6]; - dpar0[4] = d_sign( (constB/sqrt(px*px+py*py)), par[5]); /* new value of curvature */ - ich = (long int) charge; - xyzst[0] = xyzEnd[0] - vout[0]; - xyzst[1] = xyzEnd[1] - vout[1]; - xyzst[2] = xyzEnd[2] - vout[2]; - - cfnewp(&ich, dpar0, xyzst, &dp, parn, perig); // Last step of propagation - closePoint[0] = perig[0] + vout[0]; // with simple program - closePoint[1] = perig[1] + vout[1]; - closePoint[2] = perig[2] + vout[2]; - -//std::cout <<" Exit from cfNewPm="<<dp<<'\n'; -//std::cout <<parn[0]<<'\n'; -// if(parn[0] == 0.) { -//std::cout <<dp<<", "<<(*ustep)<<'\n'; -// for (int jj=0; jj<6;jj++) std::cout <<" vout="<<vout[jj]<<'\n'; -// for (int jj=0; jj<3;jj++) std::cout <<" xyzst="<<xyzst[jj]<<'\n'; -// for (int jj=0; jj<5;jj++) std::cout <<" dpar0="<<dpar0[jj]<<'\n'; -// for (int jj=0; jj<5;jj++) std::cout <<" parn="<<parn[jj]<<'\n'; -// } - return; -} - - - - -} /* End of namespace */ +#include <math.h> +#include <iostream> +#include "TrkVKalVrtCore/VKalVrtBMag.h" +#include "TrkVKalVrtCore/Propagator.h" + +namespace Trk { + +extern vkalPropagator myPropagator; +extern VKalVrtBMag vkalvrtbmag; +extern vkalMagFld myMagFld; + + +extern double d_sign(double, double); +extern void cfnewp(long int *, double *, double *, double *, double *, double *); +extern void vkgrkuta_(double *, double *, double *, double *); + + +void cfnewpm(double *par, double *xyzStart, double *xyzEnd, double *ustep, double *parn, double *closePoint) +{ + double d__1, d__2,dist_left; + double vect[7], stmg, dpar0[5]; + double vout[7]={0.}; + double p, perig[3], dstep, constB, xyzst[3], charge, fx, fy, fz, pt, px, py, pz; + double posold, poscur, totway, dp; + double dX, dY, dZ; + long int ich; + +/* --------------------------------------------------------- */ +/* The same as CFNEWP but for the case on nonuniform */ +/* magnetic field */ +/* */ +/* Propagation from xyzStart reference point to xyzEnd point*/ +/* PAR - perigee parameters wrt xyzStart */ +/* PARN - perigee parameters wrt xyzEnd */ +/* Author: V.Kostyukhin */ +/* --------------------------------------------------------- */ + /* Parameter adjustments */ + --par; + + d__1 = tan(par[3]); + totway = (*ustep) * sqrt(1. / (d__1 * d__1) + 1.); + + if (fabs(*ustep) < 10. && fabs(totway) < 20.) return; // Distance(mm) is small. Simplest propagation is used + + stmg = 40.; //Propagation step in mm for nonuniform field + + vect[0] = sin(par[4]) * par[1] +xyzStart[0]; + vect[1] = -cos(par[4]) * par[1] +xyzStart[1]; + vect[2] = par[2] +xyzStart[2]; + + myMagFld.getMagFld( vect[0],vect[1],vect[2],fx,fy,fz); + constB = fz * myMagFld.getCnvCst(); + + pt = constB / fabs(par[5]); + px = pt * cos(par[4]); + py = pt * sin(par[4]); + pz = pt / tan(par[3]); + p = sqrt(pt * pt + pz * pz); + + vect[3] = px / p; + vect[4] = py / p; + vect[5] = pz / p; + vect[6] = p; + charge = -d_sign( 1., par[5]); + poscur = 0.; +//std::cout <<"VkGrkuta vect="<<vect[0]<<", "<<vect[1]<<", "<<vect[2]<<", "<<vect[3]<<", " +// <<vect[4]<<", "<<vect[5]<<", "<<vect[6]<<'\n'; + while(fabs(poscur) < fabs(totway)) { + posold = poscur; + d__1 = fabs(poscur) + stmg; + d__2 = fabs(totway); + poscur = d__1 < d__2 ? d__1 : d__2; + poscur = d_sign(poscur, totway); + dstep = poscur - posold; + vkgrkuta_(&charge, &dstep, vect, vout); + vect[0] = vout[0]; + vect[1] = vout[1]; + vect[2] = vout[2]; + vect[3] = vout[3]; + vect[4] = vout[4]; + vect[5] = vout[5]; +// safety for strongly nonuniform field + dX = vect[0]-xyzEnd[0]; + dY = vect[1]-xyzEnd[1]; + dZ = vect[2]-xyzEnd[2]; + dist_left = sqrt( dX*dX + dY*dY + dZ*dZ); + if(dist_left < stmg) break; // arrived + } + +/* --- Now we are in the new point. Calculate track parameters */ +/* at new point with new mag.field */ + + myMagFld.getMagFld( xyzEnd[0],xyzEnd[1],xyzEnd[2],fx,fy,fz); + //myMagFld.getMagFld( vect[0], vect[1], vect[2], fx, fy, fz); + constB = fz * myMagFld.getCnvCst(); + + dpar0[0] = 0.; + dpar0[1] = 0.; + dpar0[2] = acos(vout[5]); + dpar0[3] = atan2(vout[4], vout[3]); +// if (dpar0[3] < 0.) dpar0[3] += 6.2831853071794; + + px = vect[3] * vect[6]; + py = vect[4] * vect[6]; + dpar0[4] = d_sign( (constB/sqrt(px*px+py*py)), par[5]); /* new value of curvature */ + ich = (long int) charge; + xyzst[0] = xyzEnd[0] - vout[0]; + xyzst[1] = xyzEnd[1] - vout[1]; + xyzst[2] = xyzEnd[2] - vout[2]; + + cfnewp(&ich, dpar0, xyzst, &dp, parn, perig); // Last step of propagation + closePoint[0] = perig[0] + vout[0]; // with simple program + closePoint[1] = perig[1] + vout[1]; + closePoint[2] = perig[2] + vout[2]; + +//std::cout <<" Exit from cfNewPm="<<dp<<'\n'; +//std::cout <<parn[0]<<'\n'; +// if(parn[0] == 0.) { +//std::cout <<dp<<", "<<(*ustep)<<'\n'; +// for (int jj=0; jj<6;jj++) std::cout <<" vout="<<vout[jj]<<'\n'; +// for (int jj=0; jj<3;jj++) std::cout <<" xyzst="<<xyzst[jj]<<'\n'; +// for (int jj=0; jj<5;jj++) std::cout <<" dpar0="<<dpar0[jj]<<'\n'; +// for (int jj=0; jj<5;jj++) std::cout <<" parn="<<parn[jj]<<'\n'; +// } + return; +} + + + + +} /* End of namespace */ diff --git a/Tracking/TrkVertexFitter/TrkVKalVrtCore/src/cfTotCov.cxx b/Tracking/TrkVertexFitter/TrkVKalVrtCore/src/cfTotCov.cxx index 593ff0bfd69b2217aad2397515f8ef7171678492..3ce736aaba70e7c42a6817eb1e2c65ac518fef84 100755 --- a/Tracking/TrkVertexFitter/TrkVKalVrtCore/src/cfTotCov.cxx +++ b/Tracking/TrkVertexFitter/TrkVKalVrtCore/src/cfTotCov.cxx @@ -39,7 +39,7 @@ int afterFit(VKVertex *vk, double *ader, double * dcv, double * ptot, double * V for (i=1; i<=6; ++i) { for (j=1; j<=NVar ; ++j) dcv[i + j*6 - 7] = 0.; } - cfsetdiag( 6, VrtMomCov, 10.); + cfsetdiag( 6, VrtMomCov, 100.); ptot[0] = 0.; ptot[1] = 0.; ptot[2] = 0.; @@ -66,6 +66,7 @@ int afterFit(VKVertex *vk, double *ader, double * dcv, double * ptot, double * V dcv[0] = 1.; dcv[7] = 1.; dcv[14] = 1.; + if(!ader)return 0; int IERR=getFullVrtCov(vk, ader, dcv, verr); if (IERR) return IERR; int ijk = 0; for ( i=1; i<=6; ++i) { diff --git a/Tracking/TrkVertexFitter/TrkVKalVrtCore/src/cfVrtDst.cxx b/Tracking/TrkVertexFitter/TrkVKalVrtCore/src/cfVrtDst.cxx index f62c75105551205ca47b8ce319e62c2c729097c0..78009a360b1a09e27fffe4afc40b8e0f5006dd04 100755 --- a/Tracking/TrkVertexFitter/TrkVKalVrtCore/src/cfVrtDst.cxx +++ b/Tracking/TrkVertexFitter/TrkVKalVrtCore/src/cfVrtDst.cxx @@ -32,7 +32,7 @@ extern vkalPropagator myPropagator; //-------------------------------------------------------------------------------------------------- double cfVrtDstSig( VKVertex * vk, bool UseTrkErr) { - long int it,IERR; int i,j,ij; + int i,j,ij,it; double parV0[5], covParV0[15]; double Signif; @@ -96,7 +96,7 @@ double cfVrtDstSig( VKVertex * vk, bool UseTrkErr) if ( UseTrkErr){ covImp[0] += nCov[0]; covImp[1] += nCov[1]; covImp[2] += nCov[2];} double dwgt[3]; - IERR=cfdinv(covImp, dwgt, -2); if(IERR){ IERR=cfdinv(covImp, dwgt, 2); if(IERR){dwgt[0]=dwgt[2]=1.e6; dwgt[1]=0.; IERR=0; }} + int IERR=cfdinv(covImp, dwgt, -2); if(IERR){ IERR=cfdinv(covImp, dwgt, 2); if(IERR){dwgt[0]=dwgt[2]=1.e6; dwgt[1]=0.;}} Signif = sqrt(dwgt[0] * nPar[0] * nPar[0] + 2. * dwgt[1] * nPar[0] * nPar[1] + dwgt[2] * nPar[1] * nPar[1]); diff --git a/Tracking/TrkVertexFitter/TrkVKalVrtFitter/CMakeLists.txt b/Tracking/TrkVertexFitter/TrkVKalVrtFitter/CMakeLists.txt index 6711f985fe0dcfbb51d0029962208275524ce895..481fa8b256a48b51a971636bf39c7fbda9dfe1dd 100644 --- a/Tracking/TrkVertexFitter/TrkVKalVrtFitter/CMakeLists.txt +++ b/Tracking/TrkVertexFitter/TrkVKalVrtFitter/CMakeLists.txt @@ -25,7 +25,7 @@ atlas_depends_on_subdirs( PUBLIC #Tracking/TrkEvent/VxVertex # External dependencies: -find_package( CLHEP ) +#find_package( CLHEP ) find_package( Eigen ) # Component(s) in the package: diff --git a/Tracking/TrkVertexFitter/TrkVKalVrtFitter/TrkVKalVrtFitter/ITrkVKalVrtFitter.h b/Tracking/TrkVertexFitter/TrkVKalVrtFitter/TrkVKalVrtFitter/ITrkVKalVrtFitter.h index 33c7a25f3b2730a7c215b9d88e0fd5b5fbaf47ec..097eec118c34ef50426f730eea6bc49fcb8035d4 100755 --- a/Tracking/TrkVertexFitter/TrkVKalVrtFitter/TrkVKalVrtFitter/ITrkVKalVrtFitter.h +++ b/Tracking/TrkVertexFitter/TrkVKalVrtFitter/TrkVKalVrtFitter/ITrkVKalVrtFitter.h @@ -113,7 +113,7 @@ namespace Trk{ virtual void setVertexForConstraint(double,double,double)=0; virtual void setCovVrtForConstraint(double,double,double, double,double,double)=0; - virtual void setMassInputParticles( std::vector<double>& )=0; + virtual void setMassInputParticles( const std::vector<double>& )=0; virtual void setDefault() =0; virtual void setZeroCharge(int)=0; // diff --git a/Tracking/TrkVertexFitter/TrkVKalVrtFitter/TrkVKalVrtFitter/TrkVKalVrtFitter.h b/Tracking/TrkVertexFitter/TrkVKalVrtFitter/TrkVKalVrtFitter/TrkVKalVrtFitter.h index 605cd73b00416e6959cf3ad24ee1bb8c5d19cee1..4462cd5ebe29ab5d7d25678f921bc28ff33ae258 100755 --- a/Tracking/TrkVertexFitter/TrkVKalVrtFitter/TrkVKalVrtFitter/TrkVKalVrtFitter.h +++ b/Tracking/TrkVertexFitter/TrkVKalVrtFitter/TrkVKalVrtFitter/TrkVKalVrtFitter.h @@ -33,7 +33,7 @@ class IMagFieldAthenaSvc; namespace Trk{ - static const int m_NTrMaxVFit=300; + static const int NTrMaxVFit=300; typedef std::vector<double> dvect; class VKalAtlasMagFld; class IExtrapolator; @@ -225,7 +225,7 @@ namespace Trk{ void setCovVrtForConstraint(double,double,double, double,double,double); - void setMassInputParticles( std::vector<double>& ); + void setMassInputParticles( const std::vector<double>& ); void setMomCovCalc(int); void setDefault(); void setZeroCharge(int); @@ -279,8 +279,8 @@ namespace Trk{ SimpleProperty<bool> m_firstMeasuredPointLimit; SimpleProperty<bool> m_makeExtendedVertex; - bool isAtlasField; - bool isFieldInitialized; + bool m_isAtlasField; + bool m_isFieldInitialized; bool m_useAprioriVertex ; bool m_useThetaCnst; @@ -347,13 +347,13 @@ namespace Trk{ // // Arrays needed for fitting kernel // - double m_par0[m_NTrMaxVFit][3]; //used only for fit preparation - double m_apar[m_NTrMaxVFit][5]; //used only for fit preparation - double m_awgt[m_NTrMaxVFit][15]; //used only for fit preparation - long int m_ich[m_NTrMaxVFit]; - double m_chi2tr[m_NTrMaxVFit]; - double m_parfs[m_NTrMaxVFit][3]; - double m_wm[m_NTrMaxVFit]; + double m_par0[NTrMaxVFit][3]; //used only for fit preparation + double m_apar[NTrMaxVFit][5]; //used only for fit preparation + double m_awgt[NTrMaxVFit][15]; //used only for fit preparation + long int m_ich[NTrMaxVFit]; + double m_chi2tr[NTrMaxVFit]; + double m_parfs[NTrMaxVFit][3]; + double m_wm[NTrMaxVFit]; double m_VrtCst[3]; double m_CovVrtCst[6]; diff --git a/Tracking/TrkVertexFitter/TrkVKalVrtFitter/TrkVKalVrtFitter/VKalVrtAtlas.h b/Tracking/TrkVertexFitter/TrkVKalVrtFitter/TrkVKalVrtFitter/VKalVrtAtlas.h index 9f9423c105f449f06c6789a0c6a8804b41295046..f5a0768273d42e8dcab9cc1ac6cdbbda7e4f9852 100755 --- a/Tracking/TrkVertexFitter/TrkVKalVrtFitter/TrkVKalVrtFitter/VKalVrtAtlas.h +++ b/Tracking/TrkVertexFitter/TrkVKalVrtFitter/TrkVKalVrtFitter/VKalVrtAtlas.h @@ -37,11 +37,11 @@ namespace Trk{ MagField::IMagFieldSvc* m_VKalAthenaField; double m_FIXED_ATLAS_FIELD; - const double mm; + const double m_mm; double m_magFrameX, m_magFrameY, m_magFrameZ ; double m_saveXpos, m_saveYpos, m_saveZpos; double m_saveBX, m_saveBY, m_saveBZ; - Amg::Vector3D Point; + Amg::Vector3D m_Point; }; @@ -85,7 +85,7 @@ class StraightLineSurface; private: const IExtrapolator *m_extrapolator; //!< Pointer to Extrapolator AlgTool - TrkVKalVrtFitter *vkalFitSvc; //!< Pointer to TrkVKalVrtFitter + TrkVKalVrtFitter *m_vkalFitSvc; //!< Pointer to TrkVKalVrtFitter double Protection(double *) const; diff --git a/Tracking/TrkVertexFitter/TrkVKalVrtFitter/src/CvtParametersBase.cxx b/Tracking/TrkVertexFitter/TrkVKalVrtFitter/src/CvtParametersBase.cxx index 43a706779a981a4a4e53302bc1123c5f51e47539..0e9adb4ad4e460eb18507b227ff6b8a0e0a8f6d6 100755 --- a/Tracking/TrkVertexFitter/TrkVKalVrtFitter/src/CvtParametersBase.cxx +++ b/Tracking/TrkVertexFitter/TrkVKalVrtFitter/src/CvtParametersBase.cxx @@ -34,11 +34,11 @@ namespace Trk { std::vector<const TrackParameters*>::const_iterator i_pbase; AmgVector(5) VectPerig; VectPerig<<0.,0.,0.,0.,0.; Amg::Vector3D perGlobalPos,perGlobalVrt; - const Trk::Perigee* m_mPer=0; - const Trk::AtaStraightLine* m_Line=0; + const Trk::Perigee* mPer=0; + const Trk::AtaStraightLine* Line=0; double CovVertTrk[15]; std::fill(CovVertTrk,CovVertTrk+15,0.); double tmp_refFrameX=0, tmp_refFrameY=0, tmp_refFrameZ=0; - double fx,fy,fz,m_BMAG_FIXED; + double fx,fy,fz,BMAG_FIXED; double rxyMin=1000000.; // @@ -49,8 +49,8 @@ namespace Trk { m_fitField->setAtlasMagRefFrame( 0., 0., 0.); if( m_InDetExtrapolator == 0 && m_PropagatorType != 3 ){ - //log << MSG::WARNING << "No InDet extrapolator given. Can't use TrackParameters!!!" << endreq; - if(msgLvl(MSG::WARNING))msg()<< "No InDet extrapolator given. Can't use TrackParameters!!!" << endreq; + //log << MSG::WARNING << "No InDet extrapolator given. Can't use TrackParameters!!!" << endmsg; + if(msgLvl(MSG::WARNING))msg()<< "No InDet extrapolator given. Can't use TrackParameters!!!" << endmsg; return StatusCode::FAILURE; } // @@ -101,38 +101,38 @@ namespace Trk { if( trkparO ){ const Trk::TrackParameters* trkparN = m_fitPropagator->myExtrapWithMatUpdate( ntrk, trkparO, &m_refGVertex ); if(trkparN == 0) return StatusCode::FAILURE; - m_mPer = dynamic_cast<const Trk::Perigee*>(trkparN); - if( m_mPer == 0) { delete trkparN; return StatusCode::FAILURE; } - VectPerig = m_mPer->parameters(); - perGlobalPos = m_mPer->position(); //Global position of perigee point - //perGlobalVrt = m_mPer->vertex(); //Global position of reference point - perGlobalVrt = m_mPer->associatedSurface().center(); //Global position of reference point - if( !convertAmg5SymMtx(m_mPer->covariance(), CovVertTrk) ) return StatusCode::FAILURE; //VK no good covariance matrix! + mPer = dynamic_cast<const Trk::Perigee*>(trkparN); + if( mPer == 0) { delete trkparN; return StatusCode::FAILURE; } + VectPerig = mPer->parameters(); + perGlobalPos = mPer->position(); //Global position of perigee point + //perGlobalVrt = mPer->vertex(); //Global position of reference point + perGlobalVrt = mPer->associatedSurface().center(); //Global position of reference point + if( !convertAmg5SymMtx(mPer->covariance(), CovVertTrk) ) return StatusCode::FAILURE; //VK no good covariance matrix! delete trkparN; } // std::cout<<" Tr="<<ntrk<<" GlobPosTrn="<<perGlobalPos.x()<<", "<<perGlobalPos.y()<<", "<<perGlobalPos.z()<<'\n'; // std::cout<<" Common Ref. point="<<perGlobalVrt.x()<<", "<<perGlobalVrt.y()<<", "<<perGlobalVrt.z()<<'\n'; m_refFrameX=m_refFrameY=m_refFrameZ=0.; m_fitField->setAtlasMagRefFrame( 0., 0., 0.); //restore ATLAS frame for safety m_fitField->getMagFld( perGlobalPos.x(), perGlobalPos.y(), perGlobalPos.z(), // Magnetic field - fx, fy, m_BMAG_FIXED); // at perigee point - if(fabs(m_BMAG_FIXED) < 0.01) m_BMAG_FIXED=0.01; + fx, fy, BMAG_FIXED); // at perigee point + if(fabs(BMAG_FIXED) < 0.01) BMAG_FIXED=0.01; }else{ // For rotation case only!!! if( trkparO ){ const Trk::TrackParameters* trkparN = m_fitPropagator->myExtrapToLine((long int)counter, trkparO, &m_refGVertex, lineTarget); if(trkparN == 0) return StatusCode::FAILURE; - m_Line = dynamic_cast<const Trk::AtaStraightLine*>(trkparN); - if( m_Line == 0) { delete trkparN; return StatusCode::FAILURE; } - VectPerig = m_Line->parameters(); - perGlobalPos = m_Line->position(); //Global position of perigee point - Amg::Vector3D perMomentum(m_Line->momentum().x(),m_Line->momentum().y(),m_Line->momentum().z()); + Line = dynamic_cast<const Trk::AtaStraightLine*>(trkparN); + if( Line == 0) { delete trkparN; return StatusCode::FAILURE; } + VectPerig = Line->parameters(); + perGlobalPos = Line->position(); //Global position of perigee point + Amg::Vector3D perMomentum(Line->momentum().x(),Line->momentum().y(),Line->momentum().z()); Amg::Vector3D rotatedMomentum=magFldRot*perMomentum; // VectPerig[2] += atan2(rotatedMomentum.y(),rotatedMomentum.x()); //VK wrong 27.09.10 VectPerig[2] = atan2(rotatedMomentum.y(),rotatedMomentum.x()); VectPerig[3] = atan2(rotatedMomentum.perp(),rotatedMomentum.z()); - if( !convertAmg5SymMtx(m_Line->covariance(), CovVertTrk) ) return StatusCode::FAILURE; //VK no good covariance matrix! + if( !convertAmg5SymMtx(Line->covariance(), CovVertTrk) ) return StatusCode::FAILURE; //VK no good covariance matrix! delete trkparN; - m_BMAG_FIXED=sqrt(fx*fx+fy*fy+fz*fz); - m_fitRotatedField->setAtlasMag(m_BMAG_FIXED); //set fixed ROTATED field in corresponding VKal oblect + BMAG_FIXED=sqrt(fx*fx+fy*fy+fz*fz); + m_fitRotatedField->setAtlasMag(BMAG_FIXED); //set fixed ROTATED field in corresponding VKal oblect }else{ return StatusCode::FAILURE; } m_trkControl[counter].trkRotation=magFldRot; m_trkControl[counter].trkRotationVertex= Amg::Vector3D( m_refGVertex.x(), m_refGVertex.y(), m_refGVertex.z()); @@ -140,7 +140,7 @@ namespace Trk { } counter++; //std::cout<<"TESTVK="<<'\n'; std::cout.precision(16); for(int ik=0; ik<15; ik++)std::cout<<CovVertTrk[ik]<<'\n'; - VKalTransform( m_BMAG_FIXED, (double)VectPerig[0], (double)VectPerig[1], + VKalTransform( BMAG_FIXED, (double)VectPerig[0], (double)VectPerig[1], (double)VectPerig[2], (double)VectPerig[3], (double)VectPerig[4], CovVertTrk, m_ich[ntrk],&m_apar[ntrk][0],&m_awgt[ntrk][0]); if( trkparO==0 ) { //neutral track @@ -151,7 +151,7 @@ namespace Trk { m_awgt[ntrk][12] = -m_awgt[ntrk][12]; m_awgt[ntrk][13] = -m_awgt[ntrk][13]; } } - ntrk++; if(ntrk>=m_NTrMaxVFit) return StatusCode::FAILURE; + ntrk++; if(ntrk>=NTrMaxVFit) return StatusCode::FAILURE; } //-------------- Finally setting new reference frame common for ALL tracks m_refFrameX=tmp_refFrameX; @@ -170,10 +170,10 @@ namespace Trk { std::vector<const NeutralParameters*>::const_iterator i_pbase; AmgVector(5) VectPerig; Amg::Vector3D perGlobalPos,perGlobalVrt; - const NeutralPerigee* m_mPerN=0; + const NeutralPerigee* mPerN=0; double CovVertTrk[15]; double tmp_refFrameX=0, tmp_refFrameY=0, tmp_refFrameZ=0; - double fx,fy,fz,m_BMAG_FIXED; + double fx,fy,fz,BMAG_FIXED; double rxyMin=1000000.; // @@ -184,8 +184,8 @@ namespace Trk { m_fitField->setAtlasMagRefFrame( 0., 0., 0.); if( m_InDetExtrapolator == 0 && m_PropagatorType != 3 ){ - //log << MSG::WARNING << "No InDet extrapolator given. Can't use TrackParameters!!!" << endreq; - if(msgLvl(MSG::WARNING))msg()<< "No InDet extrapolator given. Can't use TrackParameters!!!" << endreq; + //log << MSG::WARNING << "No InDet extrapolator given. Can't use TrackParameters!!!" << endmsg; + if(msgLvl(MSG::WARNING))msg()<< "No InDet extrapolator given. Can't use TrackParameters!!!" << endmsg; return StatusCode::FAILURE; } // @@ -233,18 +233,18 @@ namespace Trk { const Trk::NeutralParameters* neuparO = (*i_pbase); if(neuparO == 0) return StatusCode::FAILURE; const Trk::NeutralParameters* neuparN = m_fitPropagator->myExtrapNeutral( neuparO, &m_refGVertex ); - m_mPerN = dynamic_cast<const Trk::NeutralPerigee*>(neuparN); - if( m_mPerN == 0) { delete neuparN; return StatusCode::FAILURE; } - VectPerig = m_mPerN->parameters(); - perGlobalPos = m_mPerN->position(); //Global position of perigee point - //perGlobalVrt = m_mPerN->vertex(); //Global position of reference point - perGlobalVrt = m_mPerN->associatedSurface().center(); //Global position of reference point - if( !convertAmg5SymMtx(m_mPerN->covariance(), CovVertTrk) ) return StatusCode::FAILURE; //VK no good covariance matrix! + mPerN = dynamic_cast<const Trk::NeutralPerigee*>(neuparN); + if( mPerN == 0) { delete neuparN; return StatusCode::FAILURE; } + VectPerig = mPerN->parameters(); + perGlobalPos = mPerN->position(); //Global position of perigee point + //perGlobalVrt = mPerN->vertex(); //Global position of reference point + perGlobalVrt = mPerN->associatedSurface().center(); //Global position of reference point + if( !convertAmg5SymMtx(mPerN->covariance(), CovVertTrk) ) return StatusCode::FAILURE; //VK no good covariance matrix! delete neuparN; m_refFrameX=m_refFrameY=m_refFrameZ=0.; m_fitField->setAtlasMagRefFrame( 0., 0., 0.); //restore ATLAS frame for safety m_fitField->getMagFld( perGlobalPos.x(), perGlobalPos.y(), perGlobalPos.z(), // Magnetic field - fx, fy, m_BMAG_FIXED); // at perigee point - if(fabs(m_BMAG_FIXED) < 0.01) m_BMAG_FIXED=0.01; + fx, fy, BMAG_FIXED); // at perigee point + if(fabs(BMAG_FIXED) < 0.01) BMAG_FIXED=0.01; }else{ // For rotation case only!!! return StatusCode::FAILURE; } @@ -252,7 +252,7 @@ namespace Trk { //std::cout<<" BaseEMtx="<<CovMtx.fast(1,1)<<", "<<CovMtx.fast(2,2)<<", "<<CovMtx.fast(3,3)<<", " // <<CovMtx.fast(4,4)<<", "<<CovMtx.fast(5,5)<<'\n'; - VKalTransform( m_BMAG_FIXED, (double)VectPerig[0], (double)VectPerig[1], + VKalTransform( BMAG_FIXED, (double)VectPerig[0], (double)VectPerig[1], (double)VectPerig[2], (double)VectPerig[3], (double)VectPerig[4], CovVertTrk, m_ich[ntrk],&m_apar[ntrk][0],&m_awgt[ntrk][0]); m_ich[ntrk]=0; @@ -261,7 +261,7 @@ namespace Trk { m_awgt[ntrk][11] = -m_awgt[ntrk][11]; m_awgt[ntrk][12] = -m_awgt[ntrk][12]; m_awgt[ntrk][13] = -m_awgt[ntrk][13]; } - ntrk++; if(ntrk>=m_NTrMaxVFit) return StatusCode::FAILURE; + ntrk++; if(ntrk>=NTrMaxVFit) return StatusCode::FAILURE; } //-------------- Finally setting new reference frame common for ALL tracks m_refFrameX=tmp_refFrameX; diff --git a/Tracking/TrkVertexFitter/TrkVKalVrtFitter/src/CvtTrackParticle.cxx b/Tracking/TrkVertexFitter/TrkVKalVrtFitter/src/CvtTrackParticle.cxx index 70cdde2ff5819489ed2bc5565ae7f1ed028a5b8b..43dc820ac8b8eb2f59f306a5dde038c31b5f5cda 100755 --- a/Tracking/TrkVertexFitter/TrkVKalVrtFitter/src/CvtTrackParticle.cxx +++ b/Tracking/TrkVertexFitter/TrkVKalVrtFitter/src/CvtTrackParticle.cxx @@ -30,10 +30,10 @@ namespace Trk { std::vector<const xAOD::TrackParticle*>::const_iterator i_ntrk; AmgVector(5) VectPerig; VectPerig<<0.,0.,0.,0.,0.; - const Trk::Perigee* m_mPer=0; + const Trk::Perigee* mPer=0; double CovVertTrk[15]; std::fill(CovVertTrk,CovVertTrk+15,0.); double tmp_refFrameX=0, tmp_refFrameY=0, tmp_refFrameZ=0; - double fx,fy,m_BMAG_FIXED; + double fx,fy,BMAG_FIXED; // // ----- Set reference frame to (0.,0.,0.) == ATLAS frame // ----- Magnetic field is taken in reference point @@ -48,9 +48,9 @@ namespace Trk { m_trkControl.clear(); m_trkControl.reserve(InpTrk.size()); for (i_ntrk = InpTrk.begin(); i_ntrk < InpTrk.end(); ++i_ntrk) { //-- (Measured)Perigee in xAOD::TrackParticle - m_mPer = &(*i_ntrk)->perigeeParameters(); - if( m_mPer==0 ) continue; // No perigee!!! - perGlobalPos = m_mPer->position(); //Global position of perigee point + mPer = &(*i_ntrk)->perigeeParameters(); + if( mPer==0 ) continue; // No perigee!!! + perGlobalPos = mPer->position(); //Global position of perigee point if(fabs(perGlobalPos.z()) > m_IDsizeZ)return StatusCode::FAILURE; // Crazy user protection if( perGlobalPos.perp() > m_IDsizeR)return StatusCode::FAILURE; tmp_refFrameX += perGlobalPos.x() ; // Reference system calculation @@ -61,7 +61,7 @@ namespace Trk { tmpMat.trkRotation = Amg::RotationMatrix3D::Identity(); tmpMat.rotateToField=false; if(m_useMagFieldRotation)tmpMat.rotateToField=true; tmpMat.extrapolationType=2; // Perigee point strategy - tmpMat.TrkPnt=m_mPer; + tmpMat.TrkPnt=mPer; tmpMat.prtMass = 139.5702; if(counter<(int)m_MassInputParticles.size())tmpMat.prtMass = m_MassInputParticles[counter]; tmpMat.TrkID=counter; m_trkControl.push_back(tmpMat); @@ -87,25 +87,25 @@ namespace Trk { // //-- (Measured)Perigee in TrackParticle // - m_mPer = &(*i_ntrk)->perigeeParameters(); - if( m_mPer==0 ) continue; // No perigee!!! - perGlobalPos = m_mPer->position(); //Global position of perigee point - if( !convertAmg5SymMtx(m_mPer->covariance(), CovVertTrk) ) return StatusCode::FAILURE; //VK no good covariance matrix!; + mPer = &(*i_ntrk)->perigeeParameters(); + if( mPer==0 ) continue; // No perigee!!! + perGlobalPos = mPer->position(); //Global position of perigee point + if( !convertAmg5SymMtx(mPer->covariance(), CovVertTrk) ) return StatusCode::FAILURE; //VK no good covariance matrix!; m_fitField->getMagFld( perGlobalPos.x(), perGlobalPos.y(), perGlobalPos.z(), // Magnetic field - fx, fy, m_BMAG_FIXED); // at the track perigee point - if(fabs(m_BMAG_FIXED) < 0.01) m_BMAG_FIXED=0.01; + fx, fy, BMAG_FIXED); // at the track perigee point + if(fabs(BMAG_FIXED) < 0.01) BMAG_FIXED=0.01; // //--- Get rid of beamline rotation and move ref. frame to the track common point m_refGVertex // Small beamline inclination doesn't change track covariance matrix - AmgSymMatrix(5) * tmpCov = new AmgSymMatrix(5)(*(m_mPer->covariance())); - const Perigee * tmpPer=surfGRefPoint.createTrackParameters(m_mPer->position(),m_mPer->momentum(),m_mPer->charge(),tmpCov); + AmgSymMatrix(5) * tmpCov = new AmgSymMatrix(5)(*(mPer->covariance())); + const Perigee * tmpPer=surfGRefPoint.createTrackParameters(mPer->position(),mPer->momentum(),mPer->charge(),tmpCov); VectPerig = tmpPer->parameters(); //std::cout.precision(12); //std::cout<<"beamtilt="<<(*i_ntrk)->beamlineTiltX()<<", "<<(*i_ntrk)->beamlineTiltY()<<'\n'; -//std::cout<<" Def per==>"<<(*m_mPer)<<'\n'; -//std::cout<<" Def srf==>"<<m_mPer->associatedSurface()<<'\n'; -//std::cout<<" Def rot==>"<<m_mPer->associatedSurface().transform().rotation()<<'\n'; -//std::cout<<" Def trn==>"<<m_mPer->associatedSurface().transform().translation()<<'\n'; +//std::cout<<" Def per==>"<<(*mPer)<<'\n'; +//std::cout<<" Def srf==>"<<mPer->associatedSurface()<<'\n'; +//std::cout<<" Def rot==>"<<mPer->associatedSurface().transform().rotation()<<'\n'; +//std::cout<<" Def trn==>"<<mPer->associatedSurface().transform().translation()<<'\n'; //std::cout<<" New per==>"<<(*tmpPer)<<'\n'; //std::cout<<" New per==>"<<tmpPer->momentum()<<'\n'; //std::cout<<" New srf==>"<<tmpPer->associatedSurface()<<'\n'; @@ -113,12 +113,12 @@ namespace Trk { //std::cout<<" New trn==>"<<tmpPer->associatedSurface().transform().translation()<<'\n'; // //--- Transform to internal parametrisation - VKalTransform( m_BMAG_FIXED, (double)VectPerig[0], (double)VectPerig[1], + VKalTransform( BMAG_FIXED, (double)VectPerig[0], (double)VectPerig[1], (double)VectPerig[2], (double)VectPerig[3], (double)VectPerig[4], CovVertTrk, m_ich[ntrk],&m_apar[ntrk][0],&m_awgt[ntrk][0]); delete tmpPer; //tmpCov matrix is deleted here!!! // - ntrk++; if(ntrk>=m_NTrMaxVFit) return StatusCode::FAILURE; + ntrk++; if(ntrk>=NTrMaxVFit) return StatusCode::FAILURE; } //-------------- Finally setting new reference frame common for ALL tracks m_refFrameX=tmp_refFrameX; @@ -138,10 +138,10 @@ namespace Trk { std::vector<const xAOD::NeutralParticle*>::const_iterator i_ntrk; AmgVector(5) VectPerig; VectPerig<<0.,0.,0.,0.,0.; - const NeutralPerigee* m_mPer=0; + const NeutralPerigee* mPer=0; double CovVertTrk[15]; std::fill(CovVertTrk,CovVertTrk+15,0.); double tmp_refFrameX=0, tmp_refFrameY=0, tmp_refFrameZ=0; - double fx,fy,m_BMAG_FIXED; + double fx,fy,BMAG_FIXED; // // ----- Set reference frame to (0.,0.,0.) == ATLAS frame // ----- Magnetic field is taken in reference point @@ -156,9 +156,9 @@ namespace Trk { m_trkControl.clear(); m_trkControl.reserve(InpTrk.size()); for (i_ntrk = InpTrk.begin(); i_ntrk < InpTrk.end(); ++i_ntrk) { //-- (Measured)Perigee in xAOD::NeutralParticle - m_mPer = &(*i_ntrk)->perigeeParameters(); - if( m_mPer==0 ) continue; // No perigee!!! - perGlobalPos = m_mPer->position(); //Global position of perigee point + mPer = &(*i_ntrk)->perigeeParameters(); + if( mPer==0 ) continue; // No perigee!!! + perGlobalPos = mPer->position(); //Global position of perigee point if(fabs(perGlobalPos.z()) > m_IDsizeZ)return StatusCode::FAILURE; // Crazy user protection if( perGlobalPos.perp() > m_IDsizeR)return StatusCode::FAILURE; tmp_refFrameX += perGlobalPos.x() ; // Reference system calculation @@ -194,23 +194,23 @@ namespace Trk { // //-- (Measured)Perigee in TrackParticle // - m_mPer = &(*i_ntrk)->perigeeParameters(); - if( m_mPer==0 ) continue; // No perigee!!! - perGlobalPos = m_mPer->position(); //Global position of perigee point - if( !convertAmg5SymMtx(m_mPer->covariance(), CovVertTrk) ) return StatusCode::FAILURE; //VK no good covariance matrix!; + mPer = &(*i_ntrk)->perigeeParameters(); + if( mPer==0 ) continue; // No perigee!!! + perGlobalPos = mPer->position(); //Global position of perigee point + if( !convertAmg5SymMtx(mPer->covariance(), CovVertTrk) ) return StatusCode::FAILURE; //VK no good covariance matrix!; m_fitField->getMagFld( perGlobalPos.x(), perGlobalPos.y(), perGlobalPos.z(), // Magnetic field - fx, fy, m_BMAG_FIXED); // at track perigee point - if(fabs(m_BMAG_FIXED) < 0.01) m_BMAG_FIXED=0.01; + fx, fy, BMAG_FIXED); // at track perigee point + if(fabs(BMAG_FIXED) < 0.01) BMAG_FIXED=0.01; // //--- Get rid of beamline rotation and move ref. frame to the track common point m_refGVertex // Small beamline inclination doesn't change track covariance matrix // - AmgSymMatrix(5) * tmpCov = new AmgSymMatrix(5)(*(m_mPer->covariance())); - const Perigee * tmpPer=surfGRefPoint.createTrackParameters(m_mPer->position(),m_mPer->momentum(),m_mPer->charge(),tmpCov); + AmgSymMatrix(5) * tmpCov = new AmgSymMatrix(5)(*(mPer->covariance())); + const Perigee * tmpPer=surfGRefPoint.createTrackParameters(mPer->position(),mPer->momentum(),mPer->charge(),tmpCov); VectPerig = tmpPer->parameters(); //--- Transform to internal parametrisation - VKalTransform( m_BMAG_FIXED, (double)VectPerig[0], (double)VectPerig[1], + VKalTransform( BMAG_FIXED, (double)VectPerig[0], (double)VectPerig[1], (double)VectPerig[2], (double)VectPerig[3], (double)VectPerig[4], CovVertTrk, m_ich[ntrk],&m_apar[ntrk][0],&m_awgt[ntrk][0]); m_ich[ntrk]=0; @@ -222,7 +222,7 @@ namespace Trk { delete tmpPer; //tmpCov matrix is deleted here!!! // - ntrk++; if(ntrk>=m_NTrMaxVFit) return StatusCode::FAILURE; + ntrk++; if(ntrk>=NTrMaxVFit) return StatusCode::FAILURE; } //-------------- Finally setting new reference frame common for ALL tracks m_refFrameX=tmp_refFrameX; @@ -245,10 +245,10 @@ namespace Trk { std::vector<const TrackParticleBase*>::const_iterator i_ntrk; AmgVector(5) VectPerig; VectPerig<<0.,0.,0.,0.,0.; - const Trk::Perigee* m_mPer=0; + const Trk::Perigee* mPer=0; double CovVertTrk[15]; std::fill(CovVertTrk,CovVertTrk+15,0.); double tmp_refFrameX=0, tmp_refFrameY=0, tmp_refFrameZ=0; - double fx,fy,m_BMAG_FIXED; + double fx,fy,BMAG_FIXED; // // ----- Set reference frame to (0.,0.,0.) == ATLAS frame // ----- Magnetic field is taken in reference point @@ -263,9 +263,9 @@ namespace Trk { m_trkControl.clear(); m_trkControl.reserve(InpTrk.size()); for (i_ntrk = InpTrk.begin(); i_ntrk < InpTrk.end(); ++i_ntrk) { //-- (Measured)Perigee in TrackParticle - m_mPer = GetPerigee(*i_ntrk); - if( m_mPer==0 ) continue; // No perigee!!! - perGlobalPos = m_mPer->position(); //Global position of perigee point + mPer = GetPerigee(*i_ntrk); + if( mPer==0 ) continue; // No perigee!!! + perGlobalPos = mPer->position(); //Global position of perigee point if(fabs(perGlobalPos.z()) > m_IDsizeZ)return StatusCode::FAILURE; // Crazy user protection if( perGlobalPos.perp() > m_IDsizeR)return StatusCode::FAILURE; tmp_refFrameX += perGlobalPos.x() ; // Reference system calculation @@ -276,7 +276,7 @@ namespace Trk { tmpMat.trkRotation = Amg::RotationMatrix3D::Identity(); tmpMat.rotateToField=false; if(m_useMagFieldRotation)tmpMat.rotateToField=true; tmpMat.extrapolationType=2; // Perigee point strategy - tmpMat.TrkPnt=m_mPer; + tmpMat.TrkPnt=mPer; tmpMat.prtMass = 139.5702; if(counter<(int)m_MassInputParticles.size())tmpMat.prtMass = m_MassInputParticles[counter]; tmpMat.TrkID=counter; m_trkControl.push_back(tmpMat); @@ -299,19 +299,19 @@ namespace Trk { // //-- (Measured)Perigee in TrackParticle // - m_mPer = GetPerigee(*i_ntrk); - if( m_mPer==0 ) continue; // No perigee!!! - VectPerig = m_mPer->parameters(); - perGlobalVrt = m_mPer->associatedSurface().center(); //Global position of reference point - perGlobalPos = m_mPer->position(); //Global position of perigee point - if( !convertAmg5SymMtx(m_mPer->covariance(), CovVertTrk) ) return StatusCode::FAILURE; //VK no good covariance matrix!; + mPer = GetPerigee(*i_ntrk); + if( mPer==0 ) continue; // No perigee!!! + VectPerig = mPer->parameters(); + perGlobalVrt = mPer->associatedSurface().center(); //Global position of reference point + perGlobalPos = mPer->position(); //Global position of perigee point + if( !convertAmg5SymMtx(mPer->covariance(), CovVertTrk) ) return StatusCode::FAILURE; //VK no good covariance matrix!; m_refFrameX=m_refFrameY=m_refFrameZ=0.; m_fitField->setAtlasMagRefFrame( 0., 0., 0.); //restore ATLAS frame m_fitField->getMagFld( perGlobalPos.x(), perGlobalPos.y(), perGlobalPos.z(), // Magnetic field - fx, fy, m_BMAG_FIXED); // at track perigee point - if(fabs(m_BMAG_FIXED) < 0.01) m_BMAG_FIXED=0.01; + fx, fy, BMAG_FIXED); // at track perigee point + if(fabs(BMAG_FIXED) < 0.01) BMAG_FIXED=0.01; - VKalTransform( m_BMAG_FIXED, (double)VectPerig[0], (double)VectPerig[1], + VKalTransform( BMAG_FIXED, (double)VectPerig[0], (double)VectPerig[1], (double)VectPerig[2], (double)VectPerig[3], (double)VectPerig[4], CovVertTrk, m_ich[ntrk],&m_apar[ntrk][0],&m_awgt[ntrk][0]); //std::cout<< "New="<<m_awgt[ntrk][0]<<", "<<m_awgt[ntrk][1]<<", "<<m_awgt[ntrk][2]<<", "<<m_awgt[ntrk][3]<<'\n'; @@ -337,7 +337,7 @@ namespace Trk { myPropagator.Propagate(ntrk, Charge, pari, covi, vrtini, vrtend,&m_apar[ntrk][0],&m_awgt[ntrk][0]); } - ntrk++; if(ntrk>=m_NTrMaxVFit) return StatusCode::FAILURE; + ntrk++; if(ntrk>=NTrMaxVFit) return StatusCode::FAILURE; } //-------------- Finally setting new reference frame common for ALL tracks m_refFrameX=tmp_refFrameX; @@ -356,11 +356,11 @@ namespace Trk { const Perigee* TrkVKalVrtFitter::GetPerigee( const TrackParticleBase* i_ntrk) { - const Perigee* m_mPer = 0; + const Perigee* mPer = 0; if( i_ntrk->definingParameters().associatedSurface().type() == Surface::Perigee && i_ntrk->definingParameters().covariance() != 0 ) - m_mPer = dynamic_cast<const Perigee*> (&(i_ntrk->definingParameters())); - return m_mPer ; + mPer = dynamic_cast<const Perigee*> (&(i_ntrk->definingParameters())); + return mPer ; } const TrackParameters* TrkVKalVrtFitter::GetFirstPoint(const Trk::TrackParticleBase* i_ntrk) { @@ -382,10 +382,10 @@ namespace Trk { const Perigee* TrkVKalVrtFitter::GetPerigee( const TrackParameters* i_ntrk) { - const Perigee* m_mPer = 0; + const Perigee* mPer = 0; if(i_ntrk->associatedSurface().type()==Surface::Perigee && i_ntrk->covariance()!= 0 ) - m_mPer = dynamic_cast<const Perigee*> (i_ntrk); - return m_mPer; + mPer = dynamic_cast<const Perigee*> (i_ntrk); + return mPer; } diff --git a/Tracking/TrkVertexFitter/TrkVKalVrtFitter/src/CvtTrkTrack.cxx b/Tracking/TrkVertexFitter/TrkVKalVrtFitter/src/CvtTrkTrack.cxx index 0cd3ab9f1b5acfbb3eebb4feab3b16532f21f0d2..cf93dd38595a1f2a88520c00968da963343b6cda 100755 --- a/Tracking/TrkVertexFitter/TrkVKalVrtFitter/src/CvtTrkTrack.cxx +++ b/Tracking/TrkVertexFitter/TrkVKalVrtFitter/src/CvtTrkTrack.cxx @@ -33,10 +33,10 @@ namespace Trk{ std::vector<const Track*>::const_iterator i_ntrk; AmgVector(5) VectPerig; VectPerig<<0.,0.,0.,0.,0; - const Perigee* m_mPer; + const Perigee* mPer; double CovVertTrk[15]; std::fill(CovVertTrk,CovVertTrk+15,0.); double tmp_refFrameX=0, tmp_refFrameY=0, tmp_refFrameZ=0; - double fx,fy,m_BMAG_FIXED; + double fx,fy,BMAG_FIXED; // // ----- Set reference frame to (0.,0.,0.) == ATLAS frame // ----- Magnetic field is taken in reference point @@ -50,16 +50,16 @@ namespace Trk{ Amg::Vector3D perGlobalVrt,perGlobalPos; m_trkControl.clear(); for (i_ntrk = InpTrk.begin(); i_ntrk < InpTrk.end(); ++i_ntrk) { - m_mPer = (*i_ntrk)->perigeeParameters(); if( m_mPer == 0 ){ continue; } - perGlobalPos = m_mPer->position(); //Global position of perigee point + mPer = (*i_ntrk)->perigeeParameters(); if( mPer == 0 ){ continue; } + perGlobalPos = mPer->position(); //Global position of perigee point if(fabs(perGlobalPos.z()) > m_IDsizeZ)return StatusCode::FAILURE; // Crazy user protection if( perGlobalPos.perp() > m_IDsizeR)return StatusCode::FAILURE; // tmp_refFrameX += perGlobalPos.x()+VectPerig[0]*sin(VectPerig[2]); // Reference point for given perigee // tmp_refFrameY += perGlobalPos.y()-VectPerig[0]*cos(VectPerig[2]); // tmp_refFrameZ += perGlobalPos.z()-VectPerig[1]; // std::cout<<" Global posVKAL="<<perGlobalPos.x()<<", "<<perGlobalPos.y()<<", "<<perGlobalPos.z()<<'\n'; - //VK//perGlobalVrt = m_mPer->vertex(); //Global position of reference point for perigee - perGlobalVrt = m_mPer->associatedSurface().center(); //Global position of reference point + //VK//perGlobalVrt = mPer->vertex(); //Global position of reference point for perigee + perGlobalVrt = mPer->associatedSurface().center(); //Global position of reference point // std::cout<<" Global vrtVKAL="<<perGlobalVrt.x()<<", "<<perGlobalVrt.y()<<", "<<perGlobalVrt.z()<<'\n'; //tmp_refFrameX += perGlobalVrt.x() ; // Reference point for given perigee //tmp_refFrameY += perGlobalVrt.y() ; // Normally gives (0,0, @@ -72,7 +72,7 @@ namespace Trk{ tmpMat.rotateToField=false; if(m_useMagFieldRotation)tmpMat.rotateToField=true; tmpMat.trkRotation = Amg::RotationMatrix3D::Identity(); tmpMat.extrapolationType=2; // Perigee point strategy - tmpMat.TrkPnt=m_mPer; + tmpMat.TrkPnt=mPer; tmpMat.prtMass = 139.5702; if(counter<(int)m_MassInputParticles.size())tmpMat.prtMass = m_MassInputParticles[counter]; tmpMat.TrkID=counter; m_trkControl.push_back(tmpMat); @@ -88,18 +88,18 @@ namespace Trk{ // Common reference frame is ready. Start extraction of parameters for fit. // for (i_ntrk = InpTrk.begin(); i_ntrk < InpTrk.end(); ++i_ntrk) { - m_mPer = (*i_ntrk)->perigeeParameters(); if( m_mPer == 0 ){ continue; } - VectPerig = m_mPer->parameters(); - perGlobalPos = m_mPer->position(); //Global position of perigee point - //VK//perGlobalVrt = m_mPer->vertex(); //Global position of reference point - perGlobalVrt = m_mPer->associatedSurface().center(); //Global position of reference point + mPer = (*i_ntrk)->perigeeParameters(); if( mPer == 0 ){ continue; } + VectPerig = mPer->parameters(); + perGlobalPos = mPer->position(); //Global position of perigee point + //VK//perGlobalVrt = mPer->vertex(); //Global position of reference point + perGlobalVrt = mPer->associatedSurface().center(); //Global position of reference point m_refFrameX=m_refFrameY=m_refFrameZ=0.; m_fitField->setAtlasMagRefFrame( 0., 0., 0.); //restore ATLAS frame m_fitField->getMagFld( perGlobalPos.x() , perGlobalPos.y() , perGlobalPos.z() , // Magnetic field - fx, fy, m_BMAG_FIXED); // at perigee point - if(fabs(m_BMAG_FIXED) < 0.01) m_BMAG_FIXED=0.01; + fx, fy, BMAG_FIXED); // at perigee point + if(fabs(BMAG_FIXED) < 0.01) BMAG_FIXED=0.01; - if( !convertAmg5SymMtx(m_mPer->covariance(), CovVertTrk) ) return StatusCode::FAILURE; //VK no good covariance matrix! - VKalTransform( m_BMAG_FIXED, (double)VectPerig(0), (double)VectPerig(1), + if( !convertAmg5SymMtx(mPer->covariance(), CovVertTrk) ) return StatusCode::FAILURE; //VK no good covariance matrix! + VKalTransform( BMAG_FIXED, (double)VectPerig(0), (double)VectPerig(1), (double)VectPerig(2), (double)VectPerig(3), (double)VectPerig(4), CovVertTrk, m_ich[ntrk],&m_apar[ntrk][0],&m_awgt[ntrk][0]); // @@ -115,14 +115,14 @@ namespace Trk{ double pari[5],covi[15]; double vrtini[3]={0.,0.,0.}; double vrtend[3]={dX,dY,dZ}; for(int i=0; i<5; i++) pari[i]=m_apar[ntrk][i]; for(int i=0; i<15;i++) covi[i]=m_awgt[ntrk][i]; - long int Charge = (long int) m_mPer->charge(); + long int Charge = (long int) mPer->charge(); //VK 17.06/2008 Wrong!!! m_fitPropagator is defined only when InDet extrapolator is provided!!! //m_fitPropagator->Propagate(ntrk,Charge, pari, covi, vrtini, vrtend,&m_apar[ntrk][0],&m_awgt[ntrk][0]); myPropagator.Propagate(ntrk,Charge, pari, covi, vrtini, vrtend,&m_apar[ntrk][0],&m_awgt[ntrk][0]); } // - ntrk++; if(ntrk>=m_NTrMaxVFit) return StatusCode::FAILURE; + ntrk++; if(ntrk>=NTrMaxVFit) return StatusCode::FAILURE; } //-------------- Finally setting new reference frame common for ALL tracks m_refFrameX=tmp_refFrameX; @@ -168,12 +168,12 @@ namespace Trk{ { // // ------ Magnetic field access - double fx,fy,m_BMAG_CUR; - m_fitField->getMagFld(vX,vY,vZ,fx,fy,m_BMAG_CUR); - if(fabs(m_BMAG_CUR) < 0.01) m_BMAG_CUR=0.01; //safety + double fx,fy,BMAG_CUR; + m_fitField->getMagFld(vX,vY,vZ,fx,fy,BMAG_CUR); + if(fabs(BMAG_CUR) < 0.01) BMAG_CUR=0.01; //safety double TrkP1, TrkP2, TrkP3, TrkP4, TrkP5; - VKalToTrkTrack(m_BMAG_CUR, VKPerigee[2], VKPerigee[3],VKPerigee[4], TrkP3, TrkP4, TrkP5); + VKalToTrkTrack(BMAG_CUR, VKPerigee[2], VKPerigee[3],VKPerigee[4], TrkP3, TrkP4, TrkP5); TrkP1=-VKPerigee[0]; /*!!!! Change of sign !!!!*/ TrkP2= VKPerigee[1]; TrkP5=-TrkP5; /*!!!! Change of sign of charge!!!!*/ @@ -186,8 +186,8 @@ namespace Trk{ Deriv[1][1]= 1.; Deriv[2][3]= 1.; Deriv[3][2]= 1.; - Deriv[4][2]= (cos(VKPerigee[2])/(m_CNVMAG*m_BMAG_CUR)) * VKPerigee[4]; - Deriv[4][4]=-(sin(VKPerigee[2])/(m_CNVMAG*m_BMAG_CUR)); + Deriv[4][2]= (cos(VKPerigee[2])/(m_CNVMAG*BMAG_CUR)) * VKPerigee[4]; + Deriv[4][4]=-(sin(VKPerigee[2])/(m_CNVMAG*BMAG_CUR)); CovMtxOld[0][0] =VKCov[0]; CovMtxOld[0][1]=CovMtxOld[1][0]=VKCov[1]; diff --git a/Tracking/TrkVertexFitter/TrkVKalVrtFitter/src/SetFitOptions.cxx b/Tracking/TrkVertexFitter/TrkVKalVrtFitter/src/SetFitOptions.cxx index 6968f587625c2ba573d40ac647a269681c16a400..2bb7cf1a48b160bbf1c2f567b0f7e0275491e1bb 100755 --- a/Tracking/TrkVertexFitter/TrkVKalVrtFitter/src/SetFitOptions.cxx +++ b/Tracking/TrkVertexFitter/TrkVKalVrtFitter/src/SetFitOptions.cxx @@ -84,7 +84,7 @@ namespace Trk{ //--- // Additional change of settings //--- - long int Index[m_NTrMaxVFit+1]={0}; + long int Index[NTrMaxVFit+1]={0}; if(m_PartMassCnst.size() > 0) { for(int ic=0; ic<(int)m_PartMassCnst.size(); ic++){ long int NTrk=m_PartMassCnstTrk[ic].size(); @@ -126,21 +126,21 @@ namespace Trk{ } void TrkVKalVrtFitter::setRobustness(int IROB) - { if(IROB>0)msg(MSG::DEBUG)<< "Robustness is changed at execution stage "<<m_Robustness<<"=>"<<IROB<< endreq; + { if(IROB>0)msg(MSG::DEBUG)<< "Robustness is changed at execution stage "<<m_Robustness<<"=>"<<IROB<< endmsg; m_Robustness = IROB; if(m_Robustness<0)m_Robustness=0; if(m_Robustness>7)m_Robustness=0; } void TrkVKalVrtFitter::setRobustScale(double Scale) - { if(Scale!=m_RobustScale)msg(MSG::DEBUG)<< "Robust Scale is changed at execution stage "<<m_RobustScale<<"=>"<<Scale<< endreq; + { if(Scale!=m_RobustScale)msg(MSG::DEBUG)<< "Robust Scale is changed at execution stage "<<m_RobustScale<<"=>"<<Scale<< endmsg; m_RobustScale = Scale; if(m_RobustScale<0.01) m_RobustScale=1.; if(m_RobustScale>100.) m_RobustScale=1.; } void TrkVKalVrtFitter::setCnstType(int TYPE) - { if(TYPE>0)msg(MSG::DEBUG)<< "ConstraintType is changed at execution stage "<<m_iflag<<"=>"<<TYPE<< endreq; + { if(TYPE>0)msg(MSG::DEBUG)<< "ConstraintType is changed at execution stage "<<m_iflag<<"=>"<<TYPE<< endmsg; m_iflag = TYPE; if(m_iflag<0)m_iflag=0; if(m_iflag>14)m_iflag=0; @@ -171,15 +171,15 @@ namespace Trk{ { m_ifcovv0 = abs(TYPE);} void TrkVKalVrtFitter::setCascadeCnstPrec(double Prec) - { if(Prec!=m_cascadeCnstPrecision) msg(MSG::DEBUG)<< "Cascade precision is changed at execution stage "<<m_cascadeCnstPrecision<<"=>"<<Prec<< endreq; + { if(Prec!=m_cascadeCnstPrecision) msg(MSG::DEBUG)<< "Cascade precision is changed at execution stage "<<m_cascadeCnstPrecision<<"=>"<<Prec<< endmsg; if(Prec<1.e-7)Prec=1.e-7; if(Prec>1. )Prec=1.; m_cascadeCnstPrecision=Prec; } void TrkVKalVrtFitter::setIterations(int Num, double Prec) - { if(Num!=m_IterationNumber) msg(MSG::DEBUG)<< "Iteration limit is changed at execution stage "<<m_IterationNumber<<"=>"<<Num<< endreq; - if(Prec!=m_IterationPrecision) msg(MSG::DEBUG)<< "Iteration precision is changed at execution stage "<<m_IterationPrecision<<"=>"<<Prec<< endreq; + { if(Num!=m_IterationNumber) msg(MSG::DEBUG)<< "Iteration limit is changed at execution stage "<<m_IterationNumber<<"=>"<<Num<< endmsg; + if(Prec!=m_IterationPrecision) msg(MSG::DEBUG)<< "Iteration precision is changed at execution stage "<<m_IterationPrecision<<"=>"<<Prec<< endmsg; m_IterationNumber = Num; m_IterationPrecision = Prec; } @@ -217,7 +217,7 @@ namespace Trk{ m_CovVrtForConstraint.push_back(ZZ); } - void TrkVKalVrtFitter::setMassInputParticles( std::vector<double>& mass) + void TrkVKalVrtFitter::setMassInputParticles( const std::vector<double>& mass) { m_MassInputParticles.clear(); for(int i=0; i<(int)mass.size(); i++) m_MassInputParticles.push_back(fabs(mass[i])); } diff --git a/Tracking/TrkVertexFitter/TrkVKalVrtFitter/src/TrkCascadeFitter.cxx b/Tracking/TrkVertexFitter/TrkVKalVrtFitter/src/TrkCascadeFitter.cxx index 48bd6c4124992948a6c63a2970f3767cd3cc2f35..578744568aed4a256c99601c5269650a49d99a08 100755 --- a/Tracking/TrkVertexFitter/TrkVKalVrtFitter/src/TrkCascadeFitter.cxx +++ b/Tracking/TrkVertexFitter/TrkVKalVrtFitter/src/TrkCascadeFitter.cxx @@ -82,7 +82,7 @@ VertexID TrkVKalVrtFitter::startVertex(const std::vector<const xAOD::TrackParti { VertexID new_vID=10000; - if(!isFieldInitialized)setInitializedField(); //to allow callback for init + if(!m_isFieldInitialized)setInitializedField(); //to allow callback for init m_cascadeSize=1; int NTRK = list.size(); m_partMassForCascade.clear(); @@ -320,7 +320,7 @@ VxCascadeInfo * TrkVKalVrtFitter::fitCascade(const Vertex* primVrt, bool FirstDe std::vector<double> fitFullCovariance; std::vector<double> particleChi2; // - if(!isFieldInitialized)setInitializedField(); //to allow callback for init + if(!m_isFieldInitialized)setInitializedField(); //to allow callback for init Trk::myMagFld.setMagHandler(m_fitField); // needed for reenterability if(m_PropagatorType <=1 ){ // needed for reenterability Trk::myPropagator.setTypeProp(m_PropagatorType); // needed for reenterability @@ -329,7 +329,7 @@ VxCascadeInfo * TrkVKalVrtFitter::fitCascade(const Vertex* primVrt, bool FirstDe } // long int ntrk=0; - StatusCode sc; + StatusCode sc; sc.setChecked(); std::vector<const TrackParameters*> baseInpTrk; if(m_firstMeasuredPoint){ //First measured point strategy std::vector<const xAOD::TrackParticle*>::const_iterator i_ntrk; @@ -377,7 +377,7 @@ VxCascadeInfo * TrkVKalVrtFitter::fitCascade(const Vertex* primVrt, bool FirstDe } if(IERR){ cleanCascade(); return 0;} if(msgLvl(MSG::DEBUG)){ - msg(MSG::DEBUG)<<"Standard cascade fit" << endreq; + msg(MSG::DEBUG)<<"Standard cascade fit" << endmsg; printSimpleCascade(m_vertexDefinition,m_cascadeDefinition); } // @@ -446,7 +446,7 @@ VxCascadeInfo * TrkVKalVrtFitter::fitCascade(const Vertex* primVrt, bool FirstDe m_cascadeVList[ivTo].mergedIN.push_back(ivFrom); makeSimpleCascade(new_vertexDefinition, new_cascadeDefinition); if(msgLvl(MSG::DEBUG)){ - msg(MSG::DEBUG)<<"Compressed cascade fit" << endreq; + msg(MSG::DEBUG)<<"Compressed cascade fit" << endmsg; printSimpleCascade(new_vertexDefinition,new_cascadeDefinition); } //----------------------------------------------------------------------------------------- @@ -467,18 +467,20 @@ VxCascadeInfo * TrkVKalVrtFitter::fitCascade(const Vertex* primVrt, bool FirstDe int icv=indexInV(inV); if(icv<0) break; if(m_cascadeVList[icv].mergedTO == m_partMassCnstForCascade[ic].VRT){ IERR = findPositions(m_cascadeVList[icv].trkInVrt, new_vertexDefinition[index], indexTT); - if(IERR)break; for(int ki=0; ki<(int)indexTT.size(); ki++) indexT.push_back(indexTT[ki]); + if(IERR)break; + for(int ki=0; ki<(int)indexTT.size(); ki++) indexT.push_back(indexTT[ki]); }else{ std::vector<int> tmpI(1); tmpI[0]=inV; IERR = findPositions(tmpI, new_cascadeDefinition[index], indexVV); - if(IERR)break; for(int ki=0; ki<(int)indexVV.size(); ki++) indexV.push_back(indexVV[ki]); + if(IERR)break; + for(int ki=0; ki<(int)indexVV.size(); ki++) indexV.push_back(indexVV[ki]); } } if(IERR)break; //std::cout<<"trk2="; for(int I=0; I<(int)indexT.size(); I++)std::cout<<indexT[I]; std::cout<<'\n'; //std::cout<<"pse="; for(int I=0; I<(int)indexV.size(); I++)std::cout<<indexV[I]; std::cout<<'\n'; IERR = setCascadeMassConstraint(index , indexT, indexV, m_partMassCnstForCascade[ic].Mass); if(IERR)break; } - msg(MSG::DEBUG)<<"Setting compressed mass constraints ierr="<<IERR<<endreq; + msg(MSG::DEBUG)<<"Setting compressed mass constraints ierr="<<IERR<<endmsg; if(IERR){ cleanCascade(); return 0;} // //--------------------------- Refit @@ -513,11 +515,11 @@ VxCascadeInfo * TrkVKalVrtFitter::fitCascade(const Vertex* primVrt, bool FirstDe //------------------------- Real tracks // if(msgLvl(MSG::DEBUG)){ - msg(MSG::DEBUG)<<"Initial cascade momenta"<<endreq; + msg(MSG::DEBUG)<<"Initial cascade momenta"<<endmsg; for(int kv=0; kv<(int)fittedParticles.size(); kv++){ for(int kt=0; kt<(int)fittedParticles[kv].size(); kt++)std::cout<< " Px="<<fittedParticles[kv][kt].Px<<" Py="<<fittedParticles[kv][kt].Py<<";"; std::cout<<'\n'; } - msg(MSG::DEBUG)<<"Squized cascade momenta"<<endreq; + msg(MSG::DEBUG)<<"Squized cascade momenta"<<endmsg; for(int kv=0; kv<(int)t_fittedParticles.size(); kv++){ for(int kt=0; kt<(int)t_fittedParticles[kv].size(); kt++)std::cout<< " Px="<<t_fittedParticles[kv][kt].Px<<" Py="<<t_fittedParticles[kv][kt].Py<<";"; std::cout<<'\n'; } @@ -569,7 +571,7 @@ VxCascadeInfo * TrkVKalVrtFitter::fitCascade(const Vertex* primVrt, bool FirstDe } } if(msgLvl(MSG::DEBUG)){ - msg(MSG::DEBUG)<<"Refit cascade momenta"<<endreq; + msg(MSG::DEBUG)<<"Refit cascade momenta"<<endmsg; for(int kv=0; kv<(int)fittedParticles.size(); kv++){ for(int kt=0; kt<(int)fittedParticles[kv].size(); kt++)std::cout<< " Px="<<fittedParticles[kv][kt].Px<<" Py="<<fittedParticles[kv][kt].Py<<";"; std::cout<<'\n'; } @@ -593,7 +595,7 @@ VxCascadeInfo * TrkVKalVrtFitter::fitCascade(const Vertex* primVrt, bool FirstDe // //-------------------------------------Saving // - msg(MSG::DEBUG)<<"Now save results" << endreq; + msg(MSG::DEBUG)<<"Now save results" << endmsg; //CLHEP::HepSymMatrix VrtCovMtx(3,0); Amg::MatrixX VrtCovMtx(3,3); Trk::Perigee * measPerigee; @@ -719,11 +721,11 @@ VxCascadeInfo * TrkVKalVrtFitter::fitCascade(const Vertex* primVrt, bool FirstDe if( m_makeExtendedVertex ) { Amg::MatrixX tmpCovMtx(NRealT*3+3,NRealT*3+3); // New Eigen based EDM tmpCovMtx=genCOV.similarity(*fullDeriv); - floatErrMtx.resize(NRealT*3+3); + floatErrMtx.resize((NRealT*3+3)*(NRealT*3+3+1)/2); int ivk=0; for(int i=0;i<NRealT*3+3;i++){ for(int j=0;j<=i;j++){ - floatErrMtx[ivk++]=tmpCovMtx(i,j); + floatErrMtx.at(ivk++)=tmpCovMtx(i,j); } } }else{ @@ -731,16 +733,21 @@ VxCascadeInfo * TrkVKalVrtFitter::fitCascade(const Vertex* primVrt, bool FirstDe for(int i=0; i<6; i++) floatErrMtx[i]=covVertices[iv][i]; } tmpXAODVertex->setCovariance(floatErrMtx); - std::vector<VxTrackAtVertex> xaodVTAV=tmpXAODVertex->vxTrackAtVertex(); + std::vector<VxTrackAtVertex> & xaodVTAV=tmpXAODVertex->vxTrackAtVertex(); xaodVTAV.swap(*tmpVTAV); for(int itvk=0; itvk<(int)xaodVTAV.size(); itvk++) { - ElementLink<xAOD::TrackParticleContainer> TEL; TEL.setElement( m_partListForCascade[itvk] ); + ElementLink<xAOD::TrackParticleContainer> TEL; + if(itvk < (int)m_cascadeVList[iv].trkInVrt.size()){ + TEL.setElement( m_partListForCascade[ m_cascadeVList[iv].trkInVrt[itvk] ] ); + }else{ + TEL.setElement( 0 ); + } tmpXAODVertex->addTrackAtVertex(TEL,1.); } xaodVrtList.push_back(tmpXAODVertex); //VK Save xAOD::Vertex // //---- Save and clean - delete tmpVTAV;delete tmpRecV; //Mandatory cleaning + delete tmpVTAV;delete tmpRecV; delete fullDeriv; //Mandatory cleaning } // // Save momenta of all particles including combined at vertex positions @@ -785,7 +792,6 @@ VxCascadeInfo * TrkVKalVrtFitter::fitCascade(const Vertex* primVrt, bool FirstDe } } // - // // VxCascadeInfo * recCascade= new VxCascadeInfo(vxVrtList,particleMoms,particleCovs, NDOF ,fullChi2); VxCascadeInfo * recCascade= new VxCascadeInfo(xaodVrtList,particleMoms,particleCovs, NDOF ,fullChi2); diff --git a/Tracking/TrkVertexFitter/TrkVKalVrtFitter/src/TrkVKalVrtFitter.cxx b/Tracking/TrkVertexFitter/TrkVKalVrtFitter/src/TrkVKalVrtFitter.cxx index d278059f001dee888c87f97f7a8090d494cea784..666cdfa3e9554d426d313da7d644cf175fec9a55 100755 --- a/Tracking/TrkVertexFitter/TrkVKalVrtFitter/src/TrkVKalVrtFitter.cxx +++ b/Tracking/TrkVertexFitter/TrkVKalVrtFitter/src/TrkVKalVrtFitter.cxx @@ -138,15 +138,15 @@ TrkVKalVrtFitter:: TrkVKalVrtFitter(const std::string& type, m_fitPropagator = 0; m_InDetExtrapolator = 0; - isAtlasField = false; // To allow callback and then field first call only at execute stage - isFieldInitialized = false; // + m_isAtlasField = false; // To allow callback and then field first call only at execute stage + m_isFieldInitialized = false; // } //Destructor--------------------------------------------------------------- TrkVKalVrtFitter::~TrkVKalVrtFitter(){ - //log << MSG::DEBUG << "TrkVKalVrtFitter destructor called" << endreq; - if(msgLvl(MSG::DEBUG))msg(MSG::DEBUG)<<"TrkVKalVrtFitter destructor called" << endreq; + //log << MSG::DEBUG << "TrkVKalVrtFitter destructor called" << endmsg; + if(msgLvl(MSG::DEBUG))msg(MSG::DEBUG)<<"TrkVKalVrtFitter destructor called" << endmsg; delete m_fitField; delete m_fitRotatedField; if(m_fitPropagator) delete m_fitPropagator; @@ -157,21 +157,22 @@ TrkVKalVrtFitter::~TrkVKalVrtFitter(){ StatusCode TrkVKalVrtFitter::finalize() { - if(m_ErrMtx)delete[] m_ErrMtx; m_ErrMtx=0; + if(m_ErrMtx)delete[] m_ErrMtx; + m_ErrMtx=0; if(m_timingProfile)m_timingProfile->chronoPrint("Trk_VKalVrtFitter"); - if(msgLvl(MSG::INFO))msg(MSG::INFO)<<"TrkVKalVrtFitter finalize() successful" << endreq; + if(msgLvl(MSG::INFO))msg(MSG::INFO)<<"TrkVKalVrtFitter finalize() successful" << endmsg; return StatusCode::SUCCESS; } void TrkVKalVrtFitter::setInitializedField() { - if(msgLvl(MSG::DEBUG))msg(MSG::DEBUG) << "Execute() time magnetic field setting is called" << endreq; - if(isAtlasField){ + if(msgLvl(MSG::DEBUG))msg(MSG::DEBUG) << "Execute() time magnetic field setting is called" << endmsg; + if(m_isAtlasField){ MagField::IMagFieldSvc* mtmp = & (*m_magFieldAthenaSvc); setAthenaField(mtmp); - if(msgLvl(MSG::DEBUG))msg(MSG::DEBUG)<< "MagFieldAthenaSvc is initialized and used" << endreq; + if(msgLvl(MSG::DEBUG))msg(MSG::DEBUG)<< "MagFieldAthenaSvc is initialized and used" << endmsg; } - isFieldInitialized = true; // to signal end of mag.field init procedure + m_isFieldInitialized = true; // to signal end of mag.field init procedure return; } @@ -209,30 +210,30 @@ StatusCode TrkVKalVrtFitter::initialize() // if( m_Constraint == 12) { m_usePhiCnst = true; m_useThetaCnst = true;} // setCnstType((int)m_Constraint); if( m_Constraint ){ - if(msgLvl(MSG::INFO))msg(MSG::INFO)<<"jobOption Constraint is obsolte now! Use the following jobO instead:"<< endreq; - if(msgLvl(MSG::INFO))msg(MSG::INFO)<<" useAprioriVertexCnst,useThetaCnst,usePhiCnst,usePointingCnst"<<endreq; - if(msgLvl(MSG::INFO))msg(MSG::INFO)<<" useZPointingCnst,usePassNearCnst,usePassWithTrkErrCnst"<<endreq; + if(msgLvl(MSG::INFO))msg(MSG::INFO)<<"jobOption Constraint is obsolte now! Use the following jobO instead:"<< endmsg; + if(msgLvl(MSG::INFO))msg(MSG::INFO)<<" useAprioriVertexCnst,useThetaCnst,usePhiCnst,usePointingCnst"<<endmsg; + if(msgLvl(MSG::INFO))msg(MSG::INFO)<<" useZPointingCnst,usePassNearCnst,usePassWithTrkErrCnst"<<endmsg; m_Constraint=0; } StatusCode sc=m_magFieldAthenaSvc.retrieve(); if (sc.isFailure() ){ - if(msgLvl(MSG::DEBUG))msg(MSG::DEBUG)<<"Could not find MagFieldAthenaSvc"<< endreq; + if(msgLvl(MSG::DEBUG))msg(MSG::DEBUG)<<"Could not find MagFieldAthenaSvc"<< endmsg; }else{ - isAtlasField = true; - if(msgLvl(MSG::DEBUG))msg(MSG::DEBUG)<< "MagFieldAthenaSvc is retrieved" << endreq; + m_isAtlasField = true; + if(msgLvl(MSG::DEBUG))msg(MSG::DEBUG)<< "MagFieldAthenaSvc is retrieved" << endmsg; } // // // if (m_extPropagator.name() == "DefaultVKalPropagator" ){ - if(msgLvl(MSG::DEBUG))msg(MSG::DEBUG)<< "External propagator is not supplied - use internal one"<<endreq; + if(msgLvl(MSG::DEBUG))msg(MSG::DEBUG)<< "External propagator is not supplied - use internal one"<<endmsg; }else{ if (m_extPropagator.retrieve().isFailure()) { - if(msgLvl(MSG::DEBUG))msg(MSG::DEBUG)<< "Could not find external propagator=" <<m_extPropagator<<endreq; - if(msgLvl(MSG::DEBUG))msg(MSG::DEBUG)<< "TrkVKalVrtFitter will uses internal propagator" << endreq; + if(msgLvl(MSG::DEBUG))msg(MSG::DEBUG)<< "Could not find external propagator=" <<m_extPropagator<<endmsg; + if(msgLvl(MSG::DEBUG))msg(MSG::DEBUG)<< "TrkVKalVrtFitter will uses internal propagator" << endmsg; }else{ - if(msgLvl(MSG::DEBUG))msg(MSG::DEBUG)<< "External propagator="<<m_extPropagator<<" retrieved" << endreq; + if(msgLvl(MSG::DEBUG))msg(MSG::DEBUG)<< "External propagator="<<m_extPropagator<<" retrieved" << endmsg; const IExtrapolator * tmp =& (*m_extPropagator); setAthenaPropagator(tmp); } @@ -241,44 +242,44 @@ StatusCode TrkVKalVrtFitter::initialize() m_timingProfile=0; sc = service("ChronoStatSvc", m_timingProfile); if ( sc.isFailure() || 0 == m_timingProfile) { - if(msgLvl(MSG::DEBUG))msg(MSG::DEBUG)<<"Can not find ChronoStatSvc name="<<m_timingProfile << endreq; + if(msgLvl(MSG::DEBUG))msg(MSG::DEBUG)<<"Can not find ChronoStatSvc name="<<m_timingProfile << endmsg; } // m_PropagatorType=1; //Just for technical checks // m_ErrMtx=0; // pointer to double array for error matrix // - if(msgLvl(MSG::INFO))msg(MSG::INFO)<< "TrkVKalVrtFitter initialize() successful" << endreq; + if(msgLvl(MSG::INFO))msg(MSG::INFO)<< "TrkVKalVrtFitter initialize() successful" << endmsg; if(msgLvl(MSG::DEBUG)){ - msg(MSG::DEBUG)<< "TrkVKalVrtFitter configuration:" << endreq; - msg(MSG::DEBUG)<< " A priori vertex constraint: "<< m_useAprioriVertex <<endreq; - msg(MSG::DEBUG)<< " Angle dTheta=0 constraint: "<< m_useThetaCnst <<endreq; - msg(MSG::DEBUG)<< " Angle dPhi=0 constraint: "<< m_usePhiCnst <<endreq; - msg(MSG::DEBUG)<< " Pointing to other vertex constraint: "<< m_usePointingCnst <<endreq; - msg(MSG::DEBUG)<< " ZPointing to other vertex constraint: "<< m_useZPointingCnst <<endreq; - msg(MSG::DEBUG)<< " Comb. particle pass near other vertex:"<< m_usePassNear <<endreq; - msg(MSG::DEBUG)<< " Pass near with comb.particle errors: "<< m_usePassWithTrkErr <<endreq; + msg(MSG::DEBUG)<< "TrkVKalVrtFitter configuration:" << endmsg; + msg(MSG::DEBUG)<< " A priori vertex constraint: "<< m_useAprioriVertex <<endmsg; + msg(MSG::DEBUG)<< " Angle dTheta=0 constraint: "<< m_useThetaCnst <<endmsg; + msg(MSG::DEBUG)<< " Angle dPhi=0 constraint: "<< m_usePhiCnst <<endmsg; + msg(MSG::DEBUG)<< " Pointing to other vertex constraint: "<< m_usePointingCnst <<endmsg; + msg(MSG::DEBUG)<< " ZPointing to other vertex constraint: "<< m_useZPointingCnst <<endmsg; + msg(MSG::DEBUG)<< " Comb. particle pass near other vertex:"<< m_usePassNear <<endmsg; + msg(MSG::DEBUG)<< " Pass near with comb.particle errors: "<< m_usePassWithTrkErr <<endmsg; if(m_MassForConstraint>0){ - msg(MSG::DEBUG)<< " Mass constraint M="<< m_MassForConstraint <<endreq; + msg(MSG::DEBUG)<< " Mass constraint M="<< m_MassForConstraint <<endmsg; msg(MSG::DEBUG)<< " with particles M="; for(int i=0; i<(int)m_MassInputParticles.size(); i++) msg(MSG::DEBUG)<<m_MassInputParticles[i]<<", "; - msg(MSG::DEBUG)<<endreq; ; + msg(MSG::DEBUG)<<endmsg; ; } - if(isAtlasField){ msg(MSG::DEBUG)<< " ATLAS magnetic field is used!"<<endreq; } - else { msg(MSG::DEBUG)<< " Constant magnetic field is used! B="<<m_BMAG<<endreq; } + if(m_isAtlasField){ msg(MSG::DEBUG)<< " ATLAS magnetic field is used!"<<endmsg; } + else { msg(MSG::DEBUG)<< " Constant magnetic field is used! B="<<m_BMAG<<endmsg; } - if(m_InDetExtrapolator){ msg(MSG::DEBUG)<< " InDet extrapolator is used!"<<endreq; } - else { msg(MSG::DEBUG)<< " Internal VKalVrt extrapolator is used!"<<endreq;} + if(m_InDetExtrapolator){ msg(MSG::DEBUG)<< " InDet extrapolator is used!"<<endmsg; } + else { msg(MSG::DEBUG)<< " Internal VKalVrt extrapolator is used!"<<endmsg;} - if(m_Robustness) { msg(MSG::DEBUG)<< " VKalVrt uses robust algorithm! Type="<<m_Robustness<<" with Scale="<<m_RobustScale<<endreq; } + if(m_Robustness) { msg(MSG::DEBUG)<< " VKalVrt uses robust algorithm! Type="<<m_Robustness<<" with Scale="<<m_RobustScale<<endmsg; } - if(m_firstMeasuredPoint){ msg(MSG::DEBUG)<< " VKalVrt will use FirstMeasuredPoint strategy in fits with InDetExtrapolator"<<endreq; } - else { msg(MSG::DEBUG)<< " VKalVrt will use Perigee strategy in fits with InDetExtrapolator"<<endreq; } - if(m_firstMeasuredPointLimit){ msg(MSG::DEBUG)<< " VKalVrt will use FirstMeasuredPointLimit strategy "<<endreq; } + if(m_firstMeasuredPoint){ msg(MSG::DEBUG)<< " VKalVrt will use FirstMeasuredPoint strategy in fits with InDetExtrapolator"<<endmsg; } + else { msg(MSG::DEBUG)<< " VKalVrt will use Perigee strategy in fits with InDetExtrapolator"<<endmsg; } + if(m_firstMeasuredPointLimit){ msg(MSG::DEBUG)<< " VKalVrt will use FirstMeasuredPointLimit strategy "<<endmsg; } if(m_useMagFieldRotation){ - msg(MSG::DEBUG)<< " VKalVrt will use ROTATION to magnetic field direction. NO pointing constraints are allowed "<<endreq; - msg(MSG::DEBUG)<< " The only function fit(Trk::TrackParameters trk, Trk::Vertex vrt) is allowed for the moment "<<endreq; + msg(MSG::DEBUG)<< " VKalVrt will use ROTATION to magnetic field direction. NO pointing constraints are allowed "<<endmsg; + msg(MSG::DEBUG)<< " The only function fit(Trk::TrackParameters trk, Trk::Vertex vrt) is allowed for the moment "<<endmsg; } } @@ -298,8 +299,8 @@ xAOD::Vertex * TrkVKalVrtFitter::fit(const std::vector<const Track*> & vectorTrk { // m_fitSvc->setDefault(); if(m_useMagFieldRotation){ - msg(MSG::WARNING)<< " fit(Track trk, Vertex vrt) is not allowed with useMagFieldRotation jobO"<<endreq; - msg(MSG::WARNING)<<"Use fit(TrackParameters trk, Vertex vrt) instead"<<endreq; + msg(MSG::WARNING)<< " fit(Track trk, Vertex vrt) is not allowed with useMagFieldRotation jobO"<<endmsg; + msg(MSG::WARNING)<<"Use fit(TrackParameters trk, Vertex vrt) instead"<<endmsg; return 0; } m_globalFirstHit = 0; @@ -320,7 +321,8 @@ xAOD::Vertex * TrkVKalVrtFitter::fit(const std::vector<const Track*> & vectorTrk vxavList[it].setOrigTrack(linkTT); //pointer to initial Track } } - if(m_ErrMtx)delete[] m_ErrMtx; m_ErrMtx=0; + if(m_ErrMtx)delete[] m_ErrMtx; + m_ErrMtx=0; m_planeCnstNDOF = 0; // No plane constraint by default setMomCovCalc(0); // No full covariance by default return tmpVertex; @@ -335,8 +337,8 @@ xAOD::Vertex * TrkVKalVrtFitter::fit(const std::vector<const TrackParticleBase*> { // m_fitSvc->setDefault(); if(m_useMagFieldRotation){ - msg(MSG::WARNING)<<"fit(TrackParticleBase trk, Vertex vrt) is not allowed with useMagFieldRotation jobO"<<endreq; - msg(MSG::WARNING)<<"Use fit(TrackParameters trk, Vertex vrt) instead"<<endreq; + msg(MSG::WARNING)<<"fit(TrackParticleBase trk, Vertex vrt) is not allowed with useMagFieldRotation jobO"<<endmsg; + msg(MSG::WARNING)<<"Use fit(TrackParameters trk, Vertex vrt) instead"<<endmsg; return 0; } m_globalFirstHit = 0; @@ -357,7 +359,8 @@ xAOD::Vertex * TrkVKalVrtFitter::fit(const std::vector<const TrackParticleBase*> vxavList[it].setOrigTrack(ITL); //pointer to initial TrackParticle(Base) } } - if(m_ErrMtx)delete[] m_ErrMtx; m_ErrMtx=0; + if(m_ErrMtx)delete[] m_ErrMtx; + m_ErrMtx=0; m_planeCnstNDOF = 0; // No plane constraint by default setMomCovCalc(0); // No full covariance by default return tmpVertex; @@ -378,11 +381,11 @@ xAOD::Vertex * TrkVKalVrtFitter::fit(const std::vector<const Track*>& vectorTrk, const xAOD::Vertex& firstStartingPoint) { if(m_useMagFieldRotation){ - msg(MSG::WARNING)<<"fit(Track trk, xAOD::Vertex vrt) is not allowed with useMagFieldRotation jobO"<<endreq; - msg(MSG::WARNING)<<"Use fit(TrackParameters trk, Amg::Vector3D vrt) instead"<<endreq; + msg(MSG::WARNING)<<"fit(Track trk, xAOD::Vertex vrt) is not allowed with useMagFieldRotation jobO"<<endmsg; + msg(MSG::WARNING)<<"Use fit(TrackParameters trk, Amg::Vector3D vrt) instead"<<endmsg; return 0; } - if(msgLvl(MSG::DEBUG)) msg(MSG::DEBUG)<< "A priori vertex constraint is added to VKalVrt fitter!" << endreq; + if(msgLvl(MSG::DEBUG)) msg(MSG::DEBUG)<< "A priori vertex constraint is added to VKalVrt fitter!" << endmsg; // m_fitSvc->setDefault(); m_globalFirstHit = 0; Amg::Vector3D VertexIni(0.,0.,0.); @@ -419,7 +422,8 @@ xAOD::Vertex * TrkVKalVrtFitter::fit(const std::vector<const Track*>& vectorTrk, vxavList[it].setOrigTrack(linkTT); //pointer to initial Track } } - if(m_ErrMtx)delete[] m_ErrMtx; m_ErrMtx=0; + if(m_ErrMtx)delete[] m_ErrMtx; + m_ErrMtx=0; m_useAprioriVertex=false; m_planeCnstNDOF = 0; // No plane constraint by default setMomCovCalc(0); // No full covariance by default @@ -431,11 +435,11 @@ xAOD::Vertex * TrkVKalVrtFitter::fit(const std::vector<const TrackParticleBase*> const xAOD::Vertex & firstStartingPoint) { if(m_useMagFieldRotation){ - msg(MSG::WARNING)<<"fit(TrackParticleBase trk, xAOD::Vertex vrt) is not allowed with useMagFieldRotation jobO"<<endreq; - msg(MSG::WARNING)<<"Use fit(TrackParameters trk, Amg::Vector3D vrt) instead"<<endreq; + msg(MSG::WARNING)<<"fit(TrackParticleBase trk, xAOD::Vertex vrt) is not allowed with useMagFieldRotation jobO"<<endmsg; + msg(MSG::WARNING)<<"Use fit(TrackParameters trk, Amg::Vector3D vrt) instead"<<endmsg; return 0; } - if(msgLvl(MSG::DEBUG)) msg(MSG::DEBUG)<< "A priori vertex constraint is added to VKalVrt fitter!" << endreq; + if(msgLvl(MSG::DEBUG)) msg(MSG::DEBUG)<< "A priori vertex constraint is added to VKalVrt fitter!" << endmsg; // m_fitSvc->setDefault(); m_globalFirstHit = 0; Amg::Vector3D VertexIni(0.,0.,0.); @@ -472,7 +476,8 @@ xAOD::Vertex * TrkVKalVrtFitter::fit(const std::vector<const TrackParticleBase*> vxavList[it].setOrigTrack(ITL); //pointer to initial TrackParticle(Base) } } - if(m_ErrMtx)delete[] m_ErrMtx; m_ErrMtx=0; + if(m_ErrMtx)delete[] m_ErrMtx; + m_ErrMtx=0; m_useAprioriVertex=false; m_planeCnstNDOF = 0; // No plane constraint by default setMomCovCalc(0); // No full covariance by default @@ -535,7 +540,8 @@ xAOD::Vertex * TrkVKalVrtFitter::fit(const std::vector<const TrackParameters*> & if(sc.isSuccess()) { tmpVertex = makeXAODVertex( 0, m_Vertex, m_ErrorMatrix, m_Chi2PerTrk, m_TrkAtVrt, m_Chi2 ); } - if(m_ErrMtx)delete[] m_ErrMtx; m_ErrMtx=0; + if(m_ErrMtx)delete[] m_ErrMtx; + m_ErrMtx=0; m_planeCnstNDOF = 0; // No plane constraint by default setMomCovCalc(0); // No full covariance by default return tmpVertex; @@ -558,7 +564,8 @@ xAOD::Vertex * TrkVKalVrtFitter::fit(const std::vector<const TrackParameters*> if(sc.isSuccess()) { tmpVertex = makeXAODVertex( (int)perigeeListN.size() , m_Vertex, m_ErrorMatrix, m_Chi2PerTrk, m_TrkAtVrt, m_Chi2 ); } - if(m_ErrMtx)delete[] m_ErrMtx; m_ErrMtx=0; + if(m_ErrMtx)delete[] m_ErrMtx; + m_ErrMtx=0; m_planeCnstNDOF = 0; // No plane constraint by default setMomCovCalc(0); // No full covariance by default return tmpVertex; @@ -574,7 +581,7 @@ xAOD::Vertex * TrkVKalVrtFitter::fit(const std::vector<const TrackParameters*> xAOD::Vertex * TrkVKalVrtFitter::fit(const std::vector<const TrackParameters*> & perigeeListC, const xAOD::Vertex & constraint) { - if(msgLvl(MSG::DEBUG)) msg(MSG::DEBUG)<< "A priori vertex constraint is activated in VKalVrt fitter!" << endreq; + if(msgLvl(MSG::DEBUG)) msg(MSG::DEBUG)<< "A priori vertex constraint is activated in VKalVrt fitter!" << endmsg; m_globalFirstHit = 0; Amg::Vector3D VertexIni(0.,0.,0.); StatusCode sc=VKalVrtFitFast(perigeeListC, VertexIni); @@ -605,7 +612,8 @@ xAOD::Vertex * TrkVKalVrtFitter::fit(const std::vector<const TrackParameters*> & if(sc.isSuccess()) { tmpVertex = makeXAODVertex( 0, m_Vertex, m_ErrorMatrix, m_Chi2PerTrk, m_TrkAtVrt, m_Chi2 ); } - if(m_ErrMtx)delete[] m_ErrMtx; m_ErrMtx=0; + if(m_ErrMtx)delete[] m_ErrMtx; + m_ErrMtx=0; m_useAprioriVertex=false; m_planeCnstNDOF = 0; // No plane constraint by default setMomCovCalc(0); // No full covariance by default @@ -617,7 +625,7 @@ xAOD::Vertex * TrkVKalVrtFitter::fit(const std::vector<const TrackParameters*> const std::vector<const NeutralParameters*> & perigeeListN, const xAOD::Vertex & constraint) { - if(msgLvl(MSG::DEBUG)) msg(MSG::DEBUG)<< "A priori vertex constraint is activated in VKalVrt fitter!" << endreq; + if(msgLvl(MSG::DEBUG)) msg(MSG::DEBUG)<< "A priori vertex constraint is activated in VKalVrt fitter!" << endmsg; m_globalFirstHit = 0; Amg::Vector3D VertexIni(0.,0.,0.); StatusCode sc=VKalVrtFitFast(perigeeListC, VertexIni); @@ -647,7 +655,8 @@ xAOD::Vertex * TrkVKalVrtFitter::fit(const std::vector<const TrackParameters*> if(sc.isSuccess()) { tmpVertex = makeXAODVertex( (int)perigeeListN.size(), m_Vertex, m_ErrorMatrix, m_Chi2PerTrk, m_TrkAtVrt, m_Chi2 ); } - if(m_ErrMtx)delete[] m_ErrMtx; m_ErrMtx=0; + if(m_ErrMtx)delete[] m_ErrMtx; + m_ErrMtx=0; m_useAprioriVertex=false; m_planeCnstNDOF = 0; // No plane constraint by default setMomCovCalc(0); // No full covariance by default @@ -680,7 +689,8 @@ xAOD::Vertex * TrkVKalVrtFitter::fit(const std::vector<const xAOD::TrackParticle } } - if(m_ErrMtx)delete[] m_ErrMtx; m_ErrMtx=0; + if(m_ErrMtx)delete[] m_ErrMtx; + m_ErrMtx=0; m_planeCnstNDOF = 0; // No plane constraint by default setMomCovCalc(0); // No full covariance by default @@ -716,7 +726,8 @@ xAOD::Vertex * TrkVKalVrtFitter::fit(const std::vector<const xAOD::TrackParticle } } - if(m_ErrMtx)delete[] m_ErrMtx; m_ErrMtx=0; + if(m_ErrMtx)delete[] m_ErrMtx; + m_ErrMtx=0; m_planeCnstNDOF = 0; // No plane constraint by default setMomCovCalc(0); // No full covariance by default @@ -728,7 +739,7 @@ xAOD::Vertex * TrkVKalVrtFitter::fit(const std::vector<const xAOD::TrackParticle xAOD::Vertex * TrkVKalVrtFitter::fit(const std::vector<const xAOD::TrackParticle*> & xtpListC, const xAOD::Vertex & constraint) { - if(msgLvl(MSG::DEBUG)) msg(MSG::DEBUG)<< "A priori vertex constraint is activated in VKalVrt fitter!" << endreq; + if(msgLvl(MSG::DEBUG)) msg(MSG::DEBUG)<< "A priori vertex constraint is activated in VKalVrt fitter!" << endmsg; m_globalFirstHit = 0; xAOD::Vertex * tmpVertex = 0; setApproximateVertex(constraint.position().x(), constraint.position().y(),constraint.position().z()); @@ -757,7 +768,8 @@ xAOD::Vertex * TrkVKalVrtFitter::fit(const std::vector<const xAOD::TrackParticle } } - if(m_ErrMtx)delete[] m_ErrMtx; m_ErrMtx=0; + if(m_ErrMtx)delete[] m_ErrMtx; + m_ErrMtx=0; m_useAprioriVertex=false; m_planeCnstNDOF = 0; // No plane constraint by default setMomCovCalc(0); // No full covariance by default @@ -769,7 +781,7 @@ xAOD::Vertex * TrkVKalVrtFitter::fit(const std::vector<const xAOD::TrackParticle const std::vector<const xAOD::NeutralParticle*> & xtpListN, const xAOD::Vertex & constraint) { - if(msgLvl(MSG::DEBUG)) msg(MSG::DEBUG)<< "A priori vertex constraint is activated in VKalVrt fitter!" << endreq; + if(msgLvl(MSG::DEBUG)) msg(MSG::DEBUG)<< "A priori vertex constraint is activated in VKalVrt fitter!" << endmsg; m_globalFirstHit = 0; xAOD::Vertex * tmpVertex = 0; setApproximateVertex(constraint.position().x(), constraint.position().y(),constraint.position().z()); @@ -803,7 +815,8 @@ xAOD::Vertex * TrkVKalVrtFitter::fit(const std::vector<const xAOD::TrackParticle } } - if(m_ErrMtx)delete[] m_ErrMtx; m_ErrMtx=0; + if(m_ErrMtx)delete[] m_ErrMtx; + m_ErrMtx=0; m_useAprioriVertex=false; m_planeCnstNDOF = 0; // No plane constraint by default setMomCovCalc(0); // No full covariance by default @@ -820,8 +833,8 @@ xAOD::Vertex * TrkVKalVrtFitter::fit(const std::vector<const xAOD::TrackParticle xAOD::Vertex * TrkVKalVrtFitter::fit(const std::vector<const Track*> & vectorTrk) { if(m_useMagFieldRotation){ - msg(MSG::WARNING)<<"fit(Track trk) is not allowed with useMagFieldRotation jobO"<<endreq; - msg(MSG::WARNING)<<"Use fit(ParametersBase trk, Amg::Vector3D vrt) instead"<<endreq; + msg(MSG::WARNING)<<"fit(Track trk) is not allowed with useMagFieldRotation jobO"<<endmsg; + msg(MSG::WARNING)<<"Use fit(ParametersBase trk, Amg::Vector3D vrt) instead"<<endmsg; return 0; } Amg::Vector3D VertexIni(0.,0.,0.); @@ -846,7 +859,8 @@ xAOD::Vertex * TrkVKalVrtFitter::fit(const std::vector<const Track*> & vectorTrk vxavList[it].setOrigTrack(linkTT); //pointer to initial Track } } - if(m_ErrMtx)delete[] m_ErrMtx; m_ErrMtx=0; + if(m_ErrMtx)delete[] m_ErrMtx; + m_ErrMtx=0; setMomCovCalc(0); // No full covariance by default return tmpVertex; } @@ -854,8 +868,8 @@ xAOD::Vertex * TrkVKalVrtFitter::fit(const std::vector<const Track*> & vectorTrk xAOD::Vertex * TrkVKalVrtFitter::fit(const std::vector<const TrackParameters*> & perigeeListC) { if(m_useMagFieldRotation){ - msg(MSG::WARNING)<<"fit(TrackParameters trk) is not allowed with useMagFieldRotation jobO"<<endreq; - msg(MSG::WARNING)<<"Use fit(TrackParameters trk, Vertex vrt) instead"<<endreq; + msg(MSG::WARNING)<<"fit(TrackParameters trk) is not allowed with useMagFieldRotation jobO"<<endmsg; + msg(MSG::WARNING)<<"Use fit(TrackParameters trk, Vertex vrt) instead"<<endmsg; return 0; } m_globalFirstHit = 0; @@ -871,7 +885,8 @@ xAOD::Vertex * TrkVKalVrtFitter::fit(const std::vector<const TrackParameters*> if(sc.isSuccess()) { tmpVertex = makeXAODVertex( 0, m_Vertex, m_ErrorMatrix, m_Chi2PerTrk, m_TrkAtVrt, m_Chi2 ); } - if(m_ErrMtx)delete[] m_ErrMtx; m_ErrMtx=0; + if(m_ErrMtx)delete[] m_ErrMtx; + m_ErrMtx=0; m_planeCnstNDOF = 0; // No plane constraint by default setMomCovCalc(0); // No full covariance by default return tmpVertex; @@ -881,8 +896,8 @@ xAOD::Vertex * TrkVKalVrtFitter::fit(const std::vector<const TrackParameters*> const std::vector<const NeutralParameters*> & perigeeListN) { if(m_useMagFieldRotation){ - msg(MSG::WARNING)<<"fit(TrackParameters trk) is not allowed with useMagFieldRotation jobO"<<endreq; - msg(MSG::WARNING)<<"Use fit(TrackParameters trk, Vertex vrt) instead"<<endreq; + msg(MSG::WARNING)<<"fit(TrackParameters trk) is not allowed with useMagFieldRotation jobO"<<endmsg; + msg(MSG::WARNING)<<"Use fit(TrackParameters trk, Vertex vrt) instead"<<endmsg; return 0; } m_globalFirstHit = 0; @@ -897,7 +912,8 @@ xAOD::Vertex * TrkVKalVrtFitter::fit(const std::vector<const TrackParameters*> if(sc.isSuccess()) { tmpVertex = makeXAODVertex( (int)perigeeListN.size(), m_Vertex, m_ErrorMatrix, m_Chi2PerTrk, m_TrkAtVrt, m_Chi2 ); } - if(m_ErrMtx)delete[] m_ErrMtx; m_ErrMtx=0; + if(m_ErrMtx)delete[] m_ErrMtx; + m_ErrMtx=0; m_planeCnstNDOF = 0; // No plane constraint by default setMomCovCalc(0); // No full covariance by default return tmpVertex; diff --git a/Tracking/TrkVertexFitter/TrkVKalVrtFitter/src/VKalExtPropagator.cxx b/Tracking/TrkVertexFitter/TrkVKalVrtFitter/src/VKalExtPropagator.cxx index 8cd88ee55cf08f13edc0f5cbc6d456e18eaac921..979d1792ff4c6a2699929b296a3d5ee22d65e39b 100755 --- a/Tracking/TrkVertexFitter/TrkVKalVrtFitter/src/VKalExtPropagator.cxx +++ b/Tracking/TrkVertexFitter/TrkVKalVrtFitter/src/VKalExtPropagator.cxx @@ -25,7 +25,7 @@ VKalExtPropagator::VKalExtPropagator( TrkVKalVrtFitter* pnt) { m_extrapolator = 0; - vkalFitSvc = pnt; + m_vkalFitSvc = pnt; } VKalExtPropagator::~VKalExtPropagator(){} @@ -40,11 +40,11 @@ // double VKalExtPropagator::Protection(double *RefEnd) const { - double Xend=RefEnd[0] + vkalFitSvc->m_refFrameX; - double Yend=RefEnd[1] + vkalFitSvc->m_refFrameY; - double Zend=RefEnd[2] + vkalFitSvc->m_refFrameZ; - double Rlim=sqrt(Xend*Xend+Yend*Yend) / vkalFitSvc->m_IDsizeR; - double Zlim=fabs(Zend) / vkalFitSvc->m_IDsizeZ; + double Xend=RefEnd[0] + m_vkalFitSvc->m_refFrameX; + double Yend=RefEnd[1] + m_vkalFitSvc->m_refFrameY; + double Zend=RefEnd[2] + m_vkalFitSvc->m_refFrameZ; + double Rlim=sqrt(Xend*Xend+Yend*Yend) / m_vkalFitSvc->m_IDsizeR; + double Zlim=fabs(Zend) / m_vkalFitSvc->m_IDsizeZ; double Scale = Rlim; if(Zlim>Rlim) Scale=Zlim; return Scale; } @@ -52,24 +52,24 @@ bool VKalExtPropagator::checkTarget( double *RefEnd) const { double vX=RefEnd[0]; double vY=RefEnd[1]; double vZ=RefEnd[2]; - if( vkalFitSvc->m_trkControl[0].rotateToField) { + if( m_vkalFitSvc->m_trkControl[0].rotateToField) { double fx,fy,fz, oldField, newField; - Amg::Vector3D step(RefEnd[0]-vkalFitSvc->m_trkControl[0].trkSavedLocalVertex.x(), - RefEnd[1]-vkalFitSvc->m_trkControl[0].trkSavedLocalVertex.y(), - RefEnd[2]-vkalFitSvc->m_trkControl[0].trkSavedLocalVertex.z()); - Amg::Vector3D globalRefEnd = (vkalFitSvc->m_trkControl[0].trkRotation.inverse())*step - + vkalFitSvc->m_trkControl[0].trkRotationVertex; + Amg::Vector3D step(RefEnd[0]-m_vkalFitSvc->m_trkControl[0].trkSavedLocalVertex.x(), + RefEnd[1]-m_vkalFitSvc->m_trkControl[0].trkSavedLocalVertex.y(), + RefEnd[2]-m_vkalFitSvc->m_trkControl[0].trkSavedLocalVertex.z()); + Amg::Vector3D globalRefEnd = (m_vkalFitSvc->m_trkControl[0].trkRotation.inverse())*step + + m_vkalFitSvc->m_trkControl[0].trkRotationVertex; // - vX=vkalFitSvc->m_trkControl[0].trkRotationVertex.x()-vkalFitSvc->m_refFrameX; - vY=vkalFitSvc->m_trkControl[0].trkRotationVertex.y()-vkalFitSvc->m_refFrameY; - vZ=vkalFitSvc->m_trkControl[0].trkRotationVertex.z()-vkalFitSvc->m_refFrameZ; - vkalFitSvc->m_fitField->getMagFld(vX,vY,vZ,fx,fy,fz); + vX=m_vkalFitSvc->m_trkControl[0].trkRotationVertex.x()-m_vkalFitSvc->m_refFrameX; + vY=m_vkalFitSvc->m_trkControl[0].trkRotationVertex.y()-m_vkalFitSvc->m_refFrameY; + vZ=m_vkalFitSvc->m_trkControl[0].trkRotationVertex.z()-m_vkalFitSvc->m_refFrameZ; + m_vkalFitSvc->m_fitField->getMagFld(vX,vY,vZ,fx,fy,fz); oldField=sqrt(fx*fx+fy*fy+fz*fz); if(oldField<0.2) oldField=0.2; // - vX=globalRefEnd.x()-vkalFitSvc->m_refFrameX; - vY=globalRefEnd.y()-vkalFitSvc->m_refFrameY; - vZ=globalRefEnd.z()-vkalFitSvc->m_refFrameZ; - vkalFitSvc->m_fitField->getMagFld(vX,vY,vZ,fx,fy,fz); + vX=globalRefEnd.x()-m_vkalFitSvc->m_refFrameX; + vY=globalRefEnd.y()-m_vkalFitSvc->m_refFrameY; + vZ=globalRefEnd.z()-m_vkalFitSvc->m_refFrameZ; + m_vkalFitSvc->m_fitField->getMagFld(vX,vY,vZ,fx,fy,fz); newField=sqrt(fx*fx+fy*fy+fz*fz); if(newField<0.2) newField=0.2; // if( fabs(newField-oldField)/oldField > 1.0 ) return false; @@ -100,19 +100,19 @@ // so it's rotated back using saved on given track rotation parameters //----------- double vX=RefEnd[0]; double vY=RefEnd[1]; double vZ=RefEnd[2]; - if( vkalFitSvc->m_trkControl.at(trkID_loc).rotateToField && - !vkalFitSvc->m_trkControl[trkID_loc].trkRotation.isIdentity()) { + if( m_vkalFitSvc->m_trkControl.at(trkID_loc).rotateToField && + !m_vkalFitSvc->m_trkControl[trkID_loc].trkRotation.isIdentity()) { - Amg::Vector3D step(RefEnd[0]-vkalFitSvc->m_trkControl[trkID_loc].trkSavedLocalVertex.x(), - RefEnd[1]-vkalFitSvc->m_trkControl[trkID_loc].trkSavedLocalVertex.y(), - RefEnd[2]-vkalFitSvc->m_trkControl[trkID_loc].trkSavedLocalVertex.z()); - Amg::Vector3D globalRefEnd = (vkalFitSvc->m_trkControl[trkID_loc].trkRotation.inverse())*step - + vkalFitSvc->m_trkControl[trkID_loc].trkRotationVertex; - vX=globalRefEnd.x()-vkalFitSvc->m_refFrameX; - vY=globalRefEnd.y()-vkalFitSvc->m_refFrameY; - vZ=globalRefEnd.z()-vkalFitSvc->m_refFrameZ; + Amg::Vector3D step(RefEnd[0]-m_vkalFitSvc->m_trkControl[trkID_loc].trkSavedLocalVertex.x(), + RefEnd[1]-m_vkalFitSvc->m_trkControl[trkID_loc].trkSavedLocalVertex.y(), + RefEnd[2]-m_vkalFitSvc->m_trkControl[trkID_loc].trkSavedLocalVertex.z()); + Amg::Vector3D globalRefEnd = (m_vkalFitSvc->m_trkControl[trkID_loc].trkRotation.inverse())*step + + m_vkalFitSvc->m_trkControl[trkID_loc].trkRotationVertex; + vX=globalRefEnd.x()-m_vkalFitSvc->m_refFrameX; + vY=globalRefEnd.y()-m_vkalFitSvc->m_refFrameY; + vZ=globalRefEnd.z()-m_vkalFitSvc->m_refFrameZ; } - Amg::Vector3D endPoint( vX + vkalFitSvc->m_refFrameX, vY + vkalFitSvc->m_refFrameY, vZ + vkalFitSvc->m_refFrameZ); + Amg::Vector3D endPoint( vX + m_vkalFitSvc->m_refFrameX, vY + m_vkalFitSvc->m_refFrameY, vZ + m_vkalFitSvc->m_refFrameZ); // // ---- Make MeasuredPerigee from input. Mag.field at start point is used here // @@ -126,26 +126,26 @@ CovPerigeeIni[0]=1.e6;CovPerigeeIni[2]=1.e6;CovPerigeeIni[5]=1.;CovPerigeeIni[9]=1.;CovPerigeeIni[14]=fabs(PerigeeIni[4]); } const Perigee* inpPer = - vkalFitSvc->CreatePerigee( RefStart[0], RefStart[1], RefStart[2], PerigeeIni, CovPerigeeIni); + m_vkalFitSvc->CreatePerigee( RefStart[0], RefStart[1], RefStart[2], PerigeeIni, CovPerigeeIni); const TrackParameters * inpPar= (const TrackParameters*) inpPer; // // ----- Magnetic field is taken at target point // - double fx,fy,fz,m_BMAG_FIXED; - vkalFitSvc->m_fitField->getMagFld(vX,vY,vZ,fx,fy,fz); - m_BMAG_FIXED=fz; // standard when rotation to field direction is absent - if(vkalFitSvc->m_trkControl[trkID_loc].rotateToField) { - m_BMAG_FIXED=sqrt(fx*fx+fy*fy+fz*fz); - vkalFitSvc->m_fitRotatedField->setAtlasMag(m_BMAG_FIXED); //set fixed ROTATED field in corresponding VKal oblect + double fx,fy,fz,BMAG_FIXED; + m_vkalFitSvc->m_fitField->getMagFld(vX,vY,vZ,fx,fy,fz); + BMAG_FIXED=fz; // standard when rotation to field direction is absent + if(m_vkalFitSvc->m_trkControl[trkID_loc].rotateToField) { + BMAG_FIXED=sqrt(fx*fx+fy*fy+fz*fz); + m_vkalFitSvc->m_fitRotatedField->setAtlasMag(BMAG_FIXED); //set fixed ROTATED field in corresponding VKal oblect } // // ----- Prepare line target. In case of rotation - save new rotation parameters to track object Amg::RotationMatrix3D magFldRot; magFldRot.setIdentity(); - if(trkID>=0 && vkalFitSvc->m_trkControl[trkID].rotateToField){ - magFldRot=vkalFitSvc->getMagFldRotation(fx,fy,fz,vkalFitSvc->m_refFrameX,vkalFitSvc->m_refFrameY,0.); - vkalFitSvc->m_trkControl[trkID].trkRotation=magFldRot; - vkalFitSvc->m_trkControl[trkID].trkRotationVertex = Amg::Vector3D(endPoint.x(),endPoint.y(),endPoint.z()); - vkalFitSvc->m_trkControl[trkID].trkSavedLocalVertex = Amg::Vector3D(RefEnd[0],RefEnd[1],RefEnd[2]); + if(trkID>=0 && m_vkalFitSvc->m_trkControl[trkID].rotateToField){ + magFldRot=m_vkalFitSvc->getMagFldRotation(fx,fy,fz,m_vkalFitSvc->m_refFrameX,m_vkalFitSvc->m_refFrameY,0.); + m_vkalFitSvc->m_trkControl[trkID].trkRotation=magFldRot; + m_vkalFitSvc->m_trkControl[trkID].trkRotationVertex = Amg::Vector3D(endPoint.x(),endPoint.y(),endPoint.z()); + m_vkalFitSvc->m_trkControl[trkID].trkSavedLocalVertex = Amg::Vector3D(RefEnd[0],RefEnd[1],RefEnd[2]); } // //-------------------- Extrapolation itself @@ -154,12 +154,12 @@ if(trkID<0){ endPer = myExtrapWithMatUpdate( trkID, inpPar, &endPoint); }else{ - if(vkalFitSvc->m_trkControl[trkID].rotateToField) { - Amg::Vector3D lineCenter( vX + vkalFitSvc->m_refFrameX, vY + vkalFitSvc->m_refFrameY, vZ + vkalFitSvc->m_refFrameZ); + if(m_vkalFitSvc->m_trkControl[trkID].rotateToField) { + Amg::Vector3D lineCenter( vX + m_vkalFitSvc->m_refFrameX, vY + m_vkalFitSvc->m_refFrameY, vZ + m_vkalFitSvc->m_refFrameZ); StraightLineSurface lineTarget(new Amg::Transform3D( magFldRot.inverse() , lineCenter)); //=Check StraightLineSurface // GlobalPosition testpos(lineCenter.x()-100.*fx,lineCenter.y()-100.*fy,lineCenter.z()-100.*fz); -// std::cout<<" checkLineSurface="<<*(lineTarget.globalToLocal(testpos))<<" BMAG="<<m_BMAG_FIXED<<'\n'; +// std::cout<<" checkLineSurface="<<*(lineTarget.globalToLocal(testpos))<<" BMAG="<<BMAG_FIXED<<'\n'; endPer = myExtrapToLine(trkID, inpPar, &endPoint, lineTarget); }else{ endPer = myExtrapWithMatUpdate( trkID, inpPar, &endPoint); @@ -170,26 +170,26 @@ ParNew[0]=0.; ParNew[1]=0.;ParNew[2]=0.;ParNew[3]=0.;ParNew[4]=0.; delete inpPer; return; } - const Perigee* m_mPer = dynamic_cast<const Perigee*>(endPer); - const AtaStraightLine* m_Line = dynamic_cast<const AtaStraightLine*>(endPer); + const Perigee* mPer = dynamic_cast<const Perigee*>(endPer); + const AtaStraightLine* Line = dynamic_cast<const AtaStraightLine*>(endPer); AmgVector(5) VectPerig; VectPerig<<0.,0.,0.,0.,0.; const AmgSymMatrix(5) *CovMtx=0; - if( m_mPer ){ - VectPerig = m_mPer->parameters(); - CovMtx = m_mPer->covariance(); + if( mPer ){ + VectPerig = mPer->parameters(); + CovMtx = mPer->covariance(); } - if( m_Line ){ - VectPerig = m_Line->parameters(); - CovMtx = m_Line->covariance(); + if( Line ){ + VectPerig = Line->parameters(); + CovMtx = Line->covariance(); } - if( (m_Line==0 && m_mPer==0) || CovMtx==0 ){ + if( (Line==0 && mPer==0) || CovMtx==0 ){ ParNew[0]=0.; ParNew[1]=0.;ParNew[2]=0.;ParNew[3]=0.;ParNew[4]=0.; delete inpPer; return; } - if(vkalFitSvc->m_trkControl[trkID_loc].rotateToField) { + if(m_vkalFitSvc->m_trkControl[trkID_loc].rotateToField) { Amg::Vector3D rotatedMomentum(0.,0.,0.); - if(m_mPer)rotatedMomentum=magFldRot*Amg::Vector3D(m_mPer->momentum().x(),m_mPer->momentum().y(),m_mPer->momentum().z()); - if(m_Line)rotatedMomentum=magFldRot*Amg::Vector3D(m_Line->momentum().x(),m_Line->momentum().y(),m_Line->momentum().z()); + if(mPer)rotatedMomentum=magFldRot*Amg::Vector3D(mPer->momentum().x(),mPer->momentum().y(),mPer->momentum().z()); + if(Line)rotatedMomentum=magFldRot*Amg::Vector3D(Line->momentum().x(),Line->momentum().y(),Line->momentum().z()); // VectPerig[2] += atan2(rotatedMomentum.y(),rotatedMomentum.x()); //VK wrong 27.09.10 VectPerig[2] = atan2(rotatedMomentum.y(),rotatedMomentum.x()); VectPerig[3] = atan2(rotatedMomentum.perp(),rotatedMomentum.z()); @@ -222,12 +222,12 @@ // ", "<<(*CovMtx)(3,3)<<", "<<(*CovMtx)(4,4)<<'\n'; if(CovNew != 0) { - vkalFitSvc->VKalTransform( m_BMAG_FIXED, VectPerig(0), VectPerig(1), + m_vkalFitSvc->VKalTransform( BMAG_FIXED, VectPerig(0), VectPerig(1), VectPerig(2), VectPerig(3), VectPerig(4), CovVertTrk, locCharge, &ParNew[0] , &CovNew[0]); }else{ double CovVertTrkTmp[15]; - vkalFitSvc->VKalTransform( m_BMAG_FIXED, VectPerig(0), VectPerig(1), + m_vkalFitSvc->VKalTransform( BMAG_FIXED, VectPerig(0), VectPerig(1), VectPerig(2), VectPerig(3), VectPerig(4), CovVertTrk, locCharge, &ParNew[0] , CovVertTrkTmp); } @@ -262,11 +262,11 @@ Amg::Vector3D pmom=inpPer->momentum(); //Track reference point ( some point on track provided initially, global frame ) Amg::Vector3D refPoint(0.,0.,0.); - if(TrkID>=0)refPoint = vkalFitSvc->m_trkControl.at(TrkID).trkRefGlobPos; + if(TrkID>=0)refPoint = m_vkalFitSvc->m_trkControl.at(TrkID).trkRefGlobPos; // Amg::Vector3D step = (*endPoint) - iniPoint; // - int Strategy = 0; if(TrkID>=0) Strategy = vkalFitSvc->m_trkControl[TrkID].extrapolationType; + int Strategy = 0; if(TrkID>=0) Strategy = m_vkalFitSvc->m_trkControl[TrkID].extrapolationType; // // Extrapolation for new track - no material at all // @@ -280,9 +280,9 @@ } return endPer; }else{ - pntOnTrk=dynamic_cast<const TrackParameters*> (vkalFitSvc->m_trkControl.at(TrkID).TrkPnt); + pntOnTrk=dynamic_cast<const TrackParameters*> (m_vkalFitSvc->m_trkControl.at(TrkID).TrkPnt); if(pntOnTrk==0)return endPer; - //double inpMass=vkalFitSvc->m_trkControl[TrkID].prtMass; + //double inpMass=m_vkalFitSvc->m_trkControl[TrkID].prtMass; //if( inpMass > 0. && inpMass< 20.) { prtType=electron; } //VK Disabled according to users request //else if(inpMass > 20. && inpMass<120.) { prtType=muon; } // May be activated in future //else if(inpMass >120. && inpMass<200.) { prtType=pion; } @@ -369,7 +369,7 @@ Amg::Vector3D iniPoint = inpPer->position(); Amg::Vector3D step = (*endPoint) - iniPoint; // - int Strategy = 0; if(TrkID>=0) Strategy = vkalFitSvc->m_trkControl[TrkID].extrapolationType; + int Strategy = 0; if(TrkID>=0) Strategy = m_vkalFitSvc->m_trkControl[TrkID].extrapolationType; // // Extrapolation for new track - no material at all // @@ -377,9 +377,9 @@ if(TrkID<0){ return endPer; }else{ - pntOnTrk=dynamic_cast<const TrackParameters*> (vkalFitSvc->m_trkControl.at(TrkID).TrkPnt); + pntOnTrk=dynamic_cast<const TrackParameters*> (m_vkalFitSvc->m_trkControl.at(TrkID).TrkPnt); if(!pntOnTrk) return endPer; - //double inpMass=vkalFitSvc->m_trkControl[TrkID].prtMass; + //double inpMass=m_vkalFitSvc->m_trkControl[TrkID].prtMass; //if( inpMass > 0. && inpMass< 20.) { prtType=electron; } //VK Disabled according to users request //else if(inpMass > 20. && inpMass<120.) { prtType=muon; } // May be activated in future //else if(inpMass >120. && inpMass<200.) { prtType=pion; } @@ -436,16 +436,16 @@ { if(!xprt->isAvailable<float>("radiusOfFirstHit")) return 0; // No radiusOfFirstHit on track - const Trk::Perigee* m_mPer = &(xprt->perigeeParameters()); + const Trk::Perigee* mPer = &(xprt->perigeeParameters()); Amg::Transform3D *trnsf = new Amg::Transform3D(); (*trnsf).setIdentity(); CylinderSurface surfacePntOnTrk( trnsf, xprt->radiusOfFirstHit(), 20000.); ParticleHypothesis prtType = pion; const TrackParameters *hitOnTrk = - m_extrapolator->extrapolate( *m_mPer, surfacePntOnTrk, alongMomentum, true, prtType, removeNoise); + m_extrapolator->extrapolate( *mPer, surfacePntOnTrk, alongMomentum, true, prtType, removeNoise); //std::cout<<" Radius="<<xprt->radiusOfFirstHit()<<" extrap="<<hitOnTrk<<'\n'; - if(hitOnTrk==0)hitOnTrk=m_extrapolator->extrapolateDirectly( *m_mPer, surfacePntOnTrk, alongMomentum, true, prtType); + if(hitOnTrk==0)hitOnTrk=m_extrapolator->extrapolateDirectly( *mPer, surfacePntOnTrk, alongMomentum, true, prtType); if(hitOnTrk==0)return 0; //convert result to Perigee diff --git a/Tracking/TrkVertexFitter/TrkVKalVrtFitter/src/VKalGetImpact.cxx b/Tracking/TrkVertexFitter/TrkVKalVrtFitter/src/VKalGetImpact.cxx index 3925e2489f46f66f655a1f6725aaef53ecffb6d9..2cf744a5c6dfb5108620e300863c12e1300fee09 100755 --- a/Tracking/TrkVertexFitter/TrkVKalVrtFitter/src/VKalGetImpact.cxx +++ b/Tracking/TrkVertexFitter/TrkVKalVrtFitter/src/VKalGetImpact.cxx @@ -40,7 +40,7 @@ namespace Trk{ long int vkCharge=Charge; - if(!isFieldInitialized)setInitializedField(); //to allow callback for init + if(!m_isFieldInitialized)setInitializedField(); //to allow callback for init Trk::myMagFld.setMagHandler(m_fitField); // needed for reenterability if(m_PropagatorType <=1 ){ // needed for reenterability Trk::myPropagator.setTypeProp(m_PropagatorType); // needed for reenterability @@ -100,7 +100,7 @@ namespace Trk{ long int vkCharge=Charge; - if(!isFieldInitialized)setInitializedField(); //to allow callback for init + if(!m_isFieldInitialized)setInitializedField(); //to allow callback for init Trk::myMagFld.setMagHandler(m_fitField); // needed for reenterability if(m_PropagatorType <=1 ){ // needed for reenterability Trk::myPropagator.setTypeProp(m_PropagatorType); // needed for reenterability @@ -157,7 +157,7 @@ namespace Trk{ long int vkCharge=Charge; - if(!isFieldInitialized)setInitializedField(); //to allow callback for init + if(!m_isFieldInitialized)setInitializedField(); //to allow callback for init Trk::myMagFld.setMagHandler(m_fitField); // needed for reenterability if(m_PropagatorType <=1 ){ // needed for reenterability Trk::myPropagator.setTypeProp(m_PropagatorType); // needed for reenterability diff --git a/Tracking/TrkVertexFitter/TrkVKalVrtFitter/src/VKalMagFld.cxx b/Tracking/TrkVertexFitter/TrkVKalVrtFitter/src/VKalMagFld.cxx index 0083698b4891e74223d69fea9f6fe6625f001302..de224d1e353c3cfd51947becff00048f7fe31f6f 100755 --- a/Tracking/TrkVertexFitter/TrkVKalVrtFitter/src/VKalMagFld.cxx +++ b/Tracking/TrkVertexFitter/TrkVKalVrtFitter/src/VKalMagFld.cxx @@ -42,7 +42,7 @@ namespace Trk{ //&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&& // ATLAS magnetic field access - VKalAtlasMagFld::VKalAtlasMagFld(): mm(1.) { + VKalAtlasMagFld::VKalAtlasMagFld(): m_mm(1.) { m_VKalAthenaField=0; m_FIXED_ATLAS_FIELD=1.997; m_magFrameX=0.; @@ -75,14 +75,14 @@ namespace Trk{ double &bx, double &by, double &bz) { double fieldXYZ[3]; double BField[3]; - fieldXYZ[0]= (x +m_magFrameX) *mm; - fieldXYZ[1]= (y +m_magFrameY) *mm; - fieldXYZ[2]= (z +m_magFrameZ) *mm; + fieldXYZ[0]= (x +m_magFrameX) *m_mm; + fieldXYZ[1]= (y +m_magFrameY) *m_mm; + fieldXYZ[2]= (z +m_magFrameZ) *m_mm; if( m_VKalAthenaField ) { double Shift= (m_saveXpos-fieldXYZ[0])*(m_saveXpos-fieldXYZ[0]) +(m_saveYpos-fieldXYZ[1])*(m_saveYpos-fieldXYZ[1]) +(m_saveZpos-fieldXYZ[2])*(m_saveZpos-fieldXYZ[2]); - if(Shift < -1.*1.*mm*mm){ //17.03.2010 VK no caching - mag.field is steplike + if(Shift < -1.*1.*m_mm*m_mm){ //17.03.2010 VK no caching - mag.field is steplike bx=m_saveBX; by=m_saveBY; bz=m_saveBZ; @@ -117,7 +117,7 @@ namespace Trk{ //m_fitField->getMagFld(0.,0.,0.,Bx,By,Bz); //m_fitField->setAtlasMag(Bz); if(m_PropagatorType == 0) m_PropagatorType = 1; // set up Runge-Kutta propagator from Core - isFieldInitialized = true; // to signal end of mag.field init procedure + m_isFieldInitialized = true; // to signal end of mag.field init procedure } @@ -126,6 +126,6 @@ namespace Trk{ m_fitField->setAtlasMag( Field ); if(m_PropagatorType == 1) m_PropagatorType = 0; // set up constant field propagator if Runge-Kutta was // used before. Otherwise use what is set. - isFieldInitialized = true; // to signal end of mag.field init procedure + m_isFieldInitialized = true; // to signal end of mag.field init procedure } } diff --git a/Tracking/TrkVertexFitter/TrkVKalVrtFitter/src/VKalTransform.cxx b/Tracking/TrkVertexFitter/TrkVKalVrtFitter/src/VKalTransform.cxx index 7d5ef992a27a830fbd030328fed208e4d01c3475..e4514b75dea5f0d90b7129ab8722fe1f5ef38f81 100755 --- a/Tracking/TrkVertexFitter/TrkVKalVrtFitter/src/VKalTransform.cxx +++ b/Tracking/TrkVertexFitter/TrkVKalVrtFitter/src/VKalTransform.cxx @@ -29,11 +29,11 @@ namespace Trk{ //----- Check perigee covarince matrix for safety double DET=AmgMtx->determinant(); if( DET!=DET ) { - if(msgLvl(MSG::DEBUG))msg(MSG::DEBUG)<<" NaN in Perigee covariance is detected! Stop fit."<<endreq; + if(msgLvl(MSG::DEBUG))msg(MSG::DEBUG)<<" NaN in Perigee covariance is detected! Stop fit."<<endmsg; return false; } if( fabs(DET) < 1000.*std::numeric_limits<double>::min()) { - if(msgLvl(MSG::DEBUG))msg(MSG::DEBUG)<<"Zero Perigee covariance DET is detected! Stop fit."<<endreq; + if(msgLvl(MSG::DEBUG))msg(MSG::DEBUG)<<"Zero Perigee covariance DET is detected! Stop fit."<<endmsg; return false; } //std::cout.setf(std::ios::scientific); std::cout<<"VKMINNUMB="<<std::numeric_limits<double>::min()<<", "<<DET<<'\n'; @@ -56,12 +56,12 @@ namespace Trk{ return true; } - void TrkVKalVrtFitter::VKalTransform(double m_BMAG_FIXED, + void TrkVKalVrtFitter::VKalTransform(double BMAG_FIXED, double A0V,double ZV,double PhiV,double ThetaV,double PInv,double CovTrk[15], long int & Charge, double VTrkPar[5], double VTrkCov[15]) { int i,j,ii,jj; - double CnvCst=m_CNVMAG*m_BMAG_FIXED; + double CnvCst=m_CNVMAG*BMAG_FIXED; double sinT = sin(ThetaV); double cosT = cos(ThetaV); diff --git a/Tracking/TrkVertexFitter/TrkVKalVrtFitter/src/VKalVrtFitFastSvc.cxx b/Tracking/TrkVertexFitter/TrkVKalVrtFitter/src/VKalVrtFitFastSvc.cxx index 160099e1a00be603369630c5a442dffae27de3ef..4dc2330795aad9c8e290dd5a5a0d9a4325197dea 100755 --- a/Tracking/TrkVertexFitter/TrkVKalVrtFitter/src/VKalVrtFitFastSvc.cxx +++ b/Tracking/TrkVertexFitter/TrkVKalVrtFitter/src/VKalVrtFitFastSvc.cxx @@ -35,7 +35,7 @@ namespace Trk{ // //--- Magnetic field // - if(!isFieldInitialized)setInitializedField(); //to allow callback for init + if(!m_isFieldInitialized)setInitializedField(); //to allow callback for init if(m_useMagFieldRotation) return StatusCode::FAILURE; if(m_PropagatorType <=1 ){ Trk::myPropagator.setTypeProp(m_PropagatorType); // needed for reenterability }else{ Trk::myPropagator.setPropagator(m_fitPropagator);} // needed for reenterability @@ -45,9 +45,9 @@ namespace Trk{ long int ntrk=0; StatusCode sc = CvtTrkTrack(InpTrk,ntrk); if(sc.isFailure() || ntrk<1 ) return StatusCode::FAILURE; - double fx,fy,m_BMAG_CUR; - m_fitField->getMagFld(0.,0.,0.,fx,fy,m_BMAG_CUR); - if(fabs(m_BMAG_CUR) < 0.1) m_BMAG_CUR=0.1; + double fx,fy,BMAG_CUR; + m_fitField->getMagFld(0.,0.,0.,fx,fy,BMAG_CUR); + if(fabs(BMAG_CUR) < 0.1) BMAG_CUR=0.1; // //------ Variables and arrays needed for fitting kernel // @@ -59,13 +59,13 @@ namespace Trk{ // double xyz0[3]={ -m_refFrameX, -m_refFrameY, -m_refFrameZ}; if(ntrk==2){ - //Trk::vkvfast_(&m_apar[0][0],&m_apar[1][0],&m_BMAG_CUR,out); - Trk::vkvFastV(&m_apar[0][0],&m_apar[1][0], xyz0, m_BMAG_CUR, out); + //Trk::vkvfast_(&m_apar[0][0],&m_apar[1][0],&BMAG_CUR,out); + Trk::vkvFastV(&m_apar[0][0],&m_apar[1][0], xyz0, BMAG_CUR, out); } else { for( i=0; i<ntrk-1; i++){ for( j=i+1; j<ntrk; j++){ - //Trk::vkvfast_(&m_apar[i][0],&m_apar[j][0],&m_BMAG_CUR,out); - Trk::vkvFastV(&m_apar[i][0],&m_apar[j][0], xyz0, m_BMAG_CUR, out); + //Trk::vkvfast_(&m_apar[i][0],&m_apar[j][0],&BMAG_CUR,out); + Trk::vkvFastV(&m_apar[i][0],&m_apar[j][0], xyz0, BMAG_CUR, out); xx.push_back(out[0]); yy.push_back(out[1]); zz.push_back(out[2]); @@ -102,7 +102,7 @@ namespace Trk{ // //--- Magnetic field // - if(!isFieldInitialized)setInitializedField(); //to allow callback for init + if(!m_isFieldInitialized)setInitializedField(); //to allow callback for init if(m_useMagFieldRotation) return StatusCode::FAILURE; if(m_PropagatorType <=1 ){ Trk::myPropagator.setTypeProp(m_PropagatorType); // needed for reenterability }else{ Trk::myPropagator.setPropagator(m_fitPropagator); } // needed for reenterability @@ -112,9 +112,9 @@ namespace Trk{ long int ntrk=0; StatusCode sc = CvtTrackParticle(InpTrk,ntrk); if(sc.isFailure() || ntrk<1 ) return StatusCode::FAILURE; - double fx,fy,m_BMAG_CUR; - m_fitField->getMagFld(0.,0.,0.,fx,fy,m_BMAG_CUR); - if(fabs(m_BMAG_CUR) < 0.1) m_BMAG_CUR=0.1; + double fx,fy,BMAG_CUR; + m_fitField->getMagFld(0.,0.,0.,fx,fy,BMAG_CUR); + if(fabs(BMAG_CUR) < 0.1) BMAG_CUR=0.1; // //------ Variables and arrays needed for fitting kernel // @@ -126,13 +126,13 @@ namespace Trk{ // double xyz0[3]={ -m_refFrameX, -m_refFrameY, -m_refFrameZ}; if(ntrk==2){ - //Trk::vkvfast_(&m_apar[0][0],&m_apar[1][0],&m_BMAG_CUR,out); - Trk::vkvFastV(&m_apar[0][0],&m_apar[1][0], xyz0, m_BMAG_CUR, out); + //Trk::vkvfast_(&m_apar[0][0],&m_apar[1][0],&BMAG_CUR,out); + Trk::vkvFastV(&m_apar[0][0],&m_apar[1][0], xyz0, BMAG_CUR, out); } else { for( i=0; i<ntrk-1; i++){ for( j=i+1; j<ntrk; j++){ - //Trk::vkvfast_(&m_apar[i][0],&m_apar[j][0],&m_BMAG_CUR,out); - Trk::vkvFastV(&m_apar[i][0],&m_apar[j][0], xyz0, m_BMAG_CUR, out); + //Trk::vkvfast_(&m_apar[i][0],&m_apar[j][0],&BMAG_CUR,out); + Trk::vkvFastV(&m_apar[i][0],&m_apar[j][0], xyz0, BMAG_CUR, out); xx.push_back(out[0]); yy.push_back(out[1]); zz.push_back(out[2]); @@ -169,7 +169,7 @@ namespace Trk{ // //--- Magnetic field // - if(!isFieldInitialized)setInitializedField(); //to allow callback for init + if(!m_isFieldInitialized)setInitializedField(); //to allow callback for init if(m_useMagFieldRotation) return StatusCode::FAILURE; if(m_PropagatorType <=1 ){ Trk::myPropagator.setTypeProp(m_PropagatorType); // needed for reenterability }else{ Trk::myPropagator.setPropagator(m_fitPropagator); } // needed for reenterability @@ -179,9 +179,9 @@ namespace Trk{ long int ntrk=0; StatusCode sc = CvtTrackParticle(InpTrk,ntrk); if(sc.isFailure() || ntrk<1 ) return StatusCode::FAILURE; - double fx,fy,m_BMAG_CUR; - m_fitField->getMagFld(0.,0.,0.,fx,fy,m_BMAG_CUR); - if(fabs(m_BMAG_CUR) < 0.1) m_BMAG_CUR=0.1; + double fx,fy,BMAG_CUR; + m_fitField->getMagFld(0.,0.,0.,fx,fy,BMAG_CUR); + if(fabs(BMAG_CUR) < 0.1) BMAG_CUR=0.1; // //------ Variables and arrays needed for fitting kernel // @@ -193,13 +193,13 @@ namespace Trk{ // double xyz0[3]={ -m_refFrameX, -m_refFrameY, -m_refFrameZ}; if(ntrk==2){ - //Trk::vkvfast_(&m_apar[0][0],&m_apar[1][0],&m_BMAG_CUR,out); - Trk::vkvFastV(&m_apar[0][0],&m_apar[1][0], xyz0, m_BMAG_CUR, out); + //Trk::vkvfast_(&m_apar[0][0],&m_apar[1][0],&BMAG_CUR,out); + Trk::vkvFastV(&m_apar[0][0],&m_apar[1][0], xyz0, BMAG_CUR, out); } else { for( i=0; i<ntrk-1; i++){ for( j=i+1; j<ntrk; j++){ - //Trk::vkvfast_(&m_apar[i][0],&m_apar[j][0],&m_BMAG_CUR,out); - Trk::vkvFastV(&m_apar[i][0],&m_apar[j][0], xyz0, m_BMAG_CUR, out); + //Trk::vkvfast_(&m_apar[i][0],&m_apar[j][0],&BMAG_CUR,out); + Trk::vkvFastV(&m_apar[i][0],&m_apar[j][0], xyz0, BMAG_CUR, out); xx.push_back(out[0]); yy.push_back(out[1]); zz.push_back(out[2]); @@ -236,7 +236,7 @@ namespace Trk{ // //--- Magnetic field // - if(!isFieldInitialized)setInitializedField(); //to allow callback for init + if(!m_isFieldInitialized)setInitializedField(); //to allow callback for init if(m_PropagatorType <=1 ){ Trk::myPropagator.setTypeProp(m_PropagatorType); // needed for reenterability }else{ Trk::myPropagator.setPropagator(m_fitPropagator); } // needed for reenterability // @@ -245,9 +245,9 @@ namespace Trk{ long int ntrk=0; StatusCode sc = CvtTrackParameters(InpTrk,ntrk); if(sc.isFailure() || ntrk<1 ) return StatusCode::FAILURE; - double fx,fy,m_BMAG_CUR; - m_fitField->getMagFld(0.,0.,0.,fx,fy,m_BMAG_CUR); - if(fabs(m_BMAG_CUR) < 0.1) m_BMAG_CUR=0.1; + double fx,fy,BMAG_CUR; + m_fitField->getMagFld(0.,0.,0.,fx,fy,BMAG_CUR); + if(fabs(BMAG_CUR) < 0.1) BMAG_CUR=0.1; // //------ Variables and arrays needed for fitting kernel // @@ -259,13 +259,13 @@ namespace Trk{ // double xyz0[3]={ -m_refFrameX, -m_refFrameY, -m_refFrameZ}; if(ntrk==2){ - //Trk::vkvfast_(&m_apar[0][0],&m_apar[1][0],&m_BMAG_CUR,out); - Trk::vkvFastV(&m_apar[0][0],&m_apar[1][0], xyz0, m_BMAG_CUR, out); + //Trk::vkvfast_(&m_apar[0][0],&m_apar[1][0],&BMAG_CUR,out); + Trk::vkvFastV(&m_apar[0][0],&m_apar[1][0], xyz0, BMAG_CUR, out); } else { for( i=0; i<ntrk-1; i++){ for( j=i+1; j<ntrk; j++){ - //Trk::vkvfast_(&m_apar[i][0],&m_apar[j][0],&m_BMAG_CUR,out); - Trk::vkvFastV(&m_apar[i][0],&m_apar[j][0], xyz0, m_BMAG_CUR, out); + //Trk::vkvfast_(&m_apar[i][0],&m_apar[j][0],&BMAG_CUR,out); + Trk::vkvFastV(&m_apar[i][0],&m_apar[j][0], xyz0, BMAG_CUR, out); xx.push_back(out[0]); yy.push_back(out[1]); zz.push_back(out[2]); diff --git a/Tracking/TrkVertexFitter/TrkVKalVrtFitter/src/VKalVrtFitSvc.cxx b/Tracking/TrkVertexFitter/TrkVKalVrtFitter/src/VKalVrtFitSvc.cxx index a1902ce1850d71cf25ae7887f83f3fe4437d0290..222adb34961eb3ba5674dc307819880027477f65 100755 --- a/Tracking/TrkVertexFitter/TrkVKalVrtFitter/src/VKalVrtFitSvc.cxx +++ b/Tracking/TrkVertexFitter/TrkVKalVrtFitter/src/VKalVrtFitSvc.cxx @@ -56,7 +56,7 @@ StatusCode TrkVKalVrtFitter::VKalVrtFit(const std::vector<const Track*>& InpTrk, // //------ extract information about selected tracks // - if(!isFieldInitialized)setInitializedField(); //to allow callback for init + if(!m_isFieldInitialized)setInitializedField(); //to allow callback for init Trk::myMagFld.setMagHandler(m_fitField); // needed for reenterability if(m_PropagatorType <=1 ){ // needed for reenterability Trk::myPropagator.setTypeProp(m_PropagatorType); // needed for reenterability @@ -86,7 +86,7 @@ StatusCode TrkVKalVrtFitter::VKalVrtFit(const std::vector<const xAOD::TrackParti std::vector< std::vector<double> >& TrkAtVrt, double& Chi2 ) { - if(!isFieldInitialized)setInitializedField(); //to allow callback for init + if(!m_isFieldInitialized)setInitializedField(); //to allow callback for init Trk::myMagFld.setMagHandler(m_fitField); // needed for reenterability if(m_PropagatorType <=1 ){ // needed for reenterability Trk::myPropagator.setTypeProp(m_PropagatorType); // needed for reenterability @@ -105,7 +105,7 @@ StatusCode TrkVKalVrtFitter::VKalVrtFit(const std::vector<const xAOD::TrackParti if(InpTrkC.size()){ if( m_InDetExtrapolator == 0 && m_PropagatorType != 3 ){ if(msgLvl(MSG::WARNING))msg()<< "No InDet extrapolator given."<< - "Can't use FirstMeasuredPoint with xAOD::TrackParticle!!!" << endreq; + "Can't use FirstMeasuredPoint with xAOD::TrackParticle!!!" << endmsg; return StatusCode::FAILURE; } std::vector<const xAOD::TrackParticle*>::const_iterator i_ntrk; @@ -122,7 +122,7 @@ StatusCode TrkVKalVrtFitter::VKalVrtFit(const std::vector<const xAOD::TrackParti if( (*i_ntrk)->radiusOfFirstHit() < closestHitR ) closestHitR=(*i_ntrk)->radiusOfFirstHit(); if(tmpInputC[tmpInputC.size()-1]==0){ //Extrapolation failure if(msgLvl(MSG::WARNING))msg()<< "InDetExtrapolator can't etrapolate xAOD::TrackParticle Perigee "<< - "to FirstMeasuredPoint radius! Stop vertex fit!" << endreq; + "to FirstMeasuredPoint radius! Stop vertex fit!" << endmsg; for(unsigned int i=0; i<tmpInputC.size()-1; i++) delete tmpInputC[i]; return StatusCode::FAILURE; } @@ -156,7 +156,7 @@ StatusCode TrkVKalVrtFitter::VKalVrtFit(const std::vector<const xAOD::TrackParti } //------------ if(Vertex.perp()>cnstRefPoint.perp() && cnstRefPoint.perp()>0.){ - if(msgLvl(MSG::DEBUG))msg(MSG::DEBUG)<<"Vertex behind first measured point is detected. Constraint is applied!"<<endreq; + if(msgLvl(MSG::DEBUG))msg(MSG::DEBUG)<<"Vertex behind first measured point is detected. Constraint is applied!"<<endmsg; m_planeCnstNDOF = 1; // Additional NDOF due to plane constraint double pp[3]={Momentum.Px()/Momentum.Rho(),Momentum.Py()/Momentum.Rho(),Momentum.Pz()/Momentum.Rho()}; double D= pp[0]*(cnstRefPoint.x()-m_refFrameX) @@ -195,7 +195,7 @@ StatusCode TrkVKalVrtFitter::VKalVrtFit(const std::vector<const TrackParticleBas std::vector< std::vector<double> >& TrkAtVrt, double& Chi2 ) { - if(!isFieldInitialized)setInitializedField(); //to allow callback for init + if(!m_isFieldInitialized)setInitializedField(); //to allow callback for init Trk::myMagFld.setMagHandler(m_fitField); // needed for reenterability if(m_PropagatorType <=1 ){ // needed for reenterability Trk::myPropagator.setTypeProp(m_PropagatorType); // needed for reenterability @@ -236,7 +236,7 @@ StatusCode TrkVKalVrtFitter::VKalVrtFit(const std::vector<const TrackParameters* std::vector< std::vector<double> >& TrkAtVrt, double& Chi2 ) { - if(!isFieldInitialized)setInitializedField(); //to allow callback for init + if(!m_isFieldInitialized)setInitializedField(); //to allow callback for init Trk::myMagFld.setMagHandler(m_fitField); // needed for reenterability if(m_PropagatorType <=1 ){ // needed for reenterability Trk::myPropagator.setTypeProp(m_PropagatorType); // needed for reenterability @@ -271,7 +271,7 @@ StatusCode TrkVKalVrtFitter::VKalVrtFit(const std::vector<const TrackParameters* m_planeCnstNDOF = 0; if(m_globalFirstHit && m_firstMeasuredPointLimit && !ierr){ if(Vertex.perp()>m_globalFirstHit->position().perp()){ - if(msgLvl(MSG::DEBUG))msg(MSG::DEBUG)<<"Vertex behind first measured point is detected. Constraint is applied!"<<endreq; + if(msgLvl(MSG::DEBUG))msg(MSG::DEBUG)<<"Vertex behind first measured point is detected. Constraint is applied!"<<endmsg; m_planeCnstNDOF = 1; // Additional NDOF due to plane constraint double pp[3]={Momentum.Px()/Momentum.Rho(),Momentum.Py()/Momentum.Rho(),Momentum.Pz()/Momentum.Rho()}; double D= pp[0]*(m_globalFirstHit->position().x()-m_refFrameX) @@ -344,7 +344,8 @@ long int TrkVKalVrtFitter::VKalVrtFit3( long int ntrk, //------ Fit itself // m_FitStatus=0; - if(m_ErrMtx)delete[] m_ErrMtx; m_ErrMtx=0; //delete previous array is exist + if(m_ErrMtx)delete[] m_ErrMtx; //delete previous array is exist + m_ErrMtx=0; if(m_ApproximateVertex.size()==3 && fabs(m_ApproximateVertex[2])<m_IDsizeZ && sqrt(m_ApproximateVertex[0]*m_ApproximateVertex[0]+m_ApproximateVertex[1]*m_ApproximateVertex[1])<m_IDsizeR) { @@ -365,7 +366,7 @@ long int TrkVKalVrtFitter::VKalVrtFit3( long int ntrk, m_ich, xyz0, &m_par0[0][0], &m_apar[0][0], &m_awgt[0][0], xyzfit, &m_parfs[0][0], ptot, covf, &chi2f, m_chi2tr); - if(msgLvl(MSG::DEBUG))msg(MSG::DEBUG) << "VKalVrt fit status="<<ierr<<" Chi2="<<chi2f<<endreq; + if(msgLvl(MSG::DEBUG))msg(MSG::DEBUG) << "VKalVrt fit status="<<ierr<<" Chi2="<<chi2f<<endmsg; Chi2 = 100000000.; if(ierr){ @@ -406,16 +407,16 @@ long int TrkVKalVrtFitter::VKalVrtFit3( long int ntrk, // // ------ Magnetic field in fitted vertex // - double fx,fy,fz,m_BMAG_CUR; + double fx,fy,fz,BMAG_CUR; m_fitField->getMagFld(xyzfit[0] ,xyzfit[1] ,xyzfit[2] ,fx,fy,fz); - m_BMAG_CUR=fz; - if(m_useMagFieldRotation) m_BMAG_CUR=sqrt(fx*fx+fy*fy+fz*fz); - if(fabs(m_BMAG_CUR) < 0.01) m_BMAG_CUR=0.01; // Safety + BMAG_CUR=fz; + if(m_useMagFieldRotation) BMAG_CUR=sqrt(fx*fx+fy*fy+fz*fz); + if(fabs(BMAG_CUR) < 0.01) BMAG_CUR=0.01; // Safety double Px,Py,Pz,Ee,Pt; double pmom[4]; pmom[0]=pmom[1]=pmom[2]=pmom[3]=0; for ( i=0; i<ntrk; i++){ - Pt = m_CNVMAG*m_BMAG_CUR/fabs( m_parfs[i][2]); + Pt = m_CNVMAG*BMAG_CUR/fabs( m_parfs[i][2]); Px = Pt*cos(m_parfs[i][1]); Py = Pt*sin(m_parfs[i][1]); Pz = Pt/tan(m_parfs[i][0]); @@ -425,7 +426,7 @@ long int TrkVKalVrtFitter::VKalVrtFit3( long int ntrk, double npp=sqrt(Px*Px+Py*Py+Pz*Pz); m_parfs[i][0]= acos( Pz/npp); m_parfs[i][1]=atan2( Py, Px); - m_parfs[i][2]=m_CNVMAG*m_BMAG_CUR/npt; + m_parfs[i][2]=m_CNVMAG*BMAG_CUR/npt; } Ee = sqrt(Px*Px+Py*Py+Pz*Pz+m_wm[i]*m_wm[i]); pmom[0] += Px; pmom[1] += Py; pmom[2] += Pz; pmom[3] += Ee; @@ -443,7 +444,7 @@ long int TrkVKalVrtFitter::VKalVrtFit3( long int ntrk, // std::cout<<" Pmom="<<pmom[0]<<", "<<pmom[1]<<", "<<pmom[2]<<", "<<pmom[3]<<'\n'; // std::cout<<" Ptot="<<ptot[0]<<", "<<ptot[1]<<", "<<ptot[2]<<", "<<ptot[3]<<'\n'; // std::cout<<" Vertex="<<Vertex.x()<<", "<<Vertex.y()<<", "<<Vertex.z() -// <<" LocalMag="<<m_BMAG_CUR<<" Chi2="<<Chi2<<" Mass="<<Momentum.m()<<'\n'; +// <<" LocalMag="<<BMAG_CUR<<" Chi2="<<Chi2<<" Mass="<<Momentum.m()<<'\n'; Chi2PerTrk.clear(); Chi2PerTrk.reserve(ntrk); @@ -452,7 +453,7 @@ long int TrkVKalVrtFitter::VKalVrtFit3( long int ntrk, TrkAtVrt.clear(); TrkAtVrt.reserve(ntrk); for(i=0; i<ntrk; i++){ std::vector<double> TrkPar(3); - VKalToTrkTrack(m_BMAG_CUR,(double)m_parfs[i][0],(double)m_parfs[i][1],(double) m_parfs[i][2], + VKalToTrkTrack(BMAG_CUR,(double)m_parfs[i][0],(double)m_parfs[i][1],(double) m_parfs[i][2], TrkPar[0],TrkPar[1],TrkPar[2]); TrkPar[2] = -TrkPar[2]; // Change of sign needed TrkAtVrt.push_back( TrkPar ); @@ -544,9 +545,9 @@ long int TrkVKalVrtFitter::VKalVrtFit3( long int ntrk, // // ------ Magnetic field access // - double fx,fy,m_BMAG_CUR; - m_fitField->getMagFld(m_save_xyzfit[0],m_save_xyzfit[1],m_save_xyzfit[2],fx,fy,m_BMAG_CUR); - if(fabs(m_BMAG_CUR) < 0.01) m_BMAG_CUR=0.01; // Safety + double fx,fy,BMAG_CUR; + m_fitField->getMagFld(m_save_xyzfit[0],m_save_xyzfit[1],m_save_xyzfit[2],fx,fy,BMAG_CUR); + if(fabs(BMAG_CUR) < 0.01) BMAG_CUR=0.01; // Safety // // ------- Base code // @@ -597,7 +598,7 @@ long int TrkVKalVrtFitter::VKalVrtFit3( long int ntrk, double Theta=m_parfs[iTrk-1][0]; double Phi =m_parfs[iTrk-1][1]; double invR =m_parfs[iTrk-1][2]; - double pt=(m_CNVMAG*m_BMAG_CUR)/fabs(invR); + double pt=(m_CNVMAG*BMAG_CUR)/fabs(invR); double px=pt*cos(Phi); double py=pt*sin(Phi); double pz=pt/tan(Theta); @@ -671,14 +672,14 @@ long int TrkVKalVrtFitter::VKalVrtFit3( long int ntrk, { if(!m_FitStatus) return StatusCode::FAILURE; if(NTrk<1) return StatusCode::FAILURE; - if(NTrk>m_NTrMaxVFit) return StatusCode::FAILURE; + if(NTrk>NTrMaxVFit) return StatusCode::FAILURE; if(!m_ErrMtx) return StatusCode::FAILURE; //Now error matrix is taken from CORE in VKalVrtFit3. // // ------ Magnetic field access // - double fx,fy,m_BMAG_CUR; - m_fitField->getMagFld(m_save_xyzfit[0],m_save_xyzfit[1],m_save_xyzfit[2],fx,fy,m_BMAG_CUR); - if(fabs(m_BMAG_CUR) < 0.01) m_BMAG_CUR=0.01; // Safety + double fx,fy,BMAG_CUR; + m_fitField->getMagFld(m_save_xyzfit[0],m_save_xyzfit[1],m_save_xyzfit[2],fx,fy,BMAG_CUR); + if(fabs(BMAG_CUR) < 0.01) BMAG_CUR=0.01; // Safety // // ------ Base code // @@ -736,10 +737,10 @@ long int TrkVKalVrtFitter::VKalVrtFit3( long int ntrk, if( useMom == 0 ){ Deriv[iSt ][iSt+1] = 1; // Phi <-> Theta Deriv[iSt+1][iSt ] = 1; // Phi <-> Theta - Deriv[iSt+2][iSt ] = -(cos(Theta)/(m_CNVMAG*m_BMAG_CUR)) * invR ; // d1/p / dTheta - Deriv[iSt+2][iSt+2] = -(sin(Theta)/(m_CNVMAG*m_BMAG_CUR)) ; // d1/p / d1/R + Deriv[iSt+2][iSt ] = -(cos(Theta)/(m_CNVMAG*BMAG_CUR)) * invR ; // d1/p / dTheta + Deriv[iSt+2][iSt+2] = -(sin(Theta)/(m_CNVMAG*BMAG_CUR)) ; // d1/p / d1/R }else{ - double pt=(m_CNVMAG*m_BMAG_CUR)/fabs(invR); + double pt=(m_CNVMAG*BMAG_CUR)/fabs(invR); double px=pt*cos(Phi); double py=pt*sin(Phi); double pz=pt/tan(Theta); @@ -778,7 +779,8 @@ long int TrkVKalVrtFitter::VKalVrtFit3( long int ntrk, // CovVrtTrk[9] <<", "<<CovVrtTrk[14]<<", "<<CovVrtTrk[20]<<", "<< // CovVrtTrk[27]<<", "<<CovVrtTrk[35]<<", "<<CovVrtTrk[44]<<'\n'; - for(i=0; i<DIM; i++) delete[]Deriv[i]; delete[]Deriv; + for(i=0; i<DIM; i++) delete[]Deriv[i]; + delete[]Deriv; delete[]CovMtxOld; //m_timingProfile->chronoStop("Trk_CovMatrix"); return StatusCode::SUCCESS; @@ -794,8 +796,8 @@ long int TrkVKalVrtFitter::VKalVrtFit3( long int ntrk, if(!m_FitStatus) return StatusCode::FAILURE; if((int) ListOfTracks.size() != m_FitStatus) return StatusCode::FAILURE; - double Deriv[ 3*m_NTrMaxVFit+3 ] = {0.}; - long int Tist[m_NTrMaxVFit+1] = {0}; + double Deriv[ 3*NTrMaxVFit+3 ] = {0.}; + long int Tist[NTrMaxVFit+1] = {0}; for (int i=0; i<(int)ListOfTracks.size();i++){ Tist[i]=0; diff --git a/Trigger/TrigT1/TrigT1CaloUtils/src/components/TrigT1CaloUtils_load.cxx b/Trigger/TrigT1/TrigT1CaloUtils/src/components/TrigT1CaloUtils_load.cxx old mode 100644 new mode 100755