00001
00002
00003 #include "VisSimulation/VisSimHits/interface/VisPCaloHitTwig.h"
00004 #include "VisFramework/VisFrameworkBase/interface/VisTwigFactroyService.h"
00005 #include "VisFramework/VisFrameworkBase/interface/VisEventSelector.h"
00006 #include "VisFramework/VisFrameworkBase/interface/debug.h"
00007 #include "VisFramework/VisEventSetup/interface/VisSubdetector.h"
00008 #include "VisFramework/VisEventSetup/interface/VisEventSetupService.h"
00009 #include "VisFramework/VisConfigService/interface/VisConfigurationService.h"
00010 #include "DataFormats/DetId/interface/DetId.h"
00011 #include "FWCore/Framework/interface/Event.h"
00012 #include "FWCore/Framework/interface/EventSetup.h"
00013 #include "Geometry/CaloGeometry/interface/CaloSubdetectorGeometry.h"
00014 #include "Geometry/CaloGeometry/interface/CaloCellGeometry.h"
00015 #include "Geometry/Records/interface/CaloGeometryRecord.h"
00016 #include "SimDataFormats/CaloHit/interface/PCaloHit.h"
00017 #include "SimDataFormats/CaloHit/interface/PCaloHitContainer.h"
00018 #include "Iguana/Framework/interface/IgRepSet.h"
00019 #include "Iguana/Inventor/interface/IgSoCircularHist.h"
00020 #include "Iguana/Inventor/interface/IgSoCrystalHit.h"
00021 #include "Iguana/Inventor/interface/IgSoRZHist.h"
00022 #include "Iguana/Studio/interface/IgDocumentData.h"
00023 #include "Iguana/Studio/interface/IgQtLock.h"
00024 #include "Iguana/Models/interface/IgTextRep.h"
00025 #include "Iguana/GLModels/interface/Ig3DRep.h"
00026 #include "Iguana/GLModels/interface/IgLegoRep.h"
00027 #include "Iguana/GLModels/interface/IgRPhiRep.h"
00028 #include "Iguana/GLModels/interface/IgRZRep.h"
00029 #include <Inventor/nodes/SoMaterial.h>
00030 #include <Inventor/nodes/SoSeparator.h>
00031 #include <qstring.h>
00032 #include <iostream>
00033 #include <iomanip>
00034
00035
00036
00037
00038
00039
00040
00041
00042
00043 namespace
00044 {
00045 VisQueuedTwig *
00046 createThisTwig (IgState *state, IgTwig *parent,
00047 const std::string &name,
00048 const std::string &friendlyName,
00049 const std::string &modLabel,
00050 const std::string &instanceName,
00051 const std::string &processName)
00052 {
00053 IgTwig *rootTwig = IgDocumentData::get (state)->root ();
00054 IgTwig *eventTwig = 0;
00055 eventTwig = rootTwig->lookup ("/Objects/CMS Event and Detector/Simulated Data/Sim Calo Hits");
00056
00057 if (! eventTwig)
00058 eventTwig = parent;
00059
00060 return new VisPCaloHitTwig (state, eventTwig, "[N/A] PCaloHit (" + name + ")", friendlyName, modLabel, instanceName, processName);
00061 }
00062 }
00063
00064
00065
00066
00067 VisPCaloHitTwig::VisPCaloHitTwig (IgState *state, IgTwig *parent, const std::string &name ,
00068 const std::string &friendlyName ,
00069 const std::string &moduleLabel ,
00070 const std::string &instanceName ,
00071 const std::string &processName )
00072 : VisQueuedTwig (state, parent, name),
00073 m_text (name),
00074 m_friendlyName (friendlyName),
00075 m_moduleLabel (moduleLabel),
00076 m_instanceName (instanceName),
00077 m_processName (processName),
00078 m_minEnergy (0.1)
00079 {
00080 VisTwigFactroyService *tfService = VisTwigFactroyService::get (state);
00081 if (! tfService)
00082 {
00083 tfService = new VisTwigFactroyService (state);
00084 }
00085 edm::TypeID caloJetsID (typeid (edm::PCaloHitContainer));
00086 tfService->registerTwig (caloJetsID.friendlyClassName (), &createThisTwig);
00087
00088 const edm::ParameterSet *pset = VisConfigurationService::pSet ();
00089 if (pset)
00090 {
00091 m_minEnergy = pset->getUntrackedParameter<double> ("VisPCaloHitTwig_minEnergy", 0.1);
00092 }
00093 }
00094
00095 void
00096 VisPCaloHitTwig::onNewEvent (const edm::Event &event,
00097 const edm::EventSetup &eventSetup)
00098 {
00099
00100 VisQueuedTwig::onNewEvent (event, eventSetup);
00101
00102 m_hits.clear ();
00103 m_text = (QString ("Run %1, Event %2, LS %3, Orbit %4, BX %5")
00104 .arg (event.id ().run ())
00105 .arg (event.id ().event ())
00106 .arg (event.luminosityBlock ())
00107 .arg (event.orbitNumber ())
00108 .arg (event.bunchCrossing ())
00109 .latin1 ());
00110
00111 std::vector<edm::Handle<edm::PCaloHitContainer> > hitCollections;
00112
00113 try
00114 {
00115 if ((! m_friendlyName.empty ()) || (! m_moduleLabel.empty ()) || (! m_instanceName.empty ()) || (! m_processName.empty ()))
00116 {
00117 VisEventSelector visSel (m_friendlyName, m_moduleLabel, m_instanceName, m_processName);
00118 event.getMany (visSel, hitCollections);
00119 }
00120 }
00121 catch (cms::Exception& e)
00122 {
00123 e.append (" from VisPCaloHitTwig::onNewEvent ");
00124 e.append (this->name ());
00125
00126 if (this->m_onCmsException)
00127 this->m_onCmsException (&e);
00128 }
00129 catch (lat::Error &e)
00130 {
00131 if (this->m_onError)
00132 this->m_onError (&e);
00133 }
00134 catch (std::exception &e)
00135 {
00136 if (this->m_onException)
00137 this->m_onException (&e);
00138 }
00139 catch (...)
00140 {
00141 if (this->m_onUnhandledException)
00142 this->m_onUnhandledException ();
00143 }
00144
00145 if (! hitCollections.empty ())
00146 {
00147 for (std::vector<edm::Handle<edm::PCaloHitContainer> >::iterator i = hitCollections.begin (), iEnd = hitCollections.end (); i != iEnd; ++i)
00148 {
00149 const edm::PCaloHitContainer& c = *(*i);
00150 QString sizeStr = (QString ("%1").arg (c.size ()));
00151 QString nameStr = QString (this->name ());
00152 int ib = nameStr.find ("[");
00153 int ie = nameStr.find ("]");
00154 nameStr.replace (ib + 1, ie - 1, sizeStr);
00155
00156 this->name (nameStr);
00157
00158 for (std::vector<PCaloHit>::const_iterator isim = c.begin (), isimEnd = c.end ();
00159 isim != isimEnd; ++isim)
00160 {
00161 m_hits.push_back ((*isim));
00162 }
00163 }
00164 }
00165
00166 IgRepSet::invalidate (this, IgTwig::SELF_MASK | IgTwig::STRUCTURE_MASK);
00167 }
00168
00169 void
00170 VisPCaloHitTwig::update (IgTextRep *rep)
00171 {
00172
00173 VisQueuedTwig::update (rep);
00174
00175
00176 std::ostringstream text;
00177 text << "Total " << m_hits.size () << " hits from ";
00178 text << m_text << "<br>";
00179
00180 text << "Above 0.1 GeV:<br>";
00181
00182 text << "<table width='100%' border=1>"
00183 << "<TR align = center>"
00184 << "<TH>Number</TH>"
00185 << "<TH>Energy</TH>"
00186 << "<TH>Time of deposit</TH>"
00187 << "<TH>DetID</TH>"
00188 << "<TH>Track ID</TH>"
00189 << "</TR>";
00190 text << setiosflags (std::ios::showpoint | std::ios::fixed);
00191 text.setf (std::ios::right, std::ios::adjustfield);
00192
00193 if ((! m_hits.empty ()))
00194 {
00195 int nHits = 0;
00196 try
00197 {
00198 for (std::vector<PCaloHit>::const_iterator i = m_hits.begin (); i != m_hits.end (); ++i)
00199 {
00200 if ((*i).energy () >= m_minEnergy)
00201 {
00202 text << "<TR align = right>"
00203 << "<TD>" << std::setw (3) << nHits++ << "</TD>"
00204 << "<TD>" << std::setw (6) << std::setprecision (3) << (*i).energy () << "</TD>"
00205 << "<TD>" << std::setw (6) << std::setprecision (3) << (*i).time () << "</TD>"
00206 << "<TD>" << std::setw (6) << std::setprecision (3) << (*i).id () << "</TD>"
00207 << "<TD>" << std::setw (6) << std::setprecision (3) << (*i).geantTrackId () << "</TD></TR>";
00208 }
00209 }
00210 }
00211 catch (cms::Exception& e)
00212 {
00213 if (this->m_onCmsException)
00214 this->m_onCmsException (&e);
00215 }
00216 catch (lat::Error &e)
00217 {
00218 if (this->m_onError)
00219 this->m_onError (&e);
00220 }
00221 catch (std::exception &e)
00222 {
00223 if (this->m_onException)
00224 this->m_onException (&e);
00225 }
00226 catch (...)
00227 {
00228 if (this->m_onUnhandledException)
00229 this->m_onUnhandledException ();
00230 }
00231 text << "</table>";
00232 }
00233
00234
00235 IgQtLock ();
00236 rep->setText (text.str ());
00237 }
00238
00239 void
00240 VisPCaloHitTwig::update (Ig3DRep *rep)
00241 {
00242
00243 VisQueuedTwig::update (rep);
00244
00245 IgQtLock ();
00246 rep->clear ();
00247
00248 if (! m_hits.empty ())
00249 {
00250 SoSeparator *sep = new SoSeparator;
00251
00252 SoMaterial *mat = new SoMaterial;
00253 mat->diffuseColor.setValue (0.0, 0.0, 1.0);
00254 sep->addChild (mat);
00255
00256 try
00257 {
00258 VisEventSetupService *esService = VisEventSetupService::get (state ());
00259 ASSERT (esService);
00260
00261 for (std::vector<PCaloHit>::const_iterator i = m_hits.begin (); i != m_hits.end (); ++i)
00262 {
00263 double energy = (*i).energy ();
00264
00265 if (energy >= m_minEnergy)
00266 {
00267 const DetId detUnitId ((*i).id ());
00268
00269 const CaloCellGeometry::CornersVec& corners = esService->getCorners (detUnitId);
00270 ASSERT (corners.size () == 8);
00271
00272 IgSoCrystalHit *crystalHit = new IgSoCrystalHit;
00273 crystalHit->energy.setValue (energy);
00274 crystalHit->scale.setValue (1.0);
00275 crystalHit->relativeWidth.setValue (1.0);
00276 crystalHit->drawCrystal.setValue (true);
00277 crystalHit->drawHit.setValue (true);
00278
00279 switch (detUnitId.det ())
00280 {
00281 case DetId::Ecal:
00282
00283
00284
00285
00286
00287 crystalHit->front1.setValue (corners [3].x () / 100.0, corners [3].y () / 100.0, corners [3].z () / 100.0);
00288 crystalHit->front2.setValue (corners [2].x () / 100.0, corners [2].y () / 100.0, corners [2].z () / 100.0);
00289 crystalHit->front3.setValue (corners [1].x () / 100.0, corners [1].y () / 100.0, corners [1].z () / 100.0);
00290 crystalHit->front4.setValue (corners [0].x () / 100.0, corners [0].y () / 100.0, corners [0].z () / 100.0);
00291
00292 crystalHit->back1.setValue (corners [7].x () / 100.0, corners [7].y () / 100.0, corners [7].z () / 100.0);
00293 crystalHit->back2.setValue (corners [6].x () / 100.0, corners [6].y () / 100.0, corners [6].z () / 100.0);
00294 crystalHit->back3.setValue (corners [5].x () / 100.0, corners [5].y () / 100.0, corners [5].z () / 100.0);
00295 crystalHit->back4.setValue (corners [4].x () / 100.0, corners [4].y () / 100.0, corners [4].z () / 100.0);
00296
00297 break;
00298 case DetId::Hcal:
00299
00300
00301
00302
00303
00304 crystalHit->front1.setValue (corners [0].x () / 100.0, corners [0].y () / 100.0, corners [0].z () / 100.0);
00305 crystalHit->front2.setValue (corners [1].x () / 100.0, corners [1].y () / 100.0, corners [1].z () / 100.0);
00306 crystalHit->front3.setValue (corners [2].x () / 100.0, corners [2].y () / 100.0, corners [2].z () / 100.0);
00307 crystalHit->front4.setValue (corners [3].x () / 100.0, corners [3].y () / 100.0, corners [3].z () / 100.0);
00308
00309 crystalHit->back1.setValue (corners [4].x () / 100.0, corners [4].y () / 100.0, corners [4].z () / 100.0);
00310 crystalHit->back2.setValue (corners [5].x () / 100.0, corners [5].y () / 100.0, corners [5].z () / 100.0);
00311 crystalHit->back3.setValue (corners [6].x () / 100.0, corners [6].y () / 100.0, corners [6].z () / 100.0);
00312 crystalHit->back4.setValue (corners [7].x () / 100.0, corners [7].y () / 100.0, corners [7].z () / 100.0);
00313
00314 break;
00315 case DetId::Calo:
00316
00317 break;
00318 default:
00319 break;
00320 }
00321 sep->addChild (crystalHit);
00322 }
00323 }
00324 }
00325 catch (cms::Exception& e)
00326 {
00327 e.append (" from VisPCaloHitTwig::update(Ig3DRep*) ");
00328 e.append (this->name ());
00329
00330 if (this->m_onCmsException)
00331 this->m_onCmsException (&e);
00332 }
00333 catch (lat::Error &e)
00334 {
00335 if (this->m_onError)
00336 this->m_onError (&e);
00337 }
00338 catch (std::exception &e)
00339 {
00340 if (this->m_onException)
00341 this->m_onException (&e);
00342 }
00343 catch (...)
00344 {
00345 if (this->m_onUnhandledException)
00346 this->m_onUnhandledException ();
00347 }
00348 rep->node ()->addChild (sep);
00349 }
00350 }
00351
00352 void
00353 VisPCaloHitTwig::update (IgLegoRep *rep)
00354 {
00355
00356 VisQueuedTwig::update (rep);
00357 }
00358
00359 void
00360 VisPCaloHitTwig::update (IgRPhiRep *rep)
00361 {
00362
00363 VisQueuedTwig::update (rep);
00364 IgQtLock ();
00365
00366 rep->clear ();
00367
00368 if (! m_hits.empty ())
00369 {
00370 int nbrOfBins = 0;
00371 int binNumber;
00372 double radius = 0;
00373 float layer = 0;
00374
00375 try
00376 {
00377 VisEventSetupService *esService = VisEventSetupService::get (state ());
00378 ASSERT (esService);
00379
00380 std::vector<PCaloHit>::const_iterator i = m_hits.begin ();
00381
00382
00383 const DetId detUnitId ((*i).id ());
00384
00385 if ((VisSubdetector::detName (detUnitId.det ()) == "Hcal" && VisSubdetector::subDetName (detUnitId.det (), detUnitId.subdetId ()) == "HcalBarrel") ||
00386 (VisSubdetector::detName (detUnitId.det ()) == "Ecal" && VisSubdetector::subDetName (detUnitId.det (), detUnitId.subdetId ()) == "EcalBarrel"))
00387 {
00388 SoSeparator *sep = new SoSeparator;
00389
00390 if (VisSubdetector::detName (detUnitId.det ()) == "Hcal" && VisSubdetector::subDetName (detUnitId.det (), detUnitId.subdetId ()) == "HcalBarrel")
00391 {
00392 SoMaterial *mat = new SoMaterial;
00393 mat->diffuseColor.setValue (0.6, 0.2, 0.8);
00394 sep->addChild (mat);
00395
00396 nbrOfBins = 72;
00397 radius = 1.9;
00398 layer = 10.0;
00399 }
00400 else if (VisSubdetector::detName (detUnitId.det ()) == "Ecal" && VisSubdetector::subDetName (detUnitId.det (), detUnitId.subdetId ()) == "EcalBarrel")
00401 {
00402 SoMaterial *mat = new SoMaterial;
00403 mat->diffuseColor.setValue (1.0 , 0.0, 0.6);
00404 sep->addChild (mat);
00405
00406 nbrOfBins = 360;
00407 radius = 1.3;
00408 layer = 11.0;
00409 }
00410
00411 std::vector<float> bufferPositive (nbrOfBins);
00412
00413 std::cout << VisSubdetector::detName (detUnitId.det ()) << VisSubdetector::subDetName (detUnitId.det (), detUnitId.subdetId ()) << std::endl;
00414
00415 for (i = m_hits.begin (); i != m_hits.end (); ++i)
00416 {
00417 double energy = (*i).energy ();
00418
00419 if (energy >= m_minEnergy && nbrOfBins > 0)
00420 {
00421
00422 const DetId detUnitId ((*i).id ());
00423 GlobalPoint pos = esService->getCellPosition (detUnitId);
00424 if (! radius)
00425 {
00426 radius = pos.mag () / 100.0;
00427 }
00428
00429 double phi = pos.phi ();
00430 binNumber = (int) floor (phi / (2 * M_PI / nbrOfBins));
00431
00432
00433 if (energy >= 0.0)
00434 bufferPositive [binNumber] += energy;
00435 }
00436 }
00437
00438 if (*max_element (bufferPositive.begin (), bufferPositive.end ()) > 0.0)
00439 {
00440 IgSoCircularHist *recHits = new IgSoCircularHist;
00441 recHits->minRadius = radius;
00442 recHits->maxRadius = -1;
00443 recHits->scaleFactor = 1.0;
00444 recHits->numberOfBins = nbrOfBins;
00445 recHits->energies.setValues (0, nbrOfBins, &bufferPositive [0]);
00446 recHits->logScale = false;
00447 recHits->showAnnotations = true;
00448 recHits->layer = layer;
00449 sep->addChild (recHits);
00450 }
00451 rep->node ()->addChild (sep);
00452 }
00453 }
00454 catch (cms::Exception& e)
00455 {
00456 e.append (" from VisPCaloHitTwig::update(Ig3DRep*) ");
00457 e.append (this->name ());
00458
00459 if (this->m_onCmsException)
00460 this->m_onCmsException (&e);
00461 }
00462 catch (lat::Error &e)
00463 {
00464 if (this->m_onError)
00465 this->m_onError (&e);
00466 }
00467 catch (std::exception &e)
00468 {
00469 if (this->m_onException)
00470 this->m_onException (&e);
00471 }
00472 catch (...)
00473 {
00474 if (this->m_onUnhandledException)
00475 this->m_onUnhandledException ();
00476 }
00477 }
00478 }
00479
00480 void
00481 VisPCaloHitTwig::update (IgRZRep *rep)
00482 {
00483
00484 VisQueuedTwig::update (rep);
00485 IgQtLock ();
00486
00487 rep->clear ();
00488
00489 if (! m_hits.empty ())
00490 {
00491 SoSeparator *sep = new SoSeparator;
00492 SoSeparator *posSep = new SoSeparator;
00493 SoSeparator *negSep = new SoSeparator;
00494 sep->addChild (posSep);
00495 sep->addChild (negSep);
00496
00497 SoMaterial *mat = new SoMaterial;
00498 posSep->addChild (mat);
00499
00500 SoMaterial *negMat = new SoMaterial;
00501 negMat->diffuseColor.setValue (51.0 / 255.0, 1.0, 102.0 / 255.0);
00502 negSep->addChild (negMat);
00503
00504 int nbrOfBins = 0;
00505 int binNumber;
00506 double radius = 0;
00507 float etaMax = 1.479;
00508 float deltaEta = 0.087;
00509 float layer = 0;
00510
00511 const DetId detID (m_hits [0].id ());
00512
00513 if (VisSubdetector::detName (detID.det ()) == "Hcal" && VisSubdetector::subDetName (detID.det (), detID.subdetId ()) == "HcalBarrel")
00514 {
00515 mat->diffuseColor.setValue (153.0 / 255.0, 51.0 / 255.0, 204.0 / 255.0);
00516 nbrOfBins = 2 * 16;
00517 etaMax = 1.305;
00518 radius = 1.9;
00519 layer = -5.0;
00520 }
00521 else if (VisSubdetector::detName (detID.det ()) == "Ecal" && VisSubdetector::subDetName (detID.det (), detID.subdetId ()) == "EcalBarrel")
00522 {
00523 mat->diffuseColor.setValue (1.0 , 0.0, 153.0 / 255.0);
00524 nbrOfBins = 2 * 17 * 5;
00525 etaMax = 1.479;
00526 deltaEta = 1.521 / 18.0 / 6.0;
00527 radius = 1.280;
00528 layer = -5.0;
00529 }
00530
00531 std::vector<float> bufferUpperPositive (nbrOfBins);
00532 std::vector<float> bufferUpperNegative (nbrOfBins);
00533 std::vector<float> bufferLowerPositive (nbrOfBins);
00534 std::vector<float> bufferLowerNegative (nbrOfBins);
00535
00536 try
00537 {
00538 VisEventSetupService *esService = VisEventSetupService::get (state ());
00539 ASSERT (esService);
00540
00541 if (nbrOfBins > 0)
00542 {
00543 for (std::vector<PCaloHit>::const_iterator i = m_hits.begin (); i != m_hits.end (); ++i)
00544 {
00545 double energy = (*i).energy ();
00546
00547 if (energy >= m_minEnergy)
00548 {
00549
00550 const DetId detUnitId ((*i).id ());
00551
00552 double energy = (*i).energy () * 100.0;
00553 GlobalPoint pos = esService->getCellPosition (detUnitId);
00554 if (! radius)
00555 {
00556 radius = pos.mag () / 100.0;
00557 }
00558
00559 double eta = pos.eta ();
00560 double y = pos.y ();
00561
00562
00563 if (! ((eta < -etaMax) || (eta > etaMax)))
00564 {
00565 if (eta <= 0.0)
00566 {
00567 binNumber = nbrOfBins - 1 - (int) floor ((etaMax - eta) / deltaEta);
00568 }
00569 else
00570 {
00571 binNumber = nbrOfBins - 1 - (int) (nbrOfBins / 2 + floor (eta / deltaEta));
00572 }
00573
00574 if (energy >= 0)
00575 {
00576 if (y >= 0)
00577 {
00578 bufferUpperPositive [binNumber] += energy;
00579 }
00580 else
00581 {
00582 bufferLowerPositive [binNumber] += energy;
00583 }
00584 }
00585 else
00586 {
00587 if (y >= 0)
00588 {
00589 bufferUpperNegative [binNumber] -= energy;
00590 }
00591 else
00592 {
00593 bufferLowerNegative [binNumber] -= energy;
00594 }
00595 }
00596 }
00597 }
00598 }
00599
00600 std::vector<float>::const_iterator first = bufferUpperPositive.begin ();
00601 std::vector<float>::const_iterator last = bufferUpperPositive.end ();
00602
00603 if (*max_element (first, last) > 0.0)
00604 {
00605 IgSoRZHist *upper = new IgSoRZHist;
00606 upper->minRadius = radius;
00607 upper->maxRadius = -1;
00608 upper->energies.setValues (0, nbrOfBins, &bufferUpperPositive [0]);
00609 upper->logScale = false;
00610 upper->showAnnotations = false;
00611 upper->layer = layer;
00612 upper->upper = true;
00613 upper->deltaEta = deltaEta;
00614 posSep->addChild (upper);
00615 }
00616
00617 std::vector<float> ::const_iterator nfirst = bufferUpperNegative.begin ();
00618 std::vector<float> ::const_iterator nlast = bufferUpperNegative.end ();
00619
00620 if (*max_element (nfirst, nlast) > 0.0)
00621 {
00622 IgSoRZHist *lower = new IgSoRZHist;
00623 lower->minRadius = radius;
00624 lower->maxRadius = -1;
00625 lower->energies.setValues (0, nbrOfBins, &bufferUpperNegative [0]);
00626 lower->logScale = false;
00627 lower->showAnnotations = false;
00628 lower->layer = layer;
00629 lower->upper = false;
00630 lower->deltaEta = deltaEta;
00631 negSep->addChild (lower);
00632 }
00633
00634 std::vector<float>::const_iterator lfirst = bufferLowerPositive.begin ();
00635 std::vector<float>::const_iterator llast = bufferLowerPositive.end ();
00636
00637 if (*max_element (lfirst, llast) > 0.0)
00638 {
00639 IgSoRZHist *upperNeg = new IgSoRZHist;
00640 upperNeg->minRadius = radius;
00641 upperNeg->maxRadius = -1;
00642 upperNeg->energies.setValues (0, nbrOfBins, &bufferLowerPositive [0]);
00643 upperNeg->logScale = false;
00644 upperNeg->showAnnotations = false;
00645 upperNeg->layer = layer;
00646 upperNeg->upper = true;
00647 upperNeg->deltaEta = deltaEta;
00648 posSep->addChild (upperNeg);
00649 }
00650
00651 std::vector<float> ::const_iterator lnfirst = bufferLowerNegative.begin ();
00652 std::vector<float> ::const_iterator lnlast = bufferLowerNegative.end ();
00653
00654 if (*max_element (lnfirst, lnlast) > 0.0)
00655 {
00656 IgSoRZHist *lowerNeg = new IgSoRZHist;
00657 lowerNeg->minRadius = radius;
00658 lowerNeg->maxRadius = -1;
00659 lowerNeg->energies.setValues (0, nbrOfBins, &bufferLowerNegative [0]);
00660 lowerNeg->logScale = false;
00661 lowerNeg->showAnnotations = false;
00662 lowerNeg->layer = layer;
00663 lowerNeg->upper = false;
00664 lowerNeg->deltaEta = deltaEta;
00665 negSep->addChild (lowerNeg);
00666 }
00667 }
00668 }
00669 catch (...)
00670 {
00671 std::cout << "No PCaloHits." << std::endl;
00672 }
00673
00674 rep->node ()->addChild (sep);
00675 }
00676 }