ATLAS Offline Software
Loading...
Searching...
No Matches
IParticleCollHandle_CaloCluster.cxx
Go to the documentation of this file.
1/*
2 Copyright (C) 2002-2024 CERN for the benefit of the ATLAS collaboration
3*/
4
5
7// //
8// Implementation of class IParticleCollHandle_CaloCluster //
9// //
10// Author: Riccardo-Maria BIANCHI (rbianchi@cern.ch) //
11// Initial version: May 2014 //
12// //
14
15//Local
19#include "AODSysCommonData.h"
20
21//VP1
22#include "VP1Base/IVP1System.h"
23#include "VP1Base/VP1Msg.h"
26#ifndef BUILDVP1LIGHT
29#endif
30
31//Qt
32#include <QStringList>
33
34//xAOD
36
37// Coin3D
38#include <Inventor/nodes/SoSeparator.h>
39#include <Inventor/nodes/SoSwitch.h>
40#include <Inventor/nodes/SoMaterial.h>
41#include <Inventor/nodes/SoTexture2.h>
42
43// Athena
45
46#ifdef BUILDVP1LIGHT
47 #include <QSettings>
48 #include "xAODRootAccess/Init.h"
50 #include "GeoModelKernel/Units.h"
51 #define SYSTEM_OF_UNITS GeoModelKernelUnits // so we will get, e.g., 'GeoModelKernelUnits::cm'
52#else
53 #include "GaudiKernel/SystemOfUnits.h"
54 #define SYSTEM_OF_UNITS Gaudi::Units // so we will get, e.g., 'Gaudi::Units::cm'
55#endif // BUILDVP1LIGHT
56
57
58//____________________________________________________________________
59#if defined BUILDVP1LIGHT
61 {
62 return sys->getObjectList(xAOD::Type::CaloCluster);
63 }
64#else
70#endif // BUILDVP1LIGHT
71
72//____________________________________________________________________
74
75public:
76
79
83
85
86 // settings
88 QPair<bool,double> scale;
92 QList<VP1Interval> allowedPhi;
94// double calculateHighestVisibleClusterEnergy() const;
95
96 #ifdef BUILDVP1LIGHT
97 QStringList caloClusterList;
98 #endif // BUILDVP1LIGHT
99
100 double calo_start_r = theclass->calo_start_r;
102 double calo_crack_eta = theclass->calo_crack_eta;
103
104 void possiblyUpdateGUI() {//Fixme: to IParticleCollHandleBase
105 if (!((updateGUICounter++)%50)) {
106 theclass->systemBase()->updateGUI();
107 }
108 }
109};
110
111/*
112 * DEFINITIONS
113 */
114//Fixme: Just some approximate values for now:
115const double IParticleCollHandle_CaloCluster::calo_start_r = 1.1*SYSTEM_OF_UNITS::m + 0.05*SYSTEM_OF_UNITS::m;
116const double IParticleCollHandle_CaloCluster::calo_start_z = 3.671*SYSTEM_OF_UNITS::m + 0.05*SYSTEM_OF_UNITS::m;
117const double IParticleCollHandle_CaloCluster::calo_crack_eta = fabs(log(tan(0.5*atan(calo_start_r/calo_start_z))));
118
119
120
121//____________________________________________________________________
123const QString& name, xAOD::Type::ObjectType type)
125{
126 m_d->theclass = this;
127 m_d->updateGUICounter = 0;
128 m_d->collSettingsButton=0;
129
130
131// m_d->controller = controller;
132// m_d->key = key;
133 m_d->sephelper = 0;
134 //We start out with no clusters visible:
135 m_d->last_highestEnergy = 0;
136 m_d->showOutlines = false;
137 m_d->considerTransverseEnergies = true;
138
139// //==========
140// // b-tagging
141// m_d->bTaggingSwitch=new SoSwitch;
142// m_d->bTaggingSwitch->whichChild=SO_SWITCH_ALL;
143// // new b-tagged jets and material
144// m_d->bTaggingTexture = new SoTexture2;
145// m_d->bTaggingMaterial = new SoMaterial;
146
147
148 //The object names should not contain all sorts of funky chars (mat button style sheets wont work for instance):
149 QString safetext(text());
150 safetext.replace(' ','_');
151 safetext.replace('[','_');
152 safetext.replace(']','_');
153 safetext.replace('/','_');
154 safetext.replace('.','_');
155 safetext.replace(',','_');
156 safetext.replace('<','_');
157 safetext.replace('>','_');
158 safetext.replace('&','_');
159
160 // m_d->defaultParametersMaterial = new SoMaterial;
161 // m_d->defaultParametersMaterial->setName(("IParticleCollHandle_CaloCluster"+safetext).toStdString().c_str());
162 // m_d->defaultParametersMaterial->ref();
163 // m_d->matButton->setDefaultParameterMaterial(m_d->defaultParametersMaterial); FIXME
164}
165
166//____________________________________________________________________
168{
169 // m_d->defaultParametersMaterial->unref();
170
171// if (m_d->bTaggingSwitch) m_d->bTaggingSwitch->unref();
172
173 delete m_d;
174}
175
176//____________________________________________________________________
178{
179 // std::cout<<"IParticleCollHandle_CaloCluster::init 1"<<std::endl;
180
181
182 // m_d->matButton = new CaloClusterCollectionSettingsButton;
183 // m_d->matButton->setMaterialText(name());
184
185 // INIT THE COLLECTION 'MATERIAL' BUTTON
186 m_d->collSettingsButton = new CaloClusterCollectionSettingsButton;
187 m_d->collSettingsButton->setMaterialText(name());
188
189 // pass a collection pointer to the button
190 m_d->collSettingsButton->setCollHandle(this);
191
192 // std::cout<<"Calling VP1StdCollection::init with m_d->matButton (CaloClusterCollectionSettingsButton)="<<m_d->matButton<<std::endl;
193 VP1StdCollection::init(m_d->collSettingsButton);//this call is required. Passing in m_d->collSettingsButton means we have the more complex button.
194 setupSettingsFromController(common()->controller());
195 connect(this,SIGNAL(visibilityChanged(bool)),this,SLOT(collVisibilityChanged(bool)));
196
197
198 // std::cout<<"IParticleCollHandle_CaloCluster::init 2"<<std::endl;
199 // std::cout<<"swi: "<<collSwitch()<<std::endl;
200 // std::cout<<"sep: "<<collSep()<<std::endl;
201 // std::cout<<"mat: "<<material()<<std::endl;
202
203 // collSwitch()->addChild(m_d->collSettingsButton->trackLightModel()); // TODO: update for jets
204 // collSwitch()->addChild(m_d->collSettingsButton->trackDrawStyle()); // TODO: update for jets
205
206// //==========
207// // b-tagging
208// if(m_d->collSettingsButton->is_bTaggingSkinEnabled()) {
209// std::cout << "switch texture" << std::endl;
210// setBTaggingSkin(m_d->collSettingsButton->bTaggingSkin());
211// // m_d->bTaggingSwitch->addChild(m_d->bTaggingTexture);
212// }
213// else if (m_d->collSettingsButton->is_bTaggingMaterialEnabled()) {
214// std::cout << "switch material" << std::endl;
215// setBTaggingMaterial();
216// // m_d->bTaggingMaterial = controller->bTaggingMaterial();
217// // m_d->bTaggingSwitch->addChild(m_d->bTaggingMaterial);
218// }
219// else {
220// messageVerbose("Info - No b-tag rendering selected.");
221// }
222//
223// // we want these nodes to stay around even when removed from nodes, thus we increment the ref count by one
224// m_d->bTaggingSwitch->ref();
225// // m_d->bTaggingTexture->ref();
226// // m_d->bTaggingMaterial->ref();
227// //==========
228
229
230}
231
232
233
234//____________________________________________________________________
235double IParticleCollHandle_CaloCluster::energyToLength(const double&energy) const
236{
237 VP1Msg::messageDebug("IParticleCollHandle_CaloCluster::energyToLength()");
238
239 return std::max(1*SYSTEM_OF_UNITS::mm, m_d->scale.second*(m_d->scale.first?log(1+fabs(energy)):energy));
240}
241
242//____________________________________________________________________
244{
245 VP1Msg::messageDebug("IParticleCollHandle_CaloCluster::showOutlines()");
246
247 return m_d->showOutlines;
248}
249
250//____________________________________________________________________
255
256#include <Inventor/nodes/SoMaterial.h>//Fixme: just for hack below
257//____________________________________________________________________
258void IParticleCollHandle_CaloCluster::setScale(const QPair<bool,double>& s)
259{
260// std::cout << "s: " << s.first << std::endl;
261
262 VP1Msg::messageDebug("IParticleCollHandle_CaloCluster::setScale()");
263
264
265 if (m_d->scale==s) {
266 VP1Msg::messageDebug("Scale is the same. Returning...");
267 return;
268 }
269
270 VP1Msg::messageDebug("setting scale: (" + QString::number(s.first) + ", " + QString::number(s.second) + " )");
271 m_d->scale=s;
272
273 if (!isLoaded()) {
274 VP1Msg::messageDebug("Collection not loaded/shown. Returning...");
275 return;
276 }
277// largeChangesBegin();
278// for(Imp::ClusterHandle*cluster : m_d->clusters)
279// if (cluster->attached())
280// cluster->updateShapePars(m_d);
281// largeChangesEnd();
282
285 AODHandleBase* handle=0;
286 while ((handle=getNextHandle()))
287 {
288 IParticleHandle_CaloCluster* cluster = dynamic_cast<IParticleHandle_CaloCluster*>(handle);
289 if (cluster && cluster->has3DObjects()) {
290// cluster->setScale(m_d->scale);
291 cluster->updateShape(this);
292// calo->updateHeight();
293 } else {
294 message("ERROR Handle of wrong type!");
295 }
296 }
298
299
300
301 // if (verbose())
302 // static_cast<IVP13DSystemSimple *>(systemBase())->warnOnDisabledNotifications();
303
304 material()->touch();//FIXME: This is needed (and nothing else seems to matter). BUT WHY?????? Where is the bug?!?!?
305}
306
307
308//____________________________________________________________________
310{
311 VP1Msg::messageDebug("IParticleCollHandle_CaloCluster::scale()");
312 return m_d->scale;
313}
314
315
316//____________________________________________________________________
318
319 VP1Msg::messageDebug("IParticleCollHandle_CaloCluster::setupSettingsFromControllerSpecific()");
320
321 CaloClusterCollectionSettingsButton* controller = m_d->collSettingsButton;
322
323 // *** common cuts ***
324 connect(controller,SIGNAL(cutAllowedPtChanged(const VP1Interval&)),this,SLOT(setCutAllowedPt(const VP1Interval&)));
325 setCutAllowedPt(controller->cutAllowedPt());
326
327 connect(controller,SIGNAL(energyTypeChanged()),this,SLOT(rebuildAllObjects()));
328
329 connect(controller,SIGNAL(cutAllowedEtaChanged(const VP1Interval&)),this,SLOT(setCutAllowedEta(const VP1Interval&)));
330 setCutAllowedEta(controller->cutAllowedEta());
331
332 connect(controller,SIGNAL(cutAllowedPhiChanged(const QList<VP1Interval>&)),this,SLOT(setCutAllowedPhi(const QList<VP1Interval>&)));
333 setCutAllowedPhi(controller->cutAllowedPhi());
334
335 // *** specific cuts and settings ***
336
337 // scale
338 connect(controller,SIGNAL(scaleChanged(const QPair<bool,double>&)),this,SLOT(setScale(const QPair<bool,double>&)));
339 setScale( controller->scale() ); // FIXME:
340
341 // after completed 'recheckHighestVisibleClusterEnergy()', we call 'scale()' in the controller
342 connect(this,SIGNAL(highestVisibleClusterEnergyChanged()),controller,SLOT(possibleChange_scale()));
343
344
345// // random jet colors
346// connect(controller,SIGNAL(rerandomise()),this,SLOT(rerandomise()));
347// connect(controller,SIGNAL(randomJetColoursChanged(const bool&)),this,SLOT(setRandomJetColours(const bool&)));
348// setRandomJetColours(controller->randomJetColours());
349
350 // maxR
351// connect(controller, SIGNAL(maxRChanged(const double&)), this, SLOT(setMaxR(const double&)));
352// connect(controller, SIGNAL(signalMaxR(bool)), this, SLOT(setIsMaxR(bool)));
353
354}
355
357{
358 // kinetic cuts
359 setCutAllowedPt(m_d->collSettingsButton->cutAllowedPt());
360 setCutAllowedEta(m_d->collSettingsButton->cutAllowedEta());
361 setCutAllowedPhi(m_d->collSettingsButton->cutAllowedPhi());
362 // other settings
363 setScale( m_d->collSettingsButton->scale() ); // FIXME:
364
365}
366
367//____________________________________________________________________
368//SoMaterial* IParticleCollHandle_CaloCluster::defaultParameterMaterial() const {
369// return m_d->defaultParametersMaterial;
370//}
371
372
373//____________________________________________________________________
375 if (!m_d->collSettingsButton){
376 messageVerbose("CaloCluster - No collSettingsButton set! Can't call init(), so crash is imminent...");
377 throw std::runtime_error("CaloCluster - No collSettingsButton set!");
378 }
379 return *m_d->collSettingsButton;
380}
381
382
383
384//____________________________________________________________________
386{
387 VP1Msg::messageVerbose("IParticleCollHandle_CaloCluster::rebuildAllObjects()");
388
390 recheckCutStatusOfAllNotVisibleHandles(); // Redundant, but needed! TODO: remove this when new 'contains' is ready
391}
392
393
394//____________________________________________________________________
396{
397 VP1Msg::messageVerbose("IParticleCollHandle_CaloCluster::isConsiderTransverseEnergy()");
398 return m_d->collSettingsButton->isTransverseEnergy();
399}
400
401//____________________________________________________________________
403{
404 VP1Msg::messageDebug("IParticleCollHandle_CaloCluster::setShowVolumeOutLines()");
405
406 if (m_d->showOutlines==b) return;
407
408 m_d->showOutlines=b;
409
410 if (!isLoaded()) return
413 AODHandleBase* handle=0;
414 while ((handle=getNextHandle()))
415 {
416 IParticleHandle_CaloCluster* cluster = dynamic_cast<IParticleHandle_CaloCluster*>(handle);
417 if (cluster && cluster->has3DObjects()) {
418 if (cluster->genericBox())
419 cluster->genericBox()->drawEdgeLines = b;
420 } else {
421 message("ERROR Handle of wrong type!");
422 }
423 }
425
426
427}
428
429
430//____________________________________________________________________
432{
433 messageVerbose("loading CaloCluster collection");
434
435 //Get collection:
436 const xAOD::CaloClusterContainer * coll(nullptr);
437
438 #if defined BUILDVP1LIGHT
439 // // Get the name of the application:
440 // const char* appName = "VP1Light";
441
442 // // Initialize the environment:
443 // if( !xAOD::Init( appName ).isSuccess() ) {
444 // message("Failed to execute xAOD::Init");
445 // return false;
446 // }
447
448 // Retrieve objects from the event
449 if( !(systemBase()->getEvent())->retrieve( coll, name().toStdString()).isSuccess() ) {
450 QString errMsg = "Failed to retrieve " + name();
451 message("Error: Could not retrieve collection with key="+name());
452 return false;
453 }
454 #else
455 if (!VP1SGAccessHelper(systemBase()).retrieve(coll, name())) {
456 message("Error: Could not retrieve collection with key="+name());
457 return false;
458 }
459 #endif // BUILDVP1LIGHT
460
461 // // Retrieve the xAOD particles:
462 // const xAOD::JetContainer* xaod = evtStore()->retrieve<const xAOD::JetContainer>( m_JetCollection );
463
464 // Check that the auxiliary store association was made successfully:
465 if( ! coll->hasStore() ) {
466 message("No auxiliary store got associated to the CaloCluster container with key: " +name());
467 }
468
469 // This is needed for now, until the issues around the DV code are
470 // sorted out...
471 const_cast< xAOD::CaloClusterContainer* >( coll )->setStore(
472 ( SG::IAuxStore* ) coll->getConstStore() );
473
474
476 for ( it = coll->begin() ; it != itEnd; ++it) {
477 m_d->possiblyUpdateGUI();
478 if (!*it) {
479 messageDebug("WARNING: Ignoring null CaloCluster pointer.");
480 continue;
481 }
482
484 }
485
486 // get handles list and update locally
487 // m_d->jets = this->getHandlesList();
488
489 return true;
490}
491
492//Cuts:
493//____________________________________________________________________
495 messageVerbose("IParticleCollHandle_CaloCluster::cut()");
496
497 if (IParticleHandle_CaloCluster* handle = dynamic_cast<IParticleHandle_CaloCluster*>(c))
498 {
499
500 message("CaloCluster::cut() --- to be implemented......");
501
502
503 //------ ENERGY CUTS
504 double jEnergy = handle->energyForCuts();
505 double jEnergySqr = jEnergy * jEnergy; // in IParticleCollHandleBase the allowedPt is stored as squared, to avoid square-root operations
506 messageVerbose("object's energy, object's energy^2, allowedPt^2, isPtAll: " + QString::number(jEnergy) + " - " + QString::number(jEnergySqr) + " - " + getCutAllowedPt().toString() + " - " + QString::number(int(getPtAllowall())) );
507 if (!getPtAllowall() && !getCutAllowedPt().contains(jEnergySqr) ) {
508 messageVerbose("Energy cut not passed");
509 return false;
510 }
511
512 //------ ETA CUTS
513 messageVerbose("object's eta, etaCut, EtaAll: " + QString::number(handle->eta()) + " - " + getCutAllowedEta().toString() + " - " + QString::number(int(getEtaAllowall())) );
514 if (!getEtaAllowall() && !getCutAllowedEta().contains(handle->eta())) {
515 messageVerbose("Eta cut not passed");
516 return false;
517 }
518
519 //------ PHI CUTS
520 if (!getPhiAllowall() ) {
521 double phi = handle->phi();
522 bool ok(false);
523 for (const VP1Interval& phirange : getCutAllowedPhi() ) {
524 messageVerbose("object's phi, phiCut, PhiAll: " + QString::number(phi) + " - " + phirange.toString() + " - " + QString::number(int(getPhiAllowall())) );
525 if (phirange.contains(phi)||phirange.contains(phi+2*M_PI)||phirange.contains(phi-2*M_PI)) {
526 ok = true;
527 break;
528 }
529 }
530 if (!ok) {
531 messageVerbose("Phi cut not passed");
532 return false;
533 }
534 }
535//
536// //------ OTHER CUTS
537// messageVerbose("Other cuts??? Calling base method...");
538// if (!IParticleCollHandleBase::cut(handle))
539// return false;
540
541 } // if(dynamic_cast)
542 else{
543 messageVerbose("Not a IParticleCollHandle_CaloCluster. Calling base method...");
544 if (!IParticleCollHandleBase::cut(handle))
545 return false;
546 }
547
548 return true; //default
549
550}
551
552
553
554//____________________________________________________________________
556 messageDebug("IParticleCollHandle_CaloCluster::showParametersChanged to "+str(val));
558}
559
560
561//____________________________________________________________________
563{
564 messageDebug("IParticleCollHandle_CaloCluster::highestVisibleClusterEnergy()");
565 return m_d->last_highestEnergy;
566}
567
568
569//____________________________________________________________________
571{
572 messageDebug("IParticleCollHandle_CaloCluster::Imp::calculateHighestVisibleClusterEnergy()");
573 if (!isLoaded()){
574 messageDebug("Not loaded. Returning...");
575 return 0;
576 }
577 double e = 0;
578
580 AODHandleBase* handle=0;
581 while ((handle=getNextHandle()))
582 {
583 IParticleHandle_CaloCluster* cluster = dynamic_cast<IParticleHandle_CaloCluster*>(handle);
584 if (cluster && cluster->has3DObjects()) {
585// if ( e < cluster->energyForLengthAndCuts(this) )
586// e = cluster->energyForLengthAndCuts(this);
587 if ( e < cluster->energyForCuts() )
588 e = cluster->energyForCuts();
589 } else {
590 message("ERROR Handle of wrong type!");
591 }
592 }
593
594 return e;
595}
596
597//____________________________________________________________________
599{
600 //When visibility or cut changes:
601// double newhighest = m_d->calculateHighestVisibleClusterEnergy();
602 double newhighest = calculateHighestVisibleClusterEnergy();
603 if (m_d->last_highestEnergy == newhighest)
604 return;
605 m_d->last_highestEnergy = newhighest;
607}
608
609
610
611//____________________________________________________________________
613{
614 messageDebug("IParticleCollHandle_CaloCluster::persistifiableState() - start...");
615
616 // if (!m_d->matButton) {
617 // message("ERROR: persistifiableState() called before init()");
618 // return QByteArray();
619 // }
620
621
622 VP1Serialise serialise(1/*version*/);
623
624 // settings
625 serialise.disableUnsavedChecks();
626
627 // SAVE THE CHECKED/UNCHECKED STATUS OF THE COLLECTION
628 serialise.save(visible());
629
630 // SAVE THE MATERIAL BUTTON
631 //Q_ASSERT(m_d->matButton&&"Did you forget to call init() on this VP1StdCollection?");
632 //serialise.save(m_d->matButton->saveState());
633
634 // SAVE THE EXTRA-STATES
635 serialise.save(extraWidgetsState());//version 1+
636
637 // SAVE MATERIAL SETTINGS / CUTS
638 serialise.save(m_d->collSettingsButton->saveState());
639
640 messageDebug("IParticleCollHandle_CaloCluster::persistifiableState() - end.");
641 return serialise.result();
642}
643
644//____________________________________________________________________
646{
647 VP1Deserialise des(state);
649 if (des.version()!=0&&des.version()!=1) {
650 messageDebug("Warning: Ignoring state with wrong version");
651 return;
652 }
653
654 // save state
655
656 bool vis = des.restoreBool();
657
658 // QByteArray matState = des.restoreByteArray();
659 // m_d->matButton->restoreFromState(matState);
660 QByteArray extraWidgetState = des.version()>=1 ? des.restoreByteArray() : QByteArray();
661 setVisible(vis);
662
663 if (extraWidgetState!=QByteArray())
664 setExtraWidgetsState(extraWidgetState);
665
666 // MATERIAL SETTINGS / CUTS
667 messageDebug("restoring material collection button...");
668 des.restore(m_d->collSettingsButton);
669
670 messageDebug("reset all caches storing values for cuts...");
672
673 messageDebug("recheck all handles...");
675}
676
678 str << "\""<<name().toLatin1().data()<<"\":{";
679
680 unsigned int num=0;
681 for (auto handle : getHandlesList() ) {
682 if (handle->visible()) {
683 if (num) str <<",\n";
684 str << "\"Clus "<<num++<< "\":{";
685 handle->dumpToJSON(str);
686 str << "}";
687 }
688 }
689
690 str << "}";
691}
692
#define M_PI
Scalar phi() const
phi method
const AODSysCommonData * common() const
void recheckCutStatusOfAllNotVisibleHandles()
void recheckCutStatusOfAllVisibleHandles()
void setExtraWidgetsState(const QByteArray &)
QByteArray extraWidgetsState() const
void setupSettingsFromController(const AODSystemController *)
const QString & name() const
DataModel_detail::const_iterator< DataVector > const_iterator
Definition DataVector.h:838
const_iterator end() const noexcept
Return a const_iterator pointing past the end of the collection.
const_iterator begin() const noexcept
Return a const_iterator pointing at the beginning of the collection.
const VP1Interval & getCutAllowedEta()
IParticleCollHandleBase(AODSysCommonData *, const QString &name, xAOD::Type::ObjectType)
virtual AODHandleBase * getNextHandle()
void setCutAllowedPt(const VP1Interval &)
const QList< VP1Interval > & getCutAllowedPhi()
const VP1Interval & getCutAllowedPt()
virtual bool cut(AODHandleBase *)
QList< AODHandleBase * > getHandlesList() const
void setCutAllowedPhi(const QList< VP1Interval > &)
void setCutAllowedEta(const VP1Interval &)
CaloClusterCollectionSettingsButton * collSettingsButton
double energyToLength(const double &energy) const
void setState(const QByteArray &)
Provide specific implementation.
virtual void dumpToJSON(std::ofstream &) const
IParticleCollHandle_CaloCluster(AODSysCommonData *, const QString &name, xAOD::Type::ObjectType type)
QByteArray persistifiableState() const
Provide specific implementation.
const CaloClusterCollectionSettingsButton & collSettingsButton() const
static QStringList availableCollections(IVP1System *)
virtual void setupSettingsFromControllerSpecific(const AODSystemController *)
For extensions specific to this collection.
virtual void init(VP1MaterialButtonBase *matBut=0)
virtual bool has3DObjects()
Returns true if the 3D objects have been created.
void updateShape(IParticleCollHandle_CaloCluster *coll)
Interface for non-const operations on an auxiliary store.
Definition IAuxStore.h:48
SoSFBool drawEdgeLines
QByteArray restoreByteArray()
void disableUnrestoredChecks()
void restore(QCheckBox *sb)
qint32 version() const
void messageVerbose(const QString &) const
void message(const QString &) const
IVP1System * systemBase() const
void messageDebug(const QString &) const
static void messageVerbose(const QString &)
Definition VP1Msg.cxx:84
static void messageDebug(const QString &)
Definition VP1Msg.cxx:39
QStringList getKeys() const
SoMaterial * material() const
virtual void largeChangesEnd()
virtual void init(VP1MaterialButtonBase *button=0)
virtual void largeChangesBegin()
void visibilityChanged(bool)
QString text() const
bool contains(const std::string &s, const std::string &regx)
does a string contain the substring
Definition hcg.cxx:114
ObjectType
Type of objects that have a representation in the xAOD EDM.
Definition ObjectType.h:32
@ CaloCluster
The object is a calorimeter cluster.
Definition ObjectType.h:39
CaloClusterContainer_v1 CaloClusterContainer
Define the latest version of the calorimeter cluster container.