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 std::vector<edm::ParameterSet>::const_iterator i_parSet;
308 for(
auto const & parSet : v_sectorDef){
311 std::vector<unsigned int> v_rawId(parSet.getParameter<std::vector<unsigned int> >(
"rawId")),
312 v_subdetId(parSet.getParameter<std::vector<unsigned int> >(
"subdetId")),
313 v_layer(parSet.getParameter<std::vector<unsigned int> >(
"layer")),
314 v_side(parSet.getParameter<std::vector<unsigned int> >(
"side")),
315 v_half(parSet.getParameter<std::vector<unsigned int> >(
"half")),
316 v_rod(parSet.getParameter<std::vector<unsigned int> >(
"rod")),
317 v_ring(parSet.getParameter<std::vector<unsigned int> >(
"ring")),
318 v_petal(parSet.getParameter<std::vector<unsigned int> >(
"petal")),
319 v_blade(parSet.getParameter<std::vector<unsigned int> >(
"blade")),
320 v_panel(parSet.getParameter<std::vector<unsigned int> >(
"panel")),
321 v_outerInner(parSet.getParameter<std::vector<unsigned int> >(
"outerInner")),
322 v_module(parSet.getParameter<std::vector<unsigned int> >(
"module")),
323 v_nStrips(parSet.getParameter<std::vector<unsigned int> >(
"nStrips")),
324 v_isDoubleSide(parSet.getParameter<std::vector<unsigned int> >(
"isDoubleSide")),
325 v_isRPhi(parSet.getParameter<std::vector<unsigned int> >(
"isRPhi")),
326 v_isStereo(parSet.getParameter<std::vector<unsigned int> >(
"isStereo"));
327 std::vector<int> v_uDirection(parSet.getParameter<std::vector<int> >(
"uDirection")),
328 v_vDirection(parSet.getParameter<std::vector<int> >(
"vDirection")),
329 v_wDirection(parSet.getParameter<std::vector<int> >(
"wDirection"));
330 std::vector<double> v_posR(parSet.getParameter<std::vector<double> >(
"posR")),
331 v_posPhi(parSet.getParameter<std::vector<double> >(
"posPhi")),
332 v_posEta(parSet.getParameter<std::vector<double> >(
"posEta")),
333 v_posX(parSet.getParameter<std::vector<double> >(
"posX")),
334 v_posY(parSet.getParameter<std::vector<double> >(
"posY")),
335 v_posZ(parSet.getParameter<std::vector<double> >(
"posZ"));
343 tkSector.
name = sectorName;
351 if(sectorCounter==1){
386 tkSector.
v_rawId.push_back(rawId);
387 bool moduleSelected(
false);
388 for(
auto const & i_rawId : allSectors.v_rawId){
389 if(rawId == i_rawId)moduleSelected =
true;
391 if(!moduleSelected)allSectors.v_rawId.push_back(rawId);
396 for(
auto const & i_rawId : tkSector.
v_rawId){
411 if(isPixel && isStrip){
412 edm::LogError(
"SectorBuilder")<<
"Incorrect Sector Definition: there are pixel and strip modules within one sector" 413 <<
"\n... sector selection is not applied, sector "<<sectorCounter<<
" is not built";
419 edm::LogInfo(
"SectorBuilder")<<
"There are "<<tkSector.
v_rawId.size()<<
" Modules in Sector "<<sectorCounter;
434 if(v_id.empty())
return true;
435 if(v_id.size()%2==1){
436 edm::LogError(
"SectorBuilder")<<
"Incorrect Sector Definition: Position Vectors need even number of arguments (Intervals)" 437 <<
"\n... sector selection is not applied, sector "<<sectorCounter<<
" is not built";
440 int entry(0);
double intervalBegin(999.);
441 for(
auto const & i_id : v_id){
443 if(entry%2==1) intervalBegin = i_id;
444 if(entry%2==0 && intervalBegin > i_id){
445 edm::LogError(
"SectorBuilder")<<
"Incorrect Sector Definition (Position Vector Intervals): \t" 446 <<intervalBegin<<
" is bigger than "<<i_id<<
" but is expected to be smaller" 447 <<
"\n... sector selection is not applied, sector "<<sectorCounter<<
" is not built";
458 if(v_id.empty())
return true;
459 for(
auto const & i_id : v_id){
460 if(
id==i_id)
return true;
469 if(v_id.empty())
return true;
470 for(
auto const & i_id : v_id){
471 if(1==i_id &&
id)
return true;
472 if(2==i_id && !
id)
return true;
481 if(v_id.empty())
return true;
482 for(
auto const & i_id : v_id){
483 if(
id==i_id)
return true;
492 if(v_id.empty())
return true;
493 int entry(0);
double intervalBegin(999.);
494 for(
auto const & i_id : v_id){
496 if(entry%2==1)intervalBegin = i_id;
497 if(entry%2==0 &&
id>=intervalBegin &&
id<i_id)
return true;
504 bool commonModules(
false);
505 for(std::map<unsigned int,TrackerSectorStruct>::const_iterator i_sector =
m_tkSector_.begin(); i_sector !=
m_tkSector_.end(); ++i_sector){
506 std::map<unsigned int,TrackerSectorStruct>::const_iterator i_sector2(i_sector);
507 for(++i_sector2; i_sector2 !=
m_tkSector_.end(); ++i_sector2){
508 unsigned int nCommonModules(0);
509 for(
auto const & i_module : (*i_sector).second.v_rawId){
510 for(
auto const & i_module2 : (*i_sector2).second.v_rawId){
511 if(i_module2 == i_module) ++nCommonModules;
514 if(nCommonModules==0)
517 edm::LogError(
"SectorBuilder")<<
"Sector "<<(*i_sector).first<<
" and Sector "<<(*i_sector2).first<<
" have "<<nCommonModules<<
" Modules in common";
518 commonModules =
true;
522 if(static_cast<int>(allSectors.
v_rawId.size())==nModules)
523 edm::LogInfo(
"SectorBuilder")<<
"ALL Tracker Modules are contained in the Sectors";
526 <<
" out of "<<nModules<<
" Tracker Modules";
528 edm::LogInfo(
"SectorBuilder")<<
"There are ZERO modules associated to different sectors, no ambiguities exist";
530 edm::LogError(
"SectorBuilder")<<
"There are modules associated to different sectors, APE value cannot be assigned reasonably";
540 if(v_residualErrorBinning.size()==1){
541 edm::LogError(
"ResidualErrorBinning")<<
"Incorrect selection of Residual Error Bins (used for APE calculation): \t" 542 <<
"Only one argument passed, so no interval is specified" 543 <<
"\n... delete whole bin selection";
547 unsigned int binCounter(-1);
548 for(
auto const & i_binning : v_residualErrorBinning){
556 edm::LogError(
"ResidualErrorBinning")<<
"Incorrect selection of Residual Error Bins (used for APE calculation): \t" 557 <<
xMin<<
" is bigger than "<<xMax<<
" but is expected to be smaller" 558 <<
"\n... delete whole bin selection";
566 edm::LogInfo(
"ResidualErrorBinning")<<
m_resErrBins_.size()<<
" Intervals of residual errors used for separate APE calculation sucessfully set";
578 for(std::vector<unsigned int>::iterator i_errHists = v_errHists.begin(); i_errHists != v_errHists.end(); ++i_errHists){
579 for(std::vector<unsigned int>::iterator i_errHists2 = i_errHists; i_errHists2 != v_errHists.end();){
581 if(*i_errHists==*i_errHists2){
582 edm::LogError(
"BookSectorHists")<<
"Value of vErrHists in config exists twice: "<<*i_errHists<<
"\n... delete one of both";
583 v_errHists.erase(i_errHists2);
592 double widthMax = zoomHists ? 20. : 200.;
593 double chargePixelMax = zoomHists ? 200000. : 2000000.;
594 double chargeStripMax = zoomHists ? 1000. : 10000.;
595 double sOverNMax = zoomHists ? 200. : 2000.;
596 double logClusterProbMin = zoomHists ? -5. : -15.;
598 double resXAbsMax = zoomHists ? 0.5 : 5.;
599 double norResXAbsMax = zoomHists ? 10. : 50.;
600 double probXMin = zoomHists ? -0.01 : -0.1;
601 double probXMax = zoomHists ? 0.11 : 1.1;
602 double sigmaXMin = zoomHists ? 0. : -0.05;
603 double sigmaXMax = zoomHists ? 0.02 : 1.;
605 double sigmaXHitMax = zoomHists ? 0.02 : 1.;
606 double phiSensXMax = zoomHists ? 31. : 93.;
608 double norChi2Max = zoomHists ? 5. : 1000.;
609 double d0Max = zoomHists ? 0.02 : 40.;
610 double dzMax = zoomHists ? 15. : 100.;
611 double pMax = zoomHists ? 200. : 2000.;
612 double invPMax = zoomHists ? 0.05 : 10.;
618 "TFileService is not registered in cfg file" );
621 std::stringstream sector; sector <<
"Sector_" << i_sector.first;
625 i_sector.second.Name = secDir.
make<TH1F>(
"z_name",i_sector.second.name.c_str(),1,0,1);
628 if(i_sector.second.v_rawId.empty()){
632 i_sector.second.setCorrHistParams(&secDir,norResXAbsMax,sigmaXHitMax,sigmaXMax);
636 const bool pixelSector(i_sector.second.isPixel);
640 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");
641 i_sector.second.m_correlationHistsX[
"BaryStripX"] = i_sector.second.bookCorrHistsX(
"BaryStripX",
"barycenter of cluster charge",
"b_{cl,x}",
"[# channels]",800,100,-10.,790.,
"nph");
644 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");
645 i_sector.second.m_correlationHistsY[
"BaryStripY"] = i_sector.second.bookCorrHistsY(
"BaryStripY",
"barycenter of cluster charge",
"b_{cl,y}",
"[# channels]",800,100,-10.,790.,
"nph");
647 i_sector.second.m_correlationHistsX[
"ChargePixel"] = i_sector.second.bookCorrHistsX(
"ChargePixel",
"cluster charge",
"c_{cl}",
"[e]",100,50,0.,chargePixelMax,
"nph");
648 i_sector.second.m_correlationHistsX[
"ClusterProbXY"] = i_sector.second.bookCorrHistsX(
"ClusterProbXY",
"cluster probability xy",
"prob_{cl,xy}",
"",100,50,0.,1.,
"nph");
649 i_sector.second.m_correlationHistsX[
"ClusterProbQ"] = i_sector.second.bookCorrHistsX(
"ClusterProbQ",
"cluster probability q",
"prob_{cl,q}",
"",100,50,0.,1.,
"nph");
650 i_sector.second.m_correlationHistsX[
"ClusterProbXYQ"] = i_sector.second.bookCorrHistsX(
"ClusterProbXYQ",
"cluster probability xyq",
"prob_{cl,xyq}",
"",100,50,0.,1.,
"nph");
651 i_sector.second.m_correlationHistsX[
"LogClusterProb"] = i_sector.second.bookCorrHistsX(
"LogClusterProb",
"cluster probability xy",
"log(prob_{cl,xy})",
"",60,30,logClusterProbMin,0.,
"nph");
652 i_sector.second.m_correlationHistsX[
"IsOnEdge"] = i_sector.second.bookCorrHistsX(
"IsOnEdge",
"IsOnEdge",
"isOnEdge",
"",2,2,0,2,
"nph");
653 i_sector.second.m_correlationHistsX[
"HasBadPixels"] = i_sector.second.bookCorrHistsX(
"HasBadPixels",
"HasBadPixels",
"hasBadPixels",
"",2,2,0,2,
"nph");
654 i_sector.second.m_correlationHistsX[
"SpansTwoRoc"] = i_sector.second.bookCorrHistsX(
"SpansTwoRoc",
"SpansTwoRoc",
"spansTwoRoc",
"",2,2,0,2,
"nph");
655 i_sector.second.m_correlationHistsX[
"QBin"] = i_sector.second.bookCorrHistsX(
"QBin",
"q bin",
"q bin",
"",8,8,0,8,
"nph");
657 i_sector.second.m_correlationHistsY[
"ChargePixel"] = i_sector.second.bookCorrHistsY(
"ChargePixel",
"cluster charge",
"c_{cl}",
"[e]",100,50,0.,chargePixelMax,
"nph");
658 i_sector.second.m_correlationHistsY[
"ClusterProbXY"] = i_sector.second.bookCorrHistsY(
"ClusterProbXY",
"cluster probability xy",
"prob_{cl,xy}",
"",100,50,0.,1.,
"nph");
659 i_sector.second.m_correlationHistsY[
"ClusterProbQ"] = i_sector.second.bookCorrHistsY(
"ClusterProbQ",
"cluster probability q",
"prob_{cl,q}",
"",100,50,0.,1.,
"nph");
660 i_sector.second.m_correlationHistsY[
"ClusterProbXYQ"] = i_sector.second.bookCorrHistsY(
"ClusterProbXYQ",
"cluster probability xyq",
"prob_{cl,xyq}",
"",100,50,0.,1.,
"nph");
661 i_sector.second.m_correlationHistsY[
"LogClusterProb"] = i_sector.second.bookCorrHistsY(
"LogClusterProb",
"cluster probability xy",
"log(prob_{cl,xy})",
"",60,30,logClusterProbMin,0.,
"nph");
662 i_sector.second.m_correlationHistsY[
"IsOnEdge"] = i_sector.second.bookCorrHistsY(
"IsOnEdge",
"IsOnEdge",
"isOnEdge",
"",2,2,0,2,
"nph");
663 i_sector.second.m_correlationHistsY[
"HasBadPixels"] = i_sector.second.bookCorrHistsY(
"HasBadPixels",
"HasBadPixels",
"hasBadPixels",
"",2,2,0,2,
"nph");
664 i_sector.second.m_correlationHistsY[
"SpansTwoRoc"] = i_sector.second.bookCorrHistsY(
"SpansTwoRoc",
"SpansTwoRoc",
"spansTwoRoc",
"",2,2,0,2,
"nph");
665 i_sector.second.m_correlationHistsY[
"QBin"] = i_sector.second.bookCorrHistsY(
"QBin",
"q bin",
"q bin",
"",8,8,0,8,
"nph");
669 i_sector.second.m_correlationHistsX[
"ChargeStrip"] = i_sector.second.bookCorrHistsX(
"ChargeStrip",
"cluster charge",
"c_{cl}",
"[APV counts]",100,50,0.,chargeStripMax,
"nph");
670 i_sector.second.m_correlationHistsX[
"MaxStrip"] = i_sector.second.bookCorrHistsX(
"MaxStrip",
"strip with max. charge",
"n_{cl,max}",
"[# strips]",800,800,-10.,790.,
"npht");
671 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");
672 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");
673 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");
674 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");
675 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");
676 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");
677 i_sector.second.m_correlationHistsX[
"SOverN"] = i_sector.second.bookCorrHistsX(
"SOverN",
"signal over noise",
"s/N",
"",100,50,0,sOverNMax,
"nph");
678 i_sector.second.m_correlationHistsX[
"WidthProj"] = i_sector.second.bookCorrHistsX(
"WidthProj",
"projected width",
"w_{p}",
"[# strips]",200,20,0.,widthMax,
"nph");
679 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");
681 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);
682 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);
684 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.);
685 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.);
687 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.);
688 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);
690 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);
691 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);
696 i_sector.second.m_correlationHistsX[
"SigmaXHit"] = i_sector.second.bookCorrHistsX(
"SigmaXHit",
"hit error",
"#sigma_{hit,x}",
"[#mum]",105,20,sigmaXMin*10000.,sigmaXMax*10000.,
"np");
697 i_sector.second.m_correlationHistsX[
"SigmaXTrk"] = i_sector.second.bookCorrHistsX(
"SigmaXTrk",
"track error",
"#sigma_{trk,x}",
"[#mum]",105,20,sigmaXMin*10000.,sigmaXMax*10000.,
"np");
698 i_sector.second.m_correlationHistsX[
"SigmaX"] = i_sector.second.bookCorrHistsX(
"SigmaX",
"residual error",
"#sigma_{r,x}",
"[#mum]",105,20,sigmaXMin*10000.,sigmaXMax*10000.,
"np");
699 i_sector.second.m_correlationHistsX[
"PhiSens"] = i_sector.second.bookCorrHistsX(
"PhiSens",
"track angle on sensor",
"#phi_{module}",
"[ ^{o}]",96,48,-3,93,
"nphtr");
700 i_sector.second.m_correlationHistsX[
"PhiSensX"] = i_sector.second.bookCorrHistsX(
"PhiSensX",
"track angle on sensor",
"#phi_{module,x}",
"[ ^{o}]",186,93,-phiSensXMax,phiSensXMax,
"nphtr");
701 i_sector.second.m_correlationHistsX[
"PhiSensY"] = i_sector.second.bookCorrHistsX(
"PhiSensY",
"track angle on sensor",
"#phi_{module,y}",
"[ ^{o}]",186,93,-93,93,
"nphtr");
703 i_sector.second.XHit = secDir.
make<TH1F>(
"h_XHit",
" hit measurement x_{hit};x_{hit} [cm];# hits",100,-20,20);
704 i_sector.second.XTrk = secDir.
make<TH1F>(
"h_XTrk",
"track prediction x_{trk};x_{trk} [cm];# hits",100,-20,20);
705 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.);
706 i_sector.second.ResX = secDir.
make<TH1F>(
"h_ResX",
"residual r_{x};x_{trk}-x_{hit} [#mum];# hits",100,-resXAbsMax*10000.,resXAbsMax*10000.);
707 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);
708 i_sector.second.ProbX = secDir.
make<TH1F>(
"h_ProbX",
"residual probability;prob(r_{x}^{2}/#sigma_{r,x}^{2},1);# hits",60,probXMin,probXMax);
710 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);
711 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.);
714 i_sector.second.m_correlationHistsY[
"SigmaYHit"] = i_sector.second.bookCorrHistsY(
"SigmaYHit",
"hit error",
"#sigma_{hit,y}",
"[#mum]",105,20,sigmaXMin*10000.,sigmaXMax*10000.,
"np");
715 i_sector.second.m_correlationHistsY[
"SigmaYTrk"] = i_sector.second.bookCorrHistsY(
"SigmaYTrk",
"track error",
"#sigma_{trk,y}",
"[#mum]",105,20,sigmaXMin*10000.,sigmaXMax*10000.,
"np");
716 i_sector.second.m_correlationHistsY[
"SigmaY"] = i_sector.second.bookCorrHistsY(
"SigmaY",
"residual error",
"#sigma_{r,y}",
"[#mum]",105,20,sigmaXMin*10000.,sigmaXMax*10000.,
"np");
717 i_sector.second.m_correlationHistsY[
"PhiSens"] = i_sector.second.bookCorrHistsY(
"PhiSens",
"track angle on sensor",
"#phi_{module}",
"[ ^{o}]",96,48,-3,93,
"nphtr");
718 i_sector.second.m_correlationHistsY[
"PhiSensX"] = i_sector.second.bookCorrHistsY(
"PhiSensX",
"track angle on sensor",
"#phi_{module,x}",
"[ ^{o}]",186,93,-phiSensXMax,phiSensXMax,
"nphtr");
719 i_sector.second.m_correlationHistsY[
"PhiSensY"] = i_sector.second.bookCorrHistsY(
"PhiSensY",
"track angle on sensor",
"#phi_{module,y}",
"[ ^{o}]",186,93,-93,93,
"nphtr");
721 i_sector.second.YHit = secDir.
make<TH1F>(
"h_YHit",
" hit measurement y_{hit};y_{hit} [cm];# hits",100,-20,20);
722 i_sector.second.YTrk = secDir.
make<TH1F>(
"h_YTrk",
"track prediction y_{trk};y_{trk} [cm];# hits",100,-20,20);
723 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.);
724 i_sector.second.ResY = secDir.
make<TH1F>(
"h_ResY",
"residual r_{y};y_{trk}-y_{hit} [#mum];# hits",100,-resXAbsMax*10000.,resXAbsMax*10000.);
725 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);
726 i_sector.second.ProbY = secDir.
make<TH1F>(
"h_ProbY",
"residual probability;prob(r_{y}^{2}/#sigma_{r,y}^{2},1);# hits",60,probXMin,probXMax);
728 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);
729 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.);
734 i_sector.second.m_correlationHistsX[
"HitsValid"] = i_sector.second.bookCorrHistsX(
"HitsValid",
"# hits",
"[valid]",50,0,50,
"npt");
735 i_sector.second.m_correlationHistsX[
"HitsInvalid"] = i_sector.second.bookCorrHistsX(
"HitsInvalid",
"# hits",
"[invalid]",20,0,20,
"npt");
736 i_sector.second.m_correlationHistsX[
"Hits2D"] = i_sector.second.bookCorrHistsX(
"Hits2D",
"# hits",
"[2D]",20,0,20,
"npt");
737 i_sector.second.m_correlationHistsX[
"LayersMissed"] = i_sector.second.bookCorrHistsX(
"LayersMissed",
"# layers",
"[missed]",10,0,10,
"npt");
738 i_sector.second.m_correlationHistsX[
"HitsPixel"] = i_sector.second.bookCorrHistsX(
"HitsPixel",
"# hits",
"[pixel]",10,0,10,
"npt");
739 i_sector.second.m_correlationHistsX[
"HitsStrip"] = i_sector.second.bookCorrHistsX(
"HitsStrip",
"# hits",
"[strip]",40,0,40,
"npt");
740 i_sector.second.m_correlationHistsX[
"HitsGood"] = i_sector.second.bookCorrHistsX(
"HitsGood",
"# hits",
"[good]",50,0,50,
"npt");
741 i_sector.second.m_correlationHistsX[
"NorChi2"] = i_sector.second.bookCorrHistsX(
"NorChi2",
"#chi^{2}/f",
"",50,0,norChi2Max,
"npr");
742 i_sector.second.m_correlationHistsX[
"Theta"] = i_sector.second.bookCorrHistsX(
"Theta",
"#theta",
"[ ^{o}]",40,-10,190,
"npt");
743 i_sector.second.m_correlationHistsX[
"Phi"] = i_sector.second.bookCorrHistsX(
"Phi",
"#phi",
"[ ^{o}]",76,-190,190,
"npt");
744 i_sector.second.m_correlationHistsX[
"D0Beamspot"] = i_sector.second.bookCorrHistsX(
"D0Beamspot",
"d_{0, BS}",
"[cm]",40,-d0Max,d0Max,
"npt");
745 i_sector.second.m_correlationHistsX[
"Dz"] = i_sector.second.bookCorrHistsX(
"Dz",
"d_{z}",
"[cm]",40,-dzMax,dzMax,
"npt");
746 i_sector.second.m_correlationHistsX[
"Pt"] = i_sector.second.bookCorrHistsX(
"Pt",
"p_{t}",
"[GeV]",50,0,pMax,
"npt");
747 i_sector.second.m_correlationHistsX[
"P"] = i_sector.second.bookCorrHistsX(
"P",
"|p|",
"[GeV]",50,0,pMax,
"npt");
748 i_sector.second.m_correlationHistsX[
"InvP"] = i_sector.second.bookCorrHistsX(
"InvP",
"1/|p|",
"[GeV^{-1}]",25,0,invPMax,
"t");
749 i_sector.second.m_correlationHistsX[
"MeanAngle"] = i_sector.second.bookCorrHistsX(
"MeanAngle",
"<#phi_{module}>",
"[ ^{o}]",25,-5,95,
"npt");
753 i_sector.second.m_correlationHistsY[
"HitsValid"] = i_sector.second.bookCorrHistsY(
"HitsValid",
"# hits",
"[valid]",50,0,50,
"npt");
754 i_sector.second.m_correlationHistsY[
"HitsInvalid"] = i_sector.second.bookCorrHistsY(
"HitsInvalid",
"# hits",
"[invalid]",20,0,20,
"npt");
755 i_sector.second.m_correlationHistsY[
"Hits2D"] = i_sector.second.bookCorrHistsY(
"Hits2D",
"# hits",
"[2D]",20,0,20,
"npt");
756 i_sector.second.m_correlationHistsY[
"LayersMissed"] = i_sector.second.bookCorrHistsY(
"LayersMissed",
"# layers",
"[missed]",10,0,10,
"npt");
757 i_sector.second.m_correlationHistsY[
"HitsPixel"] = i_sector.second.bookCorrHistsY(
"HitsPixel",
"# hits",
"[pixel]",10,0,10,
"npt");
758 i_sector.second.m_correlationHistsY[
"HitsStrip"] = i_sector.second.bookCorrHistsY(
"HitsStrip",
"# hits",
"[strip]",40,0,40,
"npt");
759 i_sector.second.m_correlationHistsY[
"HitsGood"] = i_sector.second.bookCorrHistsY(
"HitsGood",
"# hits",
"[good]",50,0,50,
"npt");
760 i_sector.second.m_correlationHistsY[
"NorChi2"] = i_sector.second.bookCorrHistsY(
"NorChi2",
"#chi^{2}/f",
"",50,0,norChi2Max,
"npr");
761 i_sector.second.m_correlationHistsY[
"Theta"] = i_sector.second.bookCorrHistsY(
"Theta",
"#theta",
"[ ^{o}]",40,-10,190,
"npt");
762 i_sector.second.m_correlationHistsY[
"Phi"] = i_sector.second.bookCorrHistsY(
"Phi",
"#phi",
"[ ^{o}]",76,-190,190,
"npt");
763 i_sector.second.m_correlationHistsY[
"D0Beamspot"] = i_sector.second.bookCorrHistsY(
"D0Beamspot",
"d_{0, BS}",
"[cm]",40,-d0Max,d0Max,
"npt");
764 i_sector.second.m_correlationHistsY[
"Dz"] = i_sector.second.bookCorrHistsY(
"Dz",
"d_{z}",
"[cm]",40,-dzMax,dzMax,
"npt");
765 i_sector.second.m_correlationHistsY[
"Pt"] = i_sector.second.bookCorrHistsY(
"Pt",
"p_{t}",
"[GeV]",50,0,pMax,
"npt");
766 i_sector.second.m_correlationHistsY[
"P"] = i_sector.second.bookCorrHistsY(
"P",
"|p|",
"[GeV]",50,0,pMax,
"npt");
767 i_sector.second.m_correlationHistsY[
"InvP"] = i_sector.second.bookCorrHistsY(
"InvP",
"1/|p|",
"[GeV^{-1}]",25,0,invPMax,
"t");
768 i_sector.second.m_correlationHistsY[
"MeanAngle"] = i_sector.second.bookCorrHistsY(
"MeanAngle",
"<#phi_{module}>",
"[ ^{o}]",25,-5,95,
"npt");
773 for(
auto const & i_errHists : v_errHists){
774 double xMin(0.01*(i_errHists-1)),
xMax(0.01*(i_errHists));
775 std::stringstream sigmaXHit, sigmaXTrk,
sigmaX;
776 sigmaXHit <<
"h_sigmaXHit_" << i_errHists;
777 sigmaXTrk <<
"h_sigmaXTrk_" << i_errHists;
778 sigmaX <<
"h_sigmaX_" << i_errHists;
779 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.));
780 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.));
781 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.));
783 std::stringstream sigmaYHit, sigmaYTrk,
sigmaY;
784 sigmaYHit <<
"h_sigmaYHit_" << i_errHists;
785 sigmaYTrk <<
"h_sigmaYTrk_" << i_errHists;
786 sigmaY <<
"h_sigmaY_" << i_errHists;
787 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.));
788 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.));
789 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.));
801 for(std::vector<unsigned int>::iterator i_errHists = v_errHists.begin(); i_errHists != v_errHists.end(); ++i_errHists){
802 for(std::vector<unsigned int>::iterator i_errHists2 = i_errHists; i_errHists2 != v_errHists.end();){
804 if(*i_errHists==*i_errHists2){
805 edm::LogError(
"BookSectorHists")<<
"Value of vErrHists in config exists twice: "<<*i_errHists<<
"\n... delete one of both";
806 v_errHists.erase(i_errHists2);
815 "TFileService is not registered in cfg file" );
818 std::stringstream sector; sector <<
"Sector_" << i_sector.first;
822 i_sector.second.Name = secDir.
make<TH1F>(
"z_name",i_sector.second.name.c_str(),1,0,1);
825 if(i_sector.second.v_rawId.empty()){
836 std::stringstream interval; interval <<
"Interval_" << i_errBins.first;
838 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);
839 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);
840 if(i_sector.second.isPixel){
841 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);
842 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);
850 unsigned int rawId(0);
851 i_sector.second.RawId = resDir.make<TTree>(
"rawIdTree",
"Tree containing rawIds of all modules in sector");
852 i_sector.second.RawId->Branch(
"RawId", &rawId,
"RawId/i");
853 for(
auto const & i_rawId : i_sector.second.v_rawId){
855 i_sector.second.RawId->Fill();
861 for(
auto & i_binX : v_binX){
864 i_sector.second.EntriesX = resDir.make<TH1F>(
"h_entriesX",
"# hits used;#sigma_{x} [#mum];# hits",v_binX.size()-1,&(v_binX[0]));
865 if(i_sector.second.isPixel){
866 i_sector.second.EntriesY = resDir.make<TH1F>(
"h_entriesY",
"# hits used;#sigma_{y} [#mum];# hits",v_binX.size()-1,&(v_binX[0]));
871 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.);
872 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.);
873 if(i_sector.second.isPixel){
874 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.);
875 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.);
887 int trackSizeBins = zoomHists ? 6 : 201;
888 double trackSizeMax = trackSizeBins -1;
890 double chi2Max = zoomHists ? 100. : 2000.;
891 double norChi2Max = zoomHists ? 5. : 1000.;
892 double d0max = zoomHists ? 0.02 : 40.;
893 double dzmax = zoomHists ? 15. : 100.;
894 double pMax = zoomHists ? 200. : 2000.;
898 tkDetector_.
TrkSize = evtDir.
make<TH1F>(
"h_trackSize",
"# tracks [all];# tracks;# events",trackSizeBins,-1,trackSizeMax);
899 tkDetector_.
TrkSizeGood = evtDir.
make<TH1F>(
"h_trackSizeGood",
"# tracks [good];# tracks;# events",trackSizeBins,-1,trackSizeMax);
902 tkDetector_.
HitsValid = trkDir.make<TH1F>(
"h_hitsValid",
"# hits [valid];# hits [valid];# tracks",51,-1,50);
903 tkDetector_.
HitsInvalid = trkDir.make<TH1F>(
"h_hitsInvalid",
"# hits [invalid];# hits [invalid];# tracks",21,-1,20);
904 tkDetector_.
Hits2D = trkDir.make<TH1F>(
"h_hits2D",
"# hits [2D];# hits [2D];# tracks",21,-1,20);
905 tkDetector_.
LayersMissed = trkDir.make<TH1F>(
"h_layersMissed",
"# layers [missed];# layers [missed];# tracks",11,-1,10);
906 tkDetector_.
HitsPixel = trkDir.make<TH1F>(
"h_hitsPixel",
"# hits [pixel];# hits [pixel];# tracks",11,-1,10);
907 tkDetector_.
HitsStrip = trkDir.make<TH1F>(
"h_hitsStrip",
"# hits [strip];# hits [strip];# tracks",41,-1,40);
908 tkDetector_.
Charge = trkDir.make<TH1F>(
"h_charge",
"charge q;q [e];# tracks",5,-2,3);
910 tkDetector_.
Ndof = trkDir.make<TH1F>(
"h_ndof",
"# degrees of freedom f;f;# tracks",101,-1,100);
911 tkDetector_.
NorChi2 = trkDir.make<TH1F>(
"h_norChi2",
"normalized #chi^{2};#chi^{2}/f;# tracks",200,0,norChi2Max);
912 tkDetector_.
Prob = trkDir.make<TH1F>(
"h_prob",
" #chi^{2} probability;prob(#chi^{2},f);# tracks",50,0,1);
913 tkDetector_.
Eta = trkDir.make<TH1F>(
"h_eta",
"pseudorapidity #eta;#eta;# tracks",100,-5,5);
914 tkDetector_.
EtaErr = trkDir.make<TH1F>(
"h_etaErr",
"Error of #eta;#sigma(#eta);# tracks",100,0,0.001);
915 tkDetector_.
EtaSig = trkDir.make<TH1F>(
"h_etaSig",
"Significance of #eta;#eta/#sigma(#eta);# tracks",100,-20000,20000);
916 tkDetector_.
Theta = trkDir.make<TH1F>(
"h_theta",
"polar angle #theta;#theta [ ^{o}];# tracks",100,-10,190);
917 tkDetector_.
Phi = trkDir.make<TH1F>(
"h_phi",
"azimuth angle #phi;#phi [ ^{o}];# tracks",190,-190,190);
918 tkDetector_.
PhiErr = trkDir.make<TH1F>(
"h_phiErr",
"Error of #phi;#sigma(#phi) [ ^{o}];# tracks",100,0,0.04);
919 tkDetector_.
PhiSig = trkDir.make<TH1F>(
"h_phiSig",
"Significance of #phi;#phi/#sigma(#phi) [ ^{o}];# tracks",100,-50000,50000);
920 tkDetector_.
D0Beamspot = trkDir.make<TH1F>(
"h_d0Beamspot",
"Closest approach d_{0} wrt. beamspot;d_{0, BS} [cm];# tracks",200,-d0max,d0max);
921 tkDetector_.
D0BeamspotErr = trkDir.make<TH1F>(
"h_d0BeamspotErr",
"Error of d_{0, BS};#sigma(d_{0, BS}) [cm];# tracks",200,0,0.01);
922 tkDetector_.
D0BeamspotSig = trkDir.make<TH1F>(
"h_d0BeamspotSig",
"Significance of d_{0, BS};d_{0, BS}/#sigma(d_{0, BS});# tracks",100,-5,5);
923 tkDetector_.
Dz = trkDir.make<TH1F>(
"h_dz",
"Closest approach d_{z};d_{z} [cm];# tracks",200,-dzmax,dzmax);
924 tkDetector_.
DzErr = trkDir.make<TH1F>(
"h_dzErr",
"Error of d_{z};#sigma(d_{z}) [cm];# tracks",200,0,0.01);
925 tkDetector_.
DzSig = trkDir.make<TH1F>(
"h_dzSig",
"Significance of d_{z};d_{z}/#sigma(d_{z});# tracks",100,-10000,10000);
926 tkDetector_.
Pt = trkDir.make<TH1F>(
"h_pt",
"transverse momentum p_{t};p_{t} [GeV];# tracks",100,0,
pMax);
927 tkDetector_.
PtErr = trkDir.make<TH1F>(
"h_ptErr",
"Error of p_{t};#sigma(p_{t}) [GeV];# tracks",100,0,1.6);
928 tkDetector_.
PtSig = trkDir.make<TH1F>(
"h_ptSig",
"Significance of p_{t};p_{t}/#sigma(p_{t});# tracks",100,0,200);
929 tkDetector_.
P = trkDir.make<TH1F>(
"h_p",
"momentum magnitude |p|;|p| [GeV];# tracks",100,0,
pMax);
930 tkDetector_.
MeanAngle = trkDir.make<TH1F>(
"h_meanAngle",
"mean angle on module <#phi_{module}>;<#phi_{module}> [ ^{o}];# tracks",100,-5,95);
931 tkDetector_.
HitsGood = trkDir.make<TH1F>(
"h_hitsGood",
"# hits [good];# hits [good];# tracks",51,-1,50);
933 tkDetector_.
MeanAngleVsHits = trkDir.make<TH2F>(
"h2_meanAngleVsHits",
"<#phi_{module}> vs. # hits;# hits;<#phi_{module}> [ ^{o}]",51,-1,50,50,-5,95);
934 tkDetector_.
HitsGoodVsHitsValid = trkDir.make<TH2F>(
"h2_hitsGoodVsHitsValid",
"# hits [good] vs. # hits [valid];# hits [valid];# hits [good]",51,-1,50,51,-1,50);
935 tkDetector_.
HitsPixelVsEta = trkDir.make<TH2F>(
"h2_hitsPixelVsEta",
"# hits [pixel] vs. #eta;#eta;# hits [pixel]",60,-3,3,11,-1,10);
936 tkDetector_.
HitsPixelVsTheta = trkDir.make<TH2F>(
"h2_hitsPixelVsTheta",
"# hits [pixel] vs. #theta;#theta;# hits [pixel]",100,-10,190,11,-1,10);
937 tkDetector_.
HitsStripVsEta = trkDir.make<TH2F>(
"h2_hitsStripVsEta",
"# hits [strip] vs. #eta;#eta;# hits [strip]",60,-3,3,31,-1,40);
938 tkDetector_.
HitsStripVsTheta = trkDir.make<TH2F>(
"h2_hitsStripVsTheta",
"# hits [strip] vs. #theta;#theta;# hits [strip]",100,-10,190,31,-1,40);
939 tkDetector_.
PtVsEta = trkDir.make<TH2F>(
"h2_ptVsEta",
"p_{t} vs. #eta;#eta;p_{t} [GeV]",60,-3,3,100,0,
pMax);
940 tkDetector_.
PtVsTheta = trkDir.make<TH2F>(
"h2_ptVsTheta",
"p_{t} vs. #theta;#theta;p_{t} [GeV]",100,-10,190,100,0,
pMax);
942 tkDetector_.
PMeanAngleVsHits = trkDir.make<TProfile>(
"p_meanAngleVsHits",
"<#phi_{module}> vs. # hits;# hits;<#phi_{module}> [ ^{o}]",51,-1,50);
943 tkDetector_.
PHitsGoodVsHitsValid = trkDir.make<TProfile>(
"p_hitsGoodVsHitsValid",
"# hits [good] vs. # hits [valid];# hits [valid];# hits [good]",51,-1,50);
944 tkDetector_.
PHitsPixelVsEta = trkDir.make<TProfile>(
"p_hitsPixelVsEta",
"# hits [pixel] vs. #eta;#eta;# hits [pixel]",60,-3,3);
945 tkDetector_.
PHitsPixelVsTheta = trkDir.make<TProfile>(
"p_hitsPixelVsTheta",
"# hits [pixel] vs. #theta;#theta;# hits [pixel]",100,-10,190);
946 tkDetector_.
PHitsStripVsEta = trkDir.make<TProfile>(
"p_hitsStripVsEta",
"# hits [strip] vs. #eta;#eta;# hits [strip]",60,-3,3);
947 tkDetector_.
PHitsStripVsTheta = trkDir.make<TProfile>(
"p_hitsStripVsTheta",
"# hits [strip] vs. #theta;#theta;# hits [strip]",100,-10,190);
948 tkDetector_.
PPtVsEta = trkDir.make<TProfile>(
"p_ptVsEta",
"p_{t} vs. #eta;#eta;p_{t} [GeV]",60,-3,3);
949 tkDetector_.
PPtVsTheta = trkDir.make<TProfile>(
"p_ptVsTheta",
"p_{t} vs. #theta;#theta;p_{t} [GeV]",100,-10,190);
969 trkParams.hitsValid = track.
found();
970 trkParams.hitsInvalid = trkParams.hitsSize-trkParams.hitsValid;
971 trkParams.layersMissed = track.
lost();
972 trkParams.hitsPixel = hitPattern.numberOfValidPixelHits();
973 trkParams.hitsStrip = hitPattern.numberOfValidStripHits();
974 trkParams.charge = track.
charge();
975 trkParams.chi2 = track.
chi2();
976 trkParams.ndof = track.
ndof();
977 trkParams.norChi2 = trkParams.chi2/trkParams.ndof;
978 trkParams.prob = TMath::Prob(trkParams.chi2,trkParams.ndof);
979 trkParams.eta = track.
eta();
980 trkParams.etaErr = track.
etaError();
981 trkParams.theta = track.
theta();
982 trkParams.phi = track.
phi();
983 trkParams.phiErr = track.
phiError();
984 trkParams.d0 = track.
d0();
985 trkParams.d0Beamspot = -1.*track.
dxy(beamPoint);
986 trkParams.d0BeamspotErr = d0BeamspotErr;
987 trkParams.dz = track.
dz();
988 trkParams.dzErr = track.
dzError();
989 trkParams.dzBeamspot = track.
dz(beamPoint);
990 trkParams.p = track.
p();
991 trkParams.pt = track.
pt();
992 trkParams.ptErr = track.
ptError();
994 const std::vector<TrajectoryMeasurement>& v_meas = traj.
measurements();
996 int count2D(0);
float meanPhiSensToNorm(0.
F);
997 std::vector<TrajectoryMeasurement>::const_iterator i_meas;
998 for(
auto const & i_meas : v_meas){
1002 if(this->
isHit2D(recHit)) ++count2D;
1006 meanPhiSensToNorm += atan(fabs(
sqrt(mom.x()*mom.x()+mom.y()*mom.y())/mom.z()));
1008 meanPhiSensToNorm *= (1./
static_cast<float>(trkParams.hitsSize));
1010 trkParams.hits2D = count2D;
1011 trkParams.meanPhiSensToNorm = meanPhiSensToNorm;
1015 if(trkParams.hitsStrip<11 || trkParams.hits2D<2 || trkParams.hitsPixel<2 ||
1016 trkParams.hitsStrip>35 || trkParams.hitsPixel>7 ||
1017 trkParams.norChi2>5. ||
1018 trkParams.pt<25. || trkParams.pt>150. ||
1043 const uint32_t rawId(detId.rawId());
1046 for(
auto const & i_rawId : i_sector.second.v_rawId){
1047 if(rawId==i_rawId){hitParams.
v_sector.push_back(i_sector.first);
break;}
1052 int xMomentum(0), yMomentum(0), zMomentum(0);
1053 xMomentum = mom.x()>0. ? 1 : -1;
1054 yMomentum = mom.y()>0. ? 1 : -1;
1055 zMomentum = mom.z()>0. ? 1 : -1;
1056 float phiSensX = std::atan(std::fabs(mom.x()/mom.z()))*
static_cast<float>(
m_tkTreeVar_[rawId].vDirection);
1057 float phiSensY = std::atan(std::fabs(mom.y()/mom.z()))*
static_cast<float>(
m_tkTreeVar_[rawId].vDirection);
1058 hitParams.
phiSens = std::atan(std::fabs(
std::sqrt(mom.x()*mom.x()+mom.y()*mom.y())/mom.z()));
1059 hitParams.
phiSensX = (xMomentum==zMomentum ? phiSensX : -phiSensX );
1060 hitParams.
phiSensY = (yMomentum==zMomentum ? phiSensY : -phiSensY );
1086 edm::LogWarning(
"FillHitVariables")<<
"cant identify wether hit is from pixel or strip";
1097 if(!dynamic_cast<const PixelTopology*>(&detUnit.
type().
topology())){
1104 errorWithoutAPE =
LocalError(errHitApe.
xx() -lape.
xx(), errHitApe.
xy()- lape.
xy(), errHitApe.
yy()-lape.
yy());
1108 if(!dynamic_cast<const StripTopology*>(&detUnit.
type().
topology())){
1115 { errorWithoutAPE =
LocalError(errHitApe.
xx() -lape.
xx(), errHitApe.
xy()- lape.
xy(), errHitApe.
yy()-lape.
yy());
1120 const LocalError& errHitWoApe = errorWithoutAPE;
1125 edm::LogInfo(
"CalculateAPE")<<
"errHitWoApe "<<errHitWoApe<<
"errHitApe "<<errHitApe;
1152 const float xHit = positionAndError2Hit.second.posX;
1153 const float xTrk = positionAndError2Trk.second.posX;
1154 const float yHit = positionAndError2Hit.second.posY;
1155 const float yTrk = positionAndError2Trk.second.posY;
1157 const float errXHit2(positionAndError2Hit.second.errX2);
1158 const float errXHitWoApe2(positionAndError2HitWoApe.second.errX2);
1159 const float errXTrk2(positionAndError2Trk.second.errX2);
1160 const float errYHit2(positionAndError2Hit.second.errY2);
1161 const float errYHitWoApe2(positionAndError2HitWoApe.second.errY2);
1162 const float errYTrk2(positionAndError2Trk.second.errY2);
1164 const float errXHit =
std::sqrt(positionAndError2Hit.second.errX2);
1165 const float errXHitWoApe =
std::sqrt(positionAndError2HitWoApe.second.errX2);
1166 const float errXTrk =
std::sqrt(positionAndError2Trk.second.errX2);
1167 const float errYHit =
std::sqrt(positionAndError2Hit.second.errY2);
1168 const float errYHitWoApe =
std::sqrt(positionAndError2HitWoApe.second.errY2);
1169 const float errYTrk =
std::sqrt(positionAndError2Trk.second.errY2);
1171 const float resX = xTrk - xHit;
1172 const float resY = yTrk - yHit;
1175 const float errXWoApe2 = errXHitWoApe2 + errXTrk2;
1176 const float errXWoApe =
std::sqrt(errXWoApe2);
1178 const float errYWoApe2 = errYHitWoApe2 + errYTrk2;
1179 const float errYWoApe =
std::sqrt(errYWoApe2);
1181 const float norResX = resX/
errX;
1182 const float norResY = resY/
errY;
1187 float resXprime(999.
F), resYprime(999.
F), norResXprime(999.
F), norResYprime(999.
F);
1190 norResXprime = norResX;
1193 norResXprime = -norResX;
1195 edm::LogError(
"FillHitVariables")<<
"Incorrect value of uDirection, which gives global module orientation";
1201 norResYprime = norResY;
1204 norResYprime = -norResY;
1206 edm::LogError(
"FillHitVariables")<<
"Incorrect value of vDirection, which gives global module orientation";
1211 hitParams.
xHit = xHit;
1212 hitParams.
xTrk = xTrk;
1222 hitParams.
resX = resXprime;
1223 hitParams.
norResX = norResXprime;
1225 const float norResX2(norResXprime*norResXprime);
1226 hitParams.
probX = TMath::Prob(norResX2,1);
1229 hitParams.
yHit = yHit;
1230 hitParams.
yTrk = yTrk;
1240 hitParams.
resY = resYprime;
1241 hitParams.
norResY = norResYprime;
1243 const float norResY2(norResYprime*norResYprime);
1244 hitParams.
probY = TMath::Prob(norResY2,1);
1272 if(!(dynamic_cast<const SiStripRecHit2D*>(&recHit) || dynamic_cast<const SiStripRecHit1D*>(&recHit))){
1273 edm::LogError(
"FillHitVariables")<<
"RecHit in Strip is 'Matched' or 'Projected', but here all should be monohits per module";
1278 if(dynamic_cast<const SiStripRecHit1D*>(&recHit)){
1280 clusterPtr = &(*stripHit.
cluster());
1281 }
else if(dynamic_cast<const SiStripRecHit2D*>(&recHit)){
1282 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";
1284 clusterPtr = &(*stripHit.
cluster());
1288 clusterPtr = &(*stripHit.
cluster());
1291 edm::LogError(
"FillHitVariables")<<
"Pointer to cluster not valid!!! This should never happen...";
1298 const std::vector<uint8_t>::const_iterator stripChargeL(clusterInfo.
stripCharges().begin());
1299 const std::vector<uint8_t>::const_iterator stripChargeR(--(clusterInfo.
stripCharges().end()));
1300 const std::pair<uint16_t, uint16_t> stripChargeLR = std::make_pair(*stripChargeL,*stripChargeR);
1310 hitParams.
chargeOnEdges =
static_cast<float>(stripChargeLR.first + stripChargeLR.second)/static_cast<float>(hitParams.
chargeStrip);
1311 hitParams.
chargeAsymmetry =
static_cast<float>(stripChargeLR.first - stripChargeLR.second)/static_cast<float>(stripChargeLR.first + stripChargeLR.second);
1323 if(!dynamic_cast<const StripTopology*>(&detUnit.
type().
topology())){
1342 float dirX = -tanLorentzAnglePerTesla * bField.y();
1343 float dirY = tanLorentzAnglePerTesla * bField.x();
1358 if(momentumDir.z() > 0.)scaledMomentumDir *= std::fabs(thickness/momentumDir.z());
1359 else if(momentumDir.z() < 0.)scaledMomentumDir *= -std::fabs(thickness/momentumDir.z());
1360 else scaledMomentumDir *= maxLength/momentumDir.mag();
1363 if(projEdge1 < 0.)projEdge1 = 0.;
1366 if(projEdge2 < 0.)projEdge1 = 0.;
1370 float coveredStrips = std::fabs(projEdge2 - projEdge1);
1377 edm::LogError(
"FillHitVariables")<<
"Incorrect subdetector ID, hit not associated to tracker";
1403 const uint32_t& rawId(detId.rawId());
1404 const unsigned int& subdetId(
m_tkTreeVar_[rawId].subdetId);
1406 if(localError.
xx()<0. || localError.
yy()<0.){
1423 if(!hit.
detUnit())
return vPE2;
1426 if(!dynamic_cast<const RadialStripTopology*>(&detUnit.
type().
topology()))
return vPE2;
1430 if(measError.
uu()<0. || measError.
vv()<0.){
1445 edm::LogError(
"FillHitVariables")<<
"Incorrect subdetector ID, hit not associated to tracker";
1455 const float x(lP.
x());
1456 const float y(lP.
y());
1457 const float errX2(lE.
xx());
1458 const float errY2(lE.
yy());
1476 float errX2(-999.
F);
1477 float errY2(-999.
F);
1481 const float l_0 = r_0 - topol.
detHeight()/2;
1483 y = measPos.
y()*stripLength - 0.5*stripLength + l_0*(1./cosPhi - 1.);
1486 const float errPhi2(measErr.
uu()*angularWidth2);
1488 errX2 = errPhi2*r_0*r_0;
1491 const float helpSummand = l_0*l_0*(sinPhi2/cosPhi4*errPhi2);
1492 errY2 = measErr.
vv()*stripLength*stripLength + helpSummand;
1553 bool emptyMap(
true);
1555 if(!i_hitSelection.second.empty()){
1556 int entry(1);
double intervalBegin(999.);
1557 for(std::vector<double>::iterator i_hitInterval = i_hitSelection.second.begin(); i_hitInterval != i_hitSelection.second.end(); ++
entry){
1559 intervalBegin = *i_hitInterval; ++i_hitInterval;
1561 if(intervalBegin > *i_hitInterval){
1562 edm::LogError(
"HitSelector")<<
"INVALID Interval selected for "<<i_hitSelection.first<<
":\t"<<intervalBegin<<
" > "<<(*i_hitInterval)
1563 <<
"\n ... delete Selection for "<<i_hitSelection.first;
1564 i_hitSelection.second.clear(); i_hitInterval = i_hitSelection.second.begin();
1566 edm::LogInfo(
"HitSelector")<<
"Interval selected for "<<i_hitSelection.first<<
":\t"<<intervalBegin<<
", "<<(*i_hitInterval);
1571 if(!i_hitSelection.second.empty())emptyMap =
false;
1576 bool emptyMapUInt(
true);
1578 if(!i_hitSelection.second.empty()){
1579 int entry(1);
unsigned int intervalBegin(999);
1580 for(std::vector<unsigned int>::iterator i_hitInterval = i_hitSelection.second.begin(); i_hitInterval != i_hitSelection.second.end(); ++
entry){
1582 intervalBegin = *i_hitInterval;
1585 if(intervalBegin > *i_hitInterval){
1586 edm::LogError(
"HitSelector")<<
"INVALID Interval selected for "<<i_hitSelection.first<<
":\t"<<intervalBegin<<
" > "<<(*i_hitInterval)
1587 <<
"\n ... delete Selection for "<<i_hitSelection.first;
1588 i_hitSelection.second.clear(); i_hitInterval = i_hitSelection.second.begin();
1590 edm::LogInfo(
"HitSelector")<<
"Interval selected for "<<i_hitSelection.first<<
":\t"<<intervalBegin<<
", "<<(*i_hitInterval);
1595 if(!i_hitSelection.second.empty())emptyMapUInt =
false;
1599 if(emptyMap && emptyMapUInt){
1600 m_hitSelection_.clear();
1601 m_hitSelectionUInt_.clear();
1612 std::vector<double> v_cutVariable(parSet.
getParameter<std::vector<double> >(cutVariable));
1613 if(v_cutVariable.size()%2==1){
1614 edm::LogError(
"HitSelector")<<
"Invalid Hit Selection for "<<cutVariable<<
": need even number of arguments (intervals)" 1615 <<
"\n ... delete Selection for "<<cutVariable;
1616 v_cutVariable.clear();
1628 std::vector<unsigned int> v_cutVariable(parSet.
getParameter<std::vector<unsigned int> >(cutVariable));
1629 if(v_cutVariable.size()%2==1){
1630 edm::LogError(
"HitSelector")<<
"Invalid Hit Selection for "<<cutVariable<<
": need even number of arguments (intervals)" 1631 <<
"\n ... delete Selection for "<<cutVariable;
1632 v_cutVariable.clear();
1649 bool isGoodHit(
true);
1650 bool isGoodHitX(
true);
1651 bool isGoodHitY(
true);
1655 const std::vector<double>& v_hitSelection(i_hitSelection.second);
1656 if(v_hitSelection.empty())
continue;
1659 if (hitSelection ==
"phiSens") {
if(!this->
inDoubleInterval(v_hitSelection, hitParams.
phiSens))isGoodHit =
false;}
1660 else if(hitSelection ==
"phiSensX") {
if(!this->
inDoubleInterval(v_hitSelection, hitParams.
phiSensX))isGoodHit =
false;}
1661 else if(hitSelection ==
"phiSensY") {
if(!this->
inDoubleInterval(v_hitSelection, hitParams.
phiSensY))isGoodHit =
false;}
1663 else if(hitSelection ==
"resX") {
if(!this->
inDoubleInterval(v_hitSelection, hitParams.
resX))isGoodHitX =
false;}
1664 else if(hitSelection ==
"norResX") {
if(!this->
inDoubleInterval(v_hitSelection, hitParams.
norResX))isGoodHitX =
false;}
1665 else if(hitSelection ==
"probX") {
if(!this->
inDoubleInterval(v_hitSelection, hitParams.
probX))isGoodHitX =
false;}
1666 else if(hitSelection ==
"errXHit") {
if(!this->
inDoubleInterval(v_hitSelection, hitParams.
errXHit))isGoodHitX =
false;}
1667 else if(hitSelection ==
"errXTrk") {
if(!this->
inDoubleInterval(v_hitSelection, hitParams.
errXTrk))isGoodHitX =
false;}
1668 else if(hitSelection ==
"errX") {
if(!this->
inDoubleInterval(v_hitSelection, hitParams.
errX))isGoodHitX =
false;}
1669 else if(hitSelection ==
"errX2") {
if(!this->
inDoubleInterval(v_hitSelection, hitParams.
errX2))isGoodHitX =
false;}
1684 else if(hitSelection ==
"resY") {
if(!this->
inDoubleInterval(v_hitSelection, hitParams.
resY))isGoodHitY =
false;}
1685 else if(hitSelection ==
"norResY") {
if(!this->
inDoubleInterval(v_hitSelection, hitParams.
norResY))isGoodHitY =
false;}
1686 else if(hitSelection ==
"probY") {
if(!this->
inDoubleInterval(v_hitSelection, hitParams.
probY))isGoodHitY =
false;}
1687 else if(hitSelection ==
"errYHit") {
if(!this->
inDoubleInterval(v_hitSelection, hitParams.
errYHit))isGoodHitY =
false;}
1688 else if(hitSelection ==
"errYTrk") {
if(!this->
inDoubleInterval(v_hitSelection, hitParams.
errYTrk))isGoodHitY =
false;}
1689 else if(hitSelection ==
"errY") {
if(!this->
inDoubleInterval(v_hitSelection, hitParams.
errY))isGoodHitY =
false;}
1690 else if(hitSelection ==
"errY2") {
if(!this->
inDoubleInterval(v_hitSelection, hitParams.
errY2))isGoodHitY =
false;}
1693 else if(hitSelection ==
"widthDiff") {
if(!this->
inDoubleInterval(v_hitSelection, hitParams.
projWidth-static_cast<float>(hitParams.
widthX)))isGoodHit =
false;}
1695 else if(hitSelection ==
"maxCharge") {
if(!this->
inDoubleInterval(v_hitSelection, hitParams.
maxCharge))isGoodHit =
false;}
1700 else if(hitSelection ==
"sOverN") {
if(!this->
inDoubleInterval(v_hitSelection, hitParams.
sOverN))isGoodHit =
false;}
1706 const std::vector<unsigned int>& v_hitSelection(i_hitSelection.second);
1707 if(v_hitSelection.empty())
continue;
1713 if(hitSelection ==
"isOnEdge") {
if(!this->
inUintInterval(v_hitSelection, hitParams.
isOnEdge))isGoodHit =
false;}
1714 else if(hitSelection ==
"hasBadPixels") {
if(!this->
inUintInterval(v_hitSelection, hitParams.
hasBadPixels))isGoodHit =
false;}
1715 else if(hitSelection ==
"spansTwoRoc") {
if(!this->
inUintInterval(v_hitSelection, hitParams.
spansTwoRoc))isGoodHit =
false;}
1716 else if(hitSelection ==
"qBin") {
if(!this->
inUintInterval(v_hitSelection, hitParams.
qBin))isGoodHit =
false;}
1718 else if(hitSelection ==
"widthX") {
if(!this->
inUintInterval(v_hitSelection, hitParams.
widthX))isGoodHitX =
false;}
1719 else if(hitSelection ==
"widthY") {
if(!this->
inUintInterval(v_hitSelection, hitParams.
widthY))isGoodHitY =
false;}
1721 if (hitSelection ==
"width") {
if(!this->
inUintInterval(v_hitSelection, hitParams.
widthX))isGoodHit =
false;}
1723 else if(hitSelection ==
"maxIndex") {
if(!this->
inUintInterval(v_hitSelection, hitParams.
maxIndex))isGoodHit =
false;}
1742 int entry(0);
double intervalBegin(999.);
1743 bool isSelected(
false);
1744 for(
auto const & i_hitInterval : v_hitSelection){
1746 if(entry%2==1)intervalBegin = i_hitInterval;
1747 else if(variable>=intervalBegin && variable<i_hitInterval)isSelected =
true;
1755 int entry(0);
unsigned int intervalBegin(999);
1756 bool isSelected(
false);
1757 for(
auto i_hitInterval : v_hitSelection ){
1759 if(entry%2==1)intervalBegin = i_hitInterval;
1760 else if(variable>=intervalBegin && variable<=i_hitInterval){
1761 if(variable2==999 || (variable2>=intervalBegin && variable2<=i_hitInterval))isSelected =
true;
1774 unsigned int goodHitsPerTrack(trackStruct.
v_hitParams.size());
1838 bool moduleInSector(
false);
1839 for(
auto const & i_hitSector : hit.
v_sector){
1840 if(i_sector.first == i_hitSector){
1841 moduleInSector =
true;
1845 if(!moduleInSector)
continue;
1849 std::map<std::string,TrackerSectorStruct::CorrelationHists>& m_corrHists(sector.
m_correlationHistsX);
1856 m_corrHists[
"HitsGood"].fillCorrHistsX(hit,goodHitsPerTrack);
1858 m_corrHists[
"Hits2D"].fillCorrHistsX(hit,trackStruct.
trkParams.
hits2D);
1864 m_corrHists[
"Phi"].fillCorrHistsX(hit,trackStruct.
trkParams.
phi*180./
M_PI);
1866 m_corrHists[
"Dz"].fillCorrHistsX(hit,trackStruct.
trkParams.
dz);
1867 m_corrHists[
"Pt"].fillCorrHistsX(hit,trackStruct.
trkParams.
pt);
1868 m_corrHists[
"P"].fillCorrHistsX(hit,trackStruct.
trkParams.
p);
1869 m_corrHists[
"InvP"].fillCorrHistsX(hit,1./trackStruct.
trkParams.
p);
1874 std::map<std::string,TrackerSectorStruct::CorrelationHists>& m_corrHists(sector.
m_correlationHistsY);
1881 m_corrHists[
"HitsGood"].fillCorrHistsY(hit,goodHitsPerTrack);
1883 m_corrHists[
"Hits2D"].fillCorrHistsY(hit,trackStruct.
trkParams.
hits2D);
1889 m_corrHists[
"Phi"].fillCorrHistsY(hit,trackStruct.
trkParams.
phi*180./
M_PI);
1891 m_corrHists[
"Dz"].fillCorrHistsY(hit,trackStruct.
trkParams.
dz);
1892 m_corrHists[
"Pt"].fillCorrHistsY(hit,trackStruct.
trkParams.
pt);
1893 m_corrHists[
"P"].fillCorrHistsY(hit,trackStruct.
trkParams.
p);
1894 m_corrHists[
"InvP"].fillCorrHistsY(hit,1./trackStruct.
trkParams.
p);
1899 for(
auto & i_sigmaX : sector.
m_sigmaX){
1900 for(
auto & iHist : i_sigmaX.second){
1901 if (i_sigmaX.first==
"sigmaXHit") iHist->Fill(hit.
errXHit*10000.);
1902 else if(i_sigmaX.first==
"sigmaXTrk") iHist->Fill(hit.
errXTrk*10000.);
1903 else if(i_sigmaX.first==
"sigmaX") iHist->Fill(hit.
errX*10000.);
1906 for(
auto & i_sigmaY : sector.
m_sigmaY){
1907 for(
auto & iHist : i_sigmaY.second){
1908 if (i_sigmaY.first==
"sigmaYHit") iHist->Fill(hit.
errYHit*10000.);
1909 else if(i_sigmaY.first==
"sigmaYTrk") iHist->Fill(hit.
errYTrk*10000.);
1910 else if(i_sigmaY.first==
"sigmaY") iHist->Fill(hit.
errY*10000.);
1921 std::map<std::string, TrackerSectorStruct::CorrelationHists>& m_corrHists(sector.
m_correlationHistsX);
1924 m_corrHists[
"WidthX"].fillCorrHistsX(hit, hit.
widthX);
1925 m_corrHists[
"BaryStripX"].fillCorrHistsX(hit, hit.
baryStripX);
1928 m_corrHists[
"ChargePixel"].fillCorrHistsX(hit, hit.
chargePixel);
1933 m_corrHists[
"IsOnEdge"].fillCorrHistsX(hit, hit.
isOnEdge);
1934 m_corrHists[
"HasBadPixels"].fillCorrHistsX(hit, hit.
hasBadPixels);
1935 m_corrHists[
"SpansTwoRoc"].fillCorrHistsX(hit, hit.
spansTwoRoc);
1936 m_corrHists[
"QBin"].fillCorrHistsX(hit, hit.
qBin);
1939 m_corrHists[
"ChargeStrip"].fillCorrHistsX(hit, hit.
chargeStrip);
1940 m_corrHists[
"MaxStrip"].fillCorrHistsX(hit, hit.
maxStrip);
1941 m_corrHists[
"MaxCharge"].fillCorrHistsX(hit, hit.
maxCharge);
1942 m_corrHists[
"MaxIndex"].fillCorrHistsX(hit, hit.
maxIndex);
1943 m_corrHists[
"ChargeOnEdges"].fillCorrHistsX(hit, hit.
chargeOnEdges);
1944 m_corrHists[
"ChargeAsymmetry"].fillCorrHistsX(hit, hit.
chargeAsymmetry);
1945 m_corrHists[
"ChargeLRplus"].fillCorrHistsX(hit, hit.
chargeLRplus);
1946 m_corrHists[
"ChargeLRminus"].fillCorrHistsX(hit, hit.
chargeLRminus);
1947 m_corrHists[
"SOverN"].fillCorrHistsX(hit, hit.
sOverN);
1948 m_corrHists[
"WidthProj"].fillCorrHistsX(hit, hit.
projWidth);
1949 m_corrHists[
"WidthDiff"].fillCorrHistsX(hit, hit.
projWidth-static_cast<float>( hit.
widthX));
1965 m_corrHists[
"SigmaXHit"].fillCorrHistsX(hit, hit.
errXHit*10000.);
1966 m_corrHists[
"SigmaXTrk"].fillCorrHistsX(hit, hit.
errXTrk*10000.);
1967 m_corrHists[
"SigmaX"].fillCorrHistsX(hit, hit.
errX*10000.);
1969 m_corrHists[
"PhiSens"].fillCorrHistsX(hit, hit.
phiSens*180./
M_PI);
1970 m_corrHists[
"PhiSensX"].fillCorrHistsX(hit, hit.
phiSensX*180./
M_PI);
1971 m_corrHists[
"PhiSensY"].fillCorrHistsX(hit, hit.
phiSensY*180./
M_PI);
1977 sector.
ResX ->Fill(hit.
resX*10000.);
1990 std::map<std::string, TrackerSectorStruct::CorrelationHists>& m_corrHists(sector.
m_correlationHistsY);
1995 m_corrHists[
"WidthY"].fillCorrHistsY(hit,hit.
widthY);
1996 m_corrHists[
"BaryStripY"].fillCorrHistsY(hit,hit.
baryStripY);
1998 m_corrHists[
"ChargePixel"].fillCorrHistsY(hit, hit.
chargePixel);
2003 m_corrHists[
"IsOnEdge"].fillCorrHistsY(hit, hit.
isOnEdge);
2004 m_corrHists[
"HasBadPixels"].fillCorrHistsY(hit, hit.
hasBadPixels);
2005 m_corrHists[
"SpansTwoRoc"].fillCorrHistsY(hit, hit.
spansTwoRoc);
2006 m_corrHists[
"QBin"].fillCorrHistsY(hit, hit.
qBin);
2009 m_corrHists[
"SigmaYHit"].fillCorrHistsY(hit, hit.
errYHit*10000.);
2010 m_corrHists[
"SigmaYTrk"].fillCorrHistsY(hit, hit.
errYTrk*10000.);
2011 m_corrHists[
"SigmaY"].fillCorrHistsY(hit, hit.
errY*10000.);
2013 m_corrHists[
"PhiSens"].fillCorrHistsY(hit, hit.
phiSens*180./
M_PI);
2014 m_corrHists[
"PhiSensX"].fillCorrHistsY(hit, hit.
phiSensX*180./
M_PI);
2015 m_corrHists[
"PhiSensY"].fillCorrHistsY(hit, hit.
phiSensY*180./
M_PI);
2021 sector.
ResY ->Fill(hit.
resY*10000.);
2034 unsigned int goodHitsPerTrack(trackStruct.
v_hitParams.size());
2041 for(
auto const & i_hit : trackStruct.
v_hitParams){
2047 bool moduleInSector(
false);
2048 for(
auto const & i_hitSector : i_hit.v_sector){
2049 if(i_sector.first == i_hitSector){
2050 moduleInSector =
true;
2054 if(!moduleInSector)
continue;
2058 if(i_hit.goodXMeasurement){
2063 if(i_hit.errXWoApe < i_errBins.second.first || i_hit.errXWoApe >= i_errBins.second.second){
2066 i_sector.second.m_binnedHists[i_errBins.first][
"sigmaX"] ->Fill(i_hit.errXWoApe);
2067 i_sector.second.m_binnedHists[i_errBins.first][
"norResX"]->Fill(i_hit.norResX);
2070 i_sector.second.ResX->Fill(i_hit.resX*10000.);
2071 i_sector.second.NorResX->Fill(i_hit.norResX);
2074 if(i_hit.goodYMeasurement){
2079 if(i_hit.errYWoApe < i_errBins.second.first || i_hit.errYWoApe >= i_errBins.second.second){
2082 i_sector.second.m_binnedHists[i_errBins.first][
"sigmaY"] ->Fill(i_hit.errYWoApe);
2083 i_sector.second.m_binnedHists[i_errBins.first][
"norResY"]->Fill(i_hit.norResY);
2086 i_sector.second.ResY->Fill(i_hit.resY*10000.);
2087 i_sector.second.NorResY->Fill(i_hit.norResY);
2106 for(
auto const & i_errBins : i_sector.second.m_binnedHists){
2107 std::map<std::string,TH1*> m_Hists = i_errBins.second;
2110 double integralX = m_Hists[
"norResX"]->Integral();
2111 i_sector.second.EntriesX->SetBinContent(i_errBins.first, integralX);
2113 if(i_sector.second.isPixel){
2114 double integralY = m_Hists[
"norResY"]->Integral();
2115 i_sector.second.EntriesY->SetBinContent(i_errBins.first, integralY);
2142 if (stripId.
stereo())
return true;
2143 else if (dynamic_cast<const SiStripRecHit1D*>(&hit) ||
dynamic_cast<const SiStripRecHit2D*
>(&hit))
return false;
2145 else if (dynamic_cast<const SiStripMatchedRecHit2D*>(&hit))
return true;
2146 else if (dynamic_cast<const ProjectedSiStripRecHit2D*>(&hit)) {
2150 edm::LogError(
"UnkownType") <<
"@SUB=AlignmentTrackSelector::isHit2D" 2151 <<
"Tracker hit not in pixel, neither SiStripRecHit[12]D nor " 2152 <<
"SiStripMatchedRecHit2D nor ProjectedSiStripRecHit2D.";
2157 edm::LogWarning(
"DetectorMismatch") <<
"@SUB=AlignmentTrackSelector::isHit2D" 2158 <<
"Hit not in tracker with 'official' dimension >=2.";
2177 if (beamSpotHandle.
isValid()){
2178 beamSpot = *beamSpotHandle;
2180 edm::LogError(
"ApeEstimator")<<
"No beam spot available from EventSetup" 2181 <<
"\n...skip event";
2194 typedef std::vector<ConstTrajTrackPair> ConstTrajTrackPairCollection;
2195 ConstTrajTrackPairCollection trajTracks;
2198 for(i_trajTrack = m_TrajTracksMap->
begin();i_trajTrack != m_TrajTracksMap->
end();++i_trajTrack){
2199 trajTracks.push_back(
ConstTrajTrackPair(&(*(*i_trajTrack).key), &(*(*i_trajTrack).val)));
2204 unsigned int trackSizeGood(0);
2205 ConstTrajTrackPairCollection::const_iterator iTrack;
2206 for(iTrack = trajTracks.begin(); iTrack != trajTracks.end();++iTrack){
2216 const std::vector<TrajectoryMeasurement> v_meas = (*traj).measurements();
2219 for(std::vector<TrajectoryMeasurement>::const_iterator i_meas = v_meas.begin(); i_meas != v_meas.end(); ++i_meas){
2227 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 &)