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;
260 TTree* tkTree(
nullptr);
261 tkTreeFile->GetObject(
"TrackerTreeGenerator/TrackerTree/TrackerTree",tkTree);
265 edm::LogError(
"SectorBuilder")<<
"TrackerTree not found in file";
268 unsigned int 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 isDoubleSide(
false), isRPhi(
false), isStereo(
false);
271 int uDirection(999), vDirection(999), wDirection(999);
272 float posR(999.
F), posPhi(999.
F), posEta(999.
F),
posX(999.
F),
posY(999.
F), posZ(999.
F);
274 tkTree->SetBranchAddress(
"RawId", &rawId);
275 tkTree->SetBranchAddress(
"SubdetId", &subdetId);
276 tkTree->SetBranchAddress(
"Layer", &layer);
277 tkTree->SetBranchAddress(
"Side", &side);
278 tkTree->SetBranchAddress(
"Half", &half);
279 tkTree->SetBranchAddress(
"Rod", &rod);
280 tkTree->SetBranchAddress(
"Ring", &
ring);
281 tkTree->SetBranchAddress(
"Petal", &petal);
282 tkTree->SetBranchAddress(
"Blade", &blade);
283 tkTree->SetBranchAddress(
"Panel", &panel);
284 tkTree->SetBranchAddress(
"OuterInner", &outerInner);
285 tkTree->SetBranchAddress(
"Module", &
module);
286 tkTree->SetBranchAddress(
"NStrips", &nStrips);
287 tkTree->SetBranchAddress(
"IsDoubleSide", &isDoubleSide);
288 tkTree->SetBranchAddress(
"IsRPhi", &isRPhi);
289 tkTree->SetBranchAddress(
"IsStereo", &isStereo);
290 tkTree->SetBranchAddress(
"UDirection", &uDirection);
291 tkTree->SetBranchAddress(
"VDirection", &vDirection);
292 tkTree->SetBranchAddress(
"WDirection", &wDirection);
293 tkTree->SetBranchAddress(
"PosR", &posR);
294 tkTree->SetBranchAddress(
"PosPhi", &posPhi);
295 tkTree->SetBranchAddress(
"PosEta", &posEta);
296 tkTree->SetBranchAddress(
"PosX", &
posX);
297 tkTree->SetBranchAddress(
"PosY", &
posY);
298 tkTree->SetBranchAddress(
"PosZ", &posZ);
300 int nModules(tkTree->GetEntries());
304 unsigned int sectorCounter(0);
306 edm::LogInfo(
"SectorBuilder")<<
"There are "<<v_sectorDef.size()<<
" Sectors definded";
307 for(
auto const & parSet : v_sectorDef){
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(
auto const & i_rawId : allSectors.v_rawId){
388 if(rawId == i_rawId)moduleSelected =
true;
390 if(!moduleSelected)allSectors.v_rawId.push_back(rawId);
395 for(
auto const & i_rawId : tkSector.
v_rawId){
410 if(isPixel && isStrip){
411 edm::LogError(
"SectorBuilder")<<
"Incorrect Sector Definition: there are pixel and strip modules within one sector" 412 <<
"\n... sector selection is not applied, sector "<<sectorCounter<<
" is not built";
418 edm::LogInfo(
"SectorBuilder")<<
"There are "<<tkSector.
v_rawId.size()<<
" Modules in Sector "<<sectorCounter;
433 if(v_id.empty())
return true;
434 if(v_id.size()%2==1){
435 edm::LogError(
"SectorBuilder")<<
"Incorrect Sector Definition: Position Vectors need even number of arguments (Intervals)" 436 <<
"\n... sector selection is not applied, sector "<<sectorCounter<<
" is not built";
439 int entry(0);
double intervalBegin(999.);
440 for(
auto const & i_id : v_id){
442 if(entry%2==1) intervalBegin = i_id;
443 if(entry%2==0 && intervalBegin > i_id){
444 edm::LogError(
"SectorBuilder")<<
"Incorrect Sector Definition (Position Vector Intervals): \t" 445 <<intervalBegin<<
" is bigger than "<<i_id<<
" but is expected to be smaller" 446 <<
"\n... sector selection is not applied, sector "<<sectorCounter<<
" is not built";
457 if(v_id.empty())
return true;
458 for(
auto const & i_id : v_id){
459 if(
id==i_id)
return true;
468 if(v_id.empty())
return true;
469 for(
auto const & i_id : v_id){
470 if(1==i_id &&
id)
return true;
471 if(2==i_id && !
id)
return true;
480 if(v_id.empty())
return true;
481 for(
auto const & i_id : v_id){
482 if(
id==i_id)
return true;
491 if(v_id.empty())
return true;
492 int entry(0);
double intervalBegin(999.);
493 for(
auto const & i_id : v_id){
495 if(entry%2==1)intervalBegin = i_id;
496 if(entry%2==0 &&
id>=intervalBegin &&
id<i_id)
return true;
503 bool commonModules(
false);
504 for(std::map<unsigned int,TrackerSectorStruct>::const_iterator i_sector =
m_tkSector_.begin(); i_sector !=
m_tkSector_.end(); ++i_sector){
505 std::map<unsigned int,TrackerSectorStruct>::const_iterator i_sector2(i_sector);
506 for(++i_sector2; i_sector2 !=
m_tkSector_.end(); ++i_sector2){
507 unsigned int nCommonModules(0);
508 for(
auto const & i_module : (*i_sector).second.v_rawId){
509 for(
auto const & i_module2 : (*i_sector2).second.v_rawId){
510 if(i_module2 == i_module) ++nCommonModules;
513 if(nCommonModules==0)
516 edm::LogError(
"SectorBuilder")<<
"Sector "<<(*i_sector).first<<
" and Sector "<<(*i_sector2).first<<
" have "<<nCommonModules<<
" Modules in common";
517 commonModules =
true;
521 if(static_cast<int>(allSectors.
v_rawId.size())==nModules)
522 edm::LogInfo(
"SectorBuilder")<<
"ALL Tracker Modules are contained in the Sectors";
525 <<
" out of "<<nModules<<
" Tracker Modules";
527 edm::LogInfo(
"SectorBuilder")<<
"There are ZERO modules associated to different sectors, no ambiguities exist";
529 edm::LogError(
"SectorBuilder")<<
"There are modules associated to different sectors, APE value cannot be assigned reasonably";
539 if(v_residualErrorBinning.size()==1){
540 edm::LogError(
"ResidualErrorBinning")<<
"Incorrect selection of Residual Error Bins (used for APE calculation): \t" 541 <<
"Only one argument passed, so no interval is specified" 542 <<
"\n... delete whole bin selection";
546 unsigned int binCounter(-1);
547 for(
auto const & i_binning : v_residualErrorBinning){
555 edm::LogError(
"ResidualErrorBinning")<<
"Incorrect selection of Residual Error Bins (used for APE calculation): \t" 556 <<
xMin<<
" is bigger than "<<xMax<<
" but is expected to be smaller" 557 <<
"\n... delete whole bin selection";
565 edm::LogInfo(
"ResidualErrorBinning")<<
m_resErrBins_.size()<<
" Intervals of residual errors used for separate APE calculation sucessfully set";
577 for(std::vector<unsigned int>::iterator i_errHists = v_errHists.begin(); i_errHists != v_errHists.end(); ++i_errHists){
578 for(std::vector<unsigned int>::iterator i_errHists2 = i_errHists; i_errHists2 != v_errHists.end();){
580 if(*i_errHists==*i_errHists2){
581 edm::LogError(
"BookSectorHists")<<
"Value of vErrHists in config exists twice: "<<*i_errHists<<
"\n... delete one of both";
582 v_errHists.erase(i_errHists2);
591 double widthMax = zoomHists ? 20. : 200.;
592 double chargePixelMax = zoomHists ? 200000. : 2000000.;
593 double chargeStripMax = zoomHists ? 1000. : 10000.;
594 double sOverNMax = zoomHists ? 200. : 2000.;
595 double logClusterProbMin = zoomHists ? -5. : -15.;
597 double resXAbsMax = zoomHists ? 0.5 : 5.;
598 double norResXAbsMax = zoomHists ? 10. : 50.;
599 double probXMin = zoomHists ? -0.01 : -0.1;
600 double probXMax = zoomHists ? 0.11 : 1.1;
601 double sigmaXMin = zoomHists ? 0. : -0.05;
602 double sigmaXMax = zoomHists ? 0.02 : 1.;
604 double sigmaXHitMax = zoomHists ? 0.02 : 1.;
605 double phiSensXMax = zoomHists ? 31. : 93.;
607 double norChi2Max = zoomHists ? 5. : 1000.;
608 double d0Max = zoomHists ? 0.02 : 40.;
609 double dzMax = zoomHists ? 15. : 100.;
610 double pMax = zoomHists ? 200. : 2000.;
611 double invPMax = zoomHists ? 0.05 : 10.;
617 "TFileService is not registered in cfg file" );
620 std::stringstream sector; sector <<
"Sector_" << i_sector.first;
624 i_sector.second.Name = secDir.
make<TH1F>(
"z_name",i_sector.second.name.c_str(),1,0,1);
627 if(i_sector.second.v_rawId.empty()){
631 i_sector.second.setCorrHistParams(&secDir,norResXAbsMax,sigmaXHitMax,sigmaXMax);
635 const bool pixelSector(i_sector.second.isPixel);
639 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");
640 i_sector.second.m_correlationHistsX[
"BaryStripX"] = i_sector.second.bookCorrHistsX(
"BaryStripX",
"barycenter of cluster charge",
"b_{cl,x}",
"[# channels]",800,100,-10.,790.,
"nph");
643 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");
644 i_sector.second.m_correlationHistsY[
"BaryStripY"] = i_sector.second.bookCorrHistsY(
"BaryStripY",
"barycenter of cluster charge",
"b_{cl,y}",
"[# channels]",800,100,-10.,790.,
"nph");
646 i_sector.second.m_correlationHistsX[
"ChargePixel"] = i_sector.second.bookCorrHistsX(
"ChargePixel",
"cluster charge",
"c_{cl}",
"[e]",100,50,0.,chargePixelMax,
"nph");
647 i_sector.second.m_correlationHistsX[
"ClusterProbXY"] = i_sector.second.bookCorrHistsX(
"ClusterProbXY",
"cluster probability xy",
"prob_{cl,xy}",
"",100,50,0.,1.,
"nph");
648 i_sector.second.m_correlationHistsX[
"ClusterProbQ"] = i_sector.second.bookCorrHistsX(
"ClusterProbQ",
"cluster probability q",
"prob_{cl,q}",
"",100,50,0.,1.,
"nph");
649 i_sector.second.m_correlationHistsX[
"ClusterProbXYQ"] = i_sector.second.bookCorrHistsX(
"ClusterProbXYQ",
"cluster probability xyq",
"prob_{cl,xyq}",
"",100,50,0.,1.,
"nph");
650 i_sector.second.m_correlationHistsX[
"LogClusterProb"] = i_sector.second.bookCorrHistsX(
"LogClusterProb",
"cluster probability xy",
"log(prob_{cl,xy})",
"",60,30,logClusterProbMin,0.,
"nph");
651 i_sector.second.m_correlationHistsX[
"IsOnEdge"] = i_sector.second.bookCorrHistsX(
"IsOnEdge",
"IsOnEdge",
"isOnEdge",
"",2,2,0,2,
"nph");
652 i_sector.second.m_correlationHistsX[
"HasBadPixels"] = i_sector.second.bookCorrHistsX(
"HasBadPixels",
"HasBadPixels",
"hasBadPixels",
"",2,2,0,2,
"nph");
653 i_sector.second.m_correlationHistsX[
"SpansTwoRoc"] = i_sector.second.bookCorrHistsX(
"SpansTwoRoc",
"SpansTwoRoc",
"spansTwoRoc",
"",2,2,0,2,
"nph");
654 i_sector.second.m_correlationHistsX[
"QBin"] = i_sector.second.bookCorrHistsX(
"QBin",
"q bin",
"q bin",
"",8,8,0,8,
"nph");
656 i_sector.second.m_correlationHistsY[
"ChargePixel"] = i_sector.second.bookCorrHistsY(
"ChargePixel",
"cluster charge",
"c_{cl}",
"[e]",100,50,0.,chargePixelMax,
"nph");
657 i_sector.second.m_correlationHistsY[
"ClusterProbXY"] = i_sector.second.bookCorrHistsY(
"ClusterProbXY",
"cluster probability xy",
"prob_{cl,xy}",
"",100,50,0.,1.,
"nph");
658 i_sector.second.m_correlationHistsY[
"ClusterProbQ"] = i_sector.second.bookCorrHistsY(
"ClusterProbQ",
"cluster probability q",
"prob_{cl,q}",
"",100,50,0.,1.,
"nph");
659 i_sector.second.m_correlationHistsY[
"ClusterProbXYQ"] = i_sector.second.bookCorrHistsY(
"ClusterProbXYQ",
"cluster probability xyq",
"prob_{cl,xyq}",
"",100,50,0.,1.,
"nph");
660 i_sector.second.m_correlationHistsY[
"LogClusterProb"] = i_sector.second.bookCorrHistsY(
"LogClusterProb",
"cluster probability xy",
"log(prob_{cl,xy})",
"",60,30,logClusterProbMin,0.,
"nph");
661 i_sector.second.m_correlationHistsY[
"IsOnEdge"] = i_sector.second.bookCorrHistsY(
"IsOnEdge",
"IsOnEdge",
"isOnEdge",
"",2,2,0,2,
"nph");
662 i_sector.second.m_correlationHistsY[
"HasBadPixels"] = i_sector.second.bookCorrHistsY(
"HasBadPixels",
"HasBadPixels",
"hasBadPixels",
"",2,2,0,2,
"nph");
663 i_sector.second.m_correlationHistsY[
"SpansTwoRoc"] = i_sector.second.bookCorrHistsY(
"SpansTwoRoc",
"SpansTwoRoc",
"spansTwoRoc",
"",2,2,0,2,
"nph");
664 i_sector.second.m_correlationHistsY[
"QBin"] = i_sector.second.bookCorrHistsY(
"QBin",
"q bin",
"q bin",
"",8,8,0,8,
"nph");
668 i_sector.second.m_correlationHistsX[
"ChargeStrip"] = i_sector.second.bookCorrHistsX(
"ChargeStrip",
"cluster charge",
"c_{cl}",
"[APV counts]",100,50,0.,chargeStripMax,
"nph");
669 i_sector.second.m_correlationHistsX[
"MaxStrip"] = i_sector.second.bookCorrHistsX(
"MaxStrip",
"strip with max. charge",
"n_{cl,max}",
"[# strips]",800,800,-10.,790.,
"npht");
670 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");
671 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");
672 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");
673 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");
674 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");
675 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");
676 i_sector.second.m_correlationHistsX[
"SOverN"] = i_sector.second.bookCorrHistsX(
"SOverN",
"signal over noise",
"s/N",
"",100,50,0,sOverNMax,
"nph");
677 i_sector.second.m_correlationHistsX[
"WidthProj"] = i_sector.second.bookCorrHistsX(
"WidthProj",
"projected width",
"w_{p}",
"[# strips]",200,20,0.,widthMax,
"nph");
678 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");
680 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);
681 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);
683 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.);
684 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.);
686 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.);
687 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);
689 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);
690 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);
695 i_sector.second.m_correlationHistsX[
"SigmaXHit"] = i_sector.second.bookCorrHistsX(
"SigmaXHit",
"hit error",
"#sigma_{hit,x}",
"[#mum]",105,20,sigmaXMin*10000.,sigmaXMax*10000.,
"np");
696 i_sector.second.m_correlationHistsX[
"SigmaXTrk"] = i_sector.second.bookCorrHistsX(
"SigmaXTrk",
"track error",
"#sigma_{trk,x}",
"[#mum]",105,20,sigmaXMin*10000.,sigmaXMax*10000.,
"np");
697 i_sector.second.m_correlationHistsX[
"SigmaX"] = i_sector.second.bookCorrHistsX(
"SigmaX",
"residual error",
"#sigma_{r,x}",
"[#mum]",105,20,sigmaXMin*10000.,sigmaXMax*10000.,
"np");
698 i_sector.second.m_correlationHistsX[
"PhiSens"] = i_sector.second.bookCorrHistsX(
"PhiSens",
"track angle on sensor",
"#phi_{module}",
"[ ^{o}]",96,48,-3,93,
"nphtr");
699 i_sector.second.m_correlationHistsX[
"PhiSensX"] = i_sector.second.bookCorrHistsX(
"PhiSensX",
"track angle on sensor",
"#phi_{module,x}",
"[ ^{o}]",186,93,-phiSensXMax,phiSensXMax,
"nphtr");
700 i_sector.second.m_correlationHistsX[
"PhiSensY"] = i_sector.second.bookCorrHistsX(
"PhiSensY",
"track angle on sensor",
"#phi_{module,y}",
"[ ^{o}]",186,93,-93,93,
"nphtr");
702 i_sector.second.XHit = secDir.
make<TH1F>(
"h_XHit",
" hit measurement x_{hit};x_{hit} [cm];# hits",100,-20,20);
703 i_sector.second.XTrk = secDir.
make<TH1F>(
"h_XTrk",
"track prediction x_{trk};x_{trk} [cm];# hits",100,-20,20);
704 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.);
705 i_sector.second.ResX = secDir.
make<TH1F>(
"h_ResX",
"residual r_{x};x_{trk}-x_{hit} [#mum];# hits",100,-resXAbsMax*10000.,resXAbsMax*10000.);
706 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);
707 i_sector.second.ProbX = secDir.
make<TH1F>(
"h_ProbX",
"residual probability;prob(r_{x}^{2}/#sigma_{r,x}^{2},1);# hits",60,probXMin,probXMax);
709 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);
710 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.);
713 i_sector.second.m_correlationHistsY[
"SigmaYHit"] = i_sector.second.bookCorrHistsY(
"SigmaYHit",
"hit error",
"#sigma_{hit,y}",
"[#mum]",105,20,sigmaXMin*10000.,sigmaXMax*10000.,
"np");
714 i_sector.second.m_correlationHistsY[
"SigmaYTrk"] = i_sector.second.bookCorrHistsY(
"SigmaYTrk",
"track error",
"#sigma_{trk,y}",
"[#mum]",105,20,sigmaXMin*10000.,sigmaXMax*10000.,
"np");
715 i_sector.second.m_correlationHistsY[
"SigmaY"] = i_sector.second.bookCorrHistsY(
"SigmaY",
"residual error",
"#sigma_{r,y}",
"[#mum]",105,20,sigmaXMin*10000.,sigmaXMax*10000.,
"np");
716 i_sector.second.m_correlationHistsY[
"PhiSens"] = i_sector.second.bookCorrHistsY(
"PhiSens",
"track angle on sensor",
"#phi_{module}",
"[ ^{o}]",96,48,-3,93,
"nphtr");
717 i_sector.second.m_correlationHistsY[
"PhiSensX"] = i_sector.second.bookCorrHistsY(
"PhiSensX",
"track angle on sensor",
"#phi_{module,x}",
"[ ^{o}]",186,93,-phiSensXMax,phiSensXMax,
"nphtr");
718 i_sector.second.m_correlationHistsY[
"PhiSensY"] = i_sector.second.bookCorrHistsY(
"PhiSensY",
"track angle on sensor",
"#phi_{module,y}",
"[ ^{o}]",186,93,-93,93,
"nphtr");
720 i_sector.second.YHit = secDir.
make<TH1F>(
"h_YHit",
" hit measurement y_{hit};y_{hit} [cm];# hits",100,-20,20);
721 i_sector.second.YTrk = secDir.
make<TH1F>(
"h_YTrk",
"track prediction y_{trk};y_{trk} [cm];# hits",100,-20,20);
722 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.);
723 i_sector.second.ResY = secDir.
make<TH1F>(
"h_ResY",
"residual r_{y};y_{trk}-y_{hit} [#mum];# hits",100,-resXAbsMax*10000.,resXAbsMax*10000.);
724 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);
725 i_sector.second.ProbY = secDir.
make<TH1F>(
"h_ProbY",
"residual probability;prob(r_{y}^{2}/#sigma_{r,y}^{2},1);# hits",60,probXMin,probXMax);
727 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);
728 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.);
733 i_sector.second.m_correlationHistsX[
"HitsValid"] = i_sector.second.bookCorrHistsX(
"HitsValid",
"# hits",
"[valid]",50,0,50,
"npt");
734 i_sector.second.m_correlationHistsX[
"HitsInvalid"] = i_sector.second.bookCorrHistsX(
"HitsInvalid",
"# hits",
"[invalid]",20,0,20,
"npt");
735 i_sector.second.m_correlationHistsX[
"Hits2D"] = i_sector.second.bookCorrHistsX(
"Hits2D",
"# hits",
"[2D]",20,0,20,
"npt");
736 i_sector.second.m_correlationHistsX[
"LayersMissed"] = i_sector.second.bookCorrHistsX(
"LayersMissed",
"# layers",
"[missed]",10,0,10,
"npt");
737 i_sector.second.m_correlationHistsX[
"HitsPixel"] = i_sector.second.bookCorrHistsX(
"HitsPixel",
"# hits",
"[pixel]",10,0,10,
"npt");
738 i_sector.second.m_correlationHistsX[
"HitsStrip"] = i_sector.second.bookCorrHistsX(
"HitsStrip",
"# hits",
"[strip]",40,0,40,
"npt");
739 i_sector.second.m_correlationHistsX[
"HitsGood"] = i_sector.second.bookCorrHistsX(
"HitsGood",
"# hits",
"[good]",50,0,50,
"npt");
740 i_sector.second.m_correlationHistsX[
"NorChi2"] = i_sector.second.bookCorrHistsX(
"NorChi2",
"#chi^{2}/f",
"",50,0,norChi2Max,
"npr");
741 i_sector.second.m_correlationHistsX[
"Theta"] = i_sector.second.bookCorrHistsX(
"Theta",
"#theta",
"[ ^{o}]",40,-10,190,
"npt");
742 i_sector.second.m_correlationHistsX[
"Phi"] = i_sector.second.bookCorrHistsX(
"Phi",
"#phi",
"[ ^{o}]",76,-190,190,
"npt");
743 i_sector.second.m_correlationHistsX[
"D0Beamspot"] = i_sector.second.bookCorrHistsX(
"D0Beamspot",
"d_{0, BS}",
"[cm]",40,-d0Max,d0Max,
"npt");
744 i_sector.second.m_correlationHistsX[
"Dz"] = i_sector.second.bookCorrHistsX(
"Dz",
"d_{z}",
"[cm]",40,-dzMax,dzMax,
"npt");
745 i_sector.second.m_correlationHistsX[
"Pt"] = i_sector.second.bookCorrHistsX(
"Pt",
"p_{t}",
"[GeV]",50,0,pMax,
"npt");
746 i_sector.second.m_correlationHistsX[
"P"] = i_sector.second.bookCorrHistsX(
"P",
"|p|",
"[GeV]",50,0,pMax,
"npt");
747 i_sector.second.m_correlationHistsX[
"InvP"] = i_sector.second.bookCorrHistsX(
"InvP",
"1/|p|",
"[GeV^{-1}]",25,0,invPMax,
"t");
748 i_sector.second.m_correlationHistsX[
"MeanAngle"] = i_sector.second.bookCorrHistsX(
"MeanAngle",
"<#phi_{module}>",
"[ ^{o}]",25,-5,95,
"npt");
752 i_sector.second.m_correlationHistsY[
"HitsValid"] = i_sector.second.bookCorrHistsY(
"HitsValid",
"# hits",
"[valid]",50,0,50,
"npt");
753 i_sector.second.m_correlationHistsY[
"HitsInvalid"] = i_sector.second.bookCorrHistsY(
"HitsInvalid",
"# hits",
"[invalid]",20,0,20,
"npt");
754 i_sector.second.m_correlationHistsY[
"Hits2D"] = i_sector.second.bookCorrHistsY(
"Hits2D",
"# hits",
"[2D]",20,0,20,
"npt");
755 i_sector.second.m_correlationHistsY[
"LayersMissed"] = i_sector.second.bookCorrHistsY(
"LayersMissed",
"# layers",
"[missed]",10,0,10,
"npt");
756 i_sector.second.m_correlationHistsY[
"HitsPixel"] = i_sector.second.bookCorrHistsY(
"HitsPixel",
"# hits",
"[pixel]",10,0,10,
"npt");
757 i_sector.second.m_correlationHistsY[
"HitsStrip"] = i_sector.second.bookCorrHistsY(
"HitsStrip",
"# hits",
"[strip]",40,0,40,
"npt");
758 i_sector.second.m_correlationHistsY[
"HitsGood"] = i_sector.second.bookCorrHistsY(
"HitsGood",
"# hits",
"[good]",50,0,50,
"npt");
759 i_sector.second.m_correlationHistsY[
"NorChi2"] = i_sector.second.bookCorrHistsY(
"NorChi2",
"#chi^{2}/f",
"",50,0,norChi2Max,
"npr");
760 i_sector.second.m_correlationHistsY[
"Theta"] = i_sector.second.bookCorrHistsY(
"Theta",
"#theta",
"[ ^{o}]",40,-10,190,
"npt");
761 i_sector.second.m_correlationHistsY[
"Phi"] = i_sector.second.bookCorrHistsY(
"Phi",
"#phi",
"[ ^{o}]",76,-190,190,
"npt");
762 i_sector.second.m_correlationHistsY[
"D0Beamspot"] = i_sector.second.bookCorrHistsY(
"D0Beamspot",
"d_{0, BS}",
"[cm]",40,-d0Max,d0Max,
"npt");
763 i_sector.second.m_correlationHistsY[
"Dz"] = i_sector.second.bookCorrHistsY(
"Dz",
"d_{z}",
"[cm]",40,-dzMax,dzMax,
"npt");
764 i_sector.second.m_correlationHistsY[
"Pt"] = i_sector.second.bookCorrHistsY(
"Pt",
"p_{t}",
"[GeV]",50,0,pMax,
"npt");
765 i_sector.second.m_correlationHistsY[
"P"] = i_sector.second.bookCorrHistsY(
"P",
"|p|",
"[GeV]",50,0,pMax,
"npt");
766 i_sector.second.m_correlationHistsY[
"InvP"] = i_sector.second.bookCorrHistsY(
"InvP",
"1/|p|",
"[GeV^{-1}]",25,0,invPMax,
"t");
767 i_sector.second.m_correlationHistsY[
"MeanAngle"] = i_sector.second.bookCorrHistsY(
"MeanAngle",
"<#phi_{module}>",
"[ ^{o}]",25,-5,95,
"npt");
772 for(
auto const & i_errHists : v_errHists){
773 double xMin(0.01*(i_errHists-1)),
xMax(0.01*(i_errHists));
774 std::stringstream sigmaXHit, sigmaXTrk,
sigmaX;
775 sigmaXHit <<
"h_sigmaXHit_" << i_errHists;
776 sigmaXTrk <<
"h_sigmaXTrk_" << i_errHists;
777 sigmaX <<
"h_sigmaX_" << i_errHists;
778 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.));
779 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.));
780 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.));
782 std::stringstream sigmaYHit, sigmaYTrk,
sigmaY;
783 sigmaYHit <<
"h_sigmaYHit_" << i_errHists;
784 sigmaYTrk <<
"h_sigmaYTrk_" << i_errHists;
785 sigmaY <<
"h_sigmaY_" << i_errHists;
786 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.));
787 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.));
788 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.));
800 for(std::vector<unsigned int>::iterator i_errHists = v_errHists.begin(); i_errHists != v_errHists.end(); ++i_errHists){
801 for(std::vector<unsigned int>::iterator i_errHists2 = i_errHists; i_errHists2 != v_errHists.end();){
803 if(*i_errHists==*i_errHists2){
804 edm::LogError(
"BookSectorHists")<<
"Value of vErrHists in config exists twice: "<<*i_errHists<<
"\n... delete one of both";
805 v_errHists.erase(i_errHists2);
814 "TFileService is not registered in cfg file" );
817 std::stringstream sector; sector <<
"Sector_" << i_sector.first;
821 i_sector.second.Name = secDir.
make<TH1F>(
"z_name",i_sector.second.name.c_str(),1,0,1);
824 if(i_sector.second.v_rawId.empty()){
835 std::stringstream interval; interval <<
"Interval_" << i_errBins.first;
837 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);
838 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);
839 if(i_sector.second.isPixel){
840 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);
841 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);
849 unsigned int rawId(0);
850 i_sector.second.RawId = resDir.make<TTree>(
"rawIdTree",
"Tree containing rawIds of all modules in sector");
851 i_sector.second.RawId->Branch(
"RawId", &rawId,
"RawId/i");
852 for(
auto const & i_rawId : i_sector.second.v_rawId){
854 i_sector.second.RawId->Fill();
860 for(
auto & i_binX : v_binX){
863 i_sector.second.EntriesX = resDir.make<TH1F>(
"h_entriesX",
"# hits used;#sigma_{x} [#mum];# hits",v_binX.size()-1,&(v_binX[0]));
864 if(i_sector.second.isPixel){
865 i_sector.second.EntriesY = resDir.make<TH1F>(
"h_entriesY",
"# hits used;#sigma_{y} [#mum];# hits",v_binX.size()-1,&(v_binX[0]));
870 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.);
871 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.);
872 if(i_sector.second.isPixel){
873 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.);
874 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.);
886 int trackSizeBins = zoomHists ? 6 : 201;
887 double trackSizeMax = trackSizeBins -1;
889 double chi2Max = zoomHists ? 100. : 2000.;
890 double norChi2Max = zoomHists ? 5. : 1000.;
891 double d0max = zoomHists ? 0.02 : 40.;
892 double dzmax = zoomHists ? 15. : 100.;
893 double pMax = zoomHists ? 200. : 2000.;
897 tkDetector_.
TrkSize = evtDir.
make<TH1F>(
"h_trackSize",
"# tracks [all];# tracks;# events",trackSizeBins,-1,trackSizeMax);
898 tkDetector_.
TrkSizeGood = evtDir.
make<TH1F>(
"h_trackSizeGood",
"# tracks [good];# tracks;# events",trackSizeBins,-1,trackSizeMax);
901 tkDetector_.
HitsValid = trkDir.make<TH1F>(
"h_hitsValid",
"# hits [valid];# hits [valid];# tracks",51,-1,50);
902 tkDetector_.
HitsInvalid = trkDir.make<TH1F>(
"h_hitsInvalid",
"# hits [invalid];# hits [invalid];# tracks",21,-1,20);
903 tkDetector_.
Hits2D = trkDir.make<TH1F>(
"h_hits2D",
"# hits [2D];# hits [2D];# tracks",21,-1,20);
904 tkDetector_.
LayersMissed = trkDir.make<TH1F>(
"h_layersMissed",
"# layers [missed];# layers [missed];# tracks",11,-1,10);
905 tkDetector_.
HitsPixel = trkDir.make<TH1F>(
"h_hitsPixel",
"# hits [pixel];# hits [pixel];# tracks",11,-1,10);
906 tkDetector_.
HitsStrip = trkDir.make<TH1F>(
"h_hitsStrip",
"# hits [strip];# hits [strip];# tracks",41,-1,40);
907 tkDetector_.
Charge = trkDir.make<TH1F>(
"h_charge",
"charge q;q [e];# tracks",5,-2,3);
909 tkDetector_.
Ndof = trkDir.make<TH1F>(
"h_ndof",
"# degrees of freedom f;f;# tracks",101,-1,100);
910 tkDetector_.
NorChi2 = trkDir.make<TH1F>(
"h_norChi2",
"normalized #chi^{2};#chi^{2}/f;# tracks",200,0,norChi2Max);
911 tkDetector_.
Prob = trkDir.make<TH1F>(
"h_prob",
" #chi^{2} probability;prob(#chi^{2},f);# tracks",50,0,1);
912 tkDetector_.
Eta = trkDir.make<TH1F>(
"h_eta",
"pseudorapidity #eta;#eta;# tracks",100,-5,5);
913 tkDetector_.
EtaErr = trkDir.make<TH1F>(
"h_etaErr",
"Error of #eta;#sigma(#eta);# tracks",100,0,0.001);
914 tkDetector_.
EtaSig = trkDir.make<TH1F>(
"h_etaSig",
"Significance of #eta;#eta/#sigma(#eta);# tracks",100,-20000,20000);
915 tkDetector_.
Theta = trkDir.make<TH1F>(
"h_theta",
"polar angle #theta;#theta [ ^{o}];# tracks",100,-10,190);
916 tkDetector_.
Phi = trkDir.make<TH1F>(
"h_phi",
"azimuth angle #phi;#phi [ ^{o}];# tracks",190,-190,190);
917 tkDetector_.
PhiErr = trkDir.make<TH1F>(
"h_phiErr",
"Error of #phi;#sigma(#phi) [ ^{o}];# tracks",100,0,0.04);
918 tkDetector_.
PhiSig = trkDir.make<TH1F>(
"h_phiSig",
"Significance of #phi;#phi/#sigma(#phi) [ ^{o}];# tracks",100,-50000,50000);
919 tkDetector_.
D0Beamspot = trkDir.make<TH1F>(
"h_d0Beamspot",
"Closest approach d_{0} wrt. beamspot;d_{0, BS} [cm];# tracks",200,-d0max,d0max);
920 tkDetector_.
D0BeamspotErr = trkDir.make<TH1F>(
"h_d0BeamspotErr",
"Error of d_{0, BS};#sigma(d_{0, BS}) [cm];# tracks",200,0,0.01);
921 tkDetector_.
D0BeamspotSig = trkDir.make<TH1F>(
"h_d0BeamspotSig",
"Significance of d_{0, BS};d_{0, BS}/#sigma(d_{0, BS});# tracks",100,-5,5);
922 tkDetector_.
Dz = trkDir.make<TH1F>(
"h_dz",
"Closest approach d_{z};d_{z} [cm];# tracks",200,-dzmax,dzmax);
923 tkDetector_.
DzErr = trkDir.make<TH1F>(
"h_dzErr",
"Error of d_{z};#sigma(d_{z}) [cm];# tracks",200,0,0.01);
924 tkDetector_.
DzSig = trkDir.make<TH1F>(
"h_dzSig",
"Significance of d_{z};d_{z}/#sigma(d_{z});# tracks",100,-10000,10000);
925 tkDetector_.
Pt = trkDir.make<TH1F>(
"h_pt",
"transverse momentum p_{t};p_{t} [GeV];# tracks",100,0,
pMax);
926 tkDetector_.
PtErr = trkDir.make<TH1F>(
"h_ptErr",
"Error of p_{t};#sigma(p_{t}) [GeV];# tracks",100,0,1.6);
927 tkDetector_.
PtSig = trkDir.make<TH1F>(
"h_ptSig",
"Significance of p_{t};p_{t}/#sigma(p_{t});# tracks",100,0,200);
928 tkDetector_.
P = trkDir.make<TH1F>(
"h_p",
"momentum magnitude |p|;|p| [GeV];# tracks",100,0,
pMax);
929 tkDetector_.
MeanAngle = trkDir.make<TH1F>(
"h_meanAngle",
"mean angle on module <#phi_{module}>;<#phi_{module}> [ ^{o}];# tracks",100,-5,95);
930 tkDetector_.
HitsGood = trkDir.make<TH1F>(
"h_hitsGood",
"# hits [good];# hits [good];# tracks",51,-1,50);
932 tkDetector_.
MeanAngleVsHits = trkDir.make<TH2F>(
"h2_meanAngleVsHits",
"<#phi_{module}> vs. # hits;# hits;<#phi_{module}> [ ^{o}]",51,-1,50,50,-5,95);
933 tkDetector_.
HitsGoodVsHitsValid = trkDir.make<TH2F>(
"h2_hitsGoodVsHitsValid",
"# hits [good] vs. # hits [valid];# hits [valid];# hits [good]",51,-1,50,51,-1,50);
934 tkDetector_.
HitsPixelVsEta = trkDir.make<TH2F>(
"h2_hitsPixelVsEta",
"# hits [pixel] vs. #eta;#eta;# hits [pixel]",60,-3,3,11,-1,10);
935 tkDetector_.
HitsPixelVsTheta = trkDir.make<TH2F>(
"h2_hitsPixelVsTheta",
"# hits [pixel] vs. #theta;#theta;# hits [pixel]",100,-10,190,11,-1,10);
936 tkDetector_.
HitsStripVsEta = trkDir.make<TH2F>(
"h2_hitsStripVsEta",
"# hits [strip] vs. #eta;#eta;# hits [strip]",60,-3,3,31,-1,40);
937 tkDetector_.
HitsStripVsTheta = trkDir.make<TH2F>(
"h2_hitsStripVsTheta",
"# hits [strip] vs. #theta;#theta;# hits [strip]",100,-10,190,31,-1,40);
938 tkDetector_.
PtVsEta = trkDir.make<TH2F>(
"h2_ptVsEta",
"p_{t} vs. #eta;#eta;p_{t} [GeV]",60,-3,3,100,0,
pMax);
939 tkDetector_.
PtVsTheta = trkDir.make<TH2F>(
"h2_ptVsTheta",
"p_{t} vs. #theta;#theta;p_{t} [GeV]",100,-10,190,100,0,
pMax);
941 tkDetector_.
PMeanAngleVsHits = trkDir.make<TProfile>(
"p_meanAngleVsHits",
"<#phi_{module}> vs. # hits;# hits;<#phi_{module}> [ ^{o}]",51,-1,50);
942 tkDetector_.
PHitsGoodVsHitsValid = trkDir.make<TProfile>(
"p_hitsGoodVsHitsValid",
"# hits [good] vs. # hits [valid];# hits [valid];# hits [good]",51,-1,50);
943 tkDetector_.
PHitsPixelVsEta = trkDir.make<TProfile>(
"p_hitsPixelVsEta",
"# hits [pixel] vs. #eta;#eta;# hits [pixel]",60,-3,3);
944 tkDetector_.
PHitsPixelVsTheta = trkDir.make<TProfile>(
"p_hitsPixelVsTheta",
"# hits [pixel] vs. #theta;#theta;# hits [pixel]",100,-10,190);
945 tkDetector_.
PHitsStripVsEta = trkDir.make<TProfile>(
"p_hitsStripVsEta",
"# hits [strip] vs. #eta;#eta;# hits [strip]",60,-3,3);
946 tkDetector_.
PHitsStripVsTheta = trkDir.make<TProfile>(
"p_hitsStripVsTheta",
"# hits [strip] vs. #theta;#theta;# hits [strip]",100,-10,190);
947 tkDetector_.
PPtVsEta = trkDir.make<TProfile>(
"p_ptVsEta",
"p_{t} vs. #eta;#eta;p_{t} [GeV]",60,-3,3);
948 tkDetector_.
PPtVsTheta = trkDir.make<TProfile>(
"p_ptVsTheta",
"p_{t} vs. #theta;#theta;p_{t} [GeV]",100,-10,190);
968 trkParams.hitsValid = track.
found();
969 trkParams.hitsInvalid = trkParams.hitsSize-trkParams.hitsValid;
970 trkParams.layersMissed = track.
lost();
971 trkParams.hitsPixel = hitPattern.numberOfValidPixelHits();
972 trkParams.hitsStrip = hitPattern.numberOfValidStripHits();
973 trkParams.charge = track.
charge();
974 trkParams.chi2 = track.
chi2();
975 trkParams.ndof = track.
ndof();
976 trkParams.norChi2 = trkParams.chi2/trkParams.ndof;
977 trkParams.prob = TMath::Prob(trkParams.chi2,trkParams.ndof);
978 trkParams.eta = track.
eta();
979 trkParams.etaErr = track.
etaError();
980 trkParams.theta = track.
theta();
981 trkParams.phi = track.
phi();
982 trkParams.phiErr = track.
phiError();
983 trkParams.d0 = track.
d0();
984 trkParams.d0Beamspot = -1.*track.
dxy(beamPoint);
985 trkParams.d0BeamspotErr = d0BeamspotErr;
986 trkParams.dz = track.
dz();
987 trkParams.dzErr = track.
dzError();
988 trkParams.dzBeamspot = track.
dz(beamPoint);
989 trkParams.p = track.
p();
990 trkParams.pt = track.
pt();
991 trkParams.ptErr = track.
ptError();
993 const std::vector<TrajectoryMeasurement>& v_meas = traj.
measurements();
995 int count2D(0);
float meanPhiSensToNorm(0.
F);
996 for(
auto const & i_meas : v_meas){
1000 if(this->
isHit2D(recHit)) ++count2D;
1004 meanPhiSensToNorm += atan(fabs(
sqrt(mom.x()*mom.x()+mom.y()*mom.y())/mom.z()));
1006 meanPhiSensToNorm *= (1./
static_cast<float>(trkParams.hitsSize));
1008 trkParams.hits2D = count2D;
1009 trkParams.meanPhiSensToNorm = meanPhiSensToNorm;
1013 if(trkParams.hitsStrip<11 || trkParams.hits2D<2 || trkParams.hitsPixel<2 ||
1014 trkParams.hitsStrip>35 || trkParams.hitsPixel>7 ||
1015 trkParams.norChi2>5. ||
1016 trkParams.pt<25. || trkParams.pt>150. ||
1041 const uint32_t rawId(detId.rawId());
1044 for(
auto const & i_rawId : i_sector.second.v_rawId){
1045 if(rawId==i_rawId){hitParams.
v_sector.push_back(i_sector.first);
break;}
1050 int xMomentum(0), yMomentum(0), zMomentum(0);
1051 xMomentum = mom.x()>0. ? 1 : -1;
1052 yMomentum = mom.y()>0. ? 1 : -1;
1053 zMomentum = mom.z()>0. ? 1 : -1;
1054 float phiSensX = std::atan(std::fabs(mom.x()/mom.z()))*
static_cast<float>(
m_tkTreeVar_[rawId].vDirection);
1055 float phiSensY = std::atan(std::fabs(mom.y()/mom.z()))*
static_cast<float>(
m_tkTreeVar_[rawId].vDirection);
1056 hitParams.
phiSens = std::atan(std::fabs(
std::sqrt(mom.x()*mom.x()+mom.y()*mom.y())/mom.z()));
1057 hitParams.
phiSensX = (xMomentum==zMomentum ? phiSensX : -phiSensX );
1058 hitParams.
phiSensY = (yMomentum==zMomentum ? phiSensY : -phiSensY );
1084 edm::LogWarning(
"FillHitVariables")<<
"cant identify wether hit is from pixel or strip";
1095 if(!dynamic_cast<const PixelTopology*>(&detUnit.
type().
topology())){
1102 errorWithoutAPE =
LocalError(errHitApe.
xx() -lape.
xx(), errHitApe.
xy()- lape.
xy(), errHitApe.
yy()-lape.
yy());
1106 if(!dynamic_cast<const StripTopology*>(&detUnit.
type().
topology())){
1113 { errorWithoutAPE =
LocalError(errHitApe.
xx() -lape.
xx(), errHitApe.
xy()- lape.
xy(), errHitApe.
yy()-lape.
yy());
1118 const LocalError& errHitWoApe = errorWithoutAPE;
1123 edm::LogInfo(
"CalculateAPE")<<
"errHitWoApe "<<errHitWoApe<<
"errHitApe "<<errHitApe;
1150 const float xHit = positionAndError2Hit.second.posX;
1151 const float xTrk = positionAndError2Trk.second.posX;
1152 const float yHit = positionAndError2Hit.second.posY;
1153 const float yTrk = positionAndError2Trk.second.posY;
1155 const float errXHit2(positionAndError2Hit.second.errX2);
1156 const float errXHitWoApe2(positionAndError2HitWoApe.second.errX2);
1157 const float errXTrk2(positionAndError2Trk.second.errX2);
1158 const float errYHit2(positionAndError2Hit.second.errY2);
1159 const float errYHitWoApe2(positionAndError2HitWoApe.second.errY2);
1160 const float errYTrk2(positionAndError2Trk.second.errY2);
1162 const float errXHit =
std::sqrt(positionAndError2Hit.second.errX2);
1163 const float errXHitWoApe =
std::sqrt(positionAndError2HitWoApe.second.errX2);
1164 const float errXTrk =
std::sqrt(positionAndError2Trk.second.errX2);
1165 const float errYHit =
std::sqrt(positionAndError2Hit.second.errY2);
1166 const float errYHitWoApe =
std::sqrt(positionAndError2HitWoApe.second.errY2);
1167 const float errYTrk =
std::sqrt(positionAndError2Trk.second.errY2);
1169 const float resX = xTrk - xHit;
1170 const float resY = yTrk - yHit;
1173 const float errXWoApe2 = errXHitWoApe2 + errXTrk2;
1174 const float errXWoApe =
std::sqrt(errXWoApe2);
1176 const float errYWoApe2 = errYHitWoApe2 + errYTrk2;
1177 const float errYWoApe =
std::sqrt(errYWoApe2);
1179 const float norResX = resX/
errX;
1180 const float norResY = resY/
errY;
1185 float resXprime(999.
F), resYprime(999.
F), norResXprime(999.
F), norResYprime(999.
F);
1188 norResXprime = norResX;
1191 norResXprime = -norResX;
1193 edm::LogError(
"FillHitVariables")<<
"Incorrect value of uDirection, which gives global module orientation";
1199 norResYprime = norResY;
1202 norResYprime = -norResY;
1204 edm::LogError(
"FillHitVariables")<<
"Incorrect value of vDirection, which gives global module orientation";
1209 hitParams.
xHit = xHit;
1210 hitParams.
xTrk = xTrk;
1220 hitParams.
resX = resXprime;
1221 hitParams.
norResX = norResXprime;
1223 const float norResX2(norResXprime*norResXprime);
1224 hitParams.
probX = TMath::Prob(norResX2,1);
1227 hitParams.
yHit = yHit;
1228 hitParams.
yTrk = yTrk;
1238 hitParams.
resY = resYprime;
1239 hitParams.
norResY = norResYprime;
1241 const float norResY2(norResYprime*norResYprime);
1242 hitParams.
probY = TMath::Prob(norResY2,1);
1270 if(!(dynamic_cast<const SiStripRecHit2D*>(&recHit) || dynamic_cast<const SiStripRecHit1D*>(&recHit))){
1271 edm::LogError(
"FillHitVariables")<<
"RecHit in Strip is 'Matched' or 'Projected', but here all should be monohits per module";
1276 if(dynamic_cast<const SiStripRecHit1D*>(&recHit)){
1278 clusterPtr = &(*stripHit.
cluster());
1279 }
else if(dynamic_cast<const SiStripRecHit2D*>(&recHit)){
1280 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";
1282 clusterPtr = &(*stripHit.
cluster());
1286 clusterPtr = &(*stripHit.
cluster());
1289 edm::LogError(
"FillHitVariables")<<
"Pointer to cluster not valid!!! This should never happen...";
1296 const std::vector<uint8_t>::const_iterator stripChargeL(clusterInfo.
stripCharges().begin());
1297 const std::vector<uint8_t>::const_iterator stripChargeR(--(clusterInfo.
stripCharges().end()));
1298 const std::pair<uint16_t, uint16_t> stripChargeLR = std::make_pair(*stripChargeL,*stripChargeR);
1308 hitParams.
chargeOnEdges =
static_cast<float>(stripChargeLR.first + stripChargeLR.second)/static_cast<float>(hitParams.
chargeStrip);
1309 hitParams.
chargeAsymmetry =
static_cast<float>(stripChargeLR.first - stripChargeLR.second)/static_cast<float>(stripChargeLR.first + stripChargeLR.second);
1321 if(!dynamic_cast<const StripTopology*>(&detUnit.
type().
topology())){
1340 float dirX = -tanLorentzAnglePerTesla * bField.y();
1341 float dirY = tanLorentzAnglePerTesla * bField.x();
1356 if(momentumDir.z() > 0.)scaledMomentumDir *= std::fabs(thickness/momentumDir.z());
1357 else if(momentumDir.z() < 0.)scaledMomentumDir *= -std::fabs(thickness/momentumDir.z());
1358 else scaledMomentumDir *= maxLength/momentumDir.mag();
1361 if(projEdge1 < 0.)projEdge1 = 0.;
1364 if(projEdge2 < 0.)projEdge1 = 0.;
1368 float coveredStrips = std::fabs(projEdge2 - projEdge1);
1375 edm::LogError(
"FillHitVariables")<<
"Incorrect subdetector ID, hit not associated to tracker";
1401 const uint32_t& rawId(detId.rawId());
1402 const unsigned int& subdetId(
m_tkTreeVar_[rawId].subdetId);
1404 if(localError.
xx()<0. || localError.
yy()<0.){
1421 if(!hit.
detUnit())
return vPE2;
1424 if(!dynamic_cast<const RadialStripTopology*>(&detUnit.
type().
topology()))
return vPE2;
1428 if(measError.
uu()<0. || measError.
vv()<0.){
1443 edm::LogError(
"FillHitVariables")<<
"Incorrect subdetector ID, hit not associated to tracker";
1453 const float x(lP.
x());
1454 const float y(lP.
y());
1455 const float errX2(lE.
xx());
1456 const float errY2(lE.
yy());
1474 float errX2(-999.
F);
1475 float errY2(-999.
F);
1479 const float l_0 = r_0 - topol.
detHeight()/2;
1481 y = measPos.
y()*stripLength - 0.5*stripLength + l_0*(1./cosPhi - 1.);
1484 const float errPhi2(measErr.
uu()*angularWidth2);
1486 errX2 = errPhi2*r_0*r_0;
1489 const float helpSummand = l_0*l_0*(sinPhi2/cosPhi4*errPhi2);
1490 errY2 = measErr.
vv()*stripLength*stripLength + helpSummand;
1551 bool emptyMap(
true);
1553 if(!i_hitSelection.second.empty()){
1554 int entry(1);
double intervalBegin(999.);
1555 for(std::vector<double>::iterator i_hitInterval = i_hitSelection.second.begin(); i_hitInterval != i_hitSelection.second.end(); ++
entry){
1557 intervalBegin = *i_hitInterval; ++i_hitInterval;
1559 if(intervalBegin > *i_hitInterval){
1560 edm::LogError(
"HitSelector")<<
"INVALID Interval selected for "<<i_hitSelection.first<<
":\t"<<intervalBegin<<
" > "<<(*i_hitInterval)
1561 <<
"\n ... delete Selection for "<<i_hitSelection.first;
1562 i_hitSelection.second.clear(); i_hitInterval = i_hitSelection.second.begin();
1564 edm::LogInfo(
"HitSelector")<<
"Interval selected for "<<i_hitSelection.first<<
":\t"<<intervalBegin<<
", "<<(*i_hitInterval);
1569 if(!i_hitSelection.second.empty())emptyMap =
false;
1574 bool emptyMapUInt(
true);
1576 if(!i_hitSelection.second.empty()){
1577 int entry(1);
unsigned int intervalBegin(999);
1578 for(std::vector<unsigned int>::iterator i_hitInterval = i_hitSelection.second.begin(); i_hitInterval != i_hitSelection.second.end(); ++
entry){
1580 intervalBegin = *i_hitInterval;
1583 if(intervalBegin > *i_hitInterval){
1584 edm::LogError(
"HitSelector")<<
"INVALID Interval selected for "<<i_hitSelection.first<<
":\t"<<intervalBegin<<
" > "<<(*i_hitInterval)
1585 <<
"\n ... delete Selection for "<<i_hitSelection.first;
1586 i_hitSelection.second.clear(); i_hitInterval = i_hitSelection.second.begin();
1588 edm::LogInfo(
"HitSelector")<<
"Interval selected for "<<i_hitSelection.first<<
":\t"<<intervalBegin<<
", "<<(*i_hitInterval);
1593 if(!i_hitSelection.second.empty())emptyMapUInt =
false;
1597 if(emptyMap && emptyMapUInt){
1598 m_hitSelection_.clear();
1599 m_hitSelectionUInt_.clear();
1610 std::vector<double> v_cutVariable(parSet.
getParameter<std::vector<double> >(cutVariable));
1611 if(v_cutVariable.size()%2==1){
1612 edm::LogError(
"HitSelector")<<
"Invalid Hit Selection for "<<cutVariable<<
": need even number of arguments (intervals)" 1613 <<
"\n ... delete Selection for "<<cutVariable;
1614 v_cutVariable.clear();
1626 std::vector<unsigned int> v_cutVariable(parSet.
getParameter<std::vector<unsigned int> >(cutVariable));
1627 if(v_cutVariable.size()%2==1){
1628 edm::LogError(
"HitSelector")<<
"Invalid Hit Selection for "<<cutVariable<<
": need even number of arguments (intervals)" 1629 <<
"\n ... delete Selection for "<<cutVariable;
1630 v_cutVariable.clear();
1647 bool isGoodHit(
true);
1648 bool isGoodHitX(
true);
1649 bool isGoodHitY(
true);
1653 const std::vector<double>& v_hitSelection(i_hitSelection.second);
1654 if(v_hitSelection.empty())
continue;
1657 if (hitSelection ==
"phiSens") {
if(!this->
inDoubleInterval(v_hitSelection, hitParams.
phiSens))isGoodHit =
false;}
1658 else if(hitSelection ==
"phiSensX") {
if(!this->
inDoubleInterval(v_hitSelection, hitParams.
phiSensX))isGoodHit =
false;}
1659 else if(hitSelection ==
"phiSensY") {
if(!this->
inDoubleInterval(v_hitSelection, hitParams.
phiSensY))isGoodHit =
false;}
1661 else if(hitSelection ==
"resX") {
if(!this->
inDoubleInterval(v_hitSelection, hitParams.
resX))isGoodHitX =
false;}
1662 else if(hitSelection ==
"norResX") {
if(!this->
inDoubleInterval(v_hitSelection, hitParams.
norResX))isGoodHitX =
false;}
1663 else if(hitSelection ==
"probX") {
if(!this->
inDoubleInterval(v_hitSelection, hitParams.
probX))isGoodHitX =
false;}
1664 else if(hitSelection ==
"errXHit") {
if(!this->
inDoubleInterval(v_hitSelection, hitParams.
errXHit))isGoodHitX =
false;}
1665 else if(hitSelection ==
"errXTrk") {
if(!this->
inDoubleInterval(v_hitSelection, hitParams.
errXTrk))isGoodHitX =
false;}
1666 else if(hitSelection ==
"errX") {
if(!this->
inDoubleInterval(v_hitSelection, hitParams.
errX))isGoodHitX =
false;}
1667 else if(hitSelection ==
"errX2") {
if(!this->
inDoubleInterval(v_hitSelection, hitParams.
errX2))isGoodHitX =
false;}
1682 else if(hitSelection ==
"resY") {
if(!this->
inDoubleInterval(v_hitSelection, hitParams.
resY))isGoodHitY =
false;}
1683 else if(hitSelection ==
"norResY") {
if(!this->
inDoubleInterval(v_hitSelection, hitParams.
norResY))isGoodHitY =
false;}
1684 else if(hitSelection ==
"probY") {
if(!this->
inDoubleInterval(v_hitSelection, hitParams.
probY))isGoodHitY =
false;}
1685 else if(hitSelection ==
"errYHit") {
if(!this->
inDoubleInterval(v_hitSelection, hitParams.
errYHit))isGoodHitY =
false;}
1686 else if(hitSelection ==
"errYTrk") {
if(!this->
inDoubleInterval(v_hitSelection, hitParams.
errYTrk))isGoodHitY =
false;}
1687 else if(hitSelection ==
"errY") {
if(!this->
inDoubleInterval(v_hitSelection, hitParams.
errY))isGoodHitY =
false;}
1688 else if(hitSelection ==
"errY2") {
if(!this->
inDoubleInterval(v_hitSelection, hitParams.
errY2))isGoodHitY =
false;}
1691 else if(hitSelection ==
"widthDiff") {
if(!this->
inDoubleInterval(v_hitSelection, hitParams.
projWidth-static_cast<float>(hitParams.
widthX)))isGoodHit =
false;}
1693 else if(hitSelection ==
"maxCharge") {
if(!this->
inDoubleInterval(v_hitSelection, hitParams.
maxCharge))isGoodHit =
false;}
1698 else if(hitSelection ==
"sOverN") {
if(!this->
inDoubleInterval(v_hitSelection, hitParams.
sOverN))isGoodHit =
false;}
1704 const std::vector<unsigned int>& v_hitSelection(i_hitSelection.second);
1705 if(v_hitSelection.empty())
continue;
1711 if(hitSelection ==
"isOnEdge") {
if(!this->
inUintInterval(v_hitSelection, hitParams.
isOnEdge))isGoodHit =
false;}
1712 else if(hitSelection ==
"hasBadPixels") {
if(!this->
inUintInterval(v_hitSelection, hitParams.
hasBadPixels))isGoodHit =
false;}
1713 else if(hitSelection ==
"spansTwoRoc") {
if(!this->
inUintInterval(v_hitSelection, hitParams.
spansTwoRoc))isGoodHit =
false;}
1714 else if(hitSelection ==
"qBin") {
if(!this->
inUintInterval(v_hitSelection, hitParams.
qBin))isGoodHit =
false;}
1716 else if(hitSelection ==
"widthX") {
if(!this->
inUintInterval(v_hitSelection, hitParams.
widthX))isGoodHitX =
false;}
1717 else if(hitSelection ==
"widthY") {
if(!this->
inUintInterval(v_hitSelection, hitParams.
widthY))isGoodHitY =
false;}
1719 if (hitSelection ==
"width") {
if(!this->
inUintInterval(v_hitSelection, hitParams.
widthX))isGoodHit =
false;}
1721 else if(hitSelection ==
"maxIndex") {
if(!this->
inUintInterval(v_hitSelection, hitParams.
maxIndex))isGoodHit =
false;}
1740 int entry(0);
double intervalBegin(999.);
1741 bool isSelected(
false);
1742 for(
auto const & i_hitInterval : v_hitSelection){
1744 if(entry%2==1)intervalBegin = i_hitInterval;
1745 else if(variable>=intervalBegin && variable<i_hitInterval)isSelected =
true;
1753 int entry(0);
unsigned int intervalBegin(999);
1754 bool isSelected(
false);
1755 for(
auto i_hitInterval : v_hitSelection ){
1757 if(entry%2==1)intervalBegin = i_hitInterval;
1758 else if(variable>=intervalBegin && variable<=i_hitInterval){
1759 if(variable2==999 || (variable2>=intervalBegin && variable2<=i_hitInterval))isSelected =
true;
1772 unsigned int goodHitsPerTrack(trackStruct.
v_hitParams.size());
1836 bool moduleInSector(
false);
1837 for(
auto const & i_hitSector : hit.
v_sector){
1838 if(i_sector.first == i_hitSector){
1839 moduleInSector =
true;
1843 if(!moduleInSector)
continue;
1847 std::map<std::string,TrackerSectorStruct::CorrelationHists>& m_corrHists(sector.
m_correlationHistsX);
1854 m_corrHists[
"HitsGood"].fillCorrHistsX(hit,goodHitsPerTrack);
1856 m_corrHists[
"Hits2D"].fillCorrHistsX(hit,trackStruct.
trkParams.
hits2D);
1862 m_corrHists[
"Phi"].fillCorrHistsX(hit,trackStruct.
trkParams.
phi*180./
M_PI);
1864 m_corrHists[
"Dz"].fillCorrHistsX(hit,trackStruct.
trkParams.
dz);
1865 m_corrHists[
"Pt"].fillCorrHistsX(hit,trackStruct.
trkParams.
pt);
1866 m_corrHists[
"P"].fillCorrHistsX(hit,trackStruct.
trkParams.
p);
1867 m_corrHists[
"InvP"].fillCorrHistsX(hit,1./trackStruct.
trkParams.
p);
1872 std::map<std::string,TrackerSectorStruct::CorrelationHists>& m_corrHists(sector.
m_correlationHistsY);
1879 m_corrHists[
"HitsGood"].fillCorrHistsY(hit,goodHitsPerTrack);
1881 m_corrHists[
"Hits2D"].fillCorrHistsY(hit,trackStruct.
trkParams.
hits2D);
1887 m_corrHists[
"Phi"].fillCorrHistsY(hit,trackStruct.
trkParams.
phi*180./
M_PI);
1889 m_corrHists[
"Dz"].fillCorrHistsY(hit,trackStruct.
trkParams.
dz);
1890 m_corrHists[
"Pt"].fillCorrHistsY(hit,trackStruct.
trkParams.
pt);
1891 m_corrHists[
"P"].fillCorrHistsY(hit,trackStruct.
trkParams.
p);
1892 m_corrHists[
"InvP"].fillCorrHistsY(hit,1./trackStruct.
trkParams.
p);
1897 for(
auto & i_sigmaX : sector.
m_sigmaX){
1898 for(
auto & iHist : i_sigmaX.second){
1899 if (i_sigmaX.first==
"sigmaXHit") iHist->Fill(hit.
errXHit*10000.);
1900 else if(i_sigmaX.first==
"sigmaXTrk") iHist->Fill(hit.
errXTrk*10000.);
1901 else if(i_sigmaX.first==
"sigmaX") iHist->Fill(hit.
errX*10000.);
1904 for(
auto & i_sigmaY : sector.
m_sigmaY){
1905 for(
auto & iHist : i_sigmaY.second){
1906 if (i_sigmaY.first==
"sigmaYHit") iHist->Fill(hit.
errYHit*10000.);
1907 else if(i_sigmaY.first==
"sigmaYTrk") iHist->Fill(hit.
errYTrk*10000.);
1908 else if(i_sigmaY.first==
"sigmaY") iHist->Fill(hit.
errY*10000.);
1919 std::map<std::string, TrackerSectorStruct::CorrelationHists>& m_corrHists(sector.
m_correlationHistsX);
1922 m_corrHists[
"WidthX"].fillCorrHistsX(hit, hit.
widthX);
1923 m_corrHists[
"BaryStripX"].fillCorrHistsX(hit, hit.
baryStripX);
1926 m_corrHists[
"ChargePixel"].fillCorrHistsX(hit, hit.
chargePixel);
1931 m_corrHists[
"IsOnEdge"].fillCorrHistsX(hit, hit.
isOnEdge);
1932 m_corrHists[
"HasBadPixels"].fillCorrHistsX(hit, hit.
hasBadPixels);
1933 m_corrHists[
"SpansTwoRoc"].fillCorrHistsX(hit, hit.
spansTwoRoc);
1934 m_corrHists[
"QBin"].fillCorrHistsX(hit, hit.
qBin);
1937 m_corrHists[
"ChargeStrip"].fillCorrHistsX(hit, hit.
chargeStrip);
1938 m_corrHists[
"MaxStrip"].fillCorrHistsX(hit, hit.
maxStrip);
1939 m_corrHists[
"MaxCharge"].fillCorrHistsX(hit, hit.
maxCharge);
1940 m_corrHists[
"MaxIndex"].fillCorrHistsX(hit, hit.
maxIndex);
1941 m_corrHists[
"ChargeOnEdges"].fillCorrHistsX(hit, hit.
chargeOnEdges);
1942 m_corrHists[
"ChargeAsymmetry"].fillCorrHistsX(hit, hit.
chargeAsymmetry);
1943 m_corrHists[
"ChargeLRplus"].fillCorrHistsX(hit, hit.
chargeLRplus);
1944 m_corrHists[
"ChargeLRminus"].fillCorrHistsX(hit, hit.
chargeLRminus);
1945 m_corrHists[
"SOverN"].fillCorrHistsX(hit, hit.
sOverN);
1946 m_corrHists[
"WidthProj"].fillCorrHistsX(hit, hit.
projWidth);
1947 m_corrHists[
"WidthDiff"].fillCorrHistsX(hit, hit.
projWidth-static_cast<float>( hit.
widthX));
1963 m_corrHists[
"SigmaXHit"].fillCorrHistsX(hit, hit.
errXHit*10000.);
1964 m_corrHists[
"SigmaXTrk"].fillCorrHistsX(hit, hit.
errXTrk*10000.);
1965 m_corrHists[
"SigmaX"].fillCorrHistsX(hit, hit.
errX*10000.);
1967 m_corrHists[
"PhiSens"].fillCorrHistsX(hit, hit.
phiSens*180./
M_PI);
1968 m_corrHists[
"PhiSensX"].fillCorrHistsX(hit, hit.
phiSensX*180./
M_PI);
1969 m_corrHists[
"PhiSensY"].fillCorrHistsX(hit, hit.
phiSensY*180./
M_PI);
1975 sector.
ResX ->Fill(hit.
resX*10000.);
1988 std::map<std::string, TrackerSectorStruct::CorrelationHists>& m_corrHists(sector.
m_correlationHistsY);
1993 m_corrHists[
"WidthY"].fillCorrHistsY(hit,hit.
widthY);
1994 m_corrHists[
"BaryStripY"].fillCorrHistsY(hit,hit.
baryStripY);
1996 m_corrHists[
"ChargePixel"].fillCorrHistsY(hit, hit.
chargePixel);
2001 m_corrHists[
"IsOnEdge"].fillCorrHistsY(hit, hit.
isOnEdge);
2002 m_corrHists[
"HasBadPixels"].fillCorrHistsY(hit, hit.
hasBadPixels);
2003 m_corrHists[
"SpansTwoRoc"].fillCorrHistsY(hit, hit.
spansTwoRoc);
2004 m_corrHists[
"QBin"].fillCorrHistsY(hit, hit.
qBin);
2007 m_corrHists[
"SigmaYHit"].fillCorrHistsY(hit, hit.
errYHit*10000.);
2008 m_corrHists[
"SigmaYTrk"].fillCorrHistsY(hit, hit.
errYTrk*10000.);
2009 m_corrHists[
"SigmaY"].fillCorrHistsY(hit, hit.
errY*10000.);
2011 m_corrHists[
"PhiSens"].fillCorrHistsY(hit, hit.
phiSens*180./
M_PI);
2012 m_corrHists[
"PhiSensX"].fillCorrHistsY(hit, hit.
phiSensX*180./
M_PI);
2013 m_corrHists[
"PhiSensY"].fillCorrHistsY(hit, hit.
phiSensY*180./
M_PI);
2019 sector.
ResY ->Fill(hit.
resY*10000.);
2032 unsigned int goodHitsPerTrack(trackStruct.
v_hitParams.size());
2039 for(
auto const & i_hit : trackStruct.
v_hitParams){
2045 bool moduleInSector(
false);
2046 for(
auto const & i_hitSector : i_hit.v_sector){
2047 if(i_sector.first == i_hitSector){
2048 moduleInSector =
true;
2052 if(!moduleInSector)
continue;
2056 if(i_hit.goodXMeasurement){
2061 if(i_hit.errXWoApe < i_errBins.second.first || i_hit.errXWoApe >= i_errBins.second.second){
2064 i_sector.second.m_binnedHists[i_errBins.first][
"sigmaX"] ->Fill(i_hit.errXWoApe);
2065 i_sector.second.m_binnedHists[i_errBins.first][
"norResX"]->Fill(i_hit.norResX);
2068 i_sector.second.ResX->Fill(i_hit.resX*10000.);
2069 i_sector.second.NorResX->Fill(i_hit.norResX);
2072 if(i_hit.goodYMeasurement){
2077 if(i_hit.errYWoApe < i_errBins.second.first || i_hit.errYWoApe >= i_errBins.second.second){
2080 i_sector.second.m_binnedHists[i_errBins.first][
"sigmaY"] ->Fill(i_hit.errYWoApe);
2081 i_sector.second.m_binnedHists[i_errBins.first][
"norResY"]->Fill(i_hit.norResY);
2084 i_sector.second.ResY->Fill(i_hit.resY*10000.);
2085 i_sector.second.NorResY->Fill(i_hit.norResY);
2104 for(
auto const & i_errBins : i_sector.second.m_binnedHists){
2105 std::map<std::string,TH1*> m_Hists = i_errBins.second;
2108 double integralX = m_Hists[
"norResX"]->Integral();
2109 i_sector.second.EntriesX->SetBinContent(i_errBins.first, integralX);
2111 if(i_sector.second.isPixel){
2112 double integralY = m_Hists[
"norResY"]->Integral();
2113 i_sector.second.EntriesY->SetBinContent(i_errBins.first, integralY);
2140 if (stripId.
stereo())
return true;
2141 else if (dynamic_cast<const SiStripRecHit1D*>(&hit) ||
dynamic_cast<const SiStripRecHit2D*
>(&hit))
return false;
2143 else if (dynamic_cast<const SiStripMatchedRecHit2D*>(&hit))
return true;
2144 else if (dynamic_cast<const ProjectedSiStripRecHit2D*>(&hit)) {
2148 edm::LogError(
"UnkownType") <<
"@SUB=AlignmentTrackSelector::isHit2D" 2149 <<
"Tracker hit not in pixel, neither SiStripRecHit[12]D nor " 2150 <<
"SiStripMatchedRecHit2D nor ProjectedSiStripRecHit2D.";
2155 edm::LogWarning(
"DetectorMismatch") <<
"@SUB=AlignmentTrackSelector::isHit2D" 2156 <<
"Hit not in tracker with 'official' dimension >=2.";
2175 if (beamSpotHandle.
isValid()){
2176 beamSpot = *beamSpotHandle;
2178 edm::LogError(
"ApeEstimator")<<
"No beam spot available from EventSetup" 2179 <<
"\n...skip event";
2192 typedef std::vector<ConstTrajTrackPair> ConstTrajTrackPairCollection;
2193 ConstTrajTrackPairCollection trajTracks;
2196 for(i_trajTrack = m_TrajTracksMap->
begin();i_trajTrack != m_TrajTracksMap->
end();++i_trajTrack){
2197 trajTracks.push_back(
ConstTrajTrackPair(&(*(*i_trajTrack).key), &(*(*i_trajTrack).val)));
2202 unsigned int trackSizeGood(0);
2203 ConstTrajTrackPairCollection::const_iterator iTrack;
2204 for(iTrack = trajTracks.begin(); iTrack != trajTracks.end();++iTrack){
2214 const std::vector<TrajectoryMeasurement> v_meas = (*traj).measurements();
2217 for(std::vector<TrajectoryMeasurement>::const_iterator i_meas = v_meas.begin(); i_meas != v_meas.end(); ++i_meas){
2225 if(!trackStruct.
v_hitParams.empty())++trackSizeGood;
ClusterRef cluster() const
virtual const Topology & topology() const =0
uint8_t maxCharge() const
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
constexpr uint32_t rawId() const
get the raw id
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 &)
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()
virtual float width() const =0
float localStripLength(const LocalPoint &) const override=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
float stripAngle(float strip) const override=0
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
void analyze(const edm::Event &, const edm::EventSetup &) override
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_
MeasurementError measurementError(const LocalPoint &, const LocalError &) const override=0
TProfile * PWidthVsWidthProjected
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
SiStripRecHit2D originalHit() const
Detector identifier class for the strip tracker.
virtual TrackingRecHit const * hit() const
virtual float detHeight() const =0
MeasurementPoint measurementPosition(const LocalPoint &) const override=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.
void statistics(const TrackerSectorStruct &, const int) const
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 &)