Parent Directory
|
Revision Log
|
Revision Graph
bug fix fot aant
#include <iostream> #include "GaudiKernel/MsgStream.h" #include "GaudiKernel/IDataProviderSvc.h" #include "GaudiKernel/AlgFactory.h" #include "GaudiKernel/PropertyMgr.h" #include "GaudiKernel/IIncidentSvc.h" #include "GaudiKernel/INTupleSvc.h" #include "GaudiKernel/SmartDataPtr.h" #include "TrigMoore/MooHLTAlgo.h" #include "TrigMoore/MooMakePhiSegmentSeeded.h" #include "TrigMoore/MooMakeCrudeRZSegmentsSeeded.h" #include "TrigMoore/MooRoI.h" #include "TrigMoore/MooMakePhiPatternSeeded.h" #include "TrigMoore/MooMakeRzPatternSeeded.h" #include "TrigMoore/TrigMooreHisto.h" #include "TrigMoore/TrigMooreAANTuple.h" #include "TrigT1Interfaces/TrigT1Interfaces_ClassDEF.h" #include "TrigSteeringEvent/TrigRoiDescriptor.h" #include "TrigT1Interfaces/RecMuonRoI.h" #include "RegionSelector/IRegSelSvc.h" #include "MuidEvent/MuidTrackContainer.h" #include "MuidEvent/Muid_ClassDEF.h" #include "MooEvent/MooTrackContainer.h" #include "MooEvent/MdtSegmentContainer.h" #include "TrkTrack/TrackCollection.h" #include "MuonDigitContainer/MdtDigitContainer.h" #include "MuonDigitContainer/MdtDigitCollection.h" #include "MuonDigitContainer/RpcDigitContainer.h" #include "MuonDigitContainer/RpcDigitCollection.h" #include "MuonDigitContainer/TgcDigitContainer.h" #include "MuonDigitContainer/TgcDigitCollection.h" #include "TrigMuonEvent/MuonFeature.h" #include "TrigMuonEvent/TrigMuonEFContainer.h" #include "TrigMuonEvent/TrigMuonEF.h" #include "TrigCosmicEvent/CosmicMuon.h" //#include "TrigCosmicEvent/CosmicMuonCollection.h" #include <sstream> // ---------------------------------------- MooHLTAlgo::MooHLTAlgo(const std::string& name, ISvcLocator* pSvcLocator) : FexAlgo(name, pSvcLocator), m_print_level(0), m_chronotest(false), m_seed(true), m_pat(false), m_pRegionSelector(0), m_roi_num(0), m_track_num(0), m_muidtrack_num(0), m_muidcbtrack_num(0), m_roi("noSeed"), m_moore(0),// To run reco spectrometer m_muid(0), // To add vertex constraint m_muidcomb(0), // To match with inner detector m_ntupleID("222"), m_max_roi(10), m_prefix("tm_"), m_TrigMooreAANTuple(new TrigMooreAANTuple), m_pTrigMooreNtuple("TrigMooreNtuple"), m_monitoring("TrigMooreHisto"), m_muidMatchMaker("MuidMatchMaker"), m_nev(0), m_testbeam(false), m_cosmic(false), m_doAANtuples(false), m_doNtuples(false), m_doHistos(false), m_doTimers(false), m_makeESD(false), m_makeAOD(false), m_AodForFexOff(true), m_seedFromLvl1(false), m_seedFromLvl2(false), m_deta(0), m_dphi(0), m_trigID(true), m_allMooreTracks(0), m_allMuidExtrTracks(0), m_allMuidCombTracks(0) { declareProperty("print_level", m_print_level); declareProperty("chrono_test", m_chronotest); declareProperty("seed", m_seed); declareProperty("pattern", m_pat); declareProperty("MooreReconstruction", m_moore); declareProperty("MuonIdentification", m_muid); declareProperty("MuidComb", m_muidcomb); declareProperty("NtupleID", m_ntupleID); declareProperty("maxNumerofRoi", m_max_roi); declareProperty("testbeam", m_testbeam); declareProperty("cosmic", m_cosmic); declareProperty("NTupleVariablePrefix", m_prefix); declareProperty("doAANtuples", m_doAANtuples ); declareProperty("doNtuples", m_doNtuples ); declareProperty("doHistos", m_doHistos ); declareProperty("doTimers", m_doTimers ); declareProperty("makeESD", m_makeESD ); declareProperty("makeAOD", m_makeAOD ); declareProperty("makeAODforRoI", m_AodForFexOff); declareProperty("seedFromLvl1", m_seedFromLvl1 ); declareProperty("seedFromLvl2", m_seedFromLvl2 ); declareProperty("deltaEtaRoI", m_deta); declareProperty("deltaPhiRoI", m_dphi); declareProperty("IDFromTrigger", m_trigID); declareProperty("TestString", m_testString=""); //***************new TrigGenericMonitoringTool definitions (20/06/07) *************** declareProperty("histoPathBase",m_histo_path_base="/EXPERT/"); declareMonitoredVariable("track_mult_moore", m_mooremult); declareMonitoredVariable("Chi2_moore", m_moorechi2); declareMonitoredVariable("Chi2prob_moore", m_moorechi2prob); declareMonitoredStdContainer("mdt_res", mdt_res); declareMonitoredStdContainer("csc_eta_res", csc_eta_res); declareMonitoredStdContainer("csc_phi_res", csc_phi_res); declareMonitoredStdContainer("rpc_eta_res", rpc_eta_res); declareMonitoredStdContainer("rpc_phi_res", rpc_phi_res); declareMonitoredStdContainer("tgc_eta_res", tgc_eta_res); declareMonitoredStdContainer("tgc_phi_res", tgc_phi_res); declareMonitoredVariable("pt_moore", pt_moore); declareMonitoredVariable("phi_moore", phi_moore); declareMonitoredVariable("eta_moore", eta_moore); declareMonitoredVariable("prechits_moore", m_prechits); declareMonitoredVariable ("phihits_moore", m_phihits); declareMonitoredVariable ("statlay_moore", m_statlay); declareMonitoredVariable ("charge_moore", m_charge); //***************new TrigGenericMonitoringTool definitions (20/07/07) *************** declareMonitoredVariable ("chi2_muidcb", m_muidcbchi2); declareMonitoredVariable ("chi2prob_muidcb", m_muidcbchi2pr); declareMonitoredVariable ("charge_muidcb", m_chargemuidcb); declareMonitoredVariable ("a0_muidcb", a0_muidcb); declareMonitoredVariable ("z0_muidcb", z0_muidcb); declareMonitoredVariable ("phi_muidcb", phi_muidcb); declareMonitoredVariable ("eta_muidcb", eta_muidcb); declareMonitoredVariable ("pt_muidcb", pt_muidcb); declareMonitoredVariable ("phicor_muidcb-RoI", phicor_cbroi); declareMonitoredVariable ("etacor_muidcb-RoI", etacor_cbroi); //***************new TrigGenericMonitoringTool definitions (26/07/07) *************** declareMonitoredVariable ("chi2_muidsa", m_muidsachi2); declareMonitoredVariable ("chi2prob_muidsa", m_muidsachi2pr); declareMonitoredVariable ("charge_muidsa", m_chargemuidsa); declareMonitoredVariable ("phi_muidsa", phi_muidsa); declareMonitoredVariable ("eta_muidsa", eta_muidsa); declareMonitoredVariable ("pt_muidsa", pt_muidsa); declareMonitoredVariable ("eloss_muidsa", m_muidloss); //*********************************************************************************** m_mooRoI = 0; } // ---------------------------------------- MooHLTAlgo::~MooHLTAlgo() { delete m_TrigMooreAANTuple; // delete m_mooRoI; } // ---------------------------------------- StatusCode MooHLTAlgo::beginRun() { FexAlgo::beginRun().ignore(); StatusCode status = StatusCode::SUCCESS; MsgStream log(messageService(), name()); log << MSG::DEBUG << "Executing MooHLTAlgo::beginRun()" << endreq; if (m_doAANtuples){ if (m_seedFromLvl1 || m_seedFromLvl2 || m_moore || m_muid || m_muidcomb) { m_TrigMooreAANTuple->SetNtuplePrefix(m_prefix); log << MSG::DEBUG << "ntuple variables prefix set to: " << m_prefix << endreq; if(m_TrigMooreAANTuple->cleanBlocks(m_seedFromLvl1,m_seedFromLvl2,m_moore,m_muid,m_muidcomb).isFailure()) log << MSG::WARNING << "cleanBlocks beginRun failed" << endreq; } } return status; } HLT::ErrorCode MooHLTAlgo::hltInitialize() { StatusCode status; MsgStream ini_log(messageService(), name()); msg() << MSG::DEBUG << "Initializing MooHLTAlgo with Steps " << "Moore : " << m_moore << endreq; msg() << MSG::DEBUG << "Muid SA " << m_muid << endreq; msg() << MSG::DEBUG << "Muid CB " << m_muidcomb << endreq; if(msgLvl() <= MSG::DEBUG){ msg() << MSG::DEBUG <<"package version = "<<PACKAGE_VERSION<<endreq; msg() << MSG::DEBUG <<"Properties are set as follows: "<<endreq; msg() << MSG::DEBUG <<"print_level "<<m_print_level<<endreq; msg() << MSG::DEBUG <<"chrono_test "<<m_chronotest<<endreq; msg() << MSG::DEBUG <<"seed "<<m_seed<<endreq; msg() << MSG::DEBUG <<"MooreReconstruction "<<m_moore<<endreq; msg() << MSG::DEBUG <<"MuonIdentification "<<m_muid<<endreq; msg() << MSG::DEBUG <<"MuidComb "<<m_muidcomb<<endreq; msg() << MSG::DEBUG <<"NtupleID "<<m_ntupleID<<endreq; msg() << MSG::DEBUG <<"maxNumerofRoi "<<m_max_roi<<endreq; msg() << MSG::DEBUG <<"testbeam "<<m_testbeam<<endreq; msg() << MSG::DEBUG <<"cosmic "<<m_cosmic<<endreq; msg() << MSG::DEBUG <<"NTupleVariablePrefix "<<m_prefix<<endreq; msg() << MSG::DEBUG <<"doAANtuples "<<m_doAANtuples <<endreq; msg() << MSG::DEBUG <<"doNtuples "<<m_doNtuples <<endreq; msg() << MSG::DEBUG <<"doHistos "<<m_doHistos <<endreq; msg() << MSG::DEBUG <<"doTimers "<<m_doTimers <<endreq; msg() << MSG::DEBUG <<"makeESD "<<m_makeESD <<endreq; msg() << MSG::DEBUG <<"makeAOD "<<m_makeAOD <<endreq; msg() << MSG::DEBUG <<"makeAODForROI "<<m_AodForFexOff <<endreq; msg() << MSG::DEBUG <<"seedFromLvl1 "<<m_seedFromLvl1 <<endreq; msg() << MSG::DEBUG <<"seedFromLvl2 "<<m_seedFromLvl2 <<endreq; msg() << MSG::DEBUG <<"deltaEtaRoI "<<m_deta<<endreq; msg() << MSG::DEBUG <<"deltaPhiRoI "<<m_dphi<<endreq; msg() << MSG::DEBUG <<"IDFromTrigger "<< m_trigID<<endreq; } // initializes chrono svc if (m_chronotest) chronosvc = chronoSvc(); // Locate the StoreGateSvc and initialize our local ptr status = service("StoreGateSvc", p_SGevent); if (!status.isSuccess() || 0 == p_SGevent){ msg() << MSG::ERROR << "MooHLTALGO::initialize() : Could not find StoreGateSvc" << endreq; return HLT::BAD_JOB_SETUP; } if(m_cosmic){ status = service("RegSelSvc", m_pRegionSelector); if(status.isFailure()) { msg() << MSG::FATAL << "Unable to retrieve RegionSelector Svc" << endreq; return HLT::BAD_JOB_SETUP; } msg() << MSG::DEBUG << "Initializing MooMakePhiPatternSeeded " << endreq; status = createSubAlgorithm("MooMakePhiPatternSeeded","MooMakePhiPatternSeededEF_CS" ,m_MooMakePhiPatternSeededAlg); if (status.isFailure()) msg() << MSG::ERROR << "Cannot create sub-Alg of type MooMakePhiPatternSeeded" << endreq; status = createSubAlgorithm("MooMakeRzPatternSeeded", "MooMakeRzPatternSeededEF_CS",m_MooMakeRzPatternSeededAlg); if (status.isFailure()) msg() << MSG::ERROR << "Cannot create sub-Alg of type MooMakeRzPatternSeeded" << endreq; } if(m_moore){ // Get the region selector tool: status = service("RegSelSvc", m_pRegionSelector); if(status.isFailure()) { msg() << MSG::FATAL << "Unable to retrieve RegionSelector Svc" << endreq; return HLT::BAD_JOB_SETUP; } // initialize the sub-algorithms if(m_seed) { if(m_pat){ msg() << MSG::DEBUG << "Initializing MooMakePhiPatternSeeded " << endreq; status = createSubAlgorithm("MooMakePhiPatternSeeded","MooMakePhiPatternSeededEF" ,m_MooMakePhiPatternSeededAlg); if (status.isFailure()) msg() << MSG::ERROR << "Cannot create sub-Alg of type MooMakePhiPatternSeeded" << endreq; status = createSubAlgorithm("MooMakeRzPatternSeeded", "MooMakeRzPatternSeededEF",m_MooMakeRzPatternSeededAlg); if (status.isFailure()) msg() << MSG::ERROR << "Cannot create sub-Alg of type MooMakeRzPatternSeeded" << endreq; }else{ msg() << MSG::DEBUG << "Initializing MooMakePhiSegmentsSeeded " << endreq; status = createSubAlgorithm("MooMakePhiSegmentSeeded", "MooMakePhiSegmentSeededEF", m_MooMakePhiSegmentSeededAlg); if (status.isFailure()) msg() << MSG::ERROR << "Cannot create sub-Alg of type MooMakePhiSegmentSeeded" << endreq; status = createSubAlgorithm("MooMakeCrudeRZSegmentsSeeded", "MooMakeCrudeRZSegmentsSeededEF", m_MooMakeCrudeRZSegmentsSeededAlg); if (status.isFailure()) msg() << MSG::ERROR << "Cannot create sub-Alg of type MooMakeCrudeRZSegmentsSeeded" << endreq; } }else{ if(m_pat){ msg() << MSG::DEBUG << "Initializing MooMakePhiSegments " << endreq; status = createSubAlgorithm("MooMakePhiPatterns", "MooMakePhiPatternsEF" ,m_MooMakePhiPatternsAlg); if (status.isFailure()) msg() << MSG::ERROR << "Cannot create sub-Alg of type MooMakePhiPatterns" << endreq; status = createSubAlgorithm("MooMakeRzPatterns", "MooMakeRzPatternsEF" ,m_MooMakeRzPatternsAlg); if (status.isFailure()) msg() << MSG::ERROR << "Cannot create sub-Alg of type MooMakeRzPatterns" << endreq; }else{ msg() << MSG::DEBUG << "Initializing MooMakePhiSegments " << endreq; status = createSubAlgorithm("MooMakePhiSegments", "MooMakePhiSegmentsEF", m_MooMakePhiSegmentsAlg); if (status.isFailure()) msg() << MSG::ERROR << "Cannot create sub-Alg of type MooMakePhiSegments" << endreq; status = createSubAlgorithm("MooMakeCrudeRZSegments", "MooMakeCrudeRZSegmentsEF", m_MooMakeCrudeRZSegmentsAlg); if (status.isFailure()) msg() << MSG::ERROR << "Cannot create sub-Alg of type MooMakeCrudeRZSegments" << endreq; } } if(m_pat){ status = createSubAlgorithm("MooCombinePatterns", "MooCombinePatternsEF", m_MooCombinePatternsAlg); if (status.isFailure()) msg() << MSG::ERROR << "Cannot create sub-Alg of type MooCombinedPatterns" << endreq; status = createSubAlgorithm("MooCalibratedSegmentMaker", "MooCalibratedSegmentMakerEF", m_MooCalibratedSegmentMaker); if (status.isFailure()) msg() << MSG::ERROR << "Cannot create sub-Alg of type MooCalibratedSegmentMaker" << endreq; status = createSubAlgorithm("MooRzSegmentCombinationMaker", "MooRzSegmentCombinationMakerEF", m_MooRzSegmentCombinationMaker); if (status.isFailure()) msg() << MSG::ERROR << "Cannot create sub-Alg of type MooCalibratedSegmentMaker" << endreq; status = createSubAlgorithm("PhiPatternToPhiSeg", "PhiPatternToPhiSegEF", m_PhiPatToPhiSeg); if (status.isFailure()) msg() << MSG::ERROR << "Cannot create sub-Alg of type PhiPatternToPhiSeg" << endreq; status = createSubAlgorithm("CscPatternToCrudeSeg", "CscPatternToCrudeSegEF" ,m_CscPatToCscSeg); if (status.isFailure()) msg() << MSG::ERROR << "Cannot create sub-Alg of type CscPatternToCrudeSeg" << endreq; status = createSubAlgorithm("MdtPatternToCrudeSeg", "MdtPatternToCrudeSegEF" ,m_MdtPatToMdtSeg); if (status.isFailure()) msg() << MSG::ERROR << "Cannot create sub-Alg of type MdtPatternToCrudeSeg" << endreq; status = createSubAlgorithm("MuonSegmentToMooRzSegment","MuonSegmentToMooRzSegmentEF", m_MuonSegToMooSeg); if (status.isFailure()) msg() << MSG::ERROR << "Cannot create sub-Alg of type MuonSegmentToMooRzSegment " << endreq; status = createSubAlgorithm("MuonSegmentComboToMooRzSegmentCombo","MuonSegmentComboToMooRzSegmentComboEF" ,m_MuonSegToMooSegCombo); if (status.isFailure()) msg() << MSG::ERROR << "Cannot create sub-Alg of type MuonSegmentComboToMooRzSegmentCombo " << endreq; status = createSubAlgorithm("MooRoadMaker","MooRoadMakerEF" ,m_MooRoadMaker); if (status.isFailure()) msg() << MSG::ERROR << "Cannot create sub-Alg of type MooRoadMaker " << endreq; } if(!m_pat){ msg() << MSG::DEBUG << "Initializing MooMakeRoads " << endreq; status = createSubAlgorithm("MooMakeRoads", "MooMakeRoadsEF" ,m_MooMakeRoadsAlgs); if (status.isFailure()) msg() << MSG::ERROR << "Cannot create sub-Alg of type MooMakeRoads" << endreq; } msg() << MSG::DEBUG << "Initializing MooMakeTracks " << endreq; status = createSubAlgorithm("MooMakeTracks", "MooMakeTracksEF", m_MooMakeTracksAlgs); if (status.isFailure()) msg() << MSG::ERROR << "Cannot create sub-Alg of type MooMakeTracks" << endreq; msg() << MSG::DEBUG << "Initializing MooSummary " << endreq; status = createSubAlgorithm("MooSummary", "MooSummaryEF" ,m_MooSummaryAlgs); if (status.isFailure()) msg() << MSG::ERROR << "Cannot create sub-Alg of type MooSummary" << endreq; // TrigMooHisto initialization only if required. if (m_doHistos) { if (m_monitoring.retrieve().isFailure()){ msg() << MSG::FATAL << "Histo monitor: Unable to create the tool " << endreq; return HLT::BAD_JOB_SETUP; } } } if(m_muid){ msg() << MSG::DEBUG << "Initializing MuidStandAlone " << endreq; status = createSubAlgorithm("MuidStandAlone", "MuidStandAloneEF", m_MuidStandAloneAlg); if (status.isFailure()) msg() << MSG::ERROR << "Cannot create sub-Alg of type MuidStandAlone" << endreq; } if (m_muidcomb){ msg() << MSG::DEBUG << "Initializing MuidComb " << endreq; if (m_muidMatchMaker.retrieve().isFailure()){ msg() << MSG::FATAL << "Failed to retrieve MuidMatchMaker tool " << endreq; return HLT::BAD_JOB_SETUP; } else msg() << MSG::INFO << "Retrieved MuidMatchMaker tool " << endreq; } ////////////////////////////////////////////////////////////////////////// IIncidentSvc* pIncsvc; status = serviceLocator()->service("IncidentSvc", pIncsvc); int priority= 100; if ( status.isSuccess() ) { pIncsvc->addListener( this, "EndEvent", priority); } else { msg() << MSG::ERROR << "Could not register incident service " << endreq; } /////////////////////////////////////////// // ntuples init ////////////////////////////////////////// // Book the ntuple if(m_doNtuples){ if (m_pTrigMooreNtuple.retrieve().isFailure()){ msg() << MSG::FATAL << " Unable to create the ntuple tool " << endreq; return HLT::BAD_JOB_SETUP; } SmartDataPtr<NTuple::Directory> ntid(ntupleSvc(), "/NTUPLES/FILE1/CBNT"); if ( !ntid ){ msg() << MSG::DEBUG << "creating directory ... " << endreq; ntid = ntupleSvc()->createDirectory("/NTUPLES/FILE1/CBNT"); }else{ msg() << MSG::DEBUG << "Ntuple ID retrieved from the store " << endreq; } if ( ! ntid ) { msg() << MSG::WARNING << " unable to create ntuple directory" << endreq; return HLT::BAD_JOB_SETUP; } msg() << MSG::DEBUG << "ntuple ID " << m_ntupleID << endreq; if(m_moore){ msg() << MSG::DEBUG << "booking moore ntuples... " << endreq; m_ntuple = ntupleSvc()->book(ntid.ptr(), m_ntupleID, CLID_ColumnWiseTuple,"moore"); msg() << MSG::DEBUG << "declaring variables... " << endreq; status = m_pTrigMooreNtuple->bookNtuple(m_ntuple); if(!status.isSuccess() ) { msg() << MSG::ERROR << " failed to book Moore ntuple" << endreq; } else msg() << MSG::DEBUG << " Moore ntuple booked successfully" << endreq; } msg() << MSG::DEBUG << " bookNtuple done!" << endreq; if (m_ntuple){ if(!status.isSuccess() ) msg() << MSG::ERROR << " failed to book MooHLT ntuple" << endreq; }else { msg() << MSG::ERROR << " failed to book ntuple" << endreq; } } if (m_doAANtuples){ if (m_seedFromLvl1 || m_seedFromLvl2 || m_moore || m_muid || m_muidcomb) { m_TrigMooreAANTuple->SetNtuplePrefix(m_prefix); msg() << MSG::DEBUG << "ntuple variables prefix set to: " << m_prefix << endreq; } } if(m_doTimers){ // add some timers: m_tTotal = addTimer("tTotal","nTracks"); m_tPhi = addTimer("tMakePhiSeg"); m_tRZ = addTimer("tMakeRZSeg"); m_tPhiSeeded = addTimer("tMakePhiSegSd"); m_tRZSeeded = addTimer("tMakeRZSegSd"); m_tMakeRoad = addTimer("tMakeRoad","nMdt"); m_tMakeTracks = addTimer("tMakeTracks","nRpc"); m_tMooSummary = addTimer("tMakeSummary"); m_tMuidSA = addTimer("tMuidSA","nTgc"); m_tMuidComb = addTimer("tMuidComb"); } // *********** new StatusCode sc; StoreGateSvc* detStore=0; sc = serviceLocator()->service("DetectorStore", detStore); if ( sc.isSuccess() ) { sc = detStore->retrieve( muon_mgr ); if ( sc.isFailure() ) { msg() << MSG::ERROR << "Cannot retrieve MuonDetDescrMgr " << endreq; } else { p_MdtIdHelper = muon_mgr->mdtIdHelper(); p_CscIdHelper = muon_mgr->cscIdHelper(); p_RpcIdHelper = muon_mgr->rpcIdHelper(); p_TgcIdHelper = muon_mgr->tgcIdHelper(); } } else { msg() << MSG::ERROR << "MuonDetDescrMgr not found in DetectorStore " << endreq; } // ***************** msg() << MSG::DEBUG << "End of init MooHLTAlgo" << endreq; return HLT::OK; } // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * HLT::ErrorCode MooHLTAlgo::hltExecute(const HLT::TriggerElement* inputTE, HLT::TriggerElement* TEout){ msg() << MSG::DEBUG << ": Executing MooHLTAlgo::execHLTAlgorithm()" << endreq; if (m_chronotest) chronosvc->chronoStart("All Algos"); if(m_doTimers) m_tTotal->start(); HLT::ErrorCode hltStatus; StatusCode status; // Need to number the RoIs for object in the TDS ++m_roi_num; std::ostringstream s; s<<m_roi_num; std::string roi = "RoI"; m_roi = roi+s.str(); msg() << MSG::DEBUG << "RoI number : " << m_roi_num << " " << m_roi << endreq ; if(!m_seed&&m_roi_num>1) return HLT::OK; const LVL1::RecMuonRoI * muonRoIl1 = 0; const TrigRoiDescriptor * fakeRoI = 0; const MuonFeature * muonRoIL2 = 0; const MooTrackContainer * track_container = 0; const MuidTrackContainer * standAloneTracks = 0; const MuidTrackContainer * combinedTracks = 0; if(m_cosmic){ double etaRoI=0., phiRoI=0., thRoI=0.; std::string RoIType= "Cosmic"; std::vector<const CosmicMuon*> vectorOfCosmicMuon; hltStatus = getFeatures(inputTE,vectorOfCosmicMuon, ""); if(hltStatus!=HLT::OK){ msg() << MSG::VERBOSE <<"Unappropriate status for VectorOfCosmicMuon: " << hltStatus << endreq; } const TrigRoiDescriptor* muonRoI = 0; hltStatus = getFeature(inputTE, muonRoI); if(muonRoI==0) { msg() << MSG::VERBOSE << "Could not find the initial RoIDescriptor, " << "trying to get the RecMuonRoI ....." << endreq; std::vector<const LVL1::RecMuonRoI*> muonRoIs; hltStatus = getFeatures(inputTE, muonRoIs); if(hltStatus!=HLT::OK){ msg() << MSG::VERBOSE <<"RecMuonRoIs isn't present: " << hltStatus << endreq; } msg() << MSG::VERBOSE << "RecMuonRoI size: " << muonRoIs.size() << endreq; msg() << MSG::VERBOSE << "Vector of Cosmic Muon size: " << vectorOfCosmicMuon.size() << endreq; }else{ etaRoI = muonRoI->eta0(); phiRoI = muonRoI->phi0(); thRoI = 1000.; msg() << MSG::VERBOSE << "RoIid " << muonRoI->roiId() << " eta =" << etaRoI << " phi =" << phiRoI << " Thr = " << thRoI << endreq; } double phiToRS = phiRoI; // phi must go from 0 to 2*pi if (phiToRS < 0) phiToRS += 2.*M_PI; double phiMin = phiToRS - m_dphi; double phiMax = phiToRS + m_dphi; if (phiMin < 0.) phiMin =0; if (phiMax < 0.) phiMax =+ 2.*M_PI; if (phiMin > 2*M_PI) phiMin -= 2*M_PI; if (phiMax > 2*M_PI) phiMax -= 2*M_PI; msg()<<MSG::VERBOSE<<"Phicentral = "<<phiToRS<<" Phi min, max = "<<phiMin<<" "<<phiMax<<endreq; msg()<<MSG::VERBOSE<<"Etacentral = "<<etaRoI<<" Eta min, max = " <<etaRoI-m_deta<<" "<<etaRoI+m_deta<<endreq; std::vector<IdentifierHash> rpc_hash_ids; m_pRegionSelector->DetHashIDList(RPC, etaRoI-m_deta, etaRoI+m_deta, phiMin, phiMax, &rpc_hash_ids); std::vector<IdentifierHash> tgc_hash_ids; m_pRegionSelector->DetHashIDList(TGC, etaRoI-m_deta, etaRoI+m_deta, phiMin, phiMax,&tgc_hash_ids); std::vector<IdentifierHash> mdt_hash_ids; m_pRegionSelector->DetHashIDList(MDT, etaRoI-m_deta, etaRoI+m_deta, phiMin, phiMax, &mdt_hash_ids); std::vector<IdentifierHash> csc_hash_ids; m_pRegionSelector->DetHashIDList(CSC, etaRoI-m_deta, etaRoI+m_deta, phiMin, phiMax, &csc_hash_ids); msg() << MSG::VERBOSE << "The size of RPC is " << rpc_hash_ids.size() << endreq; msg() << MSG::VERBOSE << "The size of TGC is " << tgc_hash_ids.size() << endreq; msg() << MSG::VERBOSE << "The size of MDT is " << mdt_hash_ids.size() << endreq; msg() << MSG::VERBOSE << "The size of CSC is " << csc_hash_ids.size() << endreq; std::string tmp_roi = m_roi; if(m_cosmic) tmp_roi = m_roi+"_CS"; m_mooRoI = new MooRoI(etaRoI, phiRoI, thRoI, RoIType, tmp_roi); m_mooRoI->setHashIds( new std::vector<IdentifierHash>(rpc_hash_ids), new std::vector<IdentifierHash>(tgc_hash_ids), new std::vector<IdentifierHash>(mdt_hash_ids), new std::vector<IdentifierHash>(csc_hash_ids) ); msg() << MSG::VERBOSE << "Executing MooMakePhiPattern Seeded " << endreq; executeAlgs(m_MooMakePhiPatternSeededAlg); msg() << MSG::VERBOSE << "Executing MooMakeRzPattern Seeded " << endreq; executeAlgs(m_MooMakeRzPatternSeededAlg); // for (std::vector<IdentifierHash>::iterator i = mdt_hash_ids.begin(); i != mdt_hash_ids.end(); i++) // std::cout << " HASH MDT Detector from RS " // << (int) (*i) // << std::endl; if(muonRoI==0) { msg() << MSG::ERROR << "No RoI available... execution is over " << endreq; return HLT::ERROR; } return hltStatus; } if(m_moore){ if (m_seed){ double etaRoI=0., phiRoI=0., thRoI=0.; std::string RoIType; const TrigRoiDescriptor* muonRoI = 0; hltStatus = getFeature(inputTE, muonRoI, "forMS"); if(muonRoI==0) { msg() << MSG::DEBUG << "Could not find RoIDescriptor <<forMS>>, " << "trying to recover the initial one." << endreq; hltStatus = getFeature(inputTE, muonRoI, ""); if(muonRoI==0) { msg() << MSG::DEBUG << "Initial one not accessible, problem here!" << endreq; return HLT::NAV_ERROR; } } //it must be a non zero pointer to the RoIDescriptor here!! //if (muonRoI){ // so ... use it msg() << MSG::DEBUG << "Got a RoiDescriptor from inputTE " << " phi " << muonRoI->phi0() << " eta " << muonRoI->eta0() << endreq; msg() << MSG::DEBUG << "ROI ID " << muonRoI->roiId() << endreq; msg() << MSG::DEBUG << "LVL1 ID " << muonRoI->l1Id() << endreq; if (m_doHistos) { msg() << MSG::DEBUG << "Histo monitor: Filling MuonRoI Histograms .... " << endreq; status=m_monitoring->fillTrigMooreHists(muonRoI); if(status.isFailure()){ msg() << MSG::DEBUG << "Unable to fill Histos" << endreq;} } //} if(m_seedFromLvl1){ /////////////////////////////////////////////// // Seeeded reconstruction from LVL1 muon RoIs // Get vector of of pointers to all MuonRecoRoIs with label "uses": msg() << MSG::DEBUG <<" seeding comes from Lvl1 simulation " << endreq; std::vector<const LVL1::RecMuonRoI*> vectorOfRecMuonRoI; msg() << MSG::VERBOSE <<"getting vector of RecMuonRoI from inputTE... " << endreq; hltStatus = getFeatures(inputTE,vectorOfRecMuonRoI, ""); if(hltStatus!=HLT::OK) return HLT::NAV_ERROR; msg() << MSG::VERBOSE <<"L1 MuonRecoRoI retrieved with status " << hltStatus << endreq; if(vectorOfRecMuonRoI.size() != 1){ msg() << MSG::ERROR << "Size of vector of Muon RoIs is not 1 but " << vectorOfRecMuonRoI.size() << endreq; // return StatusCode::FAILURE; } else { msg() << MSG::VERBOSE <<"getting a MuonRoI from vector of objects... " << endreq; muonRoIl1 = vectorOfRecMuonRoI.front(); if(!muonRoIl1) { msg() << MSG::ERROR << "Retrieval of RoI from vector failed" << endreq; status= false; } msg() << MSG::VERBOSE <<"DONE with status : " << status << endreq; if(muonRoIl1){ etaRoI = muonRoIl1->eta(); phiRoI = muonRoIl1->phi(); thRoI = muonRoIl1->getThresholdValue(); RoIType = "LVL1"; // msg() << MSG::DEBUG << "The position of the MuonRecoRoI is phi = " << phiRoI << " / eta = " << etaRoI << " / threshold = " << thRoI << endreq; } } } else if (m_seedFromLvl2) { msg() << MSG::DEBUG <<" seeding comes from Lvl2 " << endreq; std::vector<const MuonFeature*> vectorOfMuonFex; msg() << MSG::VERBOSE <<"getting vector of Muon Features from inputTE... " << endreq; hltStatus = getFeatures(inputTE,vectorOfMuonFex, ""); msg() << MSG::VERBOSE <<"DONE with status : " << hltStatus << endreq; if(vectorOfMuonFex.size() != 1) { msg() << MSG::DEBUG << "Size of vector of Muon Feature is not 1 but " << vectorOfMuonFex.size() << endreq; msg() << MSG::DEBUG << "... using RoiDescriptor with " << " phi " << muonRoI->phi0() << " eta " << muonRoI->eta0() << endreq; etaRoI = muonRoI->eta0(); phiRoI = muonRoI->phi0(); thRoI = 0; // return StatusCode::FAILURE; } else { msg() << MSG::VERBOSE <<"getting a Lvl2 Muon from vector of objects... " << endreq; muonRoIL2 = vectorOfMuonFex.front(); if(!muonRoIL2) { msg() << MSG::ERROR << "Retrieval of L2 RoI from vector failed" << endreq; status= false; } msg() << MSG::VERBOSE <<"MuonFeature retrieved with status : " << status << endreq; if(muonRoIL2){ phiRoI = muonRoIL2->phi(); etaRoI = muonRoIL2->eta(); thRoI = muonRoIL2->pt(); msg() << MSG::DEBUG <<"LVL2 phi/eta = "<<phiRoI<<"/"<<etaRoI<<" muonFeature.address " <<muonRoIL2->saddress()<<endreq; if ( muonRoIL2->saddress()==-1) { msg() << MSG::DEBUG << " The MuonFeature does not provide eta and phi in the EC" << endreq; //21/11/2006 temporary// The MuonFeature does not provide eta and phi in the EC phiRoI = muonRoI->phi0(); etaRoI = muonRoI->eta0(); msg() << MSG::DEBUG <<"Resetting LVL2 phi/eta with LVL1 RoiDescriptor = "<<phiRoI<<"/"<<etaRoI<<endreq; } RoIType = "LVL2"; msg() << MSG::DEBUG << "The position of the Muon Feature is phi = " << phiRoI << " / eta = " << etaRoI << " / pt = " << thRoI << endreq; } } } else { /////////////////////////////////////////////// // Seeded reconstruction from fake RoIs msg() << MSG::DEBUG <<" seeding comes from KINE fake RoIs " << endreq; msg() << MSG::VERBOSE <<"getting vector of fake RoI from inputTE... " << endreq; // Get RoiDescriptor hltStatus = getFeature(inputTE, fakeRoI, ""); if(!fakeRoI) { msg() << MSG::ERROR << "Retrieval of fake RoI from vector failed" << endreq; status= false; } msg() << MSG::DEBUG <<"DONE with status : " << status << endreq; if(fakeRoI){ etaRoI = fakeRoI->eta0(); phiRoI = fakeRoI->phi0(); thRoI = 1000; RoIType = "FAKE"; //should be DEBUG msg() << MSG::DEBUG << "The position of the fake RoI is phi = " << phiRoI << " / eta = " << etaRoI << " / roiId = " << fakeRoI->roiId() << " / l1Id = " << fakeRoI->l1Id() << endreq; } } double phiToRS = phiRoI; // phi must go from 0 to 2*pi if (phiToRS < 0) phiToRS += 2.*M_PI; double phiMin = phiToRS - m_dphi; double phiMax = phiToRS + m_dphi; if (phiMin < 0.) phiMin =+ 2.*M_PI; if (phiMax < 0.) phiMax =+ 2.*M_PI; if (phiMin > 2*M_PI) phiMin -= 2*M_PI; if (phiMax > 2*M_PI) phiMax -= 2*M_PI; msg()<<MSG::DEBUG<<"Phicentral = "<<phiToRS<<" Phi min, max = "<<phiMin<<" "<<phiMax<<endreq; msg()<<MSG::DEBUG<<"Etacentral = "<<etaRoI<<" Eta min, max = " <<etaRoI-m_deta<<" "<<etaRoI+m_deta<<endreq; std::vector<IdentifierHash> rpc_hash_ids; m_pRegionSelector->DetHashIDList(RPC, etaRoI-m_deta, etaRoI+m_deta, phiMin, phiMax, &rpc_hash_ids); std::vector<IdentifierHash> tgc_hash_ids; m_pRegionSelector->DetHashIDList(TGC, etaRoI-m_deta, etaRoI+m_deta, phiMin, phiMax,&tgc_hash_ids); std::vector<IdentifierHash> mdt_hash_ids; m_pRegionSelector->DetHashIDList(MDT, etaRoI-m_deta, etaRoI+m_deta, phiMin, phiMax, &mdt_hash_ids); std::vector<IdentifierHash> csc_hash_ids; m_pRegionSelector->DetHashIDList(CSC, etaRoI-m_deta, etaRoI+m_deta, phiMin, phiMax, &csc_hash_ids); msg() << MSG::DEBUG << "The size of RPC is " << rpc_hash_ids.size() << endreq; msg() << MSG::DEBUG << "The size of TGC is " << tgc_hash_ids.size() << endreq; msg() << MSG::DEBUG << "The size of MDT is " << mdt_hash_ids.size() << endreq; msg() << MSG::DEBUG << "The size of CSC is " << csc_hash_ids.size() << endreq; // for (std::vector<IdentifierHash>::iterator i = mdt_hash_ids.begin(); i != mdt_hash_ids.end(); i++) // std::cout << " HASH MDT Detector from RS " // << (int) (*i) // << std::endl; if(muonRoI==0 && fakeRoI==0 && muonRoIL2==0) { msg() << MSG::ERROR << "No RoI available... execution is over " << endreq; return HLT::ERROR; }else{ // delete m_mooRoI; m_mooRoI = new MooRoI(etaRoI, phiRoI, thRoI, RoIType,m_roi); m_mooRoI->setHashIds( new std::vector<IdentifierHash>(rpc_hash_ids), new std::vector<IdentifierHash>(tgc_hash_ids), new std::vector<IdentifierHash>(mdt_hash_ids), new std::vector<IdentifierHash>(csc_hash_ids) ); } if(removeCloseRoIs(m_mooRoI)){ msg() << MSG::DEBUG << "This RoI is close to an another one, will give the same result " << endreq; TEout->setActiveState(true); MooTrackContainer * mooreTracks = new MooTrackContainer(); status = p_SGevent->record(mooreTracks, "MooreTracks"+m_roi); if(!status.isSuccess()) { msg() << MSG::VERBOSE << "Problem in recording MooreTracks" << endreq; } return HLT::OK; } else { msg() << MSG::VERBOSE << "This RoI is far from other RoIs... let's go on! " << endreq; } }//if m_seed std::string m_myautokey = ""; if(m_seed) { if(m_pat){ msg() << MSG::DEBUG << "Executing MooMakePhiPattern Seeded " << endreq; if(m_doTimers) m_tPhiPatSeed->start(); executeAlgs(m_MooMakePhiPatternSeededAlg); if(m_doTimers) m_tPhiPatSeed->stop(); msg() << MSG::DEBUG << "Executing MooMakeRzPattern Seeded " << endreq; if(m_doTimers) m_tRzPatSeed->start(); executeAlgs(m_MooMakeRzPatternSeededAlg); if(m_doTimers) m_tRzPatSeed->stop(); }else{ msg() << MSG::DEBUG << "Executing MooMakePhiSegments Seeded " << endreq; if(m_doTimers) m_tPhiSeeded->start(); executeAlgs(m_MooMakePhiSegmentSeededAlg); if(m_doTimers) m_tPhiSeeded->stop(); msg() << MSG::DEBUG << "Executing MooMakeCrudeRZSegments Seeded " << endreq; if(m_doTimers) m_tRZSeeded->start(); executeAlgs(m_MooMakeCrudeRZSegmentsSeededAlg); if(m_doTimers) m_tRZSeeded->stop(); } } else { if(m_pat){ msg() << MSG::DEBUG << "Executing MooMakePhiPattern " << endreq; if(m_doTimers) m_tPhiPat->start(); executeAlgs(m_MooMakePhiPatternsAlg); if(m_doTimers) m_tPhiPat->stop(); msg() << MSG::DEBUG << "Executing MooMakeRzPatterns" << endreq; if(m_doTimers) m_tRzPat->start(); executeAlgs(m_MooMakeRzPatternsAlg); if(m_doTimers) m_tRzPat->stop(); }else{ msg() << MSG::DEBUG << "Executing MooMakePhiSegments " << endreq; if(m_doTimers) m_tPhi->start(); executeAlgs(m_MooMakePhiSegmentsAlg); if(m_doTimers) m_tPhi->stop(); msg() << MSG::DEBUG << "Executing MooMakeCrudeRZSegments" << endreq; if(m_doTimers) m_tRZ->start(); executeAlgs(m_MooMakeCrudeRZSegmentsAlg); if(m_doTimers) m_tRZ->stop(); } } if(m_pat){ msg() << MSG::DEBUG << "Executing MooCombine Patterns ... " << endreq; if(m_doTimers) m_tPatComb->start(); executeAlgs(m_MooCombinePatternsAlg); if(m_doTimers) m_tPatComb->stop(); msg() << MSG::DEBUG << "Executing MooCalibratedSegmentMaker ... " << endreq; executeAlgs(m_MooCalibratedSegmentMaker); msg() << MSG::DEBUG << "Executing MooRzSegmentCombinationMaker ... " << endreq; executeAlgs(m_MooRzSegmentCombinationMaker); msg() << MSG::DEBUG << "Executing PhiPat to PhiSeg Seeded " << endreq; executeAlgs(m_PhiPatToPhiSeg); msg() << MSG::DEBUG << "Executing CscPat to CscSeg Seeded " << endreq; executeAlgs(m_CscPatToCscSeg); msg() << MSG::DEBUG << "Executing MdtPat to MdtSeg Seeded " << endreq; executeAlgs(m_MdtPatToMdtSeg); msg() << MSG::DEBUG << "Executing MuonPat to MooSeg Seeded " << endreq; executeAlgs(m_MuonSegToMooSeg); msg() << MSG::DEBUG << "Executing MuonPat to MooSeg Combo " << endreq; executeAlgs(m_MuonSegToMooSegCombo); msg() << MSG::DEBUG << "Executing MooRoadMaker... " << endreq; executeAlgs(m_MooRoadMaker); } if(!m_pat){ msg() << MSG::DEBUG << "Executing MooMakeRoads " << endreq; if(m_doTimers) m_tMakeRoad->start(); executeAlgs(m_MooMakeRoadsAlgs); if(m_doTimers) m_tMakeRoad->stop(); } msg() << MSG::DEBUG << "Executing MooMakeTracks " << endreq; if(m_doTimers) m_tMakeTracks->start(); executeAlgs(m_MooMakeTracksAlgs); if(m_doTimers) m_tMakeTracks->stop(); if(m_doTimers) m_tMooSummary->start(); if(!m_testbeam){ msg() << MSG::DEBUG << "Executing MooSummary " << endreq; executeAlgs(m_MooSummaryAlgs); } if(m_doTimers) m_tMooSummary->stop(); if (StatusCode::SUCCESS != p_SGevent->retrieve(track_container,"MooreTracks"+m_roi) ) { msg() << MSG::ERROR << "Could not find Moore Track container" << endreq; if (!status) return HLT::SG_ERROR; } else { msg() << MSG::DEBUG << "Moore Track container retrieved with size : " << track_container->size() << endreq; if (track_container->size() > 0){ //***************new TrigGenericMonitoringTool definitions (20/06/07) *************** m_mooremult = track_container->size(); //*********************************************************************************** for(MooTrackContainer::const_iterator it = track_container->begin(); it!=track_container->end(); ++it){ const PerigeeParameters& perigee = (**it).perigee_parameters(); msg() << MSG::DEBUG << " REGTEST MS pt/ctheta/phi " << 1./perigee.inverse_pt() << " / " << perigee.cot_theta() << " / " << perigee.phi() << endreq; //***************new TrigGenericMonitoringTool definitions (20/06/07) *************** m_moorechi2 = (*it)->fit_quality().chi_squared(); m_moorechi2prob = (*it)->fit_quality().fit_probability(); if (perigee.inverse_pt() != 0) { pt_moore = fabs(1./perigee.inverse_pt())/1000.; if (perigee.inverse_pt() < 0) m_charge = -1; else m_charge = 1 ; } phi_moore = perigee.phi(); if(perigee.cot_theta()!=0.) { eta_moore = -log(tan(atan(1./fabs(perigee.cot_theta()))/2.)); if (perigee.cot_theta()<0.) eta_moore = -eta_moore; } m_prechits =( (*it)->mdt_hits_count() + (*it)->csc_hits_count() ); m_phihits = (*it)->phi_hits_count(); m_statlay = (*it)->station_layers_count(); //*********************************************************************************** } } if(m_AodForFexOff){ const double myMass = 105.7; TrigMuonEFContainer * myMuonEFCont = new TrigMuonEFContainer(); for(MooTrackContainer::const_iterator it = track_container->begin(); it!=track_container->end(); ++it){ const PerigeeParameters& perigee = (**it).perigee_parameters(); double myPhi = perigee.phi(); double myTheta = perigee.cot_theta(); double myIpt = std::fabs(perigee.inverse_pt()); double myCharge = perigee.charge(); std::string myRoi= m_roi; // int myCode = (**it).muonCode(); int myCode = 0; TrigMuonEF * mytrimuon = new TrigMuonEF(myIpt,myTheta,myPhi,myMass); mytrimuon->set_muonCode(myCode); mytrimuon->set_RoINum(myRoi); mytrimuon->set_Charge(myCharge); myMuonEFCont->push_back(mytrimuon); } msg() << MSG::DEBUG << "Attaching Moore Feature ... " << endreq; hltStatus = attachFeature(TEout, myMuonEFCont, "MuonEF"); if(hltStatus!=HLT::OK) msg() << MSG::DEBUG << "No MuonFeature per RoI" << endreq; }else{ msg() << MSG::DEBUG << "Attaching Moore Full Tracks ... " << endreq; hltStatus = attachFeature(TEout, track_container , "MuonEF"); if(hltStatus!=HLT::OK) msg() << MSG::DEBUG << "Only Track container record" << endreq; } if (m_doHistos) { MooTrackContainer * ptrigTrackContainer= const_cast<MooTrackContainer *>(track_container); msg() << MSG::DEBUG << "Histo Monitor: Filling Track_Container Histograms .... " << endreq; status=m_monitoring->fillTrigMooreHists(ptrigTrackContainer); if(status.isFailure()) msg() << MSG::DEBUG << "Unable to fill Histos" << endreq; } } } //MuonIdentification if(m_muid){ msg() << MSG::DEBUG << "Executing MuidStandAlone " << endreq; if(m_doTimers) m_tMuidSA->start(); executeAlgs(m_MuidStandAloneAlg); if(m_doTimers) m_tMuidSA->stop(); if (StatusCode::SUCCESS != p_SGevent->retrieve(standAloneTracks,"MuidStandAlone"+m_roi) ) { msg() << MSG::DEBUG << "Could not find MuonIdentification Track container" << endreq; //return( StatusCode::FAILURE); } else { msg() << MSG::DEBUG << "Muid Extr Track container retrieved with size : " << standAloneTracks->size() << endreq; for(MuidTrackContainer::const_iterator it = standAloneTracks->begin(); it!=standAloneTracks->end(); ++it){ const PerigeeParameters& perigee = (**it).perigee_parameters(); msg() << MSG::DEBUG << " REGTEST Extr pt/ctheta/phi " << 1./perigee.inverse_pt() << " / " << perigee.cot_theta() << " / " << perigee.phi() << endreq; //***************new TrigGenericMonitoringTool definitions (20/06/07) *************** if ((**it).has_perigee_parameters()){ phi_muidsa = perigee.phi(); if (perigee.inverse_pt() != 0) { pt_muidsa = fabs(1./perigee.inverse_pt())/1000.; if (perigee.inverse_pt() < 0) m_chargemuidsa = -1; else m_chargemuidsa = 1 ; } if(perigee.cot_theta()!=0.) { eta_muidsa = -log(tan(atan(1./fabs(perigee.cot_theta()))/2.)); if (perigee.cot_theta()<0.) eta_muidsa = -eta_muidsa; } if ((**it).has_fit_quality()){ m_muidsachi2 = (**it).fit_quality().chi_squared(); m_muidsachi2pr = (**it).fit_quality().fit_probability(); } } // if ((**it).has_calo_energy()) { // m_muidloss = (**it).calo_energy().energyDeposit(); // m_muidloss = (**it).calo_energy().energy_deposition(); // std::cout << " calo energy " << (**it).calo_energy().energy_deposition() << std::endl; // } //*********************************************************************************** } if(m_AodForFexOff){ const double myMass = 105.7; TrigMuonEFContainer * myMuonEFCont = new TrigMuonEFContainer(); for(MuidTrackContainer::const_iterator it = standAloneTracks->begin(); it!=standAloneTracks->end(); ++it){ const PerigeeParameters& perigee = (**it).perigee_parameters(); double myPhi = perigee.phi(); double myTheta = perigee.cot_theta(); double myIpt = std::fabs(perigee.inverse_pt()); double myCharge = perigee.charge(); std::string myRoi= m_roi; // int myCode = (**it).muonCode(); int myCode = (**it).muonCode(); // int myCode = 1; TrigMuonEF * mytrimuon = new TrigMuonEF(myIpt,myTheta,myPhi,myMass); mytrimuon->set_muonCode(myCode); mytrimuon->set_RoINum(myRoi); mytrimuon->set_Charge(myCharge); myMuonEFCont->push_back(mytrimuon); } msg() << MSG::DEBUG << "Attaching Muid SA Feature ... " << endreq; hltStatus = attachFeature(TEout, myMuonEFCont, "MuonEF"); if(hltStatus!=HLT::OK) msg() << MSG::DEBUG << "No MuonFeature per RoI" << endreq; }else{ msg() << MSG::DEBUG << "Attaching Muid SA Full Tracks ... " << endreq; hltStatus = attachFeature(TEout, standAloneTracks, "MuonExtrEF"); if(hltStatus!=HLT::OK) msg() << MSG::DEBUG << "Full Track container attached to " << endreq; } } } if(m_muidcomb){ msg() << MSG::DEBUG << "Executing MuidComb " << endreq; if(m_doTimers) m_tMuidComb->start(); //executeAlgs(&m_MuidCombAlgs); if (StatusCode::SUCCESS != p_SGevent->retrieve(standAloneTracks,"MuidStandAlone"+m_roi) ) { msg() << MSG::DEBUG << "Could not find MuonIdentification Track container" << endreq; } else { msg() << MSG::DEBUG << "Muid Extr Track container retrieved with size : " << standAloneTracks->size() << endreq; } //retrieving the Inner Detector Track Container const TrackCollection* indetTracks = 0; if(!m_trigID){ if (StatusCode::SUCCESS != p_SGevent->retrieve(indetTracks,"Tracks")) msg()<< MSG::ERROR << "MuidCombined::Could not retrieve ID Track container" << endreq; }else { if ( HLT::OK != getFeature(inputTE, indetTracks) ) msg() << MSG::ERROR << "MuidCombined::Could not retrieve TrigID Track container" << endreq; } if(indetTracks!=0){ msg()<< MSG::DEBUG << "MuidCombined:: ID Track container retrieved with size : " << indetTracks->size() << endreq; if(standAloneTracks!=0){ combinedTracks = m_muidMatchMaker->matchingProcedure(indetTracks,standAloneTracks); if(combinedTracks!=0) msg() << MSG::DEBUG << "Reconstructred Combined tracks " << combinedTracks->size() << endreq; } } if (StatusCode::SUCCESS != p_SGevent->record(combinedTracks, "MuidCombinedHyb"+m_roi)){ msg()<< MSG::ERROR << "MuidCombined: Could not store final tracks" << endreq; return HLT::OK; } if(m_doTimers) m_tMuidComb->stop(); for(MuidTrackContainer::const_iterator it = combinedTracks->begin(); it!=combinedTracks->end(); ++it){ const PerigeeParameters& perigee = (**it).perigee_parameters(); msg() << MSG::DEBUG << " REGTEST Comb pt/ctheta/phi " << 1./perigee.inverse_pt() << " / " << perigee.cot_theta() << " / " << perigee.phi() << endreq; //***************new TrigGenericMonitoringTool definitions (20/06/07) *************** if ((**it).has_perigee_parameters()){ a0_muidcb = perigee.transverse_impact(); z0_muidcb = perigee.z(); phi_muidcb = perigee.phi(); // phicor_cbroi=phi_muidcb - phiRoI; // std::cout << " phi_muidcb - phiRoI-phicor" << phi_muidcb << " " << phiRoI << " " << phicor_cbroi << std::endl; if (perigee.inverse_pt() != 0) { pt_muidcb = fabs(1./perigee.inverse_pt())/1000.; if (perigee.inverse_pt() < 0) m_chargemuidcb = -1; else m_chargemuidcb = 1 ; } if(perigee.cot_theta()!=0.) { eta_muidcb = -log(tan(atan(1./fabs(perigee.cot_theta()))/2.)); if (perigee.cot_theta()<0.) eta_muidcb = -eta_muidcb; // etacor_cbroi= eta_muidcb - etaRoI; // std::cout << " eta_muidcb - etaRoI-etacor" << eta_muidcb << " " << etaRoI << " " << etacor_cbroi << std::endl; } if ((**it).has_fit_quality()){ m_muidcbchi2 = (**it).fit_quality().chi_squared(); m_muidcbchi2pr = (**it).fit_quality().fit_probability(); } } //*********************************************************************************** } if(combinedTracks!=0){ if(m_AodForFexOff){ const double myMass = 105.7; TrigMuonEFContainer * myMuonEFCont = new TrigMuonEFContainer(); for(MuidTrackContainer::const_iterator it = combinedTracks->begin(); it!=combinedTracks->end(); ++it){ const PerigeeParameters& perigee = (**it).perigee_parameters(); double myPhi = perigee.phi(); double myTheta = perigee.cot_theta(); double myIpt = std::fabs(perigee.inverse_pt()); double myCharge = perigee.charge(); std::string myRoi= m_roi; // int myCode = (**it).muonCode(); int myCode = (**it).muonCode(); // int myCode = 1; TrigMuonEF * mytrimuon = new TrigMuonEF(myIpt,myTheta,myPhi,myMass); mytrimuon->set_muonCode(myCode); mytrimuon->set_RoINum(myRoi); mytrimuon->set_Charge(myCharge); myMuonEFCont->push_back(mytrimuon); } msg() << MSG::DEBUG << "Attaching Muid Comb Feature ... " << endreq; hltStatus = attachFeature(TEout, myMuonEFCont, "MuonEF"); if(hltStatus!=HLT::OK) msg() << MSG::DEBUG << "No MuonFeature per RoI" << endreq; }else{ msg() << MSG::DEBUG << "Attaching Muid Comb Full Tracks ... " << endreq; hltStatus = attachFeature(TEout, combinedTracks, "MuonCombEF"); if(hltStatus!=HLT::OK) msg() << MSG::DEBUG << "Full Track container attached to TE" << endreq; } } else msg() << MSG::DEBUG << "NO idtrack Offline switch-on could not find MuonIdentification Comb Track container" << endreq; } if(m_makeESD||m_makeAOD){ std::string mooKey = "TrigMooreTracks"; std::string muidExtrKey = "TrigMuidExtrTracksnoSeed"; std::string muidCombKey = "TrigMuidCombTracksnoSeed"; if(m_roi_num==1) { if(m_moore){ m_allMooreTracks = new MooTrackContainer(); status = p_SGevent->record(m_allMooreTracks, mooKey); if (status.isFailure()){ msg() << MSG::ERROR << "Record of Moore track into StoreGate failed" << endreq; return HLT::SG_ERROR; } else msg() << MSG::DEBUG << "Moore track saved in "<< mooKey << endreq; } if(m_muid){ m_allMuidExtrTracks = new MuidTrackContainer(); status = p_SGevent->record(m_allMuidExtrTracks, muidExtrKey); if (status.isFailure()){ msg() << MSG::ERROR << "Record of Muid extrapolated track into StoreGate failed" << endreq; return HLT::SG_ERROR; } else msg() << MSG::DEBUG << "Muid extrapolated track saved in " << muidExtrKey << endreq; } if(m_muidcomb){ m_allMuidCombTracks = new MuidTrackContainer(); status = p_SGevent->record(m_allMuidCombTracks, muidCombKey); if (status.isFailure()){ msg() << MSG::ERROR << "Record of Muid combined track into StoreGate failed" << endreq; return HLT::SG_ERROR; } else msg() << MSG::DEBUG << "Muid combined track saved in " << muidCombKey << endreq; } if(!m_seed){ msg() << MSG::DEBUG << "building ESD/AOD for the Wrapper " << endreq; if(track_container!=0){ for(MooTrackContainer::const_iterator it = track_container->begin(); it!=track_container->end(); ++it) m_allMooreTracks->push_back(new MooiPatTrack(**it)); } if(standAloneTracks!=0){ for(MuidTrackContainer::const_iterator it1 = standAloneTracks->begin(); it1!=standAloneTracks->end(); ++it1){ MuidTrack * tmpTracksa = new MuidTrack(**it1); m_allMuidExtrTracks->push_back(tmpTracksa); } } if(combinedTracks!=0){ for(MuidTrackContainer::const_iterator it2 = combinedTracks->begin(); it2!=combinedTracks->end(); ++it2){ MuidTrack * tmpTrackcb = new MuidTrack(**it2); m_allMuidCombTracks->push_back(tmpTrackcb); } } } } if(m_seed){ msg() << MSG::DEBUG << "building ESD/AOD for the seeded " << endreq; if(m_moore){ if(track_container!=0){ msg() << MSG::DEBUG << "Preparing Moore Container for ESD " << endreq; for(MooTrackContainer::const_iterator mooit = track_container->begin(); mooit!=track_container->end(); ++mooit) { m_allMooreTracks->push_back(new MooiPatTrack(*(*mooit))); } } } if(m_muid){ if(standAloneTracks!=0){ msg() << MSG::DEBUG << "Preparing Muid SA Container for ESD " << endreq; for(MuidTrackContainer::const_iterator muit = standAloneTracks->begin(); muit!=standAloneTracks->end(); ++muit){ m_allMuidExtrTracks->push_back(new MuidTrack(*(*muit))); } } } if(m_muidcomb){ if(combinedTracks!=0){ msg() << MSG::DEBUG << "Preparing Muid CB Container for ESD " << endreq; for(MuidTrackContainer::const_iterator cbit = combinedTracks->begin(); cbit!=combinedTracks->end(); ++cbit){ m_allMuidCombTracks->push_back(new MuidTrack(*(*cbit))); } } } } if (m_print_level>0){ if(m_moore){ const MooTrackContainer * testMooreTracks; if (StatusCode::SUCCESS != p_SGevent->retrieve(testMooreTracks,mooKey) ) { msg() << MSG::ERROR << "Could not find Moore Track container" << endreq; //return( StatusCode::FAILURE); } else msg() << MSG::DEBUG << "Moore tracks found with size " << testMooreTracks->size() << endreq; } if(m_muid){ const MuidTrackContainer * testMuidsaTracks; if (StatusCode::SUCCESS != p_SGevent->retrieve(testMuidsaTracks,muidExtrKey) ) { msg() << MSG::ERROR << "Could not find MuonIdentification Extr Track container" << endreq; //return( StatusCode::FAILURE); } else msg() << MSG::DEBUG << "Muid Extr tracks found with size " << testMuidsaTracks->size() << endreq; } if(m_muidcomb){ const MuidTrackContainer * testMuidTracks; if (StatusCode::SUCCESS != p_SGevent->retrieve(testMuidTracks,muidCombKey) ) { msg() << MSG::ERROR << "Could not find MuonIdentification Track container" << endreq; //return( StatusCode::FAILURE); } else msg() << MSG::DEBUG << "Muid tracks found with size " << testMuidTracks->size() << endreq; } } } if(m_moore){ if (track_container){ m_track_num += track_container->size(); if(m_doTimers) m_tTotal->propVal(track_container->size() ); } } //Let's suppose Moore always validates the sequence... TEout->setActiveState(true); if(m_doTimers) m_tTotal->stop(); if (m_chronotest) chronosvc->chronoStop("All Algos"); if (m_doAANtuples || m_doNtuples) { /////////////////////Fill Ntuples /////////////////////////// //FILL RECOMUONROI NTUPLE msg() << MSG::DEBUG << " Filling ntuples .... " << endreq; // if (m_seedFromLvl1 || m_seedFromLvl2 || m_moore || m_muid || m_muidcomb) { // if(m_TrigMooreAANTuple->cleanBlocks(m_seedFromLvl1,m_seedFromLvl2,m_moore,m_muid,m_muidcomb).isFailure()) // msg() << MSG::WARNING << "cleanBlocks beginRun failed" << endreq; //} if(m_moore){ if(m_seed&&m_seedFromLvl1){ msg() << MSG::DEBUG << " LVL1 ntuples .... " << endreq; if (m_doAANtuples) {status = m_TrigMooreAANTuple->execLVL1Block(muonRoIl1,m_roi_num); if (status.isFailure()) { msg() << MSG::WARNING << " problems with lvl1 variables in the AAAntuple" << endreq; //return status; }} if (m_doNtuples){ status = m_pTrigMooreNtuple->fillLVL1Block(muonRoIl1,m_roi_num); if (status.isFailure()) { msg() << MSG::WARNING << " problems with lvl1 variables in the ntuple" << endreq; //return status; }} }else if (m_seed&&m_seedFromLvl2){ msg() << MSG::DEBUG << " LVL2 ntuples .... " << endreq; if (m_doAANtuples){ status = m_TrigMooreAANTuple->execLVL2Block(muonRoIL2,m_roi_num); if (status.isFailure()) { msg() << MSG::WARNING << " problems with AA lvl2 variables in the ntuple" << endreq; //return status; }} if (m_doNtuples){ status = m_pTrigMooreNtuple->fillLVL2Block(muonRoIL2,m_roi_num); if (status.isFailure()) { msg() << MSG::WARNING << " problems with lvl2 variables in the ntuple" << endreq; //return status; }} } std::string key = "MDT_DIGITS"; const MdtDigitContainer * mdt_container; status = p_SGevent->retrieve(mdt_container,key); if (status.isFailure()) { msg() << MSG::ERROR << " Cannot retrieve MDT Digit Container " << endreq; return HLT::SG_ERROR; } int mdt_count = 0; // Loop on mdt collections for (MdtDigitContainer::const_iterator c = mdt_container->begin(); c != mdt_container->end(); ++c) { mdt_count += (*c)->size(); } if (m_doTimers) m_tMakeRoad->propVal(mdt_count); key = "RPC_DIGITS"; const RpcDigitContainer* rpc_container; status = p_SGevent->retrieve(rpc_container,key); if (status.isFailure()) { msg() << MSG::ERROR << " Cannot retrieve RPC Digit Container " << endreq; return HLT::SG_ERROR; } int rpc_count = 0; // Loop on collections for (RpcDigitContainer::const_iterator c = rpc_container->begin(); c != rpc_container->end(); ++c) rpc_count += (*c)->size(); if (m_doTimers) m_tMakeTracks->propVal(rpc_count ); key = "TGC_DIGITS"; const TgcDigitContainer* tgc_container; status = p_SGevent->retrieve(tgc_container,key); if (status.isFailure()) { msg() << MSG::ERROR << " Cannot retrieve TGC Digit Container " << endreq; return HLT::SG_ERROR; } int tgc_count = 0; // Loop on collections for (TgcDigitContainer::const_iterator c = tgc_container->begin(); c != tgc_container->end(); ++c) tgc_count += (*c)->size(); if (m_doTimers) m_tMuidSA->propVal(tgc_count ); //msg() << MSG::VERBOSE << " MOORE ntuples .... " << endreq; msg() << MSG::DEBUG << " MOORE ntuples .... " << endreq; if (m_doAANtuples) status = m_TrigMooreAANTuple->execMOOREBlock(track_container,m_track_num,m_roi_num); if (status.isFailure()) { msg() << MSG::WARNING << " problems with AA-Moore variables in the ntuple" << endreq; //return status; } if (m_doNtuples) status = m_pTrigMooreNtuple->fillMOOREBlock(track_container,m_track_num,m_roi_num); if (status.isFailure()) { msg() << MSG::WARNING << " problems with MOORE variables in the ntuple" << endreq; //return status; } } // m_moore if(m_muid){ if (standAloneTracks) if (standAloneTracks->size() > 0 ) { m_muidtrack_num += standAloneTracks->size(); } msg() << MSG::DEBUG << " MUID STANDALONE ntuples .... " <<standAloneTracks << endreq; if (m_doAANtuples) {status = m_TrigMooreAANTuple->execMUIDBlock(standAloneTracks,m_muidtrack_num, m_roi_num); if (status.isFailure()) { msg() << MSG::WARNING << " problems with AA MUID variables in the ntuple" << endreq; //return status; }} if (m_doNtuples) {status = m_pTrigMooreNtuple->fillMUIDBlock(standAloneTracks,m_muidtrack_num, m_roi_num); if (status.isFailure()) { msg() << MSG::WARNING << " problems with MUID variables in the ntuple" << endreq; //return status; }} } // m_muid if (m_muidcomb){ if(combinedTracks){ if (combinedTracks->size() > 0 ) { m_muidcbtrack_num += combinedTracks->size(); } msg() << MSG::DEBUG << " MUID COMB ntuples .... " << endreq; if (m_doAANtuples) {status = m_TrigMooreAANTuple->execMUIDCBBlock(combinedTracks,m_muidcbtrack_num, m_roi_num); if (status.isFailure()) { msg() << MSG::WARNING << " problems with MUIDCB AA variables in the ntuple" << endreq; //return status; }} } if (m_doNtuples){ status = m_pTrigMooreNtuple->fillMUIDCBBlock(combinedTracks,m_muidcbtrack_num, m_roi_num); if (status.isFailure()) { msg() << MSG::WARNING << " problems with MUIDCB variables in the ntuple" << endreq; //return status; }} } // m_muidcomb if (m_doNtuples) { status = ntupleSvc()->writeRecord("/NTUPLES/FILE1/CBNT"+m_ntupleID); if (status.isFailure()) { msg() << MSG::WARNING << " problems with write record in the ntuple" << endreq; //return status; } } } if (status.isFailure()) { msg() << MSG::WARNING << " HLT::OK, but status.isFailure()" << endreq; //return status; } // ******** new ***** ResidualsMOORE(track_container); // ******************* return HLT::OK; } // ********* new //__________________________________________________________________________ void MooHLTAlgo::ResidualsMOORE(const MooTrackContainer * track_container) { mdt_res.clear(); csc_eta_res.clear(); csc_phi_res.clear(); rpc_eta_res.clear(); rpc_phi_res.clear(); tgc_eta_res.clear(); tgc_phi_res.clear(); if (track_container){ if (track_container->size() > 0 ){ msg() << MSG::DEBUG << "MOORE Hit Residual" << endreq; // iterate on tracks for (MooTrackContainer::const_iterator tr = track_container->begin(); tr != track_container->end(); ++tr){ // iterate on hits for (HitList::hit_citerator h = (*tr)->hit_list_begin(); h != (*tr)->hit_list_end(); ++h){ // gives the hit technology if ( p_MdtIdHelper->is_mdt((*h)->identifier()) ) { mdt_res.push_back( (*h)->residual() ); } else if ( p_MdtIdHelper->is_csc((*h)->identifier()) ) { if ( fabs((*h)->sin_stereo()) > 0.5 ) { csc_eta_res.push_back( (*h)->residual() ); } else { csc_phi_res.push_back( (*h)->residual() ); } } else if ( p_MdtIdHelper->is_rpc((*h)->identifier()) ) { if ( fabs((*h)->sin_stereo()) > 0.5 ) { rpc_eta_res.push_back( (*h)->residual() ); } else { rpc_phi_res.push_back( (*h)->residual() ); } } else if ( p_MdtIdHelper->is_tgc((*h)->identifier()) ) { if ( fabs((*h)->sin_stereo()) > 0.5 ) { tgc_eta_res.push_back( (*h)->residual() ); } else { tgc_phi_res.push_back( (*h)->residual() ); } } } } // msg() << MSG::DEBUG << "mdt hit residual (size) = " << mdt_res.size << endreq; // msg() << MSG::DEBUG << "csc_eta hit residual (size) = " << csc_eta_res.size << endreq; // msg() << MSG::DEBUG << "csc_phi hit residual (size) = " << csc_phi_res.size << endreq; // msg() << MSG::DEBUG << "rpc_eta hit residual (size) = " << rpc_eta_res.size << endreq; // msg() << MSG::DEBUG << "rpc_phi hit residual (size) = " << rpc_phi_res.size << endreq; // msg() << MSG::DEBUG << "tgc_eta hit residual (size) = " << tgc_eta_res.size << endreq; // msg() << MSG::DEBUG << "tgc_phi hit residual (size) = " << tgc_phi_res.size << endreq; } } } // **************** // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * HLT::ErrorCode MooHLTAlgo:: hltFinalize(){ if(msgLvl() <= MSG::DEBUG) msg() << MSG::DEBUG << "Finalizing MooHLTAlgo" << endreq; return HLT::OK; } void MooHLTAlgo::executeAlgs(Algorithm * mooAlg){ MsgStream log(messageService(), name()); StatusCode status = StatusCode::SUCCESS; std::string tmp_roi = m_roi; if(m_cosmic) m_roi = tmp_roi + "_CS"; status= mooAlg->setProperty(StringProperty("RoInumber",m_roi)); if(!status.isSuccess()) { log << MSG::VERBOSE << "Unable to set properties" << endreq; } std::string name = mooAlg->name(); if( mooAlg->name() == "MooRoadMakerEF" ) { status=mooAlg->setProperty(StringProperty("RpcPrdLocation","")); status=mooAlg->setProperty(StringProperty("TgcPrdLocation","")); if (status.isFailure()) log << MSG::WARNING << "Unable to set property Algo" << endreq; } if( mooAlg->name() == "MooMakeTracksEF" ) { status=mooAlg->setProperty(StringProperty("TrackLocation","MooreTracks")); status=mooAlg->setProperty(StringProperty("RpcPrdLocation","")); status=mooAlg->setProperty(StringProperty("TgcPrdLocation","")); if (status.isFailure()) log << MSG::WARNING << "Unable to set property Algo" << endreq; } if(name == "MooMakePhiPatternSeededEF" || name == "MooMakePhiPatternSeededEF_CS") { MooMakePhiPatternSeeded * tmpAlg = static_cast<MooMakePhiPatternSeeded *>(mooAlg); tmpAlg->setMuonRoI(m_mooRoI); status=tmpAlg->execute(); if (status.isFailure()) log << MSG::WARNING << "Unable to exec algo" << endreq; } else if (name == "MooMakeRzPatternSeededEF" || name== "MooMakeRzPatternSeededEF_CS") { MooMakeRzPatternSeeded * tmpAlg = static_cast<MooMakeRzPatternSeeded *>(mooAlg); tmpAlg->setMuonRoI(m_mooRoI); status=tmpAlg->execute(); if (status.isFailure()) log << MSG::VERBOSE << "Unable to exec algo" << endreq; } else if(name == "MooMakePhiSegmentSeededEF") { MooMakePhiSegmentSeeded * tmpAlg = static_cast<MooMakePhiSegmentSeeded *>(mooAlg); tmpAlg->setMuonRoI(m_mooRoI); status=tmpAlg->execute(); if (status.isFailure()) log << MSG::VERBOSE << "Unable to exec algo" << endreq; } else if(name == "MooMakeCrudeRZSegmentsSeededEF") { MooMakeCrudeRZSegmentsSeeded * tmpAlg = static_cast<MooMakeCrudeRZSegmentsSeeded *>(mooAlg); tmpAlg->setMuonRoI(m_mooRoI); status=tmpAlg->execute(); if (status.isFailure()) log << MSG::VERBOSE << "Unable to exec algo" << endreq; } else { status=mooAlg->execute(); if (status.isFailure()) log << MSG::VERBOSE << "Unable to exec algo" << endreq; } m_roi = tmp_roi; } bool MooHLTAlgo::removeCloseRoIs(MooRoI * roi){ std::vector<IdentifierHash> mdtHashs = *roi->getMdtHashIds(); std::vector<IdentifierHash> rpcHashs = *roi->getRpcHashIds(); std::vector<IdentifierHash> tgcHashs = *roi->getTgcHashIds(); sort( mdtHashs.begin(), mdtHashs.end() ); sort( rpcHashs.begin(), rpcHashs.end() ); sort( tgcHashs.begin(), tgcHashs.end() ); if(m_RoIs.size()==0) { m_RoIs.push_back(roi); return false; } for(std::vector<MooRoI *>::const_iterator roiIt = m_RoIs.begin(); roiIt != m_RoIs.end(); ++roiIt){ std::vector<IdentifierHash> rpcHashsIt = *( (*roiIt)->getRpcHashIds() ) ; std::vector<IdentifierHash> tgcHashsIt = *( (*roiIt)->getTgcHashIds() ) ; std::vector<IdentifierHash> mdtHashsIt = *( (*roiIt)->getMdtHashIds() ) ; sort( mdtHashsIt.begin(), mdtHashsIt.end() ); sort( rpcHashsIt.begin(), rpcHashsIt.end() ); sort( tgcHashsIt.begin(), tgcHashsIt.end() ); // for(std::vector<int>::const_iterator it=mdtHashsIt.begin() ;it !=mdtHashsIt.end(); ++it ){ //std::cout << *it << std::endl; //} if ( includes(rpcHashsIt.begin(), rpcHashsIt.end(), rpcHashs.begin(), rpcHashs.end()) && includes(mdtHashsIt.begin(), mdtHashsIt.end(), mdtHashs.begin(), mdtHashs.end()) && includes(tgcHashsIt.begin(), tgcHashsIt.end(), tgcHashs.begin(), tgcHashs.end()) ){ //the processed RoiI is already included in one of those in the RoI list delete m_mooRoI; return true; } if (includes(rpcHashs.begin(), rpcHashs.end(), rpcHashsIt.begin(), rpcHashsIt.end()) && includes(mdtHashs.begin(), mdtHashs.end(), mdtHashsIt.begin(), mdtHashsIt.end()) && includes(tgcHashs.begin(), tgcHashs.end(), tgcHashsIt.begin(), tgcHashsIt.end()) ){ //the processed RoiI includes one in the RoI list // m_RoIs.erase(*roiIt); m_RoIs.push_back(roi); return true; } } m_RoIs.push_back(roi); return false; } void MooHLTAlgo::handle(const Incident &inc) { if ( inc.type() == "EndEvent"){ MsgStream log( messageService(), name() ); int outputLevel = msgSvc()->outputLevel( name() ); if(outputLevel <= MSG::DEBUG) log << MSG::DEBUG << "=====> End of Event" << endreq; m_roi_num = 0; m_track_num = 0; m_muidtrack_num = 0; m_muidcbtrack_num = 0; std::vector<MooRoI *>::const_iterator roiIt = m_RoIs.begin(); // clear all elements from the array for(; roiIt < m_RoIs.end(); roiIt++) delete *roiIt; // free the element from memory // finally, clear all elements from the array m_RoIs.clear(); if (!m_doAANtuples) return; if (m_seedFromLvl1 || m_seedFromLvl2 || m_moore || m_muid || m_muidcomb) { if(outputLevel <= MSG::DEBUG) log << MSG::DEBUG << "calling cleanBlocks" << endreq; if(m_TrigMooreAANTuple->cleanBlocks(m_seedFromLvl1,m_seedFromLvl2,m_moore,m_muid,m_muidcomb).isFailure()) log << MSG::WARNING << "end of event not correctly handled" << endreq; } } }
CERN Central CVS service | ViewVC Help |
Powered by ViewVC 1.0.4 |