154 bool checkModuleIds(
const unsigned int,
const std::vector<unsigned int>&)
const;
178 bool inUintInterval(
const std::vector<unsigned int>&,
const unsigned int,
const unsigned int =999)
const;
261 tkTreeFile->GetObject(
"TrackerTreeGenerator/TrackerTree/TrackerTree",tkTree);
265 edm::LogError(
"SectorBuilder")<<
"TrackerTree not found in file";
268 UInt_t rawId(999), subdetId(999), layer(999), side(999), half(999), rod(999),
ring(999), petal(999),
269 blade(999), panel(999), outerInner(999),
module(999), nStrips(999);
270 Bool_t isDoubleSide(
false), isRPhi(
false), isStereo(
false);
271 Int_t uDirection(999), vDirection(999), wDirection(999);
272 Float_t posR(999.
F), posPhi(999.
F), posEta(999.
F),
posX(999.
F),
posY(999.
F), posZ(999.
F);
273 tkTree->SetBranchAddress(
"RawId", &rawId);
274 tkTree->SetBranchAddress(
"SubdetId", &subdetId);
275 tkTree->SetBranchAddress(
"Layer", &layer);
276 tkTree->SetBranchAddress(
"Side", &side);
277 tkTree->SetBranchAddress(
"Half", &half);
278 tkTree->SetBranchAddress(
"Rod", &rod);
279 tkTree->SetBranchAddress(
"Ring", &
ring);
280 tkTree->SetBranchAddress(
"Petal", &petal);
281 tkTree->SetBranchAddress(
"Blade", &blade);
282 tkTree->SetBranchAddress(
"Panel", &panel);
283 tkTree->SetBranchAddress(
"OuterInner", &outerInner);
284 tkTree->SetBranchAddress(
"Module", &
module);
285 tkTree->SetBranchAddress(
"NStrips", &nStrips);
286 tkTree->SetBranchAddress(
"IsDoubleSide", &isDoubleSide);
287 tkTree->SetBranchAddress(
"IsRPhi", &isRPhi);
288 tkTree->SetBranchAddress(
"IsStereo", &isStereo);
289 tkTree->SetBranchAddress(
"UDirection", &uDirection);
290 tkTree->SetBranchAddress(
"VDirection", &vDirection);
291 tkTree->SetBranchAddress(
"WDirection", &wDirection);
292 tkTree->SetBranchAddress(
"PosR", &posR);
293 tkTree->SetBranchAddress(
"PosPhi", &posPhi);
294 tkTree->SetBranchAddress(
"PosEta", &posEta);
295 tkTree->SetBranchAddress(
"PosX", &
posX);
296 tkTree->SetBranchAddress(
"PosY", &
posY);
297 tkTree->SetBranchAddress(
"PosZ", &posZ);
299 Int_t nModules(tkTree->GetEntries());
303 unsigned int sectorCounter(1);
305 edm::LogInfo(
"SectorBuilder")<<
"There are "<<v_sectorDef.size()<<
" Sectors definded";
306 std::vector<edm::ParameterSet>::const_iterator i_parSet;
307 for(i_parSet = v_sectorDef.begin(); i_parSet != v_sectorDef.end();++i_parSet, ++sectorCounter){
310 std::vector<unsigned int> v_rawId(parSet.
getParameter<std::vector<unsigned int> >(
"rawId")),
311 v_subdetId(parSet.
getParameter<std::vector<unsigned int> >(
"subdetId")),
312 v_layer(parSet.
getParameter<std::vector<unsigned int> >(
"layer")),
313 v_side(parSet.
getParameter<std::vector<unsigned int> >(
"side")),
314 v_half(parSet.
getParameter<std::vector<unsigned int> >(
"half")),
315 v_rod(parSet.
getParameter<std::vector<unsigned int> >(
"rod")),
316 v_ring(parSet.
getParameter<std::vector<unsigned int> >(
"ring")),
317 v_petal(parSet.
getParameter<std::vector<unsigned int> >(
"petal")),
318 v_blade(parSet.
getParameter<std::vector<unsigned int> >(
"blade")),
319 v_panel(parSet.
getParameter<std::vector<unsigned int> >(
"panel")),
320 v_outerInner(parSet.
getParameter<std::vector<unsigned int> >(
"outerInner")),
321 v_module(parSet.
getParameter<std::vector<unsigned int> >(
"module")),
322 v_nStrips(parSet.
getParameter<std::vector<unsigned int> >(
"nStrips")),
323 v_isDoubleSide(parSet.
getParameter<std::vector<unsigned int> >(
"isDoubleSide")),
324 v_isRPhi(parSet.
getParameter<std::vector<unsigned int> >(
"isRPhi")),
325 v_isStereo(parSet.
getParameter<std::vector<unsigned int> >(
"isStereo"));
326 std::vector<int> v_uDirection(parSet.
getParameter<std::vector<int> >(
"uDirection")),
327 v_vDirection(parSet.
getParameter<std::vector<int> >(
"vDirection")),
328 v_wDirection(parSet.
getParameter<std::vector<int> >(
"wDirection"));
329 std::vector<double> v_posR(parSet.
getParameter<std::vector<double> >(
"posR")),
330 v_posPhi(parSet.
getParameter<std::vector<double> >(
"posPhi")),
331 v_posEta(parSet.
getParameter<std::vector<double> >(
"posEta")),
332 v_posX(parSet.
getParameter<std::vector<double> >(
"posX")),
333 v_posY(parSet.
getParameter<std::vector<double> >(
"posY")),
334 v_posZ(parSet.
getParameter<std::vector<double> >(
"posZ"));
342 tkSector.
name = sectorName;
350 if(sectorCounter==1){
385 tkSector.
v_rawId.push_back(rawId);
386 bool moduleSelected(
false);
387 for(std::vector<unsigned int>::const_iterator i_rawId = allSectors.v_rawId.begin();
388 i_rawId != allSectors.v_rawId.end(); ++i_rawId){
389 if(rawId == *i_rawId)moduleSelected =
true;
391 if(!moduleSelected)allSectors.v_rawId.push_back(rawId);
396 for(std::vector<unsigned int>::const_iterator i_rawId = tkSector.
v_rawId.begin();
397 i_rawId != tkSector.
v_rawId.end(); ++i_rawId){
407 if(isPixel && isStrip){
408 edm::LogError(
"SectorBuilder")<<
"Incorrect Sector Definition: there are pixel and strip modules within one sector" 409 <<
"\n... sector selection is not applied, sector "<<sectorCounter<<
" is not built";
415 edm::LogInfo(
"SectorBuilder")<<
"There are "<<tkSector.
v_rawId.size()<<
" Modules in Sector "<<sectorCounter;
428 if(v_id.size()==0)
return true;
429 if(v_id.size()%2==1){
430 edm::LogError(
"SectorBuilder")<<
"Incorrect Sector Definition: Position Vectors need even number of arguments (Intervals)" 431 <<
"\n... sector selection is not applied, sector "<<sectorCounter<<
" is not built";
434 int entry(1);
double intervalBegin(999.);
435 for(std::vector<double>::const_iterator i_id = v_id.begin(); i_id != v_id.end(); ++i_id, ++
entry){
436 if(entry%2==1)intervalBegin = *i_id;
437 if(entry%2==0 && intervalBegin>*i_id){
438 edm::LogError(
"SectorBuilder")<<
"Incorrect Sector Definition (Position Vector Intervals): \t" 439 <<intervalBegin<<
" is bigger than "<<*i_id<<
" but is expected to be smaller" 440 <<
"\n... sector selection is not applied, sector "<<sectorCounter<<
" is not built";
449 if(v_id.size()==0)
return true;
450 for(std::vector<unsigned int>::const_iterator i_id = v_id.begin(); i_id != v_id.end(); ++i_id){
451 if(
id==*i_id)
return true;
458 if(v_id.size()==0)
return true;
459 for(std::vector<unsigned int>::const_iterator i_id = v_id.begin(); i_id != v_id.end(); ++i_id){
460 if(1==*i_id &&
id)
return true;
461 if(2==*i_id && !
id)
return true;
468 if(v_id.size()==0)
return true;
469 for(std::vector<int>::const_iterator i_id = v_id.begin(); i_id != v_id.end(); ++i_id){
470 if(
id==*i_id)
return true;
477 if(v_id.size()==0)
return true;
478 int entry(1);
double intervalBegin(999.);
479 for(std::vector<double>::const_iterator i_id = v_id.begin(); i_id != v_id.end(); ++i_id, ++
entry){
480 if(entry%2==1)intervalBegin = *i_id;
481 if(entry%2==0 &&
id>=intervalBegin &&
id<*i_id)
return true;
488 bool commonModules(
false);
489 for(std::map<unsigned int,TrackerSectorStruct>::const_iterator i_sector =
m_tkSector_.begin(); i_sector !=
m_tkSector_.end(); ++i_sector){
490 std::map<unsigned int,TrackerSectorStruct>::const_iterator i_sector2(i_sector);
491 for(++i_sector2; i_sector2 !=
m_tkSector_.end(); ++i_sector2){
492 unsigned int nCommonModules(0);
493 for(std::vector<unsigned int>::const_iterator i_module = (*i_sector).second.v_rawId.begin(); i_module != (*i_sector).second.v_rawId.end(); ++i_module){
494 for(std::vector<unsigned int>::const_iterator i_module2 = (*i_sector2).second.v_rawId.begin(); i_module2 != (*i_sector2).second.v_rawId.end(); ++i_module2){
495 if(*i_module2 == *i_module)++nCommonModules;
498 if(nCommonModules==0)
501 edm::LogError(
"SectorBuilder")<<
"Sector "<<(*i_sector).first<<
" and Sector "<<(*i_sector2).first<<
" have "<<nCommonModules<<
" Modules in common";
502 commonModules =
true;
506 if(static_cast<int>(allSectors.
v_rawId.size())==nModules)
507 edm::LogInfo(
"SectorBuilder")<<
"ALL Tracker Modules are contained in the Sectors";
510 <<
" out of "<<nModules<<
" Tracker Modules";
512 edm::LogInfo(
"SectorBuilder")<<
"There are ZERO modules associated to different sectors, no ambiguities exist";
514 edm::LogError(
"SectorBuilder")<<
"There are modules associated to different sectors, APE value cannot be assigned reasonably";
524 if(v_residualErrorBinning.size()==1){
525 edm::LogError(
"ResidualErrorBinning")<<
"Incorrect selection of Residual Error Bins (used for APE calculation): \t" 526 <<
"Only one argument passed, so no interval is specified" 527 <<
"\n... delete whole bin selection";
531 unsigned int binCounter(0);
532 for(std::vector<double>::const_iterator i_binning = v_residualErrorBinning.begin(); i_binning != v_residualErrorBinning.end(); ++i_binning, ++binCounter){
533 if(binCounter == 0){
xMin = *i_binning;
continue;}
536 edm::LogError(
"ResidualErrorBinning")<<
"Incorrect selection of Residual Error Bins (used for APE calculation): \t" 537 <<
xMin<<
" is bigger than "<<xMax<<
" but is expected to be smaller" 538 <<
"\n... delete whole bin selection";
546 edm::LogInfo(
"ResidualErrorBinning")<<
m_resErrBins_.size()<<
" Intervals of residual errors used for separate APE calculation sucessfully set";
559 for(std::vector<unsigned int>::iterator i_errHists = v_errHists.begin(); i_errHists != v_errHists.end(); ++i_errHists){
560 for(std::vector<unsigned int>::iterator i_errHists2 = i_errHists; i_errHists2 != v_errHists.end();){
562 if(*i_errHists==*i_errHists2){
563 edm::LogError(
"BookSectorHists")<<
"Value of vErrHists in config exists twice: "<<*i_errHists<<
"\n... delete one of both";
564 v_errHists.erase(i_errHists2);
570 for(std::map<unsigned int,TrackerSectorStruct>::iterator i_sector =
m_tkSector_.begin(); i_sector !=
m_tkSector_.end(); ++i_sector){
573 double widthMax = zoomHists ? 20. : 200.;
574 double chargePixelMax = zoomHists ? 200000. : 2000000.;
575 double chargeStripMax = zoomHists ? 1000. : 10000.;
576 double sOverNMax = zoomHists ? 200. : 2000.;
577 double logClusterProbMin = zoomHists ? -5. : -15.;
579 double resXAbsMax = zoomHists ? 0.5 : 5.;
580 double norResXAbsMax = zoomHists ? 10. : 50.;
581 double probXMin = zoomHists ? -0.01 : -0.1;
582 double probXMax = zoomHists ? 0.11 : 1.1;
583 double sigmaXMin = zoomHists ? 0. : -0.05;
584 double sigmaXMax = zoomHists ? 0.02 : 1.;
586 double sigmaXHitMax = zoomHists ? 0.02 : 1.;
587 double phiSensXMax = zoomHists ? 31. : 93.;
589 double norChi2Max = zoomHists ? 5. : 1000.;
590 double d0Max = zoomHists ? 0.02 : 40.;
591 double dzMax = zoomHists ? 15. : 100.;
592 double pMax = zoomHists ? 200. : 2000.;
593 double invPMax = zoomHists ? 0.05 : 10.;
599 "TFileService is not registered in cfg file" );
602 std::stringstream sector; sector <<
"Sector_" << (*i_sector).first;
606 (*i_sector).second.Name = secDir.
make<TH1F>(
"z_name",(*i_sector).second.name.c_str(),1,0,1);
609 if((*i_sector).second.v_rawId.size()==0){
613 (*i_sector).second.setCorrHistParams(&secDir,norResXAbsMax,sigmaXHitMax,sigmaXMax);
617 const bool pixelSector(i_sector->second.isPixel);
621 (*i_sector).second.m_correlationHistsX[
"WidthX"] = (*i_sector).second.bookCorrHistsX(
"WidthX",
"cluster width",
"w_{cl,x}",
"[# channels]",static_cast<int>(widthMax),static_cast<int>(widthMax),0.,widthMax,
"nph");
622 (*i_sector).second.m_correlationHistsX[
"BaryStripX"] = (*i_sector).second.bookCorrHistsX(
"BaryStripX",
"barycenter of cluster charge",
"b_{cl,x}",
"[# channels]",800,100,-10.,790.,
"nph");
625 (*i_sector).second.m_correlationHistsY[
"WidthY"] = (*i_sector).second.bookCorrHistsY(
"WidthY",
"cluster width",
"w_{cl,y}",
"[# channels]",static_cast<int>(widthMax),static_cast<int>(widthMax),0.,widthMax,
"nph");
626 (*i_sector).second.m_correlationHistsY[
"BaryStripY"] = (*i_sector).second.bookCorrHistsY(
"BaryStripY",
"barycenter of cluster charge",
"b_{cl,y}",
"[# channels]",800,100,-10.,790.,
"nph");
628 (*i_sector).second.m_correlationHistsX[
"ChargePixel"] = (*i_sector).second.bookCorrHistsX(
"ChargePixel",
"cluster charge",
"c_{cl}",
"[e]",100,50,0.,chargePixelMax,
"nph");
629 (*i_sector).second.m_correlationHistsX[
"ClusterProbXY"] = (*i_sector).second.bookCorrHistsX(
"ClusterProbXY",
"cluster probability xy",
"prob_{cl,xy}",
"",100,50,0.,1.,
"nph");
630 (*i_sector).second.m_correlationHistsX[
"ClusterProbQ"] = (*i_sector).second.bookCorrHistsX(
"ClusterProbQ",
"cluster probability q",
"prob_{cl,q}",
"",100,50,0.,1.,
"nph");
631 (*i_sector).second.m_correlationHistsX[
"ClusterProbXYQ"] = (*i_sector).second.bookCorrHistsX(
"ClusterProbXYQ",
"cluster probability xyq",
"prob_{cl,xyq}",
"",100,50,0.,1.,
"nph");
632 (*i_sector).second.m_correlationHistsX[
"LogClusterProb"] = (*i_sector).second.bookCorrHistsX(
"LogClusterProb",
"cluster probability xy",
"log(prob_{cl,xy})",
"",60,30,logClusterProbMin,0.,
"nph");
633 (*i_sector).second.m_correlationHistsX[
"IsOnEdge"] = (*i_sector).second.bookCorrHistsX(
"IsOnEdge",
"IsOnEdge",
"isOnEdge",
"",2,2,0,2,
"nph");
634 (*i_sector).second.m_correlationHistsX[
"HasBadPixels"] = (*i_sector).second.bookCorrHistsX(
"HasBadPixels",
"HasBadPixels",
"hasBadPixels",
"",2,2,0,2,
"nph");
635 (*i_sector).second.m_correlationHistsX[
"SpansTwoRoc"] = (*i_sector).second.bookCorrHistsX(
"SpansTwoRoc",
"SpansTwoRoc",
"spansTwoRoc",
"",2,2,0,2,
"nph");
636 (*i_sector).second.m_correlationHistsX[
"QBin"] = (*i_sector).second.bookCorrHistsX(
"QBin",
"q bin",
"q bin",
"",8,8,0,8,
"nph");
638 (*i_sector).second.m_correlationHistsY[
"ChargePixel"] = (*i_sector).second.bookCorrHistsY(
"ChargePixel",
"cluster charge",
"c_{cl}",
"[e]",100,50,0.,chargePixelMax,
"nph");
639 (*i_sector).second.m_correlationHistsY[
"ClusterProbXY"] = (*i_sector).second.bookCorrHistsY(
"ClusterProbXY",
"cluster probability xy",
"prob_{cl,xy}",
"",100,50,0.,1.,
"nph");
640 (*i_sector).second.m_correlationHistsY[
"ClusterProbQ"] = (*i_sector).second.bookCorrHistsY(
"ClusterProbQ",
"cluster probability q",
"prob_{cl,q}",
"",100,50,0.,1.,
"nph");
641 (*i_sector).second.m_correlationHistsY[
"ClusterProbXYQ"] = (*i_sector).second.bookCorrHistsY(
"ClusterProbXYQ",
"cluster probability xyq",
"prob_{cl,xyq}",
"",100,50,0.,1.,
"nph");
642 (*i_sector).second.m_correlationHistsY[
"LogClusterProb"] = (*i_sector).second.bookCorrHistsY(
"LogClusterProb",
"cluster probability xy",
"log(prob_{cl,xy})",
"",60,30,logClusterProbMin,0.,
"nph");
643 (*i_sector).second.m_correlationHistsY[
"IsOnEdge"] = (*i_sector).second.bookCorrHistsY(
"IsOnEdge",
"IsOnEdge",
"isOnEdge",
"",2,2,0,2,
"nph");
644 (*i_sector).second.m_correlationHistsY[
"HasBadPixels"] = (*i_sector).second.bookCorrHistsY(
"HasBadPixels",
"HasBadPixels",
"hasBadPixels",
"",2,2,0,2,
"nph");
645 (*i_sector).second.m_correlationHistsY[
"SpansTwoRoc"] = (*i_sector).second.bookCorrHistsY(
"SpansTwoRoc",
"SpansTwoRoc",
"spansTwoRoc",
"",2,2,0,2,
"nph");
646 (*i_sector).second.m_correlationHistsY[
"QBin"] = (*i_sector).second.bookCorrHistsY(
"QBin",
"q bin",
"q bin",
"",8,8,0,8,
"nph");
650 (*i_sector).second.m_correlationHistsX[
"ChargeStrip"] = (*i_sector).second.bookCorrHistsX(
"ChargeStrip",
"cluster charge",
"c_{cl}",
"[APV counts]",100,50,0.,chargeStripMax,
"nph");
651 (*i_sector).second.m_correlationHistsX[
"MaxStrip"] = (*i_sector).second.bookCorrHistsX(
"MaxStrip",
"strip with max. charge",
"n_{cl,max}",
"[# strips]",800,800,-10.,790.,
"npht");
652 (*i_sector).second.m_correlationHistsX[
"MaxCharge"] = (*i_sector).second.bookCorrHistsX(
"MaxCharge",
"charge of strip with max. charge",
"c_{cl,max}",
"[APV counts]",300,75,-10.,290.,
"nph");
653 (*i_sector).second.m_correlationHistsX[
"MaxIndex"] = (*i_sector).second.bookCorrHistsX(
"MaxIndex",
"cluster-index of strip with max. charge",
"i_{cl,max}",
"[# strips]",10,10,0.,10.,
"nph");
654 (*i_sector).second.m_correlationHistsX[
"ChargeOnEdges"] = (*i_sector).second.bookCorrHistsX(
"ChargeOnEdges",
"fraction of charge on edge strips",
"(c_{st,L}+c_{st,R})/c_{cl}",
"",60,60,-0.1,1.1,
"nph");
655 (*i_sector).second.m_correlationHistsX[
"ChargeAsymmetry"] = (*i_sector).second.bookCorrHistsX(
"ChargeAsymmetry",
"asymmetry of charge on edge strips",
"(c_{st,L}-c_{st,R})/c_{cl}",
"",110,55,-1.1,1.1,
"nph");
656 (*i_sector).second.m_correlationHistsX[
"ChargeLRplus"] = (*i_sector).second.bookCorrHistsX(
"ChargeLRplus",
"fraction of charge not on maxStrip",
"(c_{cl,L}+c_{cl,R})/c_{cl}",
"",60,60,-0.1,1.1,
"nph");
657 (*i_sector).second.m_correlationHistsX[
"ChargeLRminus"] = (*i_sector).second.bookCorrHistsX(
"ChargeLRminus",
"asymmetry of charge L and R of maxStrip",
"(c_{cl,L}-c_{cl,R})/c_{cl}",
"",110,55,-1.1,1.1,
"nph");
658 (*i_sector).second.m_correlationHistsX[
"SOverN"] = (*i_sector).second.bookCorrHistsX(
"SOverN",
"signal over noise",
"s/N",
"",100,50,0,sOverNMax,
"nph");
659 (*i_sector).second.m_correlationHistsX[
"WidthProj"] = (*i_sector).second.bookCorrHistsX(
"WidthProj",
"projected width",
"w_{p}",
"[# strips]",200,20,0.,widthMax,
"nph");
660 (*i_sector).second.m_correlationHistsX[
"WidthDiff"] = (*i_sector).second.bookCorrHistsX(
"WidthDiff",
"width difference",
"w_{p} - w_{cl}",
"[# strips]",200,20,-widthMax/2.,widthMax/2.,
"nph");
662 (*i_sector).second.WidthVsWidthProjected = secDir.
make<TH2F>(
"h2_widthVsWidthProj",
"w_{cl} vs. w_{p};w_{p} [# strips];w_{cl} [# strips]",
static_cast<int>(widthMax),0,widthMax,static_cast<int>(widthMax),0,widthMax);
663 (*i_sector).second.PWidthVsWidthProjected = secDir.
make<TProfile>(
"p_widthVsWidthProj",
"w_{cl} vs. w_{p};w_{p} [# strips];w_{cl} [# strips]",
static_cast<int>(widthMax),0,widthMax);
665 (*i_sector).second.WidthDiffVsMaxStrip = secDir.
make<TH2F>(
"h2_widthDiffVsMaxStrip",
"(w_{p} - w_{cl}) vs. n_{cl,max};n_{cl,max};w_{p} - w_{cl} [# strips]",800,-10.,790.,
static_cast<int>(widthMax),-widthMax/2.,widthMax/2.);
666 (*i_sector).second.PWidthDiffVsMaxStrip = secDir.
make<TProfile>(
"p_widthDiffVsMaxStrip",
"(w_{p} - w_{cl}) vs. n_{cl,max};n_{cl,max};w_{p} - w_{cl} [# strips]",800,-10.,790.);
668 (*i_sector).second.WidthDiffVsSigmaXHit = secDir.
make<TH2F>(
"h2_widthDiffVsSigmaXHit",
"(w_{p} - w_{cl}) vs. #sigma_{hit,x};#sigma_{hit,x} [cm];w_{p} - w_{cl} [# strips]",100,0.,
sigmaXMax,100,-10.,10.);
669 (*i_sector).second.PWidthDiffVsSigmaXHit = secDir.
make<TProfile>(
"p_widthDiffVsSigmaXHit",
"(w_{p} - w_{cl}) vs. #sigma_{hit,x};#sigma_{hit,x} [cm];w_{p} - w_{cl} [# strips]",100,0.,
sigmaXMax);
671 (*i_sector).second.WidthVsPhiSensX = secDir.
make<TH2F>(
"h2_widthVsPhiSensX",
"w_{cl} vs. #phi_{module,x};#phi_{module,x} [ ^{o}];w_{cl} [# strips]",93,-93,93,
static_cast<int>(widthMax),0,widthMax);
672 (*i_sector).second.PWidthVsPhiSensX = secDir.
make<TProfile>(
"p_widthVsPhiSensX",
"w_{cl} vs. #phi_{module,x};#phi_{module,x} [ ^{o}];w_{cl} [# strips]",93,-93,93);
677 (*i_sector).second.m_correlationHistsX[
"SigmaXHit"] = (*i_sector).second.bookCorrHistsX(
"SigmaXHit",
"hit error",
"#sigma_{hit,x}",
"[#mum]",105,20,sigmaXMin*10000.,sigmaXMax*10000.,
"np");
678 (*i_sector).second.m_correlationHistsX[
"SigmaXTrk"] = (*i_sector).second.bookCorrHistsX(
"SigmaXTrk",
"track error",
"#sigma_{trk,x}",
"[#mum]",105,20,sigmaXMin*10000.,sigmaXMax*10000.,
"np");
679 (*i_sector).second.m_correlationHistsX[
"SigmaX"] = (*i_sector).second.bookCorrHistsX(
"SigmaX",
"residual error",
"#sigma_{r,x}",
"[#mum]",105,20,sigmaXMin*10000.,sigmaXMax*10000.,
"np");
680 (*i_sector).second.m_correlationHistsX[
"PhiSens"] = (*i_sector).second.bookCorrHistsX(
"PhiSens",
"track angle on sensor",
"#phi_{module}",
"[ ^{o}]",96,48,-3,93,
"nphtr");
681 (*i_sector).second.m_correlationHistsX[
"PhiSensX"] = (*i_sector).second.bookCorrHistsX(
"PhiSensX",
"track angle on sensor",
"#phi_{module,x}",
"[ ^{o}]",186,93,-phiSensXMax,phiSensXMax,
"nphtr");
682 (*i_sector).second.m_correlationHistsX[
"PhiSensY"] = (*i_sector).second.bookCorrHistsX(
"PhiSensY",
"track angle on sensor",
"#phi_{module,y}",
"[ ^{o}]",186,93,-93,93,
"nphtr");
684 (*i_sector).second.XHit = secDir.
make<TH1F>(
"h_XHit",
" hit measurement x_{hit};x_{hit} [cm];# hits",100,-20,20);
685 (*i_sector).second.XTrk = secDir.
make<TH1F>(
"h_XTrk",
"track prediction x_{trk};x_{trk} [cm];# hits",100,-20,20);
686 (*i_sector).second.SigmaX2 = secDir.
make<TH1F>(
"h_SigmaX2",
"squared residual error #sigma_{r,x}^{2};#sigma_{r,x}^{2} [#mum^{2}];# hits",105,sigmaXMin*10000.,sigmaX2Max*10000.*10000.);
687 (*i_sector).second.ResX = secDir.
make<TH1F>(
"h_ResX",
"residual r_{x};x_{trk}-x_{hit} [#mum];# hits",100,-resXAbsMax*10000.,resXAbsMax*10000.);
688 (*i_sector).second.NorResX = secDir.
make<TH1F>(
"h_NorResX",
"normalized residual r_{x}/#sigma_{r,x};(x_{trk}-x_{hit})/#sigma_{r,x};# hits",100,-norResXAbsMax,norResXAbsMax);
689 (*i_sector).second.ProbX = secDir.
make<TH1F>(
"h_ProbX",
"residual probability;prob(r_{x}^{2}/#sigma_{r,x}^{2},1);# hits",60,probXMin,probXMax);
691 (*i_sector).second.PhiSensXVsBarycentreX = secDir.
make<TH2F>(
"h2_phiSensXVsBarycentreX",
"#phi_{module,x} vs. b_{cl,x};b_{cl,x} [# channels];#phi_{module,x} [ ^{o}]",200,-10.,790.,93,-93,93);
692 (*i_sector).second.PPhiSensXVsBarycentreX = secDir.
make<TProfile>(
"p_phiSensXVsBarycentreX",
"#phi_{module,x} vs. b_{cl,x};b_{cl,x} [# channels];#phi_{module,x} [ ^{o}]",200,-10.,790.);
695 (*i_sector).second.m_correlationHistsY[
"SigmaYHit"] = (*i_sector).second.bookCorrHistsY(
"SigmaYHit",
"hit error",
"#sigma_{hit,y}",
"[#mum]",105,20,sigmaXMin*10000.,sigmaXMax*10000.,
"np");
696 (*i_sector).second.m_correlationHistsY[
"SigmaYTrk"] = (*i_sector).second.bookCorrHistsY(
"SigmaYTrk",
"track error",
"#sigma_{trk,y}",
"[#mum]",105,20,sigmaXMin*10000.,sigmaXMax*10000.,
"np");
697 (*i_sector).second.m_correlationHistsY[
"SigmaY"] = (*i_sector).second.bookCorrHistsY(
"SigmaY",
"residual error",
"#sigma_{r,y}",
"[#mum]",105,20,sigmaXMin*10000.,sigmaXMax*10000.,
"np");
698 (*i_sector).second.m_correlationHistsY[
"PhiSens"] = (*i_sector).second.bookCorrHistsY(
"PhiSens",
"track angle on sensor",
"#phi_{module}",
"[ ^{o}]",96,48,-3,93,
"nphtr");
699 (*i_sector).second.m_correlationHistsY[
"PhiSensX"] = (*i_sector).second.bookCorrHistsY(
"PhiSensX",
"track angle on sensor",
"#phi_{module,x}",
"[ ^{o}]",186,93,-phiSensXMax,phiSensXMax,
"nphtr");
700 (*i_sector).second.m_correlationHistsY[
"PhiSensY"] = (*i_sector).second.bookCorrHistsY(
"PhiSensY",
"track angle on sensor",
"#phi_{module,y}",
"[ ^{o}]",186,93,-93,93,
"nphtr");
702 (*i_sector).second.YHit = secDir.
make<TH1F>(
"h_YHit",
" hit measurement y_{hit};y_{hit} [cm];# hits",100,-20,20);
703 (*i_sector).second.YTrk = secDir.
make<TH1F>(
"h_YTrk",
"track prediction y_{trk};y_{trk} [cm];# hits",100,-20,20);
704 (*i_sector).second.SigmaY2 = secDir.
make<TH1F>(
"h_SigmaY2",
"squared residual error #sigma_{r,y}^{2};#sigma_{r,y}^{2} [#mum^{2}];# hits",105,sigmaXMin*10000.,sigmaX2Max*10000.*10000.);
705 (*i_sector).second.ResY = secDir.
make<TH1F>(
"h_ResY",
"residual r_{y};y_{trk}-y_{hit} [#mum];# hits",100,-resXAbsMax*10000.,resXAbsMax*10000.);
706 (*i_sector).second.NorResY = secDir.
make<TH1F>(
"h_NorResY",
"normalized residual r_{y}/#sigma_{r,y};(y_{trk}-y_{hit})/#sigma_{r,y};# hits",100,-norResXAbsMax,norResXAbsMax);
707 (*i_sector).second.ProbY = secDir.
make<TH1F>(
"h_ProbY",
"residual probability;prob(r_{y}^{2}/#sigma_{r,y}^{2},1);# hits",60,probXMin,probXMax);
709 (*i_sector).second.PhiSensYVsBarycentreY = secDir.
make<TH2F>(
"h2_phiSensYVsBarycentreY",
"#phi_{module,y} vs. b_{cl,y};b_{cl,y} [# channels];#phi_{module,y} [ ^{o}]",200,-10.,790.,93,-93,93);
710 (*i_sector).second.PPhiSensYVsBarycentreY = secDir.
make<TProfile>(
"p_phiSensYVsBarycentreY",
"#phi_{module,y} vs. b_{cl,y};b_{cl,y} [# channels];#phi_{module,y} [ ^{o}]",200,-10.,790.);
715 (*i_sector).second.m_correlationHistsX[
"HitsValid"] = (*i_sector).second.bookCorrHistsX(
"HitsValid",
"# hits",
"[valid]",50,0,50,
"npt");
716 (*i_sector).second.m_correlationHistsX[
"HitsInvalid"] = (*i_sector).second.bookCorrHistsX(
"HitsInvalid",
"# hits",
"[invalid]",20,0,20,
"npt");
717 (*i_sector).second.m_correlationHistsX[
"Hits2D"] = (*i_sector).second.bookCorrHistsX(
"Hits2D",
"# hits",
"[2D]",20,0,20,
"npt");
718 (*i_sector).second.m_correlationHistsX[
"LayersMissed"] = (*i_sector).second.bookCorrHistsX(
"LayersMissed",
"# layers",
"[missed]",10,0,10,
"npt");
719 (*i_sector).second.m_correlationHistsX[
"HitsPixel"] = (*i_sector).second.bookCorrHistsX(
"HitsPixel",
"# hits",
"[pixel]",10,0,10,
"npt");
720 (*i_sector).second.m_correlationHistsX[
"HitsStrip"] = (*i_sector).second.bookCorrHistsX(
"HitsStrip",
"# hits",
"[strip]",40,0,40,
"npt");
721 (*i_sector).second.m_correlationHistsX[
"HitsGood"] = (*i_sector).second.bookCorrHistsX(
"HitsGood",
"# hits",
"[good]",50,0,50,
"npt");
722 (*i_sector).second.m_correlationHistsX[
"NorChi2"] = (*i_sector).second.bookCorrHistsX(
"NorChi2",
"#chi^{2}/f",
"",50,0,norChi2Max,
"npr");
723 (*i_sector).second.m_correlationHistsX[
"Theta"] = (*i_sector).second.bookCorrHistsX(
"Theta",
"#theta",
"[ ^{o}]",40,-10,190,
"npt");
724 (*i_sector).second.m_correlationHistsX[
"Phi"] = (*i_sector).second.bookCorrHistsX(
"Phi",
"#phi",
"[ ^{o}]",76,-190,190,
"npt");
725 (*i_sector).second.m_correlationHistsX[
"D0Beamspot"] = (*i_sector).second.bookCorrHistsX(
"D0Beamspot",
"d_{0, BS}",
"[cm]",40,-d0Max,d0Max,
"npt");
726 (*i_sector).second.m_correlationHistsX[
"Dz"] = (*i_sector).second.bookCorrHistsX(
"Dz",
"d_{z}",
"[cm]",40,-dzMax,dzMax,
"npt");
727 (*i_sector).second.m_correlationHistsX[
"Pt"] = (*i_sector).second.bookCorrHistsX(
"Pt",
"p_{t}",
"[GeV]",50,0,pMax,
"npt");
728 (*i_sector).second.m_correlationHistsX[
"P"] = (*i_sector).second.bookCorrHistsX(
"P",
"|p|",
"[GeV]",50,0,pMax,
"npt");
729 (*i_sector).second.m_correlationHistsX[
"InvP"] = (*i_sector).second.bookCorrHistsX(
"InvP",
"1/|p|",
"[GeV^{-1}]",25,0,invPMax,
"t");
730 (*i_sector).second.m_correlationHistsX[
"MeanAngle"] = (*i_sector).second.bookCorrHistsX(
"MeanAngle",
"<#phi_{module}>",
"[ ^{o}]",25,-5,95,
"npt");
734 (*i_sector).second.m_correlationHistsY[
"HitsValid"] = (*i_sector).second.bookCorrHistsY(
"HitsValid",
"# hits",
"[valid]",50,0,50,
"npt");
735 (*i_sector).second.m_correlationHistsY[
"HitsInvalid"] = (*i_sector).second.bookCorrHistsY(
"HitsInvalid",
"# hits",
"[invalid]",20,0,20,
"npt");
736 (*i_sector).second.m_correlationHistsY[
"Hits2D"] = (*i_sector).second.bookCorrHistsY(
"Hits2D",
"# hits",
"[2D]",20,0,20,
"npt");
737 (*i_sector).second.m_correlationHistsY[
"LayersMissed"] = (*i_sector).second.bookCorrHistsY(
"LayersMissed",
"# layers",
"[missed]",10,0,10,
"npt");
738 (*i_sector).second.m_correlationHistsY[
"HitsPixel"] = (*i_sector).second.bookCorrHistsY(
"HitsPixel",
"# hits",
"[pixel]",10,0,10,
"npt");
739 (*i_sector).second.m_correlationHistsY[
"HitsStrip"] = (*i_sector).second.bookCorrHistsY(
"HitsStrip",
"# hits",
"[strip]",40,0,40,
"npt");
740 (*i_sector).second.m_correlationHistsY[
"HitsGood"] = (*i_sector).second.bookCorrHistsY(
"HitsGood",
"# hits",
"[good]",50,0,50,
"npt");
741 (*i_sector).second.m_correlationHistsY[
"NorChi2"] = (*i_sector).second.bookCorrHistsY(
"NorChi2",
"#chi^{2}/f",
"",50,0,norChi2Max,
"npr");
742 (*i_sector).second.m_correlationHistsY[
"Theta"] = (*i_sector).second.bookCorrHistsY(
"Theta",
"#theta",
"[ ^{o}]",40,-10,190,
"npt");
743 (*i_sector).second.m_correlationHistsY[
"Phi"] = (*i_sector).second.bookCorrHistsY(
"Phi",
"#phi",
"[ ^{o}]",76,-190,190,
"npt");
744 (*i_sector).second.m_correlationHistsY[
"D0Beamspot"] = (*i_sector).second.bookCorrHistsY(
"D0Beamspot",
"d_{0, BS}",
"[cm]",40,-d0Max,d0Max,
"npt");
745 (*i_sector).second.m_correlationHistsY[
"Dz"] = (*i_sector).second.bookCorrHistsY(
"Dz",
"d_{z}",
"[cm]",40,-dzMax,dzMax,
"npt");
746 (*i_sector).second.m_correlationHistsY[
"Pt"] = (*i_sector).second.bookCorrHistsY(
"Pt",
"p_{t}",
"[GeV]",50,0,pMax,
"npt");
747 (*i_sector).second.m_correlationHistsY[
"P"] = (*i_sector).second.bookCorrHistsY(
"P",
"|p|",
"[GeV]",50,0,pMax,
"npt");
748 (*i_sector).second.m_correlationHistsY[
"InvP"] = (*i_sector).second.bookCorrHistsY(
"InvP",
"1/|p|",
"[GeV^{-1}]",25,0,invPMax,
"t");
749 (*i_sector).second.m_correlationHistsY[
"MeanAngle"] = (*i_sector).second.bookCorrHistsY(
"MeanAngle",
"<#phi_{module}>",
"[ ^{o}]",25,-5,95,
"npt");
754 for(std::vector<unsigned int>::iterator i_errHists = v_errHists.begin(); i_errHists != v_errHists.end(); ++i_errHists){
755 double xMin(0.01*(*i_errHists-1)),
xMax(0.01*(*i_errHists));
756 std::stringstream sigmaXHit, sigmaXTrk,
sigmaX;
757 sigmaXHit <<
"h_sigmaXHit_" << *i_errHists;
758 sigmaXTrk <<
"h_sigmaXTrk_" << *i_errHists;
759 sigmaX <<
"h_sigmaX_" << *i_errHists;
760 (*i_sector).second.m_sigmaX[
"sigmaXHit"].push_back(secDir.
make<TH1F>(sigmaXHit.str().c_str(),
"hit error #sigma_{hit,x};#sigma_{hit,x} [#mum];# hits",100,
xMin*10000.,xMax*10000.));
761 (*i_sector).second.m_sigmaX[
"sigmaXTrk"].push_back(secDir.
make<TH1F>(sigmaXTrk.str().c_str(),
"track error #sigma_{trk,x};#sigma_{trk,x} [#mum];# hits",100,
xMin*10000.,xMax*10000.));
762 (*i_sector).second.m_sigmaX[
"sigmaX" ].push_back(secDir.
make<TH1F>(sigmaX.str().c_str(),
"residual error #sigma_{r,x};#sigma_{r,x} [#mum];# hits",100,
xMin*10000.,xMax*10000.));
764 std::stringstream sigmaYHit, sigmaYTrk,
sigmaY;
765 sigmaYHit <<
"h_sigmaYHit_" << *i_errHists;
766 sigmaYTrk <<
"h_sigmaYTrk_" << *i_errHists;
767 sigmaY <<
"h_sigmaY_" << *i_errHists;
768 (*i_sector).second.m_sigmaY[
"sigmaYHit"].push_back(secDir.
make<TH1F>(sigmaYHit.str().c_str(),
"hit error #sigma_{hit,y};#sigma_{hit,y} [#mum];# hits",100,
xMin*10000.,xMax*10000.));
769 (*i_sector).second.m_sigmaY[
"sigmaYTrk"].push_back(secDir.
make<TH1F>(sigmaYTrk.str().c_str(),
"track error #sigma_{trk,y};#sigma_{trk,y} [#mum];# hits",100,
xMin*10000.,xMax*10000.));
770 (*i_sector).second.m_sigmaY[
"sigmaY" ].push_back(secDir.
make<TH1F>(sigmaY.str().c_str(),
"residual error #sigma_{r,y};#sigma_{r,y} [#mum];# hits",100,
xMin*10000.,xMax*10000.));
783 for(std::vector<unsigned int>::iterator i_errHists = v_errHists.begin(); i_errHists != v_errHists.end(); ++i_errHists){
784 for(std::vector<unsigned int>::iterator i_errHists2 = i_errHists; i_errHists2 != v_errHists.end();){
786 if(*i_errHists==*i_errHists2){
787 edm::LogError(
"BookSectorHists")<<
"Value of vErrHists in config exists twice: "<<*i_errHists<<
"\n... delete one of both";
788 v_errHists.erase(i_errHists2);
793 for(std::map<unsigned int,TrackerSectorStruct>::iterator i_sector =
m_tkSector_.begin(); i_sector !=
m_tkSector_.end(); ++i_sector){
798 "TFileService is not registered in cfg file" );
801 std::stringstream sector; sector <<
"Sector_" << (*i_sector).first;
805 (*i_sector).second.Name = secDir.
make<TH1F>(
"z_name",(*i_sector).second.name.c_str(),1,0,1);
808 if((*i_sector).second.v_rawId.size()==0){
815 for(
std::map<
unsigned int,std::pair<double,double> >::const_iterator i_errBins =
m_resErrBins_.begin();
817 std::stringstream interval; interval <<
"Interval_" << (*i_errBins).first;
819 (*i_sector).second.m_binnedHists[(*i_errBins).first][
"sigmaX"] = intDir.
make<TH1F>(
"h_sigmaX",
"residual resolution #sigma_{x};#sigma_{x} [cm];# hits",100,0.,0.01);
820 (*i_sector).second.m_binnedHists[(*i_errBins).first][
"norResX"] = intDir.
make<TH1F>(
"h_norResX",
"normalized residual r_{x}/#sigma_{r,x};(x_{trk}-x_{hit})/#sigma_{r,x};# hits",100,-10,10);
821 if((*i_sector).second.isPixel){
822 (*i_sector).second.m_binnedHists[(*i_errBins).first][
"sigmaY"] = intDir.
make<TH1F>(
"h_sigmaY",
"residual resolution #sigma_{y};#sigma_{y} [cm];# hits",100,0.,0.01);
823 (*i_sector).second.m_binnedHists[(*i_errBins).first][
"norResY"] = intDir.
make<TH1F>(
"h_norResY",
"normalized residual r_{y}/#sigma_{r,y};(y_{trk}-y_{hit})/#sigma_{r,y};# hits",100,-10,10);
831 unsigned int rawId(0);
832 (*i_sector).second.RawId = resDir.make<TTree>(
"rawIdTree",
"Tree containing rawIds of all modules in sector");
833 (*i_sector).second.RawId->Branch(
"RawId", &rawId,
"RawId/i");
834 for(std::vector<unsigned int>::const_iterator i_rawId=(*i_sector).second.v_rawId.begin(); i_rawId!=(*i_sector).second.v_rawId.end(); ++i_rawId){
836 (*i_sector).second.RawId->Fill();
842 for(std::vector<double>::iterator i_binX = v_binX.begin(); i_binX != v_binX.end(); ++i_binX){
845 (*i_sector).second.EntriesX = resDir.make<TH1F>(
"h_entriesX",
"# hits used;#sigma_{x} [#mum];# hits",v_binX.size()-1,&(v_binX[0]));
846 if((*i_sector).second.isPixel){
847 (*i_sector).second.EntriesY = resDir.make<TH1F>(
"h_entriesY",
"# hits used;#sigma_{y} [#mum];# hits",v_binX.size()-1,&(v_binX[0]));
852 (*i_sector).second.ResX = resDir.make<TH1F>(
"h_ResX",
"residual r_{x};x_{trk}-x_{hit} [#mum];# hits",100,-0.03*10000.,0.03*10000.);
853 (*i_sector).second.NorResX = resDir.make<TH1F>(
"h_NorResX",
"normalized residual r_{x}/#sigma_{r,x};(x_{trk}-x_{hit})/#sigma_{r,x};# hits",100,-5.,5.);
854 if((*i_sector).second.isPixel){
855 (*i_sector).second.ResY = resDir.make<TH1F>(
"h_ResY",
"residual r_{y};y_{trk}-y_{hit} [#mum];# hits",100,-0.03*10000.,0.03*10000.);
856 (*i_sector).second.NorResY = resDir.make<TH1F>(
"h_NorResY",
"normalized residual r_{y}/#sigma_{r,y};(y_{trk}-y_{hit})/#sigma_{r,y};# hits",100,-5.,5.);
869 int trackSizeBins = zoomHists ? 6 : 201;
870 double trackSizeMax = trackSizeBins -1;
872 double chi2Max = zoomHists ? 100. : 2000.;
873 double norChi2Max = zoomHists ? 5. : 1000.;
874 double d0max = zoomHists ? 0.02 : 40.;
875 double dzmax = zoomHists ? 15. : 100.;
876 double pMax = zoomHists ? 200. : 2000.;
880 tkDetector_.
TrkSize = evtDir.
make<TH1F>(
"h_trackSize",
"# tracks [all];# tracks;# events",trackSizeBins,-1,trackSizeMax);
881 tkDetector_.
TrkSizeGood = evtDir.
make<TH1F>(
"h_trackSizeGood",
"# tracks [good];# tracks;# events",trackSizeBins,-1,trackSizeMax);
884 tkDetector_.
HitsValid = trkDir.make<TH1F>(
"h_hitsValid",
"# hits [valid];# hits [valid];# tracks",51,-1,50);
885 tkDetector_.
HitsInvalid = trkDir.make<TH1F>(
"h_hitsInvalid",
"# hits [invalid];# hits [invalid];# tracks",21,-1,20);
886 tkDetector_.
Hits2D = trkDir.make<TH1F>(
"h_hits2D",
"# hits [2D];# hits [2D];# tracks",21,-1,20);
887 tkDetector_.
LayersMissed = trkDir.make<TH1F>(
"h_layersMissed",
"# layers [missed];# layers [missed];# tracks",11,-1,10);
888 tkDetector_.
HitsPixel = trkDir.make<TH1F>(
"h_hitsPixel",
"# hits [pixel];# hits [pixel];# tracks",11,-1,10);
889 tkDetector_.
HitsStrip = trkDir.make<TH1F>(
"h_hitsStrip",
"# hits [strip];# hits [strip];# tracks",41,-1,40);
890 tkDetector_.
Charge = trkDir.make<TH1F>(
"h_charge",
"charge q;q [e];# tracks",5,-2,3);
892 tkDetector_.
Ndof = trkDir.make<TH1F>(
"h_ndof",
"# degrees of freedom f;f;# tracks",101,-1,100);
893 tkDetector_.
NorChi2 = trkDir.make<TH1F>(
"h_norChi2",
"normalized #chi^{2};#chi^{2}/f;# tracks",200,0,norChi2Max);
894 tkDetector_.
Prob = trkDir.make<TH1F>(
"h_prob",
" #chi^{2} probability;prob(#chi^{2},f);# tracks",50,0,1);
895 tkDetector_.
Eta = trkDir.make<TH1F>(
"h_eta",
"pseudorapidity #eta;#eta;# tracks",100,-5,5);
896 tkDetector_.
EtaErr = trkDir.make<TH1F>(
"h_etaErr",
"Error of #eta;#sigma(#eta);# tracks",100,0,0.001);
897 tkDetector_.
EtaSig = trkDir.make<TH1F>(
"h_etaSig",
"Significance of #eta;#eta/#sigma(#eta);# tracks",100,-20000,20000);
898 tkDetector_.
Theta = trkDir.make<TH1F>(
"h_theta",
"polar angle #theta;#theta [ ^{o}];# tracks",100,-10,190);
899 tkDetector_.
Phi = trkDir.make<TH1F>(
"h_phi",
"azimuth angle #phi;#phi [ ^{o}];# tracks",190,-190,190);
900 tkDetector_.
PhiErr = trkDir.make<TH1F>(
"h_phiErr",
"Error of #phi;#sigma(#phi) [ ^{o}];# tracks",100,0,0.04);
901 tkDetector_.
PhiSig = trkDir.make<TH1F>(
"h_phiSig",
"Significance of #phi;#phi/#sigma(#phi) [ ^{o}];# tracks",100,-50000,50000);
902 tkDetector_.
D0Beamspot = trkDir.make<TH1F>(
"h_d0Beamspot",
"Closest approach d_{0} wrt. beamspot;d_{0, BS} [cm];# tracks",200,-d0max,d0max);
903 tkDetector_.
D0BeamspotErr = trkDir.make<TH1F>(
"h_d0BeamspotErr",
"Error of d_{0, BS};#sigma(d_{0, BS}) [cm];# tracks",200,0,0.01);
904 tkDetector_.
D0BeamspotSig = trkDir.make<TH1F>(
"h_d0BeamspotSig",
"Significance of d_{0, BS};d_{0, BS}/#sigma(d_{0, BS});# tracks",100,-5,5);
905 tkDetector_.
Dz = trkDir.make<TH1F>(
"h_dz",
"Closest approach d_{z};d_{z} [cm];# tracks",200,-dzmax,dzmax);
906 tkDetector_.
DzErr = trkDir.make<TH1F>(
"h_dzErr",
"Error of d_{z};#sigma(d_{z}) [cm];# tracks",200,0,0.01);
907 tkDetector_.
DzSig = trkDir.make<TH1F>(
"h_dzSig",
"Significance of d_{z};d_{z}/#sigma(d_{z});# tracks",100,-10000,10000);
908 tkDetector_.
Pt = trkDir.make<TH1F>(
"h_pt",
"transverse momentum p_{t};p_{t} [GeV];# tracks",100,0,
pMax);
909 tkDetector_.
PtErr = trkDir.make<TH1F>(
"h_ptErr",
"Error of p_{t};#sigma(p_{t}) [GeV];# tracks",100,0,1.6);
910 tkDetector_.
PtSig = trkDir.make<TH1F>(
"h_ptSig",
"Significance of p_{t};p_{t}/#sigma(p_{t});# tracks",100,0,200);
911 tkDetector_.
P = trkDir.make<TH1F>(
"h_p",
"momentum magnitude |p|;|p| [GeV];# tracks",100,0,
pMax);
912 tkDetector_.
MeanAngle = trkDir.make<TH1F>(
"h_meanAngle",
"mean angle on module <#phi_{module}>;<#phi_{module}> [ ^{o}];# tracks",100,-5,95);
913 tkDetector_.
HitsGood = trkDir.make<TH1F>(
"h_hitsGood",
"# hits [good];# hits [good];# tracks",51,-1,50);
915 tkDetector_.
MeanAngleVsHits = trkDir.make<TH2F>(
"h2_meanAngleVsHits",
"<#phi_{module}> vs. # hits;# hits;<#phi_{module}> [ ^{o}]",51,-1,50,50,-5,95);
916 tkDetector_.
HitsGoodVsHitsValid = trkDir.make<TH2F>(
"h2_hitsGoodVsHitsValid",
"# hits [good] vs. # hits [valid];# hits [valid];# hits [good]",51,-1,50,51,-1,50);
917 tkDetector_.
HitsPixelVsEta = trkDir.make<TH2F>(
"h2_hitsPixelVsEta",
"# hits [pixel] vs. #eta;#eta;# hits [pixel]",60,-3,3,11,-1,10);
918 tkDetector_.
HitsPixelVsTheta = trkDir.make<TH2F>(
"h2_hitsPixelVsTheta",
"# hits [pixel] vs. #theta;#theta;# hits [pixel]",100,-10,190,11,-1,10);
919 tkDetector_.
HitsStripVsEta = trkDir.make<TH2F>(
"h2_hitsStripVsEta",
"# hits [strip] vs. #eta;#eta;# hits [strip]",60,-3,3,31,-1,40);
920 tkDetector_.
HitsStripVsTheta = trkDir.make<TH2F>(
"h2_hitsStripVsTheta",
"# hits [strip] vs. #theta;#theta;# hits [strip]",100,-10,190,31,-1,40);
921 tkDetector_.
PtVsEta = trkDir.make<TH2F>(
"h2_ptVsEta",
"p_{t} vs. #eta;#eta;p_{t} [GeV]",60,-3,3,100,0,
pMax);
922 tkDetector_.
PtVsTheta = trkDir.make<TH2F>(
"h2_ptVsTheta",
"p_{t} vs. #theta;#theta;p_{t} [GeV]",100,-10,190,100,0,
pMax);
924 tkDetector_.
PMeanAngleVsHits = trkDir.make<TProfile>(
"p_meanAngleVsHits",
"<#phi_{module}> vs. # hits;# hits;<#phi_{module}> [ ^{o}]",51,-1,50);
925 tkDetector_.
PHitsGoodVsHitsValid = trkDir.make<TProfile>(
"p_hitsGoodVsHitsValid",
"# hits [good] vs. # hits [valid];# hits [valid];# hits [good]",51,-1,50);
926 tkDetector_.
PHitsPixelVsEta = trkDir.make<TProfile>(
"p_hitsPixelVsEta",
"# hits [pixel] vs. #eta;#eta;# hits [pixel]",60,-3,3);
927 tkDetector_.
PHitsPixelVsTheta = trkDir.make<TProfile>(
"p_hitsPixelVsTheta",
"# hits [pixel] vs. #theta;#theta;# hits [pixel]",100,-10,190);
928 tkDetector_.
PHitsStripVsEta = trkDir.make<TProfile>(
"p_hitsStripVsEta",
"# hits [strip] vs. #eta;#eta;# hits [strip]",60,-3,3);
929 tkDetector_.
PHitsStripVsTheta = trkDir.make<TProfile>(
"p_hitsStripVsTheta",
"# hits [strip] vs. #theta;#theta;# hits [strip]",100,-10,190);
930 tkDetector_.
PPtVsEta = trkDir.make<TProfile>(
"p_ptVsEta",
"p_{t} vs. #eta;#eta;p_{t} [GeV]",60,-3,3);
931 tkDetector_.
PPtVsTheta = trkDir.make<TProfile>(
"p_ptVsTheta",
"p_{t} vs. #theta;#theta;p_{t} [GeV]",100,-10,190);
952 trkParams.hitsValid = track.
found();
953 trkParams.hitsInvalid = trkParams.hitsSize-trkParams.hitsValid;
954 trkParams.layersMissed = track.
lost();
955 trkParams.hitsPixel = hitPattern.numberOfValidPixelHits();
956 trkParams.hitsStrip = hitPattern.numberOfValidStripHits();
957 trkParams.charge = track.
charge();
958 trkParams.chi2 = track.
chi2();
959 trkParams.ndof = track.
ndof();
960 trkParams.norChi2 = trkParams.chi2/trkParams.ndof;
961 trkParams.prob = TMath::Prob(trkParams.chi2,trkParams.ndof);
962 trkParams.eta = track.
eta();
963 trkParams.etaErr = track.
etaError();
964 trkParams.theta = track.
theta();
965 trkParams.phi = track.
phi();
966 trkParams.phiErr = track.
phiError();
967 trkParams.d0 = track.
d0();
968 trkParams.d0Beamspot = -1.*track.
dxy(beamPoint);
969 trkParams.d0BeamspotErr = d0BeamspotErr;
970 trkParams.dz = track.
dz();
971 trkParams.dzErr = track.
dzError();
972 trkParams.dzBeamspot = track.
dz(beamPoint);
973 trkParams.p = track.
p();
974 trkParams.pt = track.
pt();
975 trkParams.ptErr = track.
ptError();
977 const std::vector<TrajectoryMeasurement>& v_meas = traj.
measurements();
979 int count2D(0);
float meanPhiSensToNorm(0.
F);
980 std::vector<TrajectoryMeasurement>::const_iterator i_meas;
981 for(i_meas = v_meas.begin(); i_meas != v_meas.end(); ++i_meas){
985 if(this->
isHit2D(recHit))++count2D;
989 meanPhiSensToNorm += atan(fabs(
sqrt(mom.x()*mom.x()+mom.y()*mom.y())/mom.z()));
991 meanPhiSensToNorm *= (1./
static_cast<float>(trkParams.hitsSize));
993 trkParams.hits2D = count2D;
994 trkParams.meanPhiSensToNorm = meanPhiSensToNorm;
998 if(trkParams.hitsStrip<11 || trkParams.hits2D<2 || trkParams.hitsPixel<2 ||
999 trkParams.hitsStrip>35 || trkParams.hitsPixel>7 ||
1000 trkParams.norChi2>5. ||
1001 trkParams.pt<25. || trkParams.pt>150. ||
1028 const uint32_t rawId(detId.rawId());
1030 for(std::map<unsigned int,TrackerSectorStruct>::const_iterator i_sector =
m_tkSector_.begin(); i_sector !=
m_tkSector_.end(); ++i_sector){
1031 for(std::vector<unsigned int>::const_iterator i_rawId = (*i_sector).second.v_rawId.begin();
1032 i_rawId != (*i_sector).second.v_rawId.end(); ++i_rawId){
1033 if(rawId==*i_rawId){hitParams.
v_sector.push_back((*i_sector).first);
break;}
1038 int xMomentum(0), yMomentum(0), zMomentum(0);
1039 xMomentum = mom.x()>0. ? 1 : -1;
1040 yMomentum = mom.y()>0. ? 1 : -1;
1041 zMomentum = mom.z()>0. ? 1 : -1;
1042 float phiSensX = std::atan(std::fabs(mom.x()/mom.z()))*
static_cast<float>(
m_tkTreeVar_[rawId].vDirection);
1043 float phiSensY = std::atan(std::fabs(mom.y()/mom.z()))*
static_cast<float>(
m_tkTreeVar_[rawId].vDirection);
1044 hitParams.
phiSens = std::atan(std::fabs(
std::sqrt(mom.x()*mom.x()+mom.y()*mom.y())/mom.z()));
1045 hitParams.
phiSensX = (xMomentum==zMomentum ? phiSensX : -phiSensX );
1046 hitParams.
phiSensY = (yMomentum==zMomentum ? phiSensY : -phiSensY );
1074 else {
edm::LogWarning(
"FillHitVariables")<<
"cant identify wether hit is from pixel or strip";
1087 { errorWithoutAPE =
LocalError(errHitApe.
xx() -lape.
xx(), errHitApe.
xy()- lape.
xy(), errHitApe.
yy()-lape.
yy());
1096 { errorWithoutAPE =
LocalError(errHitApe.
xx() -lape.
xx(), errHitApe.
xy()- lape.
xy(), errHitApe.
yy()-lape.
yy());
1101 const LocalError& errHitWoApe = errorWithoutAPE;
1106 std::cout<<
"errHitWoApe " <<errHitWoApe<<
"errHitApe "<<errHitApe<<std::endl;
1134 const float xHit = positionAndError2Hit.second.posX;
1135 const float xTrk = positionAndError2Trk.second.posX;
1136 const float yHit = positionAndError2Hit.second.posY;
1137 const float yTrk = positionAndError2Trk.second.posY;
1139 const float errXHit2(positionAndError2Hit.second.errX2);
1140 const float errXHitWoApe2(positionAndError2HitWoApe.second.errX2);
1141 const float errXTrk2(positionAndError2Trk.second.errX2);
1142 const float errYHit2(positionAndError2Hit.second.errY2);
1143 const float errYHitWoApe2(positionAndError2HitWoApe.second.errY2);
1144 const float errYTrk2(positionAndError2Trk.second.errY2);
1146 const float errXHit =
std::sqrt(positionAndError2Hit.second.errX2);
1147 const float errXHitWoApe =
std::sqrt(positionAndError2HitWoApe.second.errX2);
1148 const float errXTrk =
std::sqrt(positionAndError2Trk.second.errX2);
1149 const float errYHit =
std::sqrt(positionAndError2Hit.second.errY2);
1150 const float errYHitWoApe =
std::sqrt(positionAndError2HitWoApe.second.errY2);
1151 const float errYTrk =
std::sqrt(positionAndError2Trk.second.errY2);
1153 const float resX = xTrk - xHit;
1154 const float resY = yTrk - yHit;
1157 const float errXWoApe2 = errXHitWoApe2 + errXTrk2;
1158 const float errXWoApe =
std::sqrt(errXWoApe2);
1160 const float errYWoApe2 = errYHitWoApe2 + errYTrk2;
1161 const float errYWoApe =
std::sqrt(errYWoApe2);
1163 const float norResX = resX/
errX;
1164 const float norResY = resY/
errY;
1169 float resXprime(999.
F), resYprime(999.
F), norResXprime(999.
F), norResYprime(999.
F);
1170 if(
m_tkTreeVar_[rawId].uDirection == 1){resXprime = resX; norResXprime = norResX;}
1171 else if(
m_tkTreeVar_[rawId].uDirection == -1){resXprime = -resX; norResXprime = -norResX;}
1173 if(
m_tkTreeVar_[rawId].vDirection == 1){resYprime = resY; norResYprime = norResY;}
1174 else if(
m_tkTreeVar_[rawId].vDirection == -1){resYprime = -resY; norResYprime = -norResY;}
1177 hitParams.
xHit = xHit;
1178 hitParams.
xTrk = xTrk;
1188 hitParams.
resX = resXprime;
1189 hitParams.
norResX = norResXprime;
1191 const float norResX2(norResXprime*norResXprime);
1192 hitParams.
probX = TMath::Prob(norResX2,1);
1195 hitParams.
yHit = yHit;
1196 hitParams.
yTrk = yTrk;
1206 hitParams.
resY = resYprime;
1207 hitParams.
norResY = norResYprime;
1209 const float norResY2(norResYprime*norResYprime);
1210 hitParams.
probY = TMath::Prob(norResY2,1);
1239 if(!(dynamic_cast<const SiStripRecHit2D*>(&recHit) || dynamic_cast<const SiStripRecHit1D*>(&recHit))){
1240 edm::LogError(
"FillHitVariables")<<
"RecHit in Strip is 'Matched' or 'Projected', but here all should be monohits per module";
1245 if(dynamic_cast<const SiStripRecHit1D*>(&recHit)){
1247 clusterPtr = &(*stripHit.
cluster());
1249 else if(dynamic_cast<const SiStripRecHit2D*>(&recHit)){
1250 edm::LogWarning(
"FillHitVariables")<<
"Data has TIB/TOB hits as SiStripRecHit2D and not 1D. Probably data is processed with CMSSW<34X. Nevertheless everything should work fine";
1252 clusterPtr = &(*stripHit.
cluster());
1257 clusterPtr = &(*stripHit.
cluster());
1260 edm::LogError(
"FillHitVariables")<<
"Pointer to cluster not valid!!! This should never happen...";
1267 const std::vector<uint8_t>::const_iterator stripChargeL(clusterInfo.
stripCharges().begin());
1268 const std::vector<uint8_t>::const_iterator stripChargeR(--(clusterInfo.
stripCharges().end()));
1269 const std::pair<uint16_t, uint16_t> stripChargeLR = std::make_pair(*stripChargeL,*stripChargeR);
1279 hitParams.
chargeOnEdges =
static_cast<float>(stripChargeLR.first + stripChargeLR.second)/static_cast<float>(hitParams.
chargeStrip);
1280 hitParams.
chargeAsymmetry =
static_cast<float>(stripChargeLR.first - stripChargeLR.second)/static_cast<float>(stripChargeLR.first + stripChargeLR.second);
1305 float dirX = -tanLorentzAnglePerTesla * bField.y();
1306 float dirY = tanLorentzAnglePerTesla * bField.x();
1321 if(momentumDir.z() > 0.)scaledMomentumDir *= std::fabs(thickness/momentumDir.z());
1322 else if(momentumDir.z() < 0.)scaledMomentumDir *= -std::fabs(thickness/momentumDir.z());
1323 else scaledMomentumDir *= maxLength/momentumDir.mag();
1326 if(projEdge1 < 0.)projEdge1 = 0.;
1329 if(projEdge2 < 0.)projEdge1 = 0.;
1333 float coveredStrips = std::fabs(projEdge2 - projEdge1);
1340 edm::LogError(
"FillHitVariables")<<
"Incorrect subdetector ID, hit not associated to tracker";
1360 const uint32_t& rawId(detId.rawId());
1363 if(localError.
xx()<0. || localError.
yy()<0.){
1380 if(!hit.
detUnit())
return vPE2;
1383 if(!dynamic_cast<const RadialStripTopology*>(&detUnit.
type().
topology()))
return vPE2;
1387 if(measError.
uu()<0. || measError.
vv()<0.){
1403 edm::LogError(
"FillHitVariables")<<
"Incorrect subdetector ID, hit not associated to tracker";
1414 const float x(lP.
x());
1415 const float y(lP.
y());
1416 const float errX2(lE.
xx());
1417 const float errY2(lE.
yy());
1436 float errX2(-999.
F);
1437 float errY2(-999.
F);
1441 const float l_0 = r_0 - topol.
detHeight()/2;
1443 y = measPos.
y()*stripLength - 0.5*stripLength + l_0*(1./cosPhi - 1.);
1446 const float errPhi2(measErr.
uu()*angularWidth2);
1448 errX2 = errPhi2*r_0*r_0;
1451 const float helpSummand = l_0*l_0*(sinPhi2/cosPhi4*errPhi2);
1452 errY2 = measErr.
vv()*stripLength*stripLength + helpSummand;
1516 bool emptyMap(
true);
1518 if(0 < (*i_hitSelection).second.size()){
1519 int entry(1);
double intervalBegin(999.);
1520 for(std::vector<double>::iterator i_hitInterval = (*i_hitSelection).second.begin(); i_hitInterval != (*i_hitSelection).second.end(); ++
entry){
1521 if(entry%2==1){intervalBegin = *i_hitInterval; ++i_hitInterval;}
1523 if(intervalBegin > *i_hitInterval){
1524 edm::LogError(
"HitSelector")<<
"INVALID Interval selected for "<<(*i_hitSelection).first<<
":\t"<<intervalBegin<<
" > "<<(*i_hitInterval)
1525 <<
"\n ... delete Selection for "<<(*i_hitSelection).first;
1526 (*i_hitSelection).second.clear(); i_hitInterval = (*i_hitSelection).second.begin();
1528 edm::LogInfo(
"HitSelector")<<
"Interval selected for "<<(*i_hitSelection).first<<
":\t"<<intervalBegin<<
", "<<(*i_hitInterval);
1533 if(0 < (*i_hitSelection).second.size())emptyMap =
false;
1538 bool emptyMapUInt(
true);
1540 if(0 < (*i_hitSelection).second.size()){
1541 int entry(1);
unsigned int intervalBegin(999);
1542 for(std::vector<unsigned int>::iterator i_hitInterval = (*i_hitSelection).second.begin(); i_hitInterval != (*i_hitSelection).second.end(); ++
entry){
1543 if(entry%2==1){intervalBegin = *i_hitInterval; ++i_hitInterval;}
1545 if(intervalBegin > *i_hitInterval){
1546 edm::LogError(
"HitSelector")<<
"INVALID Interval selected for "<<(*i_hitSelection).first<<
":\t"<<intervalBegin<<
" > "<<(*i_hitInterval)
1547 <<
"\n ... delete Selection for "<<(*i_hitSelection).first;
1548 (*i_hitSelection).second.clear(); i_hitInterval = (*i_hitSelection).second.begin();
1550 edm::LogInfo(
"HitSelector")<<
"Interval selected for "<<(*i_hitSelection).first<<
":\t"<<intervalBegin<<
", "<<(*i_hitInterval);
1555 if(0 < (*i_hitSelection).second.size())emptyMapUInt =
false;
1559 if(emptyMap && emptyMapUInt){
1572 std::vector<double> v_cutVariable(parSet.
getParameter<std::vector<double> >(cutVariable));
1573 if(v_cutVariable.size()%2==1){
1574 edm::LogError(
"HitSelector")<<
"Invalid Hit Selection for "<<cutVariable<<
": need even number of arguments (intervals)" 1575 <<
"\n ... delete Selection for "<<cutVariable;
1576 v_cutVariable.clear();
1588 std::vector<unsigned int> v_cutVariable(parSet.
getParameter<std::vector<unsigned int> >(cutVariable));
1589 if(v_cutVariable.size()%2==1){
1590 edm::LogError(
"HitSelector")<<
"Invalid Hit Selection for "<<cutVariable<<
": need even number of arguments (intervals)" 1591 <<
"\n ... delete Selection for "<<cutVariable;
1592 v_cutVariable.clear();
1609 bool isGoodHit(
true);
1610 bool isGoodHitX(
true);
1611 bool isGoodHitY(
true);
1615 const std::vector<double>& v_hitSelection((*i_hitSelection).second);
1616 if(v_hitSelection.size()==0)
continue;
1619 if (hitSelection ==
"phiSens") {
if(!this->
inDoubleInterval(v_hitSelection, hitParams.
phiSens))isGoodHit =
false;}
1620 else if(hitSelection ==
"phiSensX") {
if(!this->
inDoubleInterval(v_hitSelection, hitParams.
phiSensX))isGoodHit =
false;}
1621 else if(hitSelection ==
"phiSensY") {
if(!this->
inDoubleInterval(v_hitSelection, hitParams.
phiSensY))isGoodHit =
false;}
1623 else if(hitSelection ==
"resX") {
if(!this->
inDoubleInterval(v_hitSelection, hitParams.
resX))isGoodHitX =
false;}
1624 else if(hitSelection ==
"norResX") {
if(!this->
inDoubleInterval(v_hitSelection, hitParams.
norResX))isGoodHitX =
false;}
1625 else if(hitSelection ==
"probX") {
if(!this->
inDoubleInterval(v_hitSelection, hitParams.
probX))isGoodHitX =
false;}
1626 else if(hitSelection ==
"errXHit") {
if(!this->
inDoubleInterval(v_hitSelection, hitParams.
errXHit))isGoodHitX =
false;}
1627 else if(hitSelection ==
"errXTrk") {
if(!this->
inDoubleInterval(v_hitSelection, hitParams.
errXTrk))isGoodHitX =
false;}
1628 else if(hitSelection ==
"errX") {
if(!this->
inDoubleInterval(v_hitSelection, hitParams.
errX))isGoodHitX =
false;}
1629 else if(hitSelection ==
"errX2") {
if(!this->
inDoubleInterval(v_hitSelection, hitParams.
errX2))isGoodHitX =
false;}
1644 else if(hitSelection ==
"resY") {
if(!this->
inDoubleInterval(v_hitSelection, hitParams.
resY))isGoodHitY =
false;}
1645 else if(hitSelection ==
"norResY") {
if(!this->
inDoubleInterval(v_hitSelection, hitParams.
norResY))isGoodHitY =
false;}
1646 else if(hitSelection ==
"probY") {
if(!this->
inDoubleInterval(v_hitSelection, hitParams.
probY))isGoodHitY =
false;}
1647 else if(hitSelection ==
"errYHit") {
if(!this->
inDoubleInterval(v_hitSelection, hitParams.
errYHit))isGoodHitY =
false;}
1648 else if(hitSelection ==
"errYTrk") {
if(!this->
inDoubleInterval(v_hitSelection, hitParams.
errYTrk))isGoodHitY =
false;}
1649 else if(hitSelection ==
"errY") {
if(!this->
inDoubleInterval(v_hitSelection, hitParams.
errY))isGoodHitY =
false;}
1650 else if(hitSelection ==
"errY2") {
if(!this->
inDoubleInterval(v_hitSelection, hitParams.
errY2))isGoodHitY =
false;}
1656 else if(hitSelection ==
"widthDiff") {
if(!this->
inDoubleInterval(v_hitSelection, hitParams.
projWidth-static_cast<float>(hitParams.
widthX)))isGoodHit =
false;}
1658 else if(hitSelection ==
"maxCharge") {
if(!this->
inDoubleInterval(v_hitSelection, hitParams.
maxCharge))isGoodHit =
false;}
1663 else if(hitSelection ==
"sOverN") {
if(!this->
inDoubleInterval(v_hitSelection, hitParams.
sOverN))isGoodHit =
false;}
1669 const std::vector<unsigned int>& v_hitSelection((*i_hitSelection).second);
1670 if(v_hitSelection.size()==0)
continue;
1676 if(hitSelection ==
"isOnEdge") {
if(!this->
inUintInterval(v_hitSelection, hitParams.
isOnEdge))isGoodHit =
false;}
1678 else if(hitSelection ==
"spansTwoRoc") {
if(!this->
inUintInterval(v_hitSelection, hitParams.
spansTwoRoc))isGoodHit =
false;}
1679 else if(hitSelection ==
"qBin") {
if(!this->
inUintInterval(v_hitSelection, hitParams.
qBin))isGoodHit =
false;}
1681 else if(hitSelection ==
"widthX") {
if(!this->
inUintInterval(v_hitSelection, hitParams.
widthX))isGoodHitX =
false;}
1682 else if(hitSelection ==
"widthY") {
if(!this->
inUintInterval(v_hitSelection, hitParams.
widthY))isGoodHitY =
false;}
1687 if (hitSelection ==
"width") {
if(!this->
inUintInterval(v_hitSelection, hitParams.
widthX))isGoodHit =
false;}
1689 else if(hitSelection ==
"maxIndex") {
if(!this->
inUintInterval(v_hitSelection, hitParams.
maxIndex))isGoodHit =
false;}
1709 int entry(1);
double intervalBegin(999.);
1710 bool isSelected(
false);
1711 for(std::vector<double>::const_iterator i_hitInterval = v_hitSelection.begin(); i_hitInterval != v_hitSelection.end(); ++i_hitInterval, ++
entry){
1712 if(entry%2==1)intervalBegin = *i_hitInterval;
1713 else if(variable>=intervalBegin && variable<*i_hitInterval)isSelected =
true;
1721 int entry(1);
unsigned int intervalBegin(999);
1722 bool isSelected(
false);
1723 for(std::vector<unsigned int>::const_iterator i_hitInterval = v_hitSelection.begin(); i_hitInterval != v_hitSelection.end(); ++i_hitInterval, ++
entry){
1724 if(entry%2==1)intervalBegin = *i_hitInterval;
1725 else if(variable>=intervalBegin && variable<=*i_hitInterval){
1726 if(variable2==999 || (variable2>=intervalBegin && variable2<=*i_hitInterval))isSelected =
true;
1740 unsigned int goodHitsPerTrack(trackStruct.
v_hitParams.size());
1798 for(std::vector<TrackStruct::HitParameterStruct>::const_iterator i_hit = trackStruct.
v_hitParams.begin();
1804 for(std::map<unsigned int,TrackerSectorStruct>::iterator i_sector =
m_tkSector_.begin(); i_sector !=
m_tkSector_.end(); ++i_sector){
1805 bool moduleInSector(
false);
1806 for(std::vector<unsigned int>::const_iterator i_hitSector = hit.
v_sector.begin(); i_hitSector != hit.
v_sector.end(); ++i_hitSector){
1807 if((*i_sector).first == *i_hitSector){moduleInSector =
true;
break;}
1809 if(!moduleInSector)
continue;
1813 std::map<std::string,TrackerSectorStruct::CorrelationHists>& m_corrHists(sector.
m_correlationHistsX);
1820 m_corrHists[
"HitsGood"].fillCorrHistsX(hit,goodHitsPerTrack);
1822 m_corrHists[
"Hits2D"].fillCorrHistsX(hit,trackStruct.
trkParams.
hits2D);
1828 m_corrHists[
"Phi"].fillCorrHistsX(hit,trackStruct.
trkParams.
phi*180./
M_PI);
1830 m_corrHists[
"Dz"].fillCorrHistsX(hit,trackStruct.
trkParams.
dz);
1831 m_corrHists[
"Pt"].fillCorrHistsX(hit,trackStruct.
trkParams.
pt);
1832 m_corrHists[
"P"].fillCorrHistsX(hit,trackStruct.
trkParams.
p);
1833 m_corrHists[
"InvP"].fillCorrHistsX(hit,1./trackStruct.
trkParams.
p);
1839 std::map<std::string,TrackerSectorStruct::CorrelationHists>& m_corrHists(sector.
m_correlationHistsY);
1846 m_corrHists[
"HitsGood"].fillCorrHistsY(hit,goodHitsPerTrack);
1848 m_corrHists[
"Hits2D"].fillCorrHistsY(hit,trackStruct.
trkParams.
hits2D);
1854 m_corrHists[
"Phi"].fillCorrHistsY(hit,trackStruct.
trkParams.
phi*180./
M_PI);
1856 m_corrHists[
"Dz"].fillCorrHistsY(hit,trackStruct.
trkParams.
dz);
1857 m_corrHists[
"Pt"].fillCorrHistsY(hit,trackStruct.
trkParams.
pt);
1858 m_corrHists[
"P"].fillCorrHistsY(hit,trackStruct.
trkParams.
p);
1859 m_corrHists[
"InvP"].fillCorrHistsY(hit,1./trackStruct.
trkParams.
p);
1865 for(std::vector<TH1*>::iterator iHist = (*i_sigmaX).second.begin(); iHist != (*i_sigmaX).second.end(); ++iHist){
1866 if ((*i_sigmaX).first==
"sigmaXHit")(*iHist)->Fill(hit.
errXHit*10000.);
1867 else if((*i_sigmaX).first==
"sigmaXTrk")(*iHist)->Fill(hit.
errXTrk*10000.);
1868 else if((*i_sigmaX).first==
"sigmaX") (*iHist)->Fill(hit.
errX*10000.);
1872 for(std::vector<TH1*>::iterator iHist = (*i_sigmaY).second.begin(); iHist != (*i_sigmaY).second.end(); ++iHist){
1873 if ((*i_sigmaY).first==
"sigmaYHit")(*iHist)->Fill(hit.
errYHit*10000.);
1874 else if((*i_sigmaY).first==
"sigmaYTrk")(*iHist)->Fill(hit.
errYTrk*10000.);
1875 else if((*i_sigmaY).first==
"sigmaY") (*iHist)->Fill(hit.
errY*10000.);
1886 std::map<std::string, TrackerSectorStruct::CorrelationHists>& m_corrHists(sector.
m_correlationHistsX);
1889 m_corrHists[
"WidthX"].fillCorrHistsX(hit, hit.
widthX);
1890 m_corrHists[
"BaryStripX"].fillCorrHistsX(hit, hit.
baryStripX);
1893 m_corrHists[
"ChargePixel"].fillCorrHistsX(hit, hit.
chargePixel);
1898 m_corrHists[
"IsOnEdge"].fillCorrHistsX(hit, hit.
isOnEdge);
1899 m_corrHists[
"HasBadPixels"].fillCorrHistsX(hit, hit.
hasBadPixels);
1900 m_corrHists[
"SpansTwoRoc"].fillCorrHistsX(hit, hit.
spansTwoRoc);
1901 m_corrHists[
"QBin"].fillCorrHistsX(hit, hit.
qBin);
1905 m_corrHists[
"ChargeStrip"].fillCorrHistsX(hit, hit.
chargeStrip);
1906 m_corrHists[
"MaxStrip"].fillCorrHistsX(hit, hit.
maxStrip);
1907 m_corrHists[
"MaxCharge"].fillCorrHistsX(hit, hit.
maxCharge);
1908 m_corrHists[
"MaxIndex"].fillCorrHistsX(hit, hit.
maxIndex);
1909 m_corrHists[
"ChargeOnEdges"].fillCorrHistsX(hit, hit.
chargeOnEdges);
1910 m_corrHists[
"ChargeAsymmetry"].fillCorrHistsX(hit, hit.
chargeAsymmetry);
1911 m_corrHists[
"ChargeLRplus"].fillCorrHistsX(hit, hit.
chargeLRplus);
1912 m_corrHists[
"ChargeLRminus"].fillCorrHistsX(hit, hit.
chargeLRminus);
1913 m_corrHists[
"SOverN"].fillCorrHistsX(hit, hit.
sOverN);
1914 m_corrHists[
"WidthProj"].fillCorrHistsX(hit, hit.
projWidth);
1915 m_corrHists[
"WidthDiff"].fillCorrHistsX(hit, hit.
projWidth-static_cast<float>( hit.
widthX));
1931 m_corrHists[
"SigmaXHit"].fillCorrHistsX(hit, hit.
errXHit*10000.);
1932 m_corrHists[
"SigmaXTrk"].fillCorrHistsX(hit, hit.
errXTrk*10000.);
1933 m_corrHists[
"SigmaX"].fillCorrHistsX(hit, hit.
errX*10000.);
1935 m_corrHists[
"PhiSens"].fillCorrHistsX(hit, hit.
phiSens*180./
M_PI);
1936 m_corrHists[
"PhiSensX"].fillCorrHistsX(hit, hit.
phiSensX*180./
M_PI);
1937 m_corrHists[
"PhiSensY"].fillCorrHistsX(hit, hit.
phiSensY*180./
M_PI);
1943 sector.
ResX ->Fill(hit.
resX*10000.);
1956 std::map<std::string, TrackerSectorStruct::CorrelationHists>& m_corrHists(sector.
m_correlationHistsY);
1961 m_corrHists[
"WidthY"].fillCorrHistsY(hit,hit.
widthY);
1962 m_corrHists[
"BaryStripY"].fillCorrHistsY(hit,hit.
baryStripY);
1964 m_corrHists[
"ChargePixel"].fillCorrHistsY(hit, hit.
chargePixel);
1969 m_corrHists[
"IsOnEdge"].fillCorrHistsY(hit, hit.
isOnEdge);
1970 m_corrHists[
"HasBadPixels"].fillCorrHistsY(hit, hit.
hasBadPixels);
1971 m_corrHists[
"SpansTwoRoc"].fillCorrHistsY(hit, hit.
spansTwoRoc);
1972 m_corrHists[
"QBin"].fillCorrHistsY(hit, hit.
qBin);
1975 m_corrHists[
"SigmaYHit"].fillCorrHistsY(hit, hit.
errYHit*10000.);
1976 m_corrHists[
"SigmaYTrk"].fillCorrHistsY(hit, hit.
errYTrk*10000.);
1977 m_corrHists[
"SigmaY"].fillCorrHistsY(hit, hit.
errY*10000.);
1979 m_corrHists[
"PhiSens"].fillCorrHistsY(hit, hit.
phiSens*180./
M_PI);
1980 m_corrHists[
"PhiSensX"].fillCorrHistsY(hit, hit.
phiSensX*180./
M_PI);
1981 m_corrHists[
"PhiSensY"].fillCorrHistsY(hit, hit.
phiSensY*180./
M_PI);
1987 sector.
ResY ->Fill(hit.
resY*10000.);
2001 unsigned int goodHitsPerTrack(trackStruct.
v_hitParams.size());
2008 for(std::vector<TrackStruct::HitParameterStruct>::const_iterator i_hit = trackStruct.
v_hitParams.begin();
2013 for(std::map<unsigned int,TrackerSectorStruct>::iterator i_sector =
m_tkSector_.begin(); i_sector !=
m_tkSector_.end(); ++i_sector){
2015 bool moduleInSector(
false);
2016 for(std::vector<unsigned int>::const_iterator i_hitSector = (*i_hit).v_sector.begin(); i_hitSector != (*i_hit).v_sector.end(); ++i_hitSector){
2017 if((*i_sector).first == *i_hitSector){moduleInSector =
true;
break;}
2019 if(!moduleInSector)
continue;
2023 if((*i_hit).goodXMeasurement){
2024 for(
std::map<
unsigned int,std::pair<double,double> >::const_iterator i_errBins =
m_resErrBins_.begin();
2029 if((*i_hit).errXWoApe < (*i_errBins).second.first || (*i_hit).errXWoApe >= (*i_errBins).second.second){
2032 (*i_sector).second.m_binnedHists[(*i_errBins).first][
"sigmaX"] ->Fill((*i_hit).errXWoApe);
2033 (*i_sector).second.m_binnedHists[(*i_errBins).first][
"norResX"]->Fill((*i_hit).norResX);
2036 (*i_sector).second.ResX->Fill((*i_hit).resX*10000.);
2037 (*i_sector).second.NorResX->Fill((*i_hit).norResX);
2040 if((*i_hit).goodYMeasurement){
2041 for(
std::map<
unsigned int,std::pair<double,double> >::const_iterator i_errBins =
m_resErrBins_.begin();
2046 if((*i_hit).errYWoApe < (*i_errBins).second.first || (*i_hit).errYWoApe >= (*i_errBins).second.second){
2049 (*i_sector).second.m_binnedHists[(*i_errBins).first][
"sigmaY"] ->Fill((*i_hit).errYWoApe);
2050 (*i_sector).second.m_binnedHists[(*i_errBins).first][
"norResY"]->Fill((*i_hit).norResY);
2053 (*i_sector).second.ResY->Fill((*i_hit).resY*10000.);
2054 (*i_sector).second.NorResY->Fill((*i_hit).norResY);
2070 for(std::map<unsigned int,TrackerSectorStruct>::iterator i_sector =
m_tkSector_.begin(); i_sector !=
m_tkSector_.end(); ++i_sector){
2073 for(
std::map<
unsigned int, std::map<std::string,TH1*> >::const_iterator i_errBins = (*i_sector).second.m_binnedHists.begin();
2074 i_errBins != (*i_sector).second.m_binnedHists.end(); ++i_errBins){
2075 std::map<std::string,TH1*> m_Hists = (*i_errBins).second;
2078 double integralX = m_Hists[
"norResX"]->Integral();
2079 (*i_sector).second.EntriesX->SetBinContent((*i_errBins).first, integralX);
2081 if((*i_sector).second.isPixel){
2082 double integralY = m_Hists[
"norResY"]->Integral();
2083 (*i_sector).second.EntriesY->SetBinContent((*i_errBins).first, integralY);
2111 if (stripId.
stereo())
return true;
2112 else if (dynamic_cast<const SiStripRecHit1D*>(&hit)
2115 else if (dynamic_cast<const SiStripMatchedRecHit2D*>(&hit))
return true;
2116 else if (dynamic_cast<const ProjectedSiStripRecHit2D*>(&hit)) {
2120 edm::LogError(
"UnkownType") <<
"@SUB=AlignmentTrackSelector::isHit2D" 2121 <<
"Tracker hit not in pixel, neither SiStripRecHit[12]D nor " 2122 <<
"SiStripMatchedRecHit2D nor ProjectedSiStripRecHit2D.";
2127 edm::LogWarning(
"DetectorMismatch") <<
"@SUB=AlignmentTrackSelector::isHit2D" 2128 <<
"Hit not in tracker with 'official' dimension >=2.";
2148 if (beamSpotHandle.
isValid()){
2149 beamSpot = *beamSpotHandle;
2153 edm::LogError(
"ApeEstimator")<<
"No beam spot available from EventSetup" 2154 <<
"\n...skip event";
2167 typedef std::vector<ConstTrajTrackPair> ConstTrajTrackPairCollection;
2168 ConstTrajTrackPairCollection trajTracks;
2171 for(i_trajTrack = m_TrajTracksMap->
begin();i_trajTrack != m_TrajTracksMap->
end();++i_trajTrack){
2172 trajTracks.push_back(
ConstTrajTrackPair(&(*(*i_trajTrack).key), &(*(*i_trajTrack).val)));
2177 unsigned int trackSizeGood(0);
2178 ConstTrajTrackPairCollection::const_iterator iTrack;
2179 for(iTrack = trajTracks.begin(); iTrack != trajTracks.end();++iTrack){
2189 const std::vector<TrajectoryMeasurement> v_meas = (*traj).measurements();
2192 for(std::vector<TrajectoryMeasurement>::const_iterator i_meas = v_meas.begin(); i_meas != v_meas.end(); ++i_meas){
2200 if(trackStruct.
v_hitParams.size()>0)++trackSizeGood;
ClusterRef cluster() const
virtual const Topology & topology() const =0
uint8_t maxCharge() const
virtual float localStripLength(const LocalPoint &) const =0
double p() const
momentum vector magnitude
bool inDoubleInterval(const std::vector< double > &, const float) const
T getParameter(std::string const &) const
double z0() const
z coordinate
std::vector< unsigned int > v_sector
virtual float angularWidth() const =0
const edm::ParameterSet parameterSet_
double d0Error() const
error on d0
TProfile * PHitsPixelVsTheta
virtual float length() const =0
unsigned short lost() const
Number of lost (=invalid) hits on track.
float clusterProbability(unsigned int flags=0) const
float logClusterProbability
ConstRecHitPointer const & recHit() const
void bookSectorHistsForAnalyzerMode()
float clusterProbabilityXYQ
double d0() const
dxy parameter in perigee convention (d0 = -dxy)
virtual const GeomDetType & type() const
TProfile * PHitsStripVsEta
friend struct const_iterator
const_iterator end() const
last iterator over the map (read only)
bool getByToken(EDGetToken token, Handle< PROD > &result) const
std::pair< uint16_t, uint16_t > chargeLR() const
virtual float originToIntersection() const =0
double theta() const
polar angle
#define DEFINE_FWK_MODULE(type)
size_t recHitsSize() const
Get number of RecHits. (Warning, this includes invalid hits, which are not physical hits)...
std::map< std::string, std::vector< TH1 * > > m_sigmaY
LocalVector localDirection() const
LocalPoint localPosition() const
ApeEstimator(const edm::ParameterSet &)
TH2 * WidthDiffVsMaxStrip
Sin< T >::type sin(const T &t)
std::map< std::string, std::vector< TH1 * > > m_sigmaX
TProfile * PMeanAngleVsHits
double etaError() const
error on eta
TH2 * WidthDiffVsSigmaXHit
double phi() const
azimuthal angle of momentum vector
const Bounds & bounds() const
PositionAndError2 radialPositionAndError2(const LocalPoint &, const LocalError &, const RadialStripTopology &)
void fillHitHistsYForAnalyzerMode(const TrackStruct::HitParameterStruct &, TrackerSectorStruct &)
virtual float stripAngle(float strip) const =0
LocalVector toLocal(const reco::Track::Vector &v, const Surface &s)
uint16_t maxIndex() const
auto stripCharges() const -> decltype(cluster() ->amplitudes())
PositionAndError2 rectangularPositionAndError2(const LocalPoint &, const LocalError &)
TrackerDetectorStruct tkDetector_
const Plane & surface() const
The nominal surface of the GeomDet.
LocalError positionError() const
const unsigned int maxTracksPerEvent_
bool hasBadPixels() const
TrackStruct::HitParameterStruct fillHitVariables(const TrajectoryMeasurement &, const edm::EventSetup &)
std::map< unsigned int, std::pair< double, double > > m_resErrBins_
std::pair< TrackStruct::HitState, PositionAndError2 > StatePositionAndError2
TProfile * PPhiSensYVsBarycentreY
EDGetTokenT< ProductType > consumes(edm::InputTag const &tag)
void residualErrorBinning()
uint32_t rawId() const
get the raw id
virtual float width() const =0
DataContainer const & measurements() const
TProfile * PWidthDiffVsMaxStrip
float signalOverNoise() const
float getLorentzAngle(const uint32_t &) const
TProfile * PPhiSensXVsBarycentreX
double eta() const
pseudorapidity of momentum vector
std::vector< HitParameterStruct > v_hitParams
double chi2() const
chi-squared of the fit
void statistics(const TrackerSectorStruct &, const Int_t) const
double ndof() const
number of degrees of freedom of the fit
virtual int dimension() const =0
bool isHit2D(const TrackingRecHit &) const
float clusterProbabilityXY
TrackStruct::TrackParameterStruct fillTrackVariables(const reco::Track &, const Trajectory &, const reco::BeamSpot &)
double pt() const
track transverse momentum
TProfile * PHitsStripVsTheta
TrackParameterStruct trkParams
Cos< T >::type cos(const T &t)
double ptError() const
error on Pt (set to 1000 TeV if charge==0 for safety)
edm::EDGetTokenT< reco::BeamSpot > offlinebeamSpot_
virtual MeasurementPoint measurementPosition(const LocalPoint &) const =0
double phiError() const
error on phi
Abs< T >::type abs(const T &t)
TProfile * PHitsGoodVsHitsValid
DetId geographicalId() const
The label of this GeomDet.
double BeamWidthX() const
beam width X
bool hitSelected(TrackStruct::HitParameterStruct &) const
ClusterRef cluster() const
bool checkModulePositions(const float, const std::vector< double > &) const
T * make(const Args &...args) const
make new ROOT object
const LocalTrajectoryError & localError() const
TH2 * HitsGoodVsHitsValid
bool checkModuleBools(const bool, const std::vector< unsigned int > &) const
bool checkModuleIds(const unsigned int, const std::vector< unsigned int > &) const
virtual LocalPoint localPosition() const =0
std::map< unsigned int, TrackerSectorStruct > m_tkSector_
std::map< std::string, std::vector< unsigned int > > m_hitSelectionUInt_
TProfile * PWidthVsWidthProjected
virtual MeasurementPoint measurementPosition(const LocalPoint &) const =0
bool checkIntervalsForSectors(const unsigned int sectorCounter, const std::vector< double > &) const
TrajectoryStateOnSurface const & forwardPredictedState() const
Access to forward predicted state (from fitter or builder)
std::pair< const Trajectory *, const reco::Track * > ConstTrajTrackPair
double dz() const
dz parameter (= dsz/cos(lambda)). This is the track z0 w.r.t (0,0,0) only if the refPoint is close to...
double dzError() const
error on dz
virtual MeasurementError measurementError(const LocalPoint &, const LocalError &) const =0
SiStripRecHit2D originalHit() const
Detector identifier class for the strip tracker.
virtual TrackingRecHit const * hit() const
virtual void analyze(const edm::Event &, const edm::EventSetup &)
virtual float detHeight() const =0
TFileDirectory mkdir(const std::string &dir, const std::string &descr="")
create a new subdirectory
TH2 * PhiSensXVsBarycentreX
uint16_t maxStrip() const
std::map< std::string, CorrelationHists > m_correlationHistsX
size_type size() const
map size
virtual float thickness() const =0
edm::Service< TFileService > fileService
TFileDirectory mkdir(const std::string &dir, const std::string &descr="")
create a new subdirectory
const HitPattern & hitPattern() const
Access the hit pattern, indicating in which Tracker layers the track has hits.
XYZPointD XYZPoint
point in space with cartesian internal representation
bool checkModuleDirections(const int, const std::vector< int > &) const
float clusterProbabilityQ
ClusterRef cluster() const
double BeamWidthY() const
beam width Y
bool inUintInterval(const std::vector< unsigned int > &, const unsigned int, const unsigned int=999) const
bool IsModuleUsable() const
std::map< unsigned int, ReducedTrackerTreeVariables > m_tkTreeVar_
Pixel cluster – collection of neighboring pixels above threshold.
virtual const GeomDetUnit * detUnit() const
void fillHistsForApeCalculation(const TrackStruct &)
unsigned short found() const
Number of valid hits on track.
bool isPixel(HitType hitType)
bool spansTwoROCs() const
double y0() const
y coordinate
const unsigned int minGoodHitsPerTrack_
void setHitSelectionMap(const std::string &)
edm::EDGetTokenT< TrajTrackAssociationCollection > tjTagToken_
int charge() const
track electric charge
void fillHitHistsXForAnalyzerMode(const TrackStruct::HitParameterStruct &, TrackerSectorStruct &)
const_iterator begin() const
first iterator over the map (read only)
DetId geographicalId() const
void fillHistsForAnalyzerMode(const TrackStruct &)
void bookSectorHistsForApeCalculation()
std::map< std::string, CorrelationHists > m_correlationHistsY
virtual LocalError localPositionError() const =0
static uInt32 F(BLOWFISH_CTX *ctx, uInt32 x)
TH2 * WidthVsWidthProjected
TProfile * PHitsPixelVsEta
double dxy() const
dxy parameter. (This is the transverse impact parameter w.r.t. to (0,0,0) ONLY if refPoint is close t...
TProfile * PWidthDiffVsSigmaXHit
std::map< std::string, std::vector< double > > m_hitSelection_
TH2 * PhiSensYVsBarycentreY
const PositionType & position() const
TProfile * PWidthVsPhiSensX
void setHitSelectionMapUInt(const std::string &)
T const * product() const
LocalError const & localAlignmentError() const
Return local alligment error.
Power< A, B >::type pow(const A &a, const B &b)
std::vector< unsigned int > v_rawId
const Plane & specificSurface() const
Same as surface(), kept for backward compatibility.
TrajectoryStateOnSurface const & backwardPredictedState() const
Access to backward predicted state (from smoother)
double x0() const
x coordinate
StatePositionAndError2 positionAndError2(const LocalPoint &, const LocalError &, const TransientTrackingRecHit &)