![]() |
![]() |
#include <VisReco/VisCustomTracker/interface/VisCuTrackerCluster.h>
Public Member Functions | |
void | drawcluster (VisCuTkModule *mod, int nlay, QPainter *p) |
void | setEvent (const edm::Event &event, const edm::EventSetup &eventSetup) |
void | setMap (VisCuTkMap2D *m) |
void | setTracker (VisCuCmsTracker *tr) |
SoSeparator * | update (VisTrackingGeometry::DetectorRep type) |
std::string | updatetext (VisCuTkModule *mod) |
VisCuTrackerCluster () | |
Private Attributes | |
std::vector< SiStripCluster > | cdigi |
double | clusterPointSize |
std::vector< SiPixelCluster > | cpdigi |
bool | firsteventloaded |
bool | horizontal_view |
edm::ESHandle< TrackerGeometry > | m_pDD |
VisCuTkMap2D * | map |
std::string | pixelclusterLabelName |
std::string | pixelclusterProducerName |
std::string | siStripClusterRepresentation |
std::string | stripclusterLabelName |
std::string | stripclusterProducerName |
VisCuCmsTracker * | tracker |
Definition at line 25 of file VisCuTrackerCluster.h.
VisCuTrackerCluster::VisCuTrackerCluster | ( | ) |
Definition at line 51 of file VisCuTrackerCluster.cc.
References clusterPointSize, GenMuonPlsPt100GeV_cfg::cout, lat::endl(), firsteventloaded, edm::ParameterSet::getUntrackedParameter(), horizontal_view, p, pixelclusterLabelName, pixelclusterProducerName, VisConfigurationService::pSet(), python::EventAnalyzer_cfg::pset, siStripClusterRepresentation, stripclusterLabelName, stripclusterProducerName, and VisConfigurationService_cff::VisConfigurationService.
00052 { 00053 horizontal_view = true; 00054 firsteventloaded=false; 00055 const edm::ParameterSet *pset=VisConfigurationService::pSet(); 00056 if(!pset) 00057 { 00058 edm::ParameterSet p; 00059 VisConfigurationService *visService = new VisConfigurationService(p); 00060 pset = visService->pSet(); 00061 delete visService; 00062 } 00063 clusterPointSize = pset->getUntrackedParameter<double> ("clusterPointSize", 4.0); 00064 stripclusterProducerName = pset->getUntrackedParameter<std::string>("stripclusterProducer", "siStripClusters"); 00065 stripclusterLabelName = pset->getUntrackedParameter<std::string>("stripclusterLabel",""); 00066 cout <<"stripclusterProducer="<< stripclusterProducerName << " stripclusterLabel=" << stripclusterLabelName << endl; 00067 pixelclusterProducerName = pset->getUntrackedParameter<std::string>("pixelclusterProducer", "siPixelClusters"); 00068 pixelclusterLabelName = pset->getUntrackedParameter<std::string>("pixelclusterLabel",""); 00069 cout <<"pixelclusterProducer="<< pixelclusterProducerName << " pixelclusterLabel=" << pixelclusterLabelName << endl; 00070 siStripClusterRepresentation = pset->getUntrackedParameter<std::string>("siStripClusterRepresentation", "point"); 00071 }
void VisCuTrackerCluster::drawcluster | ( | VisCuTkModule * | mod, | |
int | nlay, | |||
QPainter * | p | |||
) |
Definition at line 266 of file VisCuTrackerCluster.cc.
References a, funct::abs(), VisCuTkModule::bufvalue, cdigi, VisCuTkModule::cluster_size, VisCuTkModule::cluster_start, parsecf::pyparsing::col(), funct::cos(), cpdigi, VisCuTkModule::detUnit, firsteventloaded, GeomDet::geographicalId(), VisCuTkSubLayer::getId(), VisCuTkModule::getId(), VisCuTkModule::getOwner(), cmsRelvalreport::green(), horizontal_view, VisCuTkSubLayer::isStereo(), j, VisCuTkModule::length, RectangularPixelTopology::localPosition(), StripTopology::localPosition(), lp1, phi, VisCuTkMap2D::phival(), VisCuTkModule::posx, VisCuTkModule::posy, VisCuTkModule::posz, pv1, r, row, funct::sin(), siStripClusterRepresentation, sl, StripGeomDetUnit::specificTopology(), PixelGeomDetUnit::specificTopology(), funct::sqrt(), strip(), DetId::subdetId(), GeomDet::surface(), Surface::toGlobal(), VisCuTkModule::value, VisCuTkModule::width, VisCuTkModule::widthAtHalfLength, PV3DBase< T, PVType, FrameType >::x(), x, PV3DBase< T, PVType, FrameType >::y(), y, PV3DBase< T, PVType, FrameType >::z(), and z.
Referenced by VisCuTkMap2D::paintEvent(), and VisCuTkMap2D::print().
00267 { 00268 int x,y; 00269 int xc1=0,xc2=0,yc1=0,yc2=0; 00270 double phi,r,dx,dy,dy1; 00271 double xp[4],yp[4],xp1,yp1; 00272 double vhbot,vhtop,vhapo; 00273 double rmedio[]={0.041,0.0701,0.0988,0.255,0.340,0.430,0.520,0.610,0.696,0.782,0.868,0.965,1.080}; 00274 double xt1,yt1,xs1=0.,ys1=0.,xt2,yt2,xs2,ys2,pv1,pv2; 00275 unsigned int numberOfDigis = 0; 00276 unsigned int detType = mod->detUnit->geographicalId().subdetId(); 00277 const RectangularPixelTopology * theTopol = 0; 00278 const StripTopology * theStripTopol = 0; 00279 const PixelGeomDetUnit* theDet; 00280 const StripGeomDetUnit* theStripDet; 00281 00282 if(detType<3) {//pixel 00283 theDet = dynamic_cast<const PixelGeomDetUnit*>(mod->detUnit); 00284 theTopol = dynamic_cast<const RectangularPixelTopology *>( &(theDet->specificTopology ())); 00285 } else { //SiStrip 00286 theStripDet = dynamic_cast<const StripGeomDetUnit*>(mod->detUnit); 00287 theStripTopol = dynamic_cast<const StripTopology *>( &(theStripDet->specificTopology ())); 00288 } 00289 00290 if(firsteventloaded){ 00291 QPointArray a = QPointArray(4); 00292 phi = VisCuTkMap2D::phival(mod->posx,mod->posy); 00293 r = sqrt(mod->posx*mod->posx+mod->posy*mod->posy); 00294 vhbot = mod->width; 00295 vhtop=mod->width; 00296 vhapo=mod->length; 00297 if(nlay < 31){ //endcap 00298 vhbot = mod->widthAtHalfLength/2.-(mod->width/2.-mod->widthAtHalfLength/2.); 00299 vhtop=mod->width/2.; 00300 vhapo=mod->length/2.; 00301 if(nlay >12 && nlay <19){ 00302 if(map->separated)r = r+r; 00303 xp[0]=r-vhtop;yp[0]=-vhapo; 00304 xp[1]=r+vhtop;yp[1]=-vhapo; 00305 xp[2]=r+vhtop;yp[2]=vhapo; 00306 xp[3]=r-vhtop;yp[3]=vhapo; 00307 }else{ 00308 if(map->separated)r = r + r/3.; 00309 xp[0]=r-vhapo;yp[0]=-vhbot; 00310 xp[1]=r+vhapo;yp[1]=-vhtop; 00311 xp[2]=r+vhapo;yp[2]=vhtop; 00312 xp[3]=r-vhapo;yp[3]=vhbot; 00313 } 00314 for(int j=0;j<4;j++){ 00315 xp1 = xp[j]*cos(phi)-yp[j]*sin(phi); 00316 yp1 = xp[j]*sin(phi)+yp[j]*cos(phi); 00317 xp[j] = xp1;yp[j]=yp1; 00318 } 00319 if(detType<3) { //Pixel 00320 for(int idigi=mod->cluster_start;idigi!=(mod->cluster_start+mod->cluster_size);idigi++){ 00321 if(!map->separated){ 00322 int row = cpdigi[idigi].minPixelRow(); 00323 int col =cpdigi[idigi].minPixelCol(); 00324 GlobalPoint pos = mod->detUnit->surface().toGlobal(theTopol->localPosition(MeasurementPoint(row,col))); 00325 float x = pos.x () / 100.0; // cm -> m 00326 float y = pos.y () / 100.0; // cm -> m 00327 int xc = map->xpixel(x); 00328 int yc = map->ypixel(y); 00329 if(!map->acc){ 00330 p->setPen(QColor(0,0,255)); 00331 p->setBrush(QColor(0,0,255)); 00332 if(!horizontal_view)p->drawRect(xc,yc,3,3);else p->drawRect(yc,map->x_win-xc,3,3); 00333 } else { 00334 if(!horizontal_view){ 00335 if(xc > (map->ximg -1)) xc = (map->ximg -1); 00336 if(yc > (map->yimg -1)) yc =(map->yimg-1); 00337 } else { 00338 if(yc > (map->ximg -1)) yc = (map->ximg -1); 00339 if(xc > (map->yimg -1)) xc =(map->yimg-1); 00340 } 00341 QRgb pixel; 00342 if(!horizontal_view){ 00343 pixel = map->image->pixel(xc,yc); 00344 }else pixel = map->image->pixel(yc,map->x_win-xc); 00345 int green = qGreen(pixel); 00346 if(green > 1) green = green -20; 00347 if(green < 0) green = 0; 00348 if(!horizontal_view)map->image->setPixel(xc,yc,green); else map->image->setPixel(yc,map->x_win-xc,green); 00349 } 00350 } 00351 numberOfDigis++; 00352 } // for digis 00353 } else { //SiStrip 00354 for(int idigi=mod->cluster_start;idigi!=(mod->cluster_start+mod->cluster_size);idigi++){ 00355 if(!map->separated){ 00356 short strip =cdigi[idigi].firstStrip(); 00357 GlobalPoint pos = mod->detUnit->surface().toGlobal(theStripTopol->localPosition(strip)); 00358 if(siStripClusterRepresentation=="strip"){ 00359 MeasurementPoint mp1((float)strip,(float)-0.5);LocalPoint lp1=theStripTopol->localPosition(mp1); 00360 MeasurementPoint mp2((float)strip,(float)+0.5);LocalPoint lp2=theStripTopol->localPosition(mp2); 00361 GlobalPoint pos1 = mod->detUnit->surface().toGlobal(lp1); 00362 xc1 = map->xpixel(pos1.x()/100.); yc1 = map->ypixel(pos1.y()/100.); 00363 GlobalPoint pos2 = mod->detUnit->surface().toGlobal(lp2); 00364 xc2 = map->xpixel(pos2.x()/100.); yc2 = map->ypixel(pos2.y()/100.); 00365 } 00366 float x = pos.x () / 100.0; // cm -> m 00367 float y = pos.y () / 100.0; // cm -> m 00368 int xc = map->xpixel(x); 00369 int yc = map->ypixel(y); 00370 if(!map->acc){ 00371 p->setPen(QColor(0,0,255)); 00372 p->setBrush(QColor(0,0,255)); 00373 if(!horizontal_view){p->drawRect(xc,yc,3,3); 00374 if(siStripClusterRepresentation=="strip") 00375 p->drawLine(xc1,yc1,xc2,yc2); 00376 } 00377 else {p->drawRect(yc,map->x_win-xc,3,3); 00378 if(siStripClusterRepresentation=="strip") 00379 p->drawLine(yc1,map->x_win-xc1,yc2,map->x_win-xc2); 00380 } 00381 00382 } else { 00383 if(!horizontal_view){ 00384 if(xc > (map->ximg -1)) xc = (map->ximg -1); 00385 if(yc > (map->yimg -1)) yc =(map->yimg-1); 00386 } else { 00387 if(yc > (map->ximg -1)) yc = (map->ximg -1); 00388 if(xc > (map->yimg -1)) xc =(map->yimg-1); 00389 } 00390 QRgb pixel; 00391 if(!horizontal_view){ 00392 pixel = map->image->pixel(xc,yc); 00393 }else pixel = map->image->pixel(yc,map->x_win-xc); 00394 int green = qGreen(pixel); 00395 if(green > 1) green = green -20; 00396 if(green < 0) green = 0; 00397 if(!horizontal_view)map->image->setPixel(xc,yc,green);else map->image->setPixel(yc,map->x_win-xc,green); 00398 } 00399 } 00400 numberOfDigis++; 00401 } //for digis 00402 } 00403 } else { //barrel 00404 int numod; 00405 numod=mod->getId();if(numod>100)numod=numod-100; 00406 int vane = mod->getOwner()->getId(); 00407 if(map->separated){ 00408 dx = vhapo; 00409 phi=M_PI; 00410 xt1=rmedio[nlay-31]; yt1=-vhtop/2.; 00411 xs1 = xt1*cos(phi)-yt1*sin(phi); 00412 ys1 = xt1*sin(phi)+yt1*cos(phi); 00413 xt2=rmedio[nlay-31]; yt2=vhtop/2.; 00414 xs2 = xt2*cos(phi)-yt2*sin(phi); 00415 ys2 = xt2*sin(phi)+yt2*cos(phi); 00416 dy=VisCuTkMap2D::phival(xs2,ys2)-VisCuTkMap2D::phival(xs1,ys1); 00417 dy1 = dy; 00418 if(nlay==31)dy1=0.39; 00419 if(nlay==32)dy1=0.23; 00420 if(nlay==33)dy1=0.16; 00421 xp[0]=vane*(dx+dx/8.);yp[0]=numod*(dy1); 00422 xp[1]=vane*(dx+dx/8.)+dx;yp[1]=numod*(dy1); 00423 xp[2]=vane*(dx+dx/8.)+dx;yp[2]=numod*(dy1)+dy; 00424 xp[3]=vane*(dx+dx/8.);yp[3]=numod*(dy1)+dy; 00425 }else{ 00426 xt1=r; yt1=-vhtop/2.; 00427 xs1 = xt1*cos(phi)-yt1*sin(phi); 00428 ys1 = xt1*sin(phi)+yt1*cos(phi); 00429 xt2=r; yt2=vhtop/2.; 00430 xs2 = xt2*cos(phi)-yt2*sin(phi); 00431 ys2 = xt2*sin(phi)+yt2*cos(phi); 00432 pv1=VisCuTkMap2D::phival(xs1,ys1); 00433 pv2=VisCuTkMap2D::phival(xs2,ys2); 00434 if(fabs(pv1-pv2)>M_PI && numod==1)pv1=pv1-2.*M_PI; 00435 if(fabs(pv1-pv2)>M_PI && numod!=1)pv2=pv2+2.*M_PI; 00436 xp[0]=mod->posz-vhapo/2.;yp[0]=4.2*pv1; 00437 xp[1]=mod->posz+vhapo/2.;yp[1]=4.2*pv1; 00438 xp[2]=mod->posz+vhapo/2. ;yp[2]=4.2*pv2; 00439 xp[3]=mod->posz-vhapo/2.;yp[3]=4.2*pv2; 00440 } 00441 if(detType<3) {//pixel 00442 for(int idigi=mod->cluster_start;idigi!=(mod->cluster_start+mod->cluster_size);idigi++){ 00443 if(!map->separated){ 00444 int row = cpdigi[idigi].minPixelRow(); 00445 int col =cpdigi[idigi].minPixelCol(); 00446 GlobalPoint pos = mod->detUnit->surface().toGlobal(theTopol->localPosition(MeasurementPoint(row,col))); 00447 float x = pos.x () / 100.0; // cm -> m 00448 float y = pos.y () / 100.0; // cm -> m 00449 float z = pos.z () / 100.0; // cm -> m 00450 int xc = map->xpixel(z); 00451 int yc = map->ypixel(4.2*VisCuTkMap2D::phival(x,y)); 00452 if(!map->acc){ 00453 p->setPen(QColor(0,0,255)); 00454 p->setBrush(QColor(0,0,255)); 00455 if(!horizontal_view)p->drawRect(xc,yc,3,3);else p->drawRect(yc,map->x_win-xc,3,3); 00456 } else { 00457 if(!horizontal_view){ 00458 if(xc > (map->ximg -1)) xc = (map->ximg -1); 00459 if(yc > (map->yimg -1)) yc =(map->yimg-1); 00460 } else { 00461 if(yc > (map->ximg -1)) yc = (map->ximg -1); 00462 if(xc > (map->yimg -1)) xc =(map->yimg-1); 00463 } 00464 QRgb pixel; 00465 if(!horizontal_view){ 00466 pixel = map->image->pixel(map->x_win-xc,yc); 00467 }else pixel = map->image->pixel(yc,xc); 00468 int green = qGreen(pixel); 00469 if(green > 1) green = green -20; 00470 if(green < 0) green = 0; 00471 if(!horizontal_view)map->image->setPixel(xc,yc,green);else map->image->setPixel(yc,map->x_win-xc,green); 00472 } 00473 }//not separated 00474 numberOfDigis++; 00475 }//digis 00476 } else { //SiStrip 00477 for(int idigi=mod->cluster_start;idigi!=(mod->cluster_start+mod->cluster_size);idigi++){ 00478 if(!map->separated){ 00479 short strip =cdigi[idigi].firstStrip(); 00480 GlobalPoint pos = mod->detUnit->surface().toGlobal(theStripTopol->localPosition(strip)); 00481 float x = pos.x () / 100.0; // cm -> m 00482 float y = pos.y () / 100.0; // cm -> m 00483 float z = pos.z () / 100.0; // cm -> m 00484 int xc = map->xpixel(z); 00485 int yc = map->ypixel(4.2*VisCuTkMap2D::phival(x,y)); 00486 if(siStripClusterRepresentation=="strip"){ 00487 MeasurementPoint mp1((float)strip,(float)-0.5);LocalPoint lp1=theStripTopol->localPosition(mp1); 00488 MeasurementPoint mp2((float)strip,(float)+0.5);LocalPoint lp2=theStripTopol->localPosition(mp2); 00489 GlobalPoint pos1 = mod->detUnit->surface().toGlobal(lp1); 00490 xc1 = map->xpixel(pos1.z()/100.); yc1 = map->ypixel(4.2*VisCuTkMap2D::phival(pos1.x()/100.,pos1.y()/100.)); 00491 GlobalPoint pos2 = mod->detUnit->surface().toGlobal(lp2); 00492 xc2 = map->xpixel(pos2.z()/100.); yc2 = map->ypixel(4.2*VisCuTkMap2D::phival(pos2.x()/100.,pos2.y()/100.)); if(mod->getId() > 100 && (abs(abs(yc2-yc)-abs(yc1-yc))) > 20) {if(abs(yc1-yc)>abs(yc2-yc)) {yc1=yc; xc1=xc;yc2=yc;xc2=xc;}else{yc1=yc; xc1=xc; yc2=yc;xc2=xc;}}; 00493 } 00494 if(!map->acc){ 00495 p->setPen(QColor(0,0,255)); 00496 p->setBrush(QColor(0,0,255)); 00497 if(!horizontal_view){ 00498 if(siStripClusterRepresentation=="strip") 00499 p->drawLine(xc1,yc1,xc2,yc2); 00500 p->drawRect(xc,yc,3,3);}else{ 00501 if(siStripClusterRepresentation=="strip") 00502 p->drawLine(yc1,map->x_win-xc1,yc2,map->x_win-xc2); 00503 p->drawRect(yc,map->x_win-xc,3,3);} 00504 } else { 00505 if(!horizontal_view){ 00506 if(xc > (map->ximg -1)) xc = (map->ximg -1); 00507 if(yc > (map->yimg -1)) yc =(map->yimg-1); 00508 } else { 00509 if(yc > (map->ximg -1)) yc = (map->ximg -1); 00510 if(xc > (map->yimg -1)) xc =(map->yimg-1); 00511 } 00512 QRgb pixel; 00513 if(!horizontal_view){ 00514 pixel = map->image->pixel(xc,yc); 00515 }else pixel = map->image->pixel(yc,map->x_win-xc); 00516 int green = qGreen(pixel); 00517 if(green > 1) green = green -20; 00518 if(green < 0) green = 0; 00519 if(!horizontal_view)map->image->setPixel(xc,yc,green);else map->image->setPixel(yc,map->x_win-xc,green); 00520 } 00521 }//not separated 00522 numberOfDigis++; 00523 }//digis 00524 } 00525 }//endcap 00526 VisCuTkSubLayer* sl = mod->getOwner(); 00527 00528 if(sl->isStereo()&& map->separated) 00529 { 00530 if(mod->getId()>100 ){ 00531 for(int j=0;j<3;j++){ 00532 x=map->xpixel(xp[j]);y=map->ypixel(yp[j]); 00533 if(!horizontal_view)a.setPoint(j,x,y);else a.setPoint(j,y,map->x_win-x); 00534 } 00535 if(!horizontal_view)a.setPoint(3,x,y);else a.setPoint(3,y,map->x_win-x); 00536 }else { 00537 x=map->xpixel(xp[2]);y=map->ypixel(yp[2]); 00538 if(!horizontal_view)a.setPoint(0,x,y);else a.setPoint(0,y,map->x_win-x); 00539 x=map->xpixel(xp[3]);y=map->ypixel(yp[3]); 00540 if(!horizontal_view)a.setPoint(1,x,y);else a.setPoint(1,y,map->x_win-x); 00541 x=map->xpixel(xp[0]);y=map->ypixel(yp[0]); 00542 if(!horizontal_view)a.setPoint(2,x,y);else a.setPoint(2,y,map->x_win-x); 00543 if(!horizontal_view)a.setPoint(3,x,y);else a.setPoint(3,y,map->x_win-x); 00544 } 00545 } else { 00546 for(int j=0;j<4;j++){ 00547 x=map->xpixel(xp[j]);y=map->ypixel(yp[j]); 00548 if(!horizontal_view)a.setPoint(j,x,y);else a.setPoint(j,y,map->x_win-x); 00549 } 00550 } 00551 if(map->acc){mod->value = mod->value + mod->cluster_size;mod->bufvalue = mod->bufvalue + mod->cluster_size;} 00552 else mod->value = mod->cluster_size; 00553 if(map->separated){ 00554 p->setPen(QColor( 158, 185, 225)); 00555 int green = 255-mod->value; if (green < 0)green = 0;if(green > 255)green=255; 00556 p->setBrush(QColor(255,green,0)); 00557 if(mod->value==0)p->setBrush(QColor(255,255,255)); 00558 p->drawPolygon(a); 00559 } 00560 p->setPen(QColor(0,0,0)); 00561 p->setBrush(Qt::NoBrush); 00562 }//firsteventloaded 00563 }
void VisCuTrackerCluster::setEvent | ( | const edm::Event & | event, | |
const edm::EventSetup & | eventSetup | |||
) |
Definition at line 74 of file VisCuTrackerCluster.cc.
References edmNew::DetSetVector< T >::begin(), cdigi, VisCuTkModule::cluster_size, VisCuTkModule::cluster_start, GenMuonPlsPt100GeV_cfg::cout, cpdigi, edmNew::DetSetVector< T >::end(), lat::endl(), firsteventloaded, edm::EventSetup::get(), i, m_pDD, mod(), VisCuTkModuleMap::moduleMap, pixelclusterLabelName, pixelclusterProducerName, EgammaValidation_Zee_cff::sel, edmNew::DetSetVector< T >::size(), stripclusterLabelName, and stripclusterProducerName.
Referenced by VisCuTkGeometryTwig::onNewEvent().
00076 { 00077 eventSetup.get<TrackerDigiGeometryRecord> ().get (m_pDD); 00078 00079 cdigi.clear(); 00080 cpdigi.clear(); 00081 firsteventloaded=true; 00082 bool nocluster=true; 00083 int cd_pointer=0; 00084 00085 if(stripclusterProducerName!="ignore"){ 00086 std::vector< edm::Handle<edmNew::DetSetVector<SiStripCluster> > > s_cluster_collections; 00087 Selector sel(ProductInstanceNameSelector(stripclusterLabelName) && 00088 ModuleLabelSelector(stripclusterProducerName)); 00089 event.getMany (sel, s_cluster_collections); 00090 if (! s_cluster_collections.empty ())nocluster=false; 00091 if(nocluster) cout << "no stripclusters type "<<stripclusterProducerName<<"/"<<stripclusterLabelName<< " in event" << endl; 00092 if(!nocluster){ 00093 std::vector< edm::Handle<edmNew::DetSetVector<SiStripCluster> > >::iterator i; 00094 i = s_cluster_collections.begin (); 00095 const edmNew::DetSetVector<SiStripCluster> &cinput = *(*i); 00096 if (cinput.size()) 00097 { 00098 edmNew::DetSetVector<SiStripCluster>::const_iterator DSViter=cinput.begin(); 00099 for (; DSViter!=cinput.end();DSViter++){ 00100 const uint32_t detID = DSViter->detId(); 00101 DetId detIdObject(detID); 00102 const GeomDetUnit * geoUnit = m_pDD->idToDetUnit( detIdObject ); 00103 VisCuTkModule * mod = VisCuTkModuleMap::moduleMap[geoUnit]; 00104 if(mod){ 00105 mod->cluster_start=cd_pointer; 00106 mod->cluster_size=DSViter->size(); 00107 } else cout << "module not found " << endl; 00108 edmNew::DetSet<SiStripCluster>::const_iterator clustIt = DSViter->begin(), clustEnd = DSViter->end(); 00109 for ( ; clustIt != clustEnd; clustIt++) 00110 { 00111 cdigi.push_back(*clustIt); 00112 00113 } 00114 cd_pointer=cd_pointer+DSViter->size(); 00115 } 00116 } 00117 } 00118 } 00119 00120 cd_pointer=0; 00121 nocluster=true; 00122 if(pixelclusterProducerName!="ignore"){ 00123 std::vector< edm::Handle<edmNew::DetSetVector<SiPixelCluster> > > p_cluster_collections; 00124 Selector sel(ProductInstanceNameSelector(pixelclusterLabelName) && 00125 ModuleLabelSelector(pixelclusterProducerName)); 00126 event.getMany (sel, p_cluster_collections); 00127 if (! p_cluster_collections.empty ())nocluster=false; 00128 if(nocluster) cout << "no pixelcluster type "<<pixelclusterProducerName<<"/"<<pixelclusterLabelName<< " in event" << endl; 00129 if(!nocluster){ 00130 std::vector< edm::Handle<edmNew::DetSetVector<SiPixelCluster> > >::iterator i; 00131 i = p_cluster_collections.begin (); 00132 const edmNew::DetSetVector<SiPixelCluster> &cpinput = *(*i); 00133 if (cpinput.size()) 00134 { 00135 edmNew::DetSetVector<SiPixelCluster>::const_iterator DSViter=cpinput.begin(); 00136 for (; DSViter!=cpinput.end();DSViter++){ 00137 const uint32_t detID = DSViter->detId(); 00138 DetId detIdObject(detID); 00139 const GeomDetUnit * geoUnit = m_pDD->idToDetUnit( detIdObject ); 00140 VisCuTkModule * mod = VisCuTkModuleMap::moduleMap[geoUnit]; 00141 if(mod){ 00142 mod->cluster_start=cd_pointer; 00143 mod->cluster_size=DSViter->size(); 00144 } else cout << "module not found " << endl; 00145 edmNew::DetSet<SiPixelCluster>::const_iterator clustIt = DSViter->begin(), clustEnd = DSViter->end(); 00146 for ( ; clustIt != clustEnd; clustIt++) 00147 { 00148 cpdigi.push_back(*clustIt); 00149 } // for digis 00150 cd_pointer=cd_pointer+DSViter->size(); 00151 } 00152 } 00153 } 00154 } 00155 }
void VisCuTrackerCluster::setMap | ( | VisCuTkMap2D * | m | ) | [inline] |
void VisCuTrackerCluster::setTracker | ( | VisCuCmsTracker * | tr | ) | [inline] |
Definition at line 31 of file VisCuTrackerCluster.h.
References tracker.
Referenced by VisCuTkGeometryTwig::onNewEvent().
00031 {tracker=tr;};
SoSeparator * VisCuTrackerCluster::update | ( | VisTrackingGeometry::DetectorRep | type | ) |
Definition at line 157 of file VisCuTrackerCluster.cc.
References begin, cdigi, VisCuTkModule::cluster_size, VisCuTkModule::cluster_start, clusterPointSize, parsecf::pyparsing::col(), GenMuonPlsPt100GeV_cfg::cout, cpdigi, d, VisCuTkModule::detUnit, lat::endl(), SiStripCluster::firstStrip(), GeomDet::geographicalId(), VisCuTkModule::isVisible(), RectangularPixelTopology::localPosition(), StripTopology::localPosition(), lp1, SiPixelCluster::minPixelCol(), SiPixelCluster::minPixelRow(), mod(), VisCuTkModuleMap::moduleMap, n, row, VisTrackingGeometry::RZDet, siStripClusterRepresentation, StripGeomDetUnit::specificTopology(), PixelGeomDetUnit::specificTopology(), funct::sqrt(), strip(), DetId::subdetId(), GeomDet::surface(), Surface::toGlobal(), PV3DBase< T, PVType, FrameType >::x(), x, PV3DBase< T, PVType, FrameType >::y(), y, PV3DBase< T, PVType, FrameType >::z(), and z.
Referenced by VisCuTkGeometryTwig::update().
00158 { 00159 SoSeparator *sep = new SoSeparator; // global 00160 if (! cdigi.empty ()) 00161 { 00162 SoMaterial *mat = new SoMaterial; 00163 mat->diffuseColor.setValue (0.0, 0.0, 1.0);//blue 00164 mat->emissiveColor.setValue(0.0, 0.0, 1.0); 00165 00166 SoDrawStyle *drawStyle = new SoDrawStyle; 00167 drawStyle->pointSize = clusterPointSize; 00168 00169 sep->addChild (mat); 00170 sep->addChild (drawStyle); 00171 00172 try 00173 { 00174 SoVertexProperty *vertices = new SoVertexProperty; 00175 SoVertexProperty *vtx = 0; 00176 SoIndexedLineSet *strips=0 ; 00177 int nVrtx = 0; 00178 int n = 0; 00179 int coord=0; 00180 SoMFInt32 coords; 00181 if(siStripClusterRepresentation=="strip"){ 00182 vtx = new SoVertexProperty; 00183 strips = new SoIndexedLineSet; 00184 } 00185 00186 std::map<const GeomDetUnit * , VisCuTkModule *>::iterator imod; 00187 for (imod=VisCuTkModuleMap::moduleMap.begin();imod != VisCuTkModuleMap::moduleMap.end(); imod++){ 00188 VisCuTkModule* mod = imod->second; 00189 unsigned int detType = mod->detUnit->geographicalId().subdetId(); 00190 if(mod->isVisible()){ 00191 if(detType < 3) //pixel 00192 { 00193 const PixelGeomDetUnit* theDet = dynamic_cast<const PixelGeomDetUnit*>(mod->detUnit); 00194 const RectangularPixelTopology *theTopol = dynamic_cast<const RectangularPixelTopology *>( &(theDet->specificTopology ())); 00195 for(int idigi=mod->cluster_start;idigi!=(mod->cluster_start+mod->cluster_size);idigi++){ 00196 SiPixelCluster d = cpdigi[idigi]; 00197 int row = d.minPixelRow(); 00198 int col = d.minPixelCol(); 00199 GlobalPoint pos = mod->detUnit->surface().toGlobal(theTopol->localPosition(MeasurementPoint(row,col))); 00200 float x = pos.x () / 100.0; // cm -> m 00201 float y; 00202 if(type==RZDet){ 00203 x=0.0; 00204 y = sqrt(pos.x ()*pos.x()+pos.y()*pos.y()) / 100.0; if(pos.y()< 0. )y = - y;} else y = pos.y () / 100.0; // cm -> m 00205 float z = pos.z () / 100.0; // cm -> m 00206 00207 vertices->vertex.set1Value (nVrtx++, SbVec3f (x, y, z)); 00208 } 00209 } else { 00210 const StripGeomDetUnit* theStripDet = dynamic_cast<const StripGeomDetUnit*>(mod->detUnit); 00211 const StripTopology * theStripTopol = dynamic_cast<const StripTopology *>( &(theStripDet->specificTopology ())); 00212 for(int idigi=mod->cluster_start;idigi!=(mod->cluster_start+mod->cluster_size);idigi++){ 00213 SiStripCluster d = cdigi[idigi]; 00214 short strip = d.firstStrip(); 00215 GlobalPoint pos = mod->detUnit->surface().toGlobal(theStripTopol->localPosition(strip)); 00216 float x = pos.x () / 100.0; // cm -> m 00217 float y; 00218 if(type==RZDet){ 00219 x=0.0; 00220 y = sqrt(pos.x ()*pos.x()+pos.y()*pos.y()) / 100.0; if(pos.y()< 0. )y = - y;} else y = pos.y () / 100.0; // cm -> m 00221 00222 float z = pos.z () / 100.0; // cm -> m 00223 vertices->vertex.set1Value (nVrtx++, SbVec3f (x, y, z)); 00224 if(siStripClusterRepresentation=="strip"){ 00225 //Compute strip 00226 MeasurementPoint mp1((float)strip,(float)-0.5);LocalPoint lp1=theStripTopol->localPosition(mp1); 00227 MeasurementPoint mp2((float)strip,(float)+0.5);LocalPoint lp2=theStripTopol->localPosition(mp2); 00228 GlobalPoint pos1 = mod->detUnit->surface().toGlobal(lp1); 00229 GlobalPoint pos2 = mod->detUnit->surface().toGlobal(lp2); 00230 vtx->vertex.set1Value(n,SbVec3f(pos1.x()/100.0,pos1.y()/100.0,pos1.z()/100.0)); 00231 coords.set1Value (coord, n); 00232 coord++;n++; 00233 vtx->vertex.set1Value(n,SbVec3f(pos2.x()/100.0,pos2.y()/100.0,pos2.z()/100.0)); 00234 coords.set1Value (coord, n); 00235 coord++;n++; 00236 coords.set1Value (coord, SO_END_LINE_INDEX); 00237 coord++; 00238 }//end compute strip 00239 00240 } 00241 }//end of else if detType 00242 }//mod is visible 00243 }//module loop 00244 vertices->vertex.setNum (nVrtx); 00245 SoPointSet *points = new SoPointSet; 00246 points->vertexProperty.setValue (vertices); 00247 points->numPoints.setValue (nVrtx); 00248 sep->addChild (points); 00249 00250 if(siStripClusterRepresentation=="strip"){ 00251 strips->vertexProperty = vtx; 00252 strips->coordIndex = coords; 00253 sep->addChild (strips); 00254 } 00255 00256 00257 } 00258 catch (...) 00259 { 00260 std::cout << "No Clusters." << std::endl; 00261 } 00262 } 00263 return sep; 00264 }
std::string VisCuTrackerCluster::updatetext | ( | VisCuTkModule * | mod | ) |
Definition at line 564 of file VisCuTrackerCluster.cc.
References cdigi, VisCuTkModule::cluster_size, VisCuTkModule::cluster_start, parsecf::pyparsing::col(), cpdigi, VisCuTkModule::detUnit, GeomDet::geographicalId(), RectangularPixelTopology::localPosition(), StripTopology::localPosition(), row, StripGeomDetUnit::specificTopology(), PixelGeomDetUnit::specificTopology(), strip(), DetId::subdetId(), GeomDet::surface(), Surface::toGlobal(), PV3DBase< T, PVType, FrameType >::x(), PV3DBase< T, PVType, FrameType >::y(), and PV3DBase< T, PVType, FrameType >::z().
Referenced by VisCuTkGeometryTwig::update().
00565 { 00566 const RectangularPixelTopology * theTopol = 0; 00567 const StripTopology * theStripTopol = 0; 00568 const PixelGeomDetUnit* theDet; 00569 const StripGeomDetUnit* theStripDet; 00570 std::ostringstream text; 00571 00572 if(mod->cluster_size>0){ 00573 unsigned int detType = mod->detUnit->geographicalId().subdetId(); 00574 if(detType<3) {//pixel 00575 theDet = dynamic_cast<const PixelGeomDetUnit*>(mod->detUnit); 00576 theTopol = dynamic_cast<const RectangularPixelTopology *>( &(theDet->specificTopology ())); 00577 text << mod->cluster_size << " pixel clusters : ---------------------------------------------------- <p>" ; 00578 } else { //SiStrip 00579 theStripDet = dynamic_cast<const StripGeomDetUnit*>(mod->detUnit); 00580 theStripTopol = dynamic_cast<const StripTopology *>( &(theStripDet->specificTopology ())); 00581 text << mod->cluster_size << " strip clusters : --------------------------------------- <p>" ; 00582 } 00583 int ncluster=0; 00584 for(int idigi=mod->cluster_start;idigi!=(mod->cluster_start+mod->cluster_size);idigi++){ 00585 text << " Number=" << ncluster++ ; 00586 if(detType<3) {//pixel 00587 int row = cpdigi[idigi].minPixelRow(); 00588 int col =cpdigi[idigi].minPixelCol(); 00589 GlobalPoint pos = mod->detUnit->surface().toGlobal(theTopol->localPosition(MeasurementPoint(row,col))); 00590 text << " Position=" << pos.x () << ", " << pos.y () << ", " << pos.z () 00591 << " Row=" << row 00592 << " Column=" << col <<"<p>" ; 00593 } else { //SiStrip 00594 short strip =cdigi[idigi].firstStrip(); 00595 GlobalPoint pos = mod->detUnit->surface().toGlobal(theStripTopol->localPosition(strip)); 00596 text << " Position=" << pos.x () << ", " << pos.y () << ", " << pos.z () 00597 << " ClusterSize=" << cdigi[idigi].amplitudes().size() 00598 << " Barycenter=" << std::setprecision (5) << cdigi[idigi].barycenter() << "<p>"; 00599 } 00600 } 00601 text << " -----------------------------" ; 00602 } 00603 return text.str(); 00604 }
std::vector<SiStripCluster> VisCuTrackerCluster::cdigi [private] |
Definition at line 42 of file VisCuTrackerCluster.h.
Referenced by drawcluster(), setEvent(), update(), and updatetext().
double VisCuTrackerCluster::clusterPointSize [private] |
Definition at line 41 of file VisCuTrackerCluster.h.
Referenced by update(), and VisCuTrackerCluster().
std::vector<SiPixelCluster> VisCuTrackerCluster::cpdigi [private] |
Definition at line 43 of file VisCuTrackerCluster.h.
Referenced by drawcluster(), setEvent(), update(), and updatetext().
bool VisCuTrackerCluster::firsteventloaded [private] |
Definition at line 37 of file VisCuTrackerCluster.h.
Referenced by drawcluster(), setEvent(), and VisCuTrackerCluster().
bool VisCuTrackerCluster::horizontal_view [private] |
Definition at line 37 of file VisCuTrackerCluster.h.
Referenced by drawcluster(), and VisCuTrackerCluster().
VisCuTkMap2D* VisCuTrackerCluster::map [private] |
Definition at line 39 of file VisCuTrackerCluster.h.
std::string VisCuTrackerCluster::pixelclusterLabelName [private] |
Definition at line 45 of file VisCuTrackerCluster.h.
Referenced by setEvent(), and VisCuTrackerCluster().
std::string VisCuTrackerCluster::pixelclusterProducerName [private] |
Definition at line 45 of file VisCuTrackerCluster.h.
Referenced by setEvent(), and VisCuTrackerCluster().
std::string VisCuTrackerCluster::siStripClusterRepresentation [private] |
Definition at line 46 of file VisCuTrackerCluster.h.
Referenced by drawcluster(), update(), and VisCuTrackerCluster().
std::string VisCuTrackerCluster::stripclusterLabelName [private] |
Definition at line 44 of file VisCuTrackerCluster.h.
Referenced by setEvent(), and VisCuTrackerCluster().
std::string VisCuTrackerCluster::stripclusterProducerName [private] |
Definition at line 44 of file VisCuTrackerCluster.h.
Referenced by setEvent(), and VisCuTrackerCluster().
VisCuCmsTracker* VisCuTrackerCluster::tracker [private] |