diff --git a/graphics/VP1/VP1Systems/VP1AODSystems/src/IParticleCollHandle_Electron.cxx b/graphics/VP1/VP1Systems/VP1AODSystems/src/IParticleCollHandle_Electron.cxx index 171d3cabd4cbaa2cfd7a4d0534b8ea3376165e23..d0b95ecbb073a69132f6a76f0dcf53961f226f9d 100644 --- a/graphics/VP1/VP1Systems/VP1AODSystems/src/IParticleCollHandle_Electron.cxx +++ b/graphics/VP1/VP1Systems/VP1AODSystems/src/IParticleCollHandle_Electron.cxx @@ -222,7 +222,11 @@ bool IParticleCollHandle_Electron::load() messageDebug("WARNING: Ignoring Electron which claims to be neutral (charge()==0.0)."); continue; } - addHandle(new IParticleHandle_Electron(this,*it)); + IParticleHandle_Electron* elH = new IParticleHandle_Electron(this,*it); + std::cout << "elHandle ---> " << elH->electron().eta() << ", " + << elH->electron().nTrackParticles() << ", " + << elH->electron().trackParticle(0) << std::endl; + addHandle(elH); } return true; diff --git a/graphics/VP1/VP1Systems/VP1AODSystems/src/IParticleCollHandle_Muon.cxx b/graphics/VP1/VP1Systems/VP1AODSystems/src/IParticleCollHandle_Muon.cxx index d5f14306542727a26c770c56603d61ec79245d5c..853c6b8ea182f2ed13638e43b0b5dff27a370ac9 100644 --- a/graphics/VP1/VP1Systems/VP1AODSystems/src/IParticleCollHandle_Muon.cxx +++ b/graphics/VP1/VP1Systems/VP1AODSystems/src/IParticleCollHandle_Muon.cxx @@ -65,6 +65,7 @@ public: MuonCollectionSettingsButton* collSettingsButton; unsigned int last_minimumQuality; + bool hasPrimaryTrackParticleInfo; void possiblyUpdateGUI() {//Fixme: to IParticleCollHandleBase if (!((updateGUICounter++)%50)) { @@ -80,8 +81,9 @@ IParticleCollHandle_Muon::IParticleCollHandle_Muon(AODSysCommonData * cd, { m_d->theclass = this; m_d->updateGUICounter = 0; - m_d->collSettingsButton=0; - m_d->last_minimumQuality=0; + m_d->collSettingsButton = 0; + m_d->last_minimumQuality = 0; + m_d->hasPrimaryTrackParticleInfo = false; //The object names should not contain all sorts of funky chars (mat button style sheets wont work for instance): QString safetext(text()); @@ -121,7 +123,7 @@ void IParticleCollHandle_Muon::init(VP1MaterialButtonBase*) // Connections back to system connect(this,SIGNAL(shownAssociatedObjectsChanged(const QList<const xAOD::TrackParticle*>&)),systemBase(),SLOT(updateAssociatedObjects(const QList<const xAOD::TrackParticle*>&))) ; - // std::cout<<"IParticleCollHandle_Muon::init 2"<<std::endl; + // std::cout<<"IParticleCollHandle_Muon::init 2"<<std::endl; // debug // std::cout<<"swi: "<<collSwitch()<<std::endl; // std::cout<<"sep: "<<collSep()<<std::endl; // std::cout<<"mat: "<<material()<<std::endl; @@ -182,7 +184,6 @@ bool IParticleCollHandle_Muon::load() const xAOD::MuonContainer * coll(nullptr); #if defined BUILDVP1LIGHT - // Retrieve objects from the event if( !(systemBase()->getEvent())->retrieve( coll, name().toStdString()).isSuccess() ) { message("Error: Could not retrieve collection with key="+name()); @@ -224,14 +225,36 @@ bool IParticleCollHandle_Muon::load() // } IParticleHandle_Muon* muonH = new IParticleHandle_Muon(this,*it); addHandle(muonH ); - listOfTrackParticles<<muonH->muon().primaryTrackParticle(); - + //std::cout << "muons ---> " << muonH->muon().eta() // debug + // << ", " << muonH->muon().primaryTrackParticle() << std::endl; + if( muonH->muon().primaryTrackParticle() ) { + m_d->hasPrimaryTrackParticleInfo = true; + listOfTrackParticles << muonH->muon().primaryTrackParticle(); + } else { + m_d->hasPrimaryTrackParticleInfo = false; + printMsgNoTrackParticle(); + } + } + if(listOfTrackParticles.size()>0) { + emit shownAssociatedObjectsChanged(listOfTrackParticles); } - emit shownAssociatedObjectsChanged(listOfTrackParticles); - return true; } + +//____________________________________________________________________ +void IParticleCollHandle_Muon::printMsgNoTrackParticle() +{ + QString msg = "SEVERE WARNING! No 'primaryTrackParticle' information found within the Muons collection of the input file! As a consequence, several quantities cannot be calculated. Also, expect crashes... Please, check the data contained in your input data file."; + VP1Msg::messageWarningAllRed(msg); + systemBase()->message(msg); + return; +} +bool IParticleCollHandle_Muon::hasPrimaryTrackParticleInfo() +{ + return m_d->hasPrimaryTrackParticleInfo; +} + //____________________________________________________________________ bool IParticleCollHandle_Muon::cut(AODHandleBase* handle) { diff --git a/graphics/VP1/VP1Systems/VP1AODSystems/src/IParticleCollHandle_Muon.h b/graphics/VP1/VP1Systems/VP1AODSystems/src/IParticleCollHandle_Muon.h index 783f6a68d8a2ff638f09ce96b5dc9d78cac3d62a..f37673f0eb5fbf7db02b363d0034528cfea202d4 100644 --- a/graphics/VP1/VP1Systems/VP1AODSystems/src/IParticleCollHandle_Muon.h +++ b/graphics/VP1/VP1Systems/VP1AODSystems/src/IParticleCollHandle_Muon.h @@ -37,6 +37,9 @@ public: const QString& name, xAOD::Type::ObjectType type ); virtual ~IParticleCollHandle_Muon(); + void printMsgNoTrackParticle(); + bool hasPrimaryTrackParticleInfo(); + virtual void init(VP1MaterialButtonBase* matBut=0);//reimplementations must start with a call to this. virtual void setupSettingsFromControllerSpecific(AODSystemController*); @@ -56,7 +59,6 @@ private slots: void updateShownAssociatedObjects(); // Will get settings from the button. void resetCachedValuesCuts(); - private: class Imp; diff --git a/graphics/VP1/VP1Systems/VP1AODSystems/src/IParticleHandle_Electron.cxx b/graphics/VP1/VP1Systems/VP1AODSystems/src/IParticleHandle_Electron.cxx index 13b6ffa31cb116e006c9dce103aa6d58b0f6635a..23d2987c95ce06bb0fc2161069a6a2c5c1f68755 100644 --- a/graphics/VP1/VP1Systems/VP1AODSystems/src/IParticleHandle_Electron.cxx +++ b/graphics/VP1/VP1Systems/VP1AODSystems/src/IParticleHandle_Electron.cxx @@ -72,6 +72,10 @@ IParticleHandle_Electron::~IParticleHandle_Electron() delete m_d; } +const xAOD::Electron& IParticleHandle_Electron::electron() const { + return *(m_d->electron); +} + bool IParticleHandle_Electron::has3DObjects(){ return 0!=m_d->sep; } diff --git a/graphics/VP1/VP1Systems/VP1AODSystems/src/IParticleHandle_Electron.h b/graphics/VP1/VP1Systems/VP1AODSystems/src/IParticleHandle_Electron.h index 3f5e9db95cdccd3e444d73e81b916acc8b1d7885..6b0e06b5d480c15247b94656f1001d74c8e46ea8 100644 --- a/graphics/VP1/VP1Systems/VP1AODSystems/src/IParticleHandle_Electron.h +++ b/graphics/VP1/VP1Systems/VP1AODSystems/src/IParticleHandle_Electron.h @@ -52,7 +52,8 @@ public: virtual Amg::Vector3D position() const; const xAOD::IParticle& iParticle() const; virtual double charge() const ;//!< Returns unknown() in case of trouble. - + + const xAOD::Electron& electron() const; virtual unsigned summaryValue(xAOD::SummaryType type) const; virtual unsigned getNPixelHits() const; virtual unsigned getNSCTHits() const; diff --git a/graphics/VP1/VP1Systems/VP1AODSystems/src/IParticleHandle_Muon.cxx b/graphics/VP1/VP1Systems/VP1AODSystems/src/IParticleHandle_Muon.cxx index 802b9d0263acce06d08129460dd8d9198c61c3e2..ee9d81a1fe08aa14a3ac9affc9ae494f0fc9e285 100644 --- a/graphics/VP1/VP1Systems/VP1AODSystems/src/IParticleHandle_Muon.cxx +++ b/graphics/VP1/VP1Systems/VP1AODSystems/src/IParticleHandle_Muon.cxx @@ -368,6 +368,10 @@ QStringList IParticleHandle_Muon::clicked() const #if defined BUILDVP1LIGHT Amg::Vector3D IParticleHandle_Muon::momentum() const { + if( !(m_d->collHandle->hasPrimaryTrackParticleInfo()) ) { + m_d->collHandle->printMsgNoTrackParticle(); + return Amg::Vector3D(); + } double phi = m_d->muon->primaryTrackParticle()->phi0(); double theta = m_d->muon->primaryTrackParticle()->theta(); @@ -398,6 +402,11 @@ QStringList IParticleHandle_Muon::clicked() const #else Amg::Vector3D IParticleHandle_Muon::momentum() const { + if( !(m_d->collHandle->hasPrimaryTrackParticleInfo()) ) { + m_d->collHandle->printMsgNoTrackParticle(); + return Amg::Vector3D(); + } + //return Amg::Vector3D(); // RMB test const Trk::Perigee& p = m_d->muon->primaryTrackParticle()->perigeeParameters(); return p.momentum(); } @@ -408,6 +417,10 @@ QStringList IParticleHandle_Muon::clicked() const #if defined BUILDVP1LIGHT Amg::Vector3D IParticleHandle_Muon::position() const { + if( !(m_d->collHandle->hasPrimaryTrackParticleInfo()) ) { + m_d->collHandle->printMsgNoTrackParticle(); + return Amg::Vector3D(); + } double d0 = m_d->muon->primaryTrackParticle()->d0(); double z0 = m_d->muon->primaryTrackParticle()->z0(); double phi = m_d->muon->primaryTrackParticle()->phi0(); @@ -424,6 +437,10 @@ QStringList IParticleHandle_Muon::clicked() const #else Amg::Vector3D IParticleHandle_Muon::position() const { + if( !(m_d->collHandle->hasPrimaryTrackParticleInfo()) ) { + m_d->collHandle->printMsgNoTrackParticle(); + return Amg::Vector3D(); + } const Trk::Perigee& p = m_d->muon->primaryTrackParticle()->perigeeParameters(); return p.position(); // TODO: check what this returns } @@ -432,18 +449,29 @@ QStringList IParticleHandle_Muon::clicked() const //____________________________________________________________________ const xAOD::IParticle& IParticleHandle_Muon::iParticle() const { + if( !(m_d->collHandle->hasPrimaryTrackParticleInfo()) ) { + m_d->collHandle->printMsgNoTrackParticle(); + } return *(m_d->muon->primaryTrackParticle()); } //____________________________________________________________________ double IParticleHandle_Muon::charge() const { + if( !(m_d->collHandle->hasPrimaryTrackParticleInfo()) ) { + m_d->collHandle->printMsgNoTrackParticle(); + return 0.0; + } return m_d->muon->primaryTrackParticle()->charge(); } //____________________________________________________________________ unsigned int IParticleHandle_Muon::quality() const { + if( !(m_d->collHandle->hasPrimaryTrackParticleInfo()) ) { + m_d->collHandle->printMsgNoTrackParticle(); + return 0; + } return static_cast<unsigned int>(m_d->muon->quality()); } @@ -499,8 +527,12 @@ QString IParticleHandle_Muon::qualityString() const{ QString IParticleHandle_Muon::shortInfo() const { - QString l("|P|="+VP1Msg::str(momentum().mag()/SYSTEM_OF_UNITS::GeV)+" [GeV], " +muonTypeString() + ", "+qualityString() ); + QString l(""); + l+= "|P|="; + l+= VP1Msg::str(momentum().mag()/SYSTEM_OF_UNITS::GeV)+" [GeV], "; + l+= muonTypeString() + ", "; + l+= qualityString(); return l; } @@ -508,8 +540,14 @@ void IParticleHandle_Muon::fillObjectBrowser( QList<QTreeWidgetItem *>& listOfIt { IParticleHandleBase::fillObjectBrowser(listOfItems); // Obligatory! + if( !(m_d->collHandle->hasPrimaryTrackParticleInfo()) ) { + m_d->collHandle->printMsgNoTrackParticle(); + return; + } + + QTreeWidgetItem* TSOSitem = new QTreeWidgetItem(browserTreeItem()); - TSOSitem->setText(0, QString("Def. Parameters " ) ); + TSOSitem->setText(0, QString("Def. Parameters [d0,z0,phi0,theta,qOverP]" ) ); QString dParameters("("); dParameters+=QString::number(m_d->muon->primaryTrackParticle()->d0()); dParameters+=", "; @@ -567,9 +605,14 @@ const QList<std::pair<xAOD::ParameterPosition, Amg::Vector3D> >& IParticleHandle return m_d->parametersAndPositions; typedef std::pair<xAOD::ParameterPosition, Amg::Vector3D> paramAndPos; + #if defined BUILDVP1LIGHT m_d->parametersAndPositions.append(paramAndPos(xAOD::BeamLine, position() ) ); #else + if( !(m_d->collHandle->hasPrimaryTrackParticleInfo()) ) { + m_d->collHandle->printMsgNoTrackParticle(); + return m_d->parametersAndPositions; + } const Trk::Perigee& peri = m_d->muon->primaryTrackParticle()->perigeeParameters (); // FIXME - I'd quite like not to use anything which requires Athena ... m_d->parametersAndPositions.append(paramAndPos(xAOD::BeamLine, Amg::Vector3D(peri.position().x(),peri.position().y(),peri.position().z()) ) ); #endif // BUILDVP1LIGHT diff --git a/graphics/VP1/VP1Systems/VP1AODSystems/src/IParticleHandle_TrackParticle.cxx b/graphics/VP1/VP1Systems/VP1AODSystems/src/IParticleHandle_TrackParticle.cxx index 36fd22b1b228cb9bc00b8c0c22c1b9c093215efe..4eff6cd4c8972aa8e8086c5ffa410c29545eda60 100644 --- a/graphics/VP1/VP1Systems/VP1AODSystems/src/IParticleHandle_TrackParticle.cxx +++ b/graphics/VP1/VP1Systems/VP1AODSystems/src/IParticleHandle_TrackParticle.cxx @@ -453,7 +453,7 @@ double IParticleHandle_TrackParticle::charge() const //____________________________________________________________________ unsigned IParticleHandle_TrackParticle::summaryValue(xAOD::SummaryType type) const -{ +{ uint8_t num = 0; if (m_d->trackparticle->summaryValue(num,type)){ return num; @@ -493,8 +493,8 @@ unsigned IParticleHandle_TrackParticle::getNMuonPrecisionHoleLayers() const unsigned IParticleHandle_TrackParticle::getNMuonPhiLayers() const { return summaryValue(xAOD::numberOfPhiLayers); - -}//____________________________________________________________________ +} +//____________________________________________________________________ unsigned IParticleHandle_TrackParticle::getNMuonPhiHoleLayers() const { return summaryValue(xAOD::numberOfPhiHoleLayers); @@ -502,9 +502,13 @@ unsigned IParticleHandle_TrackParticle::getNMuonPhiHoleLayers() const QString IParticleHandle_TrackParticle::shortInfo() const { - QString l("|P|="+VP1Msg::str(momentum().mag()/SYSTEM_OF_UNITS::GeV)+" [GeV], "); - l+= "Pix["+QString::number(getNPixelHits())+"], SCT["+QString::number(getNSCTHits())+"], TRT["+QString::number(getNTRTHits()) - +"], Muon prec. layers/holes ["+QString::number(getNMuonPrecisionLayers())+"/"+QString::number(getNMuonPrecisionHoleLayers())+"]"; + QString l(""); + //l+= "|P|="+VP1Msg::str(momentum().mag()/SYSTEM_OF_UNITS::GeV)+" [GeV], "; + l+= "Pix["+QString::number(getNPixelHits())+"], "; + l+= "SCT["+QString::number(getNSCTHits())+"], " ; + l+= "TRT["+QString::number(getNTRTHits())+"], "; + l+= "Muon prec. layers/holes ["; + l+= QString::number(getNMuonPrecisionLayers())+"/"+QString::number(getNMuonPrecisionHoleLayers())+"]"; return l; } diff --git a/graphics/VP1/VP1Systems/VP1AODSystems/src/VertexCollHandle.cxx b/graphics/VP1/VP1Systems/VP1AODSystems/src/VertexCollHandle.cxx index 4e0768c7feb99956d326a095e84779fdb544ff72..3580acf264de69d7ff06b42fca8b67035d4b1881 100644 --- a/graphics/VP1/VP1Systems/VP1AODSystems/src/VertexCollHandle.cxx +++ b/graphics/VP1/VP1Systems/VP1AODSystems/src/VertexCollHandle.cxx @@ -292,7 +292,7 @@ bool VertexCollHandle::cut(AODHandleBase* ah) - if (!m_cut_r_allowall || !m_cut_y_allowall || !m_cut_z_allowall) + if ( !(m_cut_r_allowall) || !(m_cut_y_allowall) || !(m_cut_z_allowall) ) { messageVerbose("evaluating cuts..."); diff --git a/graphics/VP1/VP1Systems/VP1TrackSystems/src/AscObj_TSOS.cxx b/graphics/VP1/VP1Systems/VP1TrackSystems/src/AscObj_TSOS.cxx index 6cfdf1a2cf24e1fb781b846cb016600fd29bb8c3..bdf93b9c661d15428eb0ec1f205b5ddccfcc46cb 100644 --- a/graphics/VP1/VP1Systems/VP1TrackSystems/src/AscObj_TSOS.cxx +++ b/graphics/VP1/VP1Systems/VP1TrackSystems/src/AscObj_TSOS.cxx @@ -727,8 +727,8 @@ void AscObj_TSOS::addRIO_OnTrackInfoToShapes( SoSeparator*&shape_simple, Amg::Vector2D localPos; /* * see: - * https://svnweb.cern.ch/trac/atlasoff/browser/Tracking/TrkEvent/TrkEventPrimitives/trunk/TrkEventPrimitives/LocalParameters.h - * https://svnweb.cern.ch/trac/atlasoff/browser/Tracking/TrkEvent/TrkEventPrimitives/trunk/src/LocalParameters.cxx + * Tracking/TrkEvent/TrkEventPrimitives/trunk/TrkEventPrimitives/LocalParameters.h + * Tracking/TrkEvent/TrkEventPrimitives/trunk/src/LocalParameters.cxx */ if (locParams.contains(Trk::loc1)) { localPos( locParams.get(Trk::loc1), locParams.contains(Trk::loc2) ? locParams.get(Trk::loc2) : 0 ); diff --git a/graphics/VP1/VP1Systems/VP1TrackSystems/src/TrackCollHandleBase.cxx b/graphics/VP1/VP1Systems/VP1TrackSystems/src/TrackCollHandleBase.cxx index f6c008a56d15486cf8093164ec29b10f1f336d4d..176dccd938248e10a17ce801fe74f25d7367f421 100644 --- a/graphics/VP1/VP1Systems/VP1TrackSystems/src/TrackCollHandleBase.cxx +++ b/graphics/VP1/VP1Systems/VP1TrackSystems/src/TrackCollHandleBase.cxx @@ -315,7 +315,8 @@ bool TrackCollHandleBase::cut(TrackHandleBase* handle) messageVerbose("TrackCollHandleBase::cut - checking hit cuts."); if (mightHaveSubSystemHitInfo()&&!m_cut_requiredNHits.isEmpty()&&handle->hasSubSystemHitInfo()) { - assert(m_cut_requiredNHits.count()==4); + //assert(m_cut_requiredNHits.count()==4); // for old code + assert(m_cut_requiredNHits.count()==5); // Only apply ID cuts to tracks which have ID hits (so ID only and combined muons) if (handle->isIDTrack()){ if (handle->getNPixelHits()<m_cut_requiredNHits[0]) return false; @@ -725,7 +726,7 @@ TrackHandleBase* TrackCollHandleBase::getNextTrackHandle() { void TrackCollHandleBase::setUseDefaultCuts(bool useDefaults){ - if (m_d->last_useDefaultCuts==useDefaults) return; + if ( (m_d->last_useDefaultCuts) == useDefaults) return; messageVerbose("setUseDefaultCuts changed to "+str(useDefaults)+"- rechecking all handles"); // recheckCutStatusOfAllHandles(); diff --git a/graphics/VP1/VP1Systems/VP1TrackSystems/src/TrkObjToString.cxx b/graphics/VP1/VP1Systems/VP1TrackSystems/src/TrkObjToString.cxx index 5ee4d0ad1b6396cf1460bfb2c87fbbd79569e4f7..109cdc316ad3c9db9cb52e9a01018edcfdf3b0ce 100644 --- a/graphics/VP1/VP1Systems/VP1TrackSystems/src/TrkObjToString.cxx +++ b/graphics/VP1/VP1Systems/VP1TrackSystems/src/TrkObjToString.cxx @@ -381,13 +381,19 @@ TrkObjToString::fullInfo(const Trk::MeasurementBase& meas) QStringList info ("Local"); - QString posInfo = QString("(") + QString::number(meas.localParameters ()[Trk::loc1]) ; - if (meas.localParameters ().dimension()==2 ) { - posInfo.append(", "); - posInfo.append( QString::number(meas.localParameters ()[Trk::loc2] ) ); + QString posInfo(""); + if (meas.localParameters().contains(Trk::loc1)) { + posInfo = QString("(") + QString::number(meas.localParameters()[Trk::loc1]) ; + + if (meas.localParameters ().dimension()==2 ) { + posInfo.append(", "); + posInfo.append( QString::number(meas.localParameters ()[Trk::loc2] ) ); + } + posInfo.append(") [CLHEP::mm]"); + info+= posInfo; + } else { + info+= QString("[no 'Local' parameters available]"); } - posInfo.append(") [CLHEP::mm]"); - info+= posInfo; const Amg::MatrixX& err = meas.localCovariance(); info+="Error";