155 bool checkModuleIds(
const unsigned int,
const std::vector<unsigned int>&)
const;
179 bool inUintInterval(
const std::vector<unsigned int>&,
const unsigned int,
const unsigned int =999)
const;
228 parameterSet_(iConfig),
231 trackCut_(
false), maxTracksPerEvent_(parameterSet_.getParameter<unsigned int>(
"maxTracksPerEvent")),
232 minGoodHitsPerTrack_(parameterSet_.getParameter<unsigned int>(
"minGoodHitsPerTrack")),
233 analyzerMode_(parameterSet_.getParameter<bool>(
"analyzerMode")),
234 calculateApe_(parameterSet_.getParameter<bool>(
"calculateApe"))
262 tkTreeFile->GetObject(
"TrackerTreeGenerator/TrackerTree/TrackerTree",tkTree);
266 edm::LogError(
"SectorBuilder")<<
"TrackerTree not found in file";
269 UInt_t rawId(999), subdetId(999), layer(999), side(999), half(999), rod(999),
ring(999), petal(999),
270 blade(999), panel(999), outerInner(999),
module(999), rodAl(999), bladeAl(999), nStrips(999);
271 Bool_t isDoubleSide(
false), isRPhi(
false);
272 Int_t uDirection(999), vDirection(999), wDirection(999);
273 Float_t 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(
"RodAl", &rodAl);
287 tkTree->SetBranchAddress(
"BladeAl", &bladeAl);
288 tkTree->SetBranchAddress(
"NStrips", &nStrips);
289 tkTree->SetBranchAddress(
"IsDoubleSide", &isDoubleSide);
290 tkTree->SetBranchAddress(
"IsRPhi", &isRPhi);
291 tkTree->SetBranchAddress(
"UDirection", &uDirection);
292 tkTree->SetBranchAddress(
"VDirection", &vDirection);
293 tkTree->SetBranchAddress(
"WDirection", &wDirection);
294 tkTree->SetBranchAddress(
"PosR", &posR);
295 tkTree->SetBranchAddress(
"PosPhi", &posPhi);
296 tkTree->SetBranchAddress(
"PosEta", &posEta);
297 tkTree->SetBranchAddress(
"PosX", &posX);
298 tkTree->SetBranchAddress(
"PosY", &posY);
299 tkTree->SetBranchAddress(
"PosZ", &posZ);
301 Int_t nModules(tkTree->GetEntries());
305 unsigned int sectorCounter(1);
307 edm::LogInfo(
"SectorBuilder")<<
"There are "<<v_sectorDef.size()<<
" Sectors definded";
308 std::vector<edm::ParameterSet>::const_iterator i_parSet;
309 for(i_parSet = v_sectorDef.begin(); i_parSet != v_sectorDef.end();++i_parSet, ++sectorCounter){
312 std::vector<unsigned int> v_rawId(parSet.
getParameter<std::vector<unsigned int> >(
"rawId")),
313 v_subdetId(parSet.
getParameter<std::vector<unsigned int> >(
"subdetId")),
314 v_layer(parSet.
getParameter<std::vector<unsigned int> >(
"layer")),
315 v_side(parSet.
getParameter<std::vector<unsigned int> >(
"side")),
316 v_half(parSet.
getParameter<std::vector<unsigned int> >(
"half")),
317 v_rod(parSet.
getParameter<std::vector<unsigned int> >(
"rod")),
318 v_ring(parSet.
getParameter<std::vector<unsigned int> >(
"ring")),
319 v_petal(parSet.
getParameter<std::vector<unsigned int> >(
"petal")),
320 v_blade(parSet.
getParameter<std::vector<unsigned int> >(
"blade")),
321 v_panel(parSet.
getParameter<std::vector<unsigned int> >(
"panel")),
322 v_outerInner(parSet.
getParameter<std::vector<unsigned int> >(
"outerInner")),
323 v_module(parSet.
getParameter<std::vector<unsigned int> >(
"module")),
324 v_rodAl(parSet.
getParameter<std::vector<unsigned int> >(
"rodAl")),
325 v_bladeAl(parSet.
getParameter<std::vector<unsigned int> >(
"bladeAl")),
326 v_nStrips(parSet.
getParameter<std::vector<unsigned int> >(
"nStrips")),
327 v_isDoubleSide(parSet.
getParameter<std::vector<unsigned int> >(
"isDoubleSide")),
328 v_isRPhi(parSet.
getParameter<std::vector<unsigned int> >(
"isRPhi"));
329 std::vector<int> v_uDirection(parSet.
getParameter<std::vector<int> >(
"uDirection")),
330 v_vDirection(parSet.
getParameter<std::vector<int> >(
"vDirection")),
331 v_wDirection(parSet.
getParameter<std::vector<int> >(
"wDirection"));
332 std::vector<double> v_posR(parSet.
getParameter<std::vector<double> >(
"posR")),
333 v_posPhi(parSet.
getParameter<std::vector<double> >(
"posPhi")),
334 v_posEta(parSet.
getParameter<std::vector<double> >(
"posEta")),
335 v_posX(parSet.
getParameter<std::vector<double> >(
"posX")),
336 v_posY(parSet.
getParameter<std::vector<double> >(
"posY")),
337 v_posZ(parSet.
getParameter<std::vector<double> >(
"posZ"));
345 tkSector.
name = sectorName;
353 if(sectorCounter==1){
389 tkSector.
v_rawId.push_back(rawId);
390 bool moduleSelected(
false);
391 for(std::vector<unsigned int>::const_iterator i_rawId = allSectors.v_rawId.begin();
392 i_rawId != allSectors.v_rawId.end(); ++i_rawId){
393 if(rawId == *i_rawId)moduleSelected =
true;
395 if(!moduleSelected)allSectors.v_rawId.push_back(rawId);
400 for(std::vector<unsigned int>::const_iterator i_rawId = tkSector.
v_rawId.begin();
401 i_rawId != tkSector.
v_rawId.end(); ++i_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;
432 if(v_id.size()==0)
return true;
433 if(v_id.size()%2==1){
434 edm::LogError(
"SectorBuilder")<<
"Incorrect Sector Definition: Position Vectors need even number of arguments (Intervals)"
435 <<
"\n... sector selection is not applied, sector "<<sectorCounter<<
" is not built";
438 int entry(1);
double intervalBegin(999.);
439 for(std::vector<double>::const_iterator i_id = v_id.begin(); i_id != v_id.end(); ++i_id, ++entry){
440 if(entry%2==1)intervalBegin = *i_id;
441 if(entry%2==0 && intervalBegin>*i_id){
442 edm::LogError(
"SectorBuilder")<<
"Incorrect Sector Definition (Position Vector Intervals): \t"
443 <<intervalBegin<<
" is bigger than "<<*i_id<<
" but is expected to be smaller"
444 <<
"\n... sector selection is not applied, sector "<<sectorCounter<<
" is not built";
453 if(v_id.size()==0)
return true;
454 for(std::vector<unsigned int>::const_iterator i_id = v_id.begin(); i_id != v_id.end(); ++i_id){
455 if(
id==*i_id)
return true;
462 if(v_id.size()==0)
return true;
463 for(std::vector<unsigned int>::const_iterator i_id = v_id.begin(); i_id != v_id.end(); ++i_id){
464 if(1==*i_id &&
id)
return true;
465 if(2==*i_id && !
id)
return true;
472 if(v_id.size()==0)
return true;
473 for(std::vector<int>::const_iterator i_id = v_id.begin(); i_id != v_id.end(); ++i_id){
474 if(
id==*i_id)
return true;
481 if(v_id.size()==0)
return true;
482 int entry(1);
double intervalBegin(999.);
483 for(std::vector<double>::const_iterator i_id = v_id.begin(); i_id != v_id.end(); ++i_id, ++entry){
484 if(entry%2==1)intervalBegin = *i_id;
485 if(entry%2==0 &&
id>=intervalBegin &&
id<*i_id)
return true;
492 bool commonModules(
false);
493 for(std::map<unsigned int,TrackerSectorStruct>::const_iterator i_sector =
m_tkSector_.begin(); i_sector !=
m_tkSector_.end(); ++i_sector){
494 std::map<unsigned int,TrackerSectorStruct>::const_iterator i_sector2(i_sector);
495 for(++i_sector2; i_sector2 !=
m_tkSector_.end(); ++i_sector2){
496 unsigned int nCommonModules(0);
497 for(std::vector<unsigned int>::const_iterator i_module = (*i_sector).second.v_rawId.begin(); i_module != (*i_sector).second.v_rawId.end(); ++i_module){
498 for(std::vector<unsigned int>::const_iterator i_module2 = (*i_sector2).second.v_rawId.begin(); i_module2 != (*i_sector2).second.v_rawId.end(); ++i_module2){
499 if(*i_module2 == *i_module)++nCommonModules;
502 if(nCommonModules==0)
505 edm::LogError(
"SectorBuilder")<<
"Sector "<<(*i_sector).first<<
" and Sector "<<(*i_sector2).first<<
" have "<<nCommonModules<<
" Modules in common";
506 commonModules =
true;
510 if(static_cast<int>(allSectors.
v_rawId.size())==nModules)
511 edm::LogInfo(
"SectorBuilder")<<
"ALL Tracker Modules are contained in the Sectors";
514 <<
" out of "<<nModules<<
" Tracker Modules";
516 edm::LogInfo(
"SectorBuilder")<<
"There are ZERO modules associated to different sectors, no ambiguities exist";
518 edm::LogError(
"SectorBuilder")<<
"There are modules associated to different sectors, APE value cannot be assigned reasonably";
528 if(v_residualErrorBinning.size()==1){
529 edm::LogError(
"ResidualErrorBinning")<<
"Incorrect selection of Residual Error Bins (used for APE calculation): \t"
530 <<
"Only one argument passed, so no interval is specified"
531 <<
"\n... delete whole bin selection";
534 double xMin(0.), xMax(0.);
535 unsigned int binCounter(0);
536 for(std::vector<double>::const_iterator i_binning = v_residualErrorBinning.begin(); i_binning != v_residualErrorBinning.end(); ++i_binning, ++binCounter){
537 if(binCounter == 0){xMin = *i_binning;
continue;}
540 edm::LogError(
"ResidualErrorBinning")<<
"Incorrect selection of Residual Error Bins (used for APE calculation): \t"
541 <<xMin<<
" is bigger than "<<xMax<<
" but is expected to be smaller"
542 <<
"\n... delete whole bin selection";
550 edm::LogInfo(
"ResidualErrorBinning")<<
m_resErrBins_.size()<<
" Intervals of residual errors used for separate APE calculation sucessfully set";
563 for(std::vector<unsigned int>::iterator i_errHists = v_errHists.begin(); i_errHists != v_errHists.end(); ++i_errHists){
564 for(std::vector<unsigned int>::iterator i_errHists2 = i_errHists; i_errHists2 != v_errHists.end();){
566 if(*i_errHists==*i_errHists2){
567 edm::LogError(
"BookSectorHists")<<
"Value of vErrHists in config exists twice: "<<*i_errHists<<
"\n... delete one of both";
568 v_errHists.erase(i_errHists2);
574 for(std::map<unsigned int,TrackerSectorStruct>::iterator i_sector =
m_tkSector_.begin(); i_sector !=
m_tkSector_.end(); ++i_sector){
577 double widthMax = zoomHists ? 20. : 200.;
578 double chargePixelMax = zoomHists ? 200000. : 2000000.;
579 double chargeStripMax = zoomHists ? 1000. : 10000.;
580 double sOverNMax = zoomHists ? 200. : 2000.;
581 double logClusterProbMin = zoomHists ? -5. : -15.;
583 double resXAbsMax = zoomHists ? 0.5 : 5.;
584 double norResXAbsMax = zoomHists ? 10. : 50.;
585 double probXMin = zoomHists ? -0.01 : -0.1;
586 double probXMax = zoomHists ? 0.11 : 1.1;
587 double sigmaXMin = zoomHists ? 0. : -0.05;
588 double sigmaXMax = zoomHists ? 0.02 : 1.;
589 double sigmaX2Max = sigmaXMax*sigmaXMax;
590 double sigmaXHitMax = zoomHists ? 0.02 : 1.;
591 double phiSensXMax = zoomHists ? 31. : 93.;
593 double norChi2Max = zoomHists ? 5. : 1000.;
594 double d0Max = zoomHists ? 0.02 : 40.;
595 double dzMax = zoomHists ? 15. : 100.;
596 double pMax = zoomHists ? 200. : 2000.;
597 double invPMax = zoomHists ? 0.05 : 10.;
603 "TFileService is not registered in cfg file" );
606 std::stringstream sector; sector <<
"Sector_" << (*i_sector).first;
610 (*i_sector).second.Name = secDir.
make<TH1F>(
"z_name",(*i_sector).second.name.c_str(),1,0,1);
613 if((*i_sector).second.v_rawId.size()==0){
617 (*i_sector).second.setCorrHistParams(&secDir,norResXAbsMax,sigmaXHitMax,sigmaXMax);
621 const bool pixelSector(i_sector->second.isPixel);
625 (*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");
626 (*i_sector).second.m_correlationHistsX[
"BaryStripX"] = (*i_sector).second.bookCorrHistsX(
"BaryStripX",
"barycenter of cluster charge",
"b_{cl,x}",
"[# channels]",800,100,-10.,790.,
"nph");
629 (*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");
630 (*i_sector).second.m_correlationHistsY[
"BaryStripY"] = (*i_sector).second.bookCorrHistsY(
"BaryStripY",
"barycenter of cluster charge",
"b_{cl,y}",
"[# channels]",800,100,-10.,790.,
"nph");
632 (*i_sector).second.m_correlationHistsX[
"ChargePixel"] = (*i_sector).second.bookCorrHistsX(
"ChargePixel",
"cluster charge",
"c_{cl}",
"[e]",100,50,0.,chargePixelMax,
"nph");
633 (*i_sector).second.m_correlationHistsX[
"ClusterProbXY"] = (*i_sector).second.bookCorrHistsX(
"ClusterProbXY",
"cluster probability xy",
"prob_{cl,xy}",
"",100,50,0.,1.,
"nph");
634 (*i_sector).second.m_correlationHistsX[
"ClusterProbQ"] = (*i_sector).second.bookCorrHistsX(
"ClusterProbQ",
"cluster probability q",
"prob_{cl,q}",
"",100,50,0.,1.,
"nph");
635 (*i_sector).second.m_correlationHistsX[
"ClusterProbXYQ"] = (*i_sector).second.bookCorrHistsX(
"ClusterProbXYQ",
"cluster probability xyq",
"prob_{cl,xyq}",
"",100,50,0.,1.,
"nph");
636 (*i_sector).second.m_correlationHistsX[
"LogClusterProb"] = (*i_sector).second.bookCorrHistsX(
"LogClusterProb",
"cluster probability xy",
"log(prob_{cl,xy})",
"",60,30,logClusterProbMin,0.,
"nph");
637 (*i_sector).second.m_correlationHistsX[
"IsOnEdge"] = (*i_sector).second.bookCorrHistsX(
"IsOnEdge",
"IsOnEdge",
"isOnEdge",
"",2,2,0,2,
"nph");
638 (*i_sector).second.m_correlationHistsX[
"HasBadPixels"] = (*i_sector).second.bookCorrHistsX(
"HasBadPixels",
"HasBadPixels",
"hasBadPixels",
"",2,2,0,2,
"nph");
639 (*i_sector).second.m_correlationHistsX[
"SpansTwoRoc"] = (*i_sector).second.bookCorrHistsX(
"SpansTwoRoc",
"SpansTwoRoc",
"spansTwoRoc",
"",2,2,0,2,
"nph");
640 (*i_sector).second.m_correlationHistsX[
"QBin"] = (*i_sector).second.bookCorrHistsX(
"QBin",
"q bin",
"q bin",
"",8,8,0,8,
"nph");
642 (*i_sector).second.m_correlationHistsY[
"ChargePixel"] = (*i_sector).second.bookCorrHistsY(
"ChargePixel",
"cluster charge",
"c_{cl}",
"[e]",100,50,0.,chargePixelMax,
"nph");
643 (*i_sector).second.m_correlationHistsY[
"ClusterProbXY"] = (*i_sector).second.bookCorrHistsY(
"ClusterProbXY",
"cluster probability xy",
"prob_{cl,xy}",
"",100,50,0.,1.,
"nph");
644 (*i_sector).second.m_correlationHistsY[
"ClusterProbQ"] = (*i_sector).second.bookCorrHistsY(
"ClusterProbQ",
"cluster probability q",
"prob_{cl,q}",
"",100,50,0.,1.,
"nph");
645 (*i_sector).second.m_correlationHistsY[
"ClusterProbXYQ"] = (*i_sector).second.bookCorrHistsY(
"ClusterProbXYQ",
"cluster probability xyq",
"prob_{cl,xyq}",
"",100,50,0.,1.,
"nph");
646 (*i_sector).second.m_correlationHistsY[
"LogClusterProb"] = (*i_sector).second.bookCorrHistsY(
"LogClusterProb",
"cluster probability xy",
"log(prob_{cl,xy})",
"",60,30,logClusterProbMin,0.,
"nph");
647 (*i_sector).second.m_correlationHistsY[
"IsOnEdge"] = (*i_sector).second.bookCorrHistsY(
"IsOnEdge",
"IsOnEdge",
"isOnEdge",
"",2,2,0,2,
"nph");
648 (*i_sector).second.m_correlationHistsY[
"HasBadPixels"] = (*i_sector).second.bookCorrHistsY(
"HasBadPixels",
"HasBadPixels",
"hasBadPixels",
"",2,2,0,2,
"nph");
649 (*i_sector).second.m_correlationHistsY[
"SpansTwoRoc"] = (*i_sector).second.bookCorrHistsY(
"SpansTwoRoc",
"SpansTwoRoc",
"spansTwoRoc",
"",2,2,0,2,
"nph");
650 (*i_sector).second.m_correlationHistsY[
"QBin"] = (*i_sector).second.bookCorrHistsY(
"QBin",
"q bin",
"q bin",
"",8,8,0,8,
"nph");
654 (*i_sector).second.m_correlationHistsX[
"ChargeStrip"] = (*i_sector).second.bookCorrHistsX(
"ChargeStrip",
"cluster charge",
"c_{cl}",
"[APV counts]",100,50,0.,chargeStripMax,
"nph");
655 (*i_sector).second.m_correlationHistsX[
"MaxStrip"] = (*i_sector).second.bookCorrHistsX(
"MaxStrip",
"strip with max. charge",
"n_{cl,max}",
"[# strips]",800,800,-10.,790.,
"npht");
656 (*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");
657 (*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");
658 (*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");
659 (*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");
660 (*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");
661 (*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");
662 (*i_sector).second.m_correlationHistsX[
"SOverN"] = (*i_sector).second.bookCorrHistsX(
"SOverN",
"signal over noise",
"s/N",
"",100,50,0,sOverNMax,
"nph");
663 (*i_sector).second.m_correlationHistsX[
"WidthProj"] = (*i_sector).second.bookCorrHistsX(
"WidthProj",
"projected width",
"w_{p}",
"[# strips]",200,20,0.,widthMax,
"nph");
664 (*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");
666 (*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);
667 (*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);
669 (*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.);
670 (*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.);
672 (*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.);
673 (*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);
675 (*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);
676 (*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);
681 (*i_sector).second.m_correlationHistsX[
"SigmaXHit"] = (*i_sector).second.bookCorrHistsX(
"SigmaXHit",
"hit error",
"#sigma_{hit,x}",
"[#mum]",105,20,sigmaXMin*10000.,sigmaXMax*10000.,
"np");
682 (*i_sector).second.m_correlationHistsX[
"SigmaXTrk"] = (*i_sector).second.bookCorrHistsX(
"SigmaXTrk",
"track error",
"#sigma_{trk,x}",
"[#mum]",105,20,sigmaXMin*10000.,sigmaXMax*10000.,
"np");
683 (*i_sector).second.m_correlationHistsX[
"SigmaX"] = (*i_sector).second.bookCorrHistsX(
"SigmaX",
"residual error",
"#sigma_{r,x}",
"[#mum]",105,20,sigmaXMin*10000.,sigmaXMax*10000.,
"np");
684 (*i_sector).second.m_correlationHistsX[
"PhiSens"] = (*i_sector).second.bookCorrHistsX(
"PhiSens",
"track angle on sensor",
"#phi_{module}",
"[ ^{o}]",96,48,-3,93,
"nphtr");
685 (*i_sector).second.m_correlationHistsX[
"PhiSensX"] = (*i_sector).second.bookCorrHistsX(
"PhiSensX",
"track angle on sensor",
"#phi_{module,x}",
"[ ^{o}]",186,93,-phiSensXMax,phiSensXMax,
"nphtr");
686 (*i_sector).second.m_correlationHistsX[
"PhiSensY"] = (*i_sector).second.bookCorrHistsX(
"PhiSensY",
"track angle on sensor",
"#phi_{module,y}",
"[ ^{o}]",186,93,-93,93,
"nphtr");
688 (*i_sector).second.XHit = secDir.
make<TH1F>(
"h_XHit",
" hit measurement x_{hit};x_{hit} [cm];# hits",100,-20,20);
689 (*i_sector).second.XTrk = secDir.
make<TH1F>(
"h_XTrk",
"track prediction x_{trk};x_{trk} [cm];# hits",100,-20,20);
690 (*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.);
691 (*i_sector).second.ResX = secDir.
make<TH1F>(
"h_ResX",
"residual r_{x};x_{trk}-x_{hit} [#mum];# hits",100,-resXAbsMax*10000.,resXAbsMax*10000.);
692 (*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);
693 (*i_sector).second.ProbX = secDir.
make<TH1F>(
"h_ProbX",
"residual probability;prob(r_{x}^{2}/#sigma_{r,x}^{2},1);# hits",60,probXMin,probXMax);
695 (*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);
696 (*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.);
699 (*i_sector).second.m_correlationHistsY[
"SigmaYHit"] = (*i_sector).second.bookCorrHistsY(
"SigmaYHit",
"hit error",
"#sigma_{hit,y}",
"[#mum]",105,20,sigmaXMin*10000.,sigmaXMax*10000.,
"np");
700 (*i_sector).second.m_correlationHistsY[
"SigmaYTrk"] = (*i_sector).second.bookCorrHistsY(
"SigmaYTrk",
"track error",
"#sigma_{trk,y}",
"[#mum]",105,20,sigmaXMin*10000.,sigmaXMax*10000.,
"np");
701 (*i_sector).second.m_correlationHistsY[
"SigmaY"] = (*i_sector).second.bookCorrHistsY(
"SigmaY",
"residual error",
"#sigma_{r,y}",
"[#mum]",105,20,sigmaXMin*10000.,sigmaXMax*10000.,
"np");
702 (*i_sector).second.m_correlationHistsY[
"PhiSens"] = (*i_sector).second.bookCorrHistsY(
"PhiSens",
"track angle on sensor",
"#phi_{module}",
"[ ^{o}]",96,48,-3,93,
"nphtr");
703 (*i_sector).second.m_correlationHistsY[
"PhiSensX"] = (*i_sector).second.bookCorrHistsY(
"PhiSensX",
"track angle on sensor",
"#phi_{module,x}",
"[ ^{o}]",186,93,-phiSensXMax,phiSensXMax,
"nphtr");
704 (*i_sector).second.m_correlationHistsY[
"PhiSensY"] = (*i_sector).second.bookCorrHistsY(
"PhiSensY",
"track angle on sensor",
"#phi_{module,y}",
"[ ^{o}]",186,93,-93,93,
"nphtr");
706 (*i_sector).second.YHit = secDir.
make<TH1F>(
"h_YHit",
" hit measurement y_{hit};y_{hit} [cm];# hits",100,-20,20);
707 (*i_sector).second.YTrk = secDir.
make<TH1F>(
"h_YTrk",
"track prediction y_{trk};y_{trk} [cm];# hits",100,-20,20);
708 (*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.);
709 (*i_sector).second.ResY = secDir.
make<TH1F>(
"h_ResY",
"residual r_{y};y_{trk}-y_{hit} [#mum];# hits",100,-resXAbsMax*10000.,resXAbsMax*10000.);
710 (*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);
711 (*i_sector).second.ProbY = secDir.
make<TH1F>(
"h_ProbY",
"residual probability;prob(r_{y}^{2}/#sigma_{r,y}^{2},1);# hits",60,probXMin,probXMax);
713 (*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);
714 (*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.);
719 (*i_sector).second.m_correlationHistsX[
"HitsValid"] = (*i_sector).second.bookCorrHistsX(
"HitsValid",
"# hits",
"[valid]",50,0,50,
"npt");
720 (*i_sector).second.m_correlationHistsX[
"HitsInvalid"] = (*i_sector).second.bookCorrHistsX(
"HitsInvalid",
"# hits",
"[invalid]",20,0,20,
"npt");
721 (*i_sector).second.m_correlationHistsX[
"Hits2D"] = (*i_sector).second.bookCorrHistsX(
"Hits2D",
"# hits",
"[2D]",20,0,20,
"npt");
722 (*i_sector).second.m_correlationHistsX[
"LayersMissed"] = (*i_sector).second.bookCorrHistsX(
"LayersMissed",
"# layers",
"[missed]",10,0,10,
"npt");
723 (*i_sector).second.m_correlationHistsX[
"HitsPixel"] = (*i_sector).second.bookCorrHistsX(
"HitsPixel",
"# hits",
"[pixel]",10,0,10,
"npt");
724 (*i_sector).second.m_correlationHistsX[
"HitsStrip"] = (*i_sector).second.bookCorrHistsX(
"HitsStrip",
"# hits",
"[strip]",40,0,40,
"npt");
725 (*i_sector).second.m_correlationHistsX[
"HitsGood"] = (*i_sector).second.bookCorrHistsX(
"HitsGood",
"# hits",
"[good]",50,0,50,
"npt");
726 (*i_sector).second.m_correlationHistsX[
"NorChi2"] = (*i_sector).second.bookCorrHistsX(
"NorChi2",
"#chi^{2}/f",
"",50,0,norChi2Max,
"npr");
727 (*i_sector).second.m_correlationHistsX[
"Theta"] = (*i_sector).second.bookCorrHistsX(
"Theta",
"#theta",
"[ ^{o}]",40,-10,190,
"npt");
728 (*i_sector).second.m_correlationHistsX[
"Phi"] = (*i_sector).second.bookCorrHistsX(
"Phi",
"#phi",
"[ ^{o}]",76,-190,190,
"npt");
729 (*i_sector).second.m_correlationHistsX[
"D0Beamspot"] = (*i_sector).second.bookCorrHistsX(
"D0Beamspot",
"d_{0, BS}",
"[cm]",40,-d0Max,d0Max,
"npt");
730 (*i_sector).second.m_correlationHistsX[
"Dz"] = (*i_sector).second.bookCorrHistsX(
"Dz",
"d_{z}",
"[cm]",40,-dzMax,dzMax,
"npt");
731 (*i_sector).second.m_correlationHistsX[
"Pt"] = (*i_sector).second.bookCorrHistsX(
"Pt",
"p_{t}",
"[GeV]",50,0,pMax,
"npt");
732 (*i_sector).second.m_correlationHistsX[
"P"] = (*i_sector).second.bookCorrHistsX(
"P",
"|p|",
"[GeV]",50,0,pMax,
"npt");
733 (*i_sector).second.m_correlationHistsX[
"InvP"] = (*i_sector).second.bookCorrHistsX(
"InvP",
"1/|p|",
"[GeV^{-1}]",25,0,invPMax,
"t");
734 (*i_sector).second.m_correlationHistsX[
"MeanAngle"] = (*i_sector).second.bookCorrHistsX(
"MeanAngle",
"<#phi_{module}>",
"[ ^{o}]",25,-5,95,
"npt");
738 (*i_sector).second.m_correlationHistsY[
"HitsValid"] = (*i_sector).second.bookCorrHistsY(
"HitsValid",
"# hits",
"[valid]",50,0,50,
"npt");
739 (*i_sector).second.m_correlationHistsY[
"HitsInvalid"] = (*i_sector).second.bookCorrHistsY(
"HitsInvalid",
"# hits",
"[invalid]",20,0,20,
"npt");
740 (*i_sector).second.m_correlationHistsY[
"Hits2D"] = (*i_sector).second.bookCorrHistsY(
"Hits2D",
"# hits",
"[2D]",20,0,20,
"npt");
741 (*i_sector).second.m_correlationHistsY[
"LayersMissed"] = (*i_sector).second.bookCorrHistsY(
"LayersMissed",
"# layers",
"[missed]",10,0,10,
"npt");
742 (*i_sector).second.m_correlationHistsY[
"HitsPixel"] = (*i_sector).second.bookCorrHistsY(
"HitsPixel",
"# hits",
"[pixel]",10,0,10,
"npt");
743 (*i_sector).second.m_correlationHistsY[
"HitsStrip"] = (*i_sector).second.bookCorrHistsY(
"HitsStrip",
"# hits",
"[strip]",40,0,40,
"npt");
744 (*i_sector).second.m_correlationHistsY[
"HitsGood"] = (*i_sector).second.bookCorrHistsY(
"HitsGood",
"# hits",
"[good]",50,0,50,
"npt");
745 (*i_sector).second.m_correlationHistsY[
"NorChi2"] = (*i_sector).second.bookCorrHistsY(
"NorChi2",
"#chi^{2}/f",
"",50,0,norChi2Max,
"npr");
746 (*i_sector).second.m_correlationHistsY[
"Theta"] = (*i_sector).second.bookCorrHistsY(
"Theta",
"#theta",
"[ ^{o}]",40,-10,190,
"npt");
747 (*i_sector).second.m_correlationHistsY[
"Phi"] = (*i_sector).second.bookCorrHistsY(
"Phi",
"#phi",
"[ ^{o}]",76,-190,190,
"npt");
748 (*i_sector).second.m_correlationHistsY[
"D0Beamspot"] = (*i_sector).second.bookCorrHistsY(
"D0Beamspot",
"d_{0, BS}",
"[cm]",40,-d0Max,d0Max,
"npt");
749 (*i_sector).second.m_correlationHistsY[
"Dz"] = (*i_sector).second.bookCorrHistsY(
"Dz",
"d_{z}",
"[cm]",40,-dzMax,dzMax,
"npt");
750 (*i_sector).second.m_correlationHistsY[
"Pt"] = (*i_sector).second.bookCorrHistsY(
"Pt",
"p_{t}",
"[GeV]",50,0,pMax,
"npt");
751 (*i_sector).second.m_correlationHistsY[
"P"] = (*i_sector).second.bookCorrHistsY(
"P",
"|p|",
"[GeV]",50,0,pMax,
"npt");
752 (*i_sector).second.m_correlationHistsY[
"InvP"] = (*i_sector).second.bookCorrHistsY(
"InvP",
"1/|p|",
"[GeV^{-1}]",25,0,invPMax,
"t");
753 (*i_sector).second.m_correlationHistsY[
"MeanAngle"] = (*i_sector).second.bookCorrHistsY(
"MeanAngle",
"<#phi_{module}>",
"[ ^{o}]",25,-5,95,
"npt");
758 for(std::vector<unsigned int>::iterator i_errHists = v_errHists.begin(); i_errHists != v_errHists.end(); ++i_errHists){
759 double xMin(0.01*(*i_errHists-1)), xMax(0.01*(*i_errHists));
760 std::stringstream sigmaXHit, sigmaXTrk, sigmaX;
761 sigmaXHit <<
"h_sigmaXHit_" << *i_errHists;
762 sigmaXTrk <<
"h_sigmaXTrk_" << *i_errHists;
763 sigmaX <<
"h_sigmaX_" << *i_errHists;
764 (*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.));
765 (*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.));
766 (*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.));
768 std::stringstream sigmaYHit, sigmaYTrk, sigmaY;
769 sigmaYHit <<
"h_sigmaYHit_" << *i_errHists;
770 sigmaYTrk <<
"h_sigmaYTrk_" << *i_errHists;
771 sigmaY <<
"h_sigmaY_" << *i_errHists;
772 (*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.));
773 (*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.));
774 (*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.));
787 for(std::vector<unsigned int>::iterator i_errHists = v_errHists.begin(); i_errHists != v_errHists.end(); ++i_errHists){
788 for(std::vector<unsigned int>::iterator i_errHists2 = i_errHists; i_errHists2 != v_errHists.end();){
790 if(*i_errHists==*i_errHists2){
791 edm::LogError(
"BookSectorHists")<<
"Value of vErrHists in config exists twice: "<<*i_errHists<<
"\n... delete one of both";
792 v_errHists.erase(i_errHists2);
797 for(std::map<unsigned int,TrackerSectorStruct>::iterator i_sector =
m_tkSector_.begin(); i_sector !=
m_tkSector_.end(); ++i_sector){
802 "TFileService is not registered in cfg file" );
805 std::stringstream sector; sector <<
"Sector_" << (*i_sector).first;
809 (*i_sector).second.Name = secDir.
make<TH1F>(
"z_name",(*i_sector).second.name.c_str(),1,0,1);
812 if((*i_sector).second.v_rawId.size()==0){
819 for(
std::map<
unsigned int,std::pair<double,double> >::const_iterator i_errBins =
m_resErrBins_.begin();
821 std::stringstream
interval; interval <<
"Interval_" << (*i_errBins).first;
823 (*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);
824 (*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);
825 if((*i_sector).second.isPixel){
826 (*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);
827 (*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);
835 unsigned int rawId(0);
836 (*i_sector).second.RawId = resDir.
make<TTree>(
"rawIdTree",
"Tree containing rawIds of all modules in sector");
837 (*i_sector).second.RawId->Branch(
"RawId", &rawId,
"RawId/i");
838 for(std::vector<unsigned int>::const_iterator i_rawId=(*i_sector).second.v_rawId.begin(); i_rawId!=(*i_sector).second.v_rawId.end(); ++i_rawId){
840 (*i_sector).second.RawId->Fill();
846 for(std::vector<double>::iterator i_binX = v_binX.begin(); i_binX != v_binX.end(); ++i_binX){
849 (*i_sector).second.EntriesX = resDir.
make<TH1F>(
"h_entriesX",
"# hits used;#sigma_{x} [#mum];# hits",v_binX.size()-1,&(v_binX[0]));
850 if((*i_sector).second.isPixel){
851 (*i_sector).second.EntriesY = resDir.
make<TH1F>(
"h_entriesY",
"# hits used;#sigma_{y} [#mum];# hits",v_binX.size()-1,&(v_binX[0]));
856 (*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.);
857 (*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.);
858 if((*i_sector).second.isPixel){
859 (*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.);
860 (*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.);
876 int trackSizeBins = zoomHists ? 6 : 201;
877 double trackSizeMax = trackSizeBins -1;
879 double chi2Max = zoomHists ? 100. : 2000.;
880 double norChi2Max = zoomHists ? 5. : 1000.;
881 double d0max = zoomHists ? 0.02 : 40.;
882 double dzmax = zoomHists ? 15. : 100.;
883 double pMax = zoomHists ? 200. : 2000.;
887 tkDetector_.
TrkSize = evtDir.
make<TH1F>(
"h_trackSize",
"# tracks [all];# tracks;# events",trackSizeBins,-1,trackSizeMax);
888 tkDetector_.
TrkSizeGood = evtDir.
make<TH1F>(
"h_trackSizeGood",
"# tracks [good];# tracks;# events",trackSizeBins,-1,trackSizeMax);
891 tkDetector_.
HitsValid = trkDir.make<TH1F>(
"h_hitsValid",
"# hits [valid];# hits [valid];# tracks",51,-1,50);
892 tkDetector_.
HitsInvalid = trkDir.make<TH1F>(
"h_hitsInvalid",
"# hits [invalid];# hits [invalid];# tracks",21,-1,20);
893 tkDetector_.
Hits2D = trkDir.make<TH1F>(
"h_hits2D",
"# hits [2D];# hits [2D];# tracks",21,-1,20);
894 tkDetector_.
LayersMissed = trkDir.make<TH1F>(
"h_layersMissed",
"# layers [missed];# layers [missed];# tracks",11,-1,10);
895 tkDetector_.
HitsPixel = trkDir.make<TH1F>(
"h_hitsPixel",
"# hits [pixel];# hits [pixel];# tracks",11,-1,10);
896 tkDetector_.
HitsStrip = trkDir.make<TH1F>(
"h_hitsStrip",
"# hits [strip];# hits [strip];# tracks",41,-1,40);
897 tkDetector_.
Charge = trkDir.make<TH1F>(
"h_charge",
"charge q;q [e];# tracks",5,-2,3);
898 tkDetector_.
Chi2 = trkDir.make<TH1F>(
"h_chi2",
" #chi^{2};#chi^{2};# tracks",100,0,chi2Max);
899 tkDetector_.
Ndof = trkDir.make<TH1F>(
"h_ndof",
"# degrees of freedom f;f;# tracks",101,-1,100);
900 tkDetector_.
NorChi2 = trkDir.make<TH1F>(
"h_norChi2",
"normalized #chi^{2};#chi^{2}/f;# tracks",200,0,norChi2Max);
901 tkDetector_.
Prob = trkDir.make<TH1F>(
"h_prob",
" #chi^{2} probability;prob(#chi^{2},f);# tracks",50,0,1);
902 tkDetector_.
Eta = trkDir.make<TH1F>(
"h_eta",
"pseudorapidity #eta;#eta;# tracks",100,-5,5);
903 tkDetector_.
EtaErr = trkDir.make<TH1F>(
"h_etaErr",
"Error of #eta;#sigma(#eta);# tracks",100,0,0.001);
904 tkDetector_.
EtaSig = trkDir.make<TH1F>(
"h_etaSig",
"Significance of #eta;#eta/#sigma(#eta);# tracks",100,-20000,20000);
905 tkDetector_.
Theta = trkDir.make<TH1F>(
"h_theta",
"polar angle #theta;#theta [ ^{o}];# tracks",100,-10,190);
906 tkDetector_.
Phi = trkDir.make<TH1F>(
"h_phi",
"azimuth angle #phi;#phi [ ^{o}];# tracks",190,-190,190);
907 tkDetector_.
PhiErr = trkDir.make<TH1F>(
"h_phiErr",
"Error of #phi;#sigma(#phi) [ ^{o}];# tracks",100,0,0.04);
908 tkDetector_.
PhiSig = trkDir.make<TH1F>(
"h_phiSig",
"Significance of #phi;#phi/#sigma(#phi) [ ^{o}];# tracks",100,-50000,50000);
909 tkDetector_.
D0Beamspot = trkDir.make<TH1F>(
"h_d0Beamspot",
"Closest approach d_{0} wrt. beamspot;d_{0, BS} [cm];# tracks",200,-d0max,d0max);
910 tkDetector_.
D0BeamspotErr = trkDir.make<TH1F>(
"h_d0BeamspotErr",
"Error of d_{0, BS};#sigma(d_{0, BS}) [cm];# tracks",200,0,0.01);
911 tkDetector_.
D0BeamspotSig = trkDir.make<TH1F>(
"h_d0BeamspotSig",
"Significance of d_{0, BS};d_{0, BS}/#sigma(d_{0, BS});# tracks",100,-5,5);
912 tkDetector_.
Dz = trkDir.make<TH1F>(
"h_dz",
"Closest approach d_{z};d_{z} [cm];# tracks",200,-dzmax,dzmax);
913 tkDetector_.
DzErr = trkDir.make<TH1F>(
"h_dzErr",
"Error of d_{z};#sigma(d_{z}) [cm];# tracks",200,0,0.01);
914 tkDetector_.
DzSig = trkDir.make<TH1F>(
"h_dzSig",
"Significance of d_{z};d_{z}/#sigma(d_{z});# tracks",100,-10000,10000);
915 tkDetector_.
Pt = trkDir.make<TH1F>(
"h_pt",
"transverse momentum p_{t};p_{t} [GeV];# tracks",100,0,pMax);
916 tkDetector_.
PtErr = trkDir.make<TH1F>(
"h_ptErr",
"Error of p_{t};#sigma(p_{t}) [GeV];# tracks",100,0,1.6);
917 tkDetector_.
PtSig = trkDir.make<TH1F>(
"h_ptSig",
"Significance of p_{t};p_{t}/#sigma(p_{t});# tracks",100,0,200);
918 tkDetector_.
P = trkDir.make<TH1F>(
"h_p",
"momentum magnitude |p|;|p| [GeV];# tracks",100,0,pMax);
919 tkDetector_.
MeanAngle = trkDir.make<TH1F>(
"h_meanAngle",
"mean angle on module <#phi_{module}>;<#phi_{module}> [ ^{o}];# tracks",100,-5,95);
920 tkDetector_.
HitsGood = trkDir.make<TH1F>(
"h_hitsGood",
"# hits [good];# hits [good];# tracks",51,-1,50);
922 tkDetector_.
MeanAngleVsHits = trkDir.make<TH2F>(
"h2_meanAngleVsHits",
"<#phi_{module}> vs. # hits;# hits;<#phi_{module}> [ ^{o}]",51,-1,50,50,-5,95);
923 tkDetector_.
HitsGoodVsHitsValid = trkDir.make<TH2F>(
"h2_hitsGoodVsHitsValid",
"# hits [good] vs. # hits [valid];# hits [valid];# hits [good]",51,-1,50,51,-1,50);
924 tkDetector_.
HitsPixelVsEta = trkDir.make<TH2F>(
"h2_hitsPixelVsEta",
"# hits [pixel] vs. #eta;#eta;# hits [pixel]",60,-3,3,11,-1,10);
925 tkDetector_.
HitsPixelVsTheta = trkDir.make<TH2F>(
"h2_hitsPixelVsTheta",
"# hits [pixel] vs. #theta;#theta;# hits [pixel]",100,-10,190,11,-1,10);
926 tkDetector_.
HitsStripVsEta = trkDir.make<TH2F>(
"h2_hitsStripVsEta",
"# hits [strip] vs. #eta;#eta;# hits [strip]",60,-3,3,31,-1,40);
927 tkDetector_.
HitsStripVsTheta = trkDir.make<TH2F>(
"h2_hitsStripVsTheta",
"# hits [strip] vs. #theta;#theta;# hits [strip]",100,-10,190,31,-1,40);
928 tkDetector_.
PtVsEta = trkDir.make<TH2F>(
"h2_ptVsEta",
"p_{t} vs. #eta;#eta;p_{t} [GeV]",60,-3,3,100,0,pMax);
929 tkDetector_.
PtVsTheta = trkDir.make<TH2F>(
"h2_ptVsTheta",
"p_{t} vs. #theta;#theta;p_{t} [GeV]",100,-10,190,100,0,pMax);
931 tkDetector_.
PMeanAngleVsHits = trkDir.make<TProfile>(
"p_meanAngleVsHits",
"<#phi_{module}> vs. # hits;# hits;<#phi_{module}> [ ^{o}]",51,-1,50);
932 tkDetector_.
PHitsGoodVsHitsValid = trkDir.make<TProfile>(
"p_hitsGoodVsHitsValid",
"# hits [good] vs. # hits [valid];# hits [valid];# hits [good]",51,-1,50);
933 tkDetector_.
PHitsPixelVsEta = trkDir.make<TProfile>(
"p_hitsPixelVsEta",
"# hits [pixel] vs. #eta;#eta;# hits [pixel]",60,-3,3);
934 tkDetector_.
PHitsPixelVsTheta = trkDir.make<TProfile>(
"p_hitsPixelVsTheta",
"# hits [pixel] vs. #theta;#theta;# hits [pixel]",100,-10,190);
935 tkDetector_.
PHitsStripVsEta = trkDir.make<TProfile>(
"p_hitsStripVsEta",
"# hits [strip] vs. #eta;#eta;# hits [strip]",60,-3,3);
936 tkDetector_.
PHitsStripVsTheta = trkDir.make<TProfile>(
"p_hitsStripVsTheta",
"# hits [strip] vs. #theta;#theta;# hits [strip]",100,-10,190);
937 tkDetector_.
PPtVsEta = trkDir.make<TProfile>(
"p_ptVsEta",
"p_{t} vs. #eta;#eta;p_{t} [GeV]",60,-3,3);
938 tkDetector_.
PPtVsTheta = trkDir.make<TProfile>(
"p_ptVsTheta",
"p_{t} vs. #theta;#theta;p_{t} [GeV]",100,-10,190);
959 trkParams.hitsValid = track.
found();
960 trkParams.hitsInvalid = trkParams.hitsSize-trkParams.hitsValid;
961 trkParams.layersMissed = track.
lost();
962 trkParams.hitsPixel = hitPattern.numberOfValidPixelHits();
963 trkParams.hitsStrip = hitPattern.numberOfValidStripHits();
964 trkParams.charge = track.
charge();
965 trkParams.chi2 = track.
chi2();
966 trkParams.ndof = track.
ndof();
967 trkParams.norChi2 = trkParams.chi2/trkParams.ndof;
968 trkParams.prob = TMath::Prob(trkParams.chi2,trkParams.ndof);
969 trkParams.eta = track.
eta();
970 trkParams.etaErr = track.
etaError();
971 trkParams.theta = track.
theta();
972 trkParams.phi = track.
phi();
973 trkParams.phiErr = track.
phiError();
974 trkParams.d0 = track.
d0();
975 trkParams.d0Beamspot = -1.*track.
dxy(beamPoint);
976 trkParams.d0BeamspotErr = d0BeamspotErr;
977 trkParams.dz = track.
dz();
978 trkParams.dzErr = track.
dzError();
979 trkParams.dzBeamspot = track.
dz(beamPoint);
980 trkParams.p = track.
p();
981 trkParams.pt = track.
pt();
982 trkParams.ptErr = track.
ptError();
984 const std::vector<TrajectoryMeasurement>& v_meas = traj.
measurements();
986 int count2D(0);
float meanPhiSensToNorm(0.
F);
987 std::vector<TrajectoryMeasurement>::const_iterator i_meas;
988 for(i_meas = v_meas.begin(); i_meas != v_meas.end(); ++i_meas){
992 if(this->
isHit2D(recHit))++count2D;
996 meanPhiSensToNorm += atan(fabs(
sqrt(mom.x()*mom.x()+mom.y()*mom.y())/mom.z()));
998 meanPhiSensToNorm *= (1./
static_cast<float>(trkParams.hitsSize));
1000 trkParams.hits2D = count2D;
1001 trkParams.meanPhiSensToNorm = meanPhiSensToNorm;
1005 if(trkParams.hitsStrip<11 || trkParams.hits2D<2 || trkParams.hitsPixel<2 ||
1006 trkParams.hitsStrip>35 || trkParams.hitsPixel>7 ||
1007 trkParams.norChi2>5. ||
1008 trkParams.pt<25. || trkParams.pt>150. ||
1035 const uint32_t rawId(detId.rawId());
1037 for(std::map<unsigned int,TrackerSectorStruct>::const_iterator i_sector =
m_tkSector_.begin(); i_sector !=
m_tkSector_.end(); ++i_sector){
1038 for(std::vector<unsigned int>::const_iterator i_rawId = (*i_sector).second.v_rawId.begin();
1039 i_rawId != (*i_sector).second.v_rawId.end(); ++i_rawId){
1040 if(rawId==*i_rawId){hitParams.
v_sector.push_back((*i_sector).first);
break;}
1045 int xMomentum(0), yMomentum(0), zMomentum(0);
1046 xMomentum = mom.x()>0. ? 1 : -1;
1047 yMomentum = mom.y()>0. ? 1 : -1;
1048 zMomentum = mom.z()>0. ? 1 : -1;
1049 float phiSensX = std::atan(std::fabs(mom.x()/mom.z()))*
static_cast<float>(
m_tkTreeVar_[rawId].vDirection);
1050 float phiSensY = std::atan(std::fabs(mom.y()/mom.z()))*
static_cast<float>(
m_tkTreeVar_[rawId].vDirection);
1051 hitParams.
phiSens = std::atan(std::fabs(
std::sqrt(mom.x()*mom.x()+mom.y()*mom.y())/mom.z()));
1052 hitParams.
phiSensX = (xMomentum==zMomentum ? phiSensX : -phiSensX );
1053 hitParams.
phiSensY = (yMomentum==zMomentum ? phiSensY : -phiSensY );
1081 else {
edm::LogWarning(
"FillHitVariables")<<
"cant identify wether hit is from pixel or strip";
1094 { errorWithoutAPE =
LocalError(errHitApe.
xx() -lape.
xx(), errHitApe.
xy()- lape.
xy(), errHitApe.
yy()-lape.
yy());
1103 { errorWithoutAPE =
LocalError(errHitApe.
xx() -lape.
xx(), errHitApe.
xy()- lape.
xy(), errHitApe.
yy()-lape.
yy());
1108 const LocalError& errHitWoApe = errorWithoutAPE;
1113 std::cout<<
"errHitWoApe " <<errHitWoApe<<
"errHitApe "<<errHitApe<<std::endl;
1141 const float xHit = positionAndError2Hit.second.posX;
1142 const float xTrk = positionAndError2Trk.second.posX;
1143 const float yHit = positionAndError2Hit.second.posY;
1144 const float yTrk = positionAndError2Trk.second.posY;
1146 const float errXHit2(positionAndError2Hit.second.errX2);
1147 const float errXHitWoApe2(positionAndError2HitWoApe.second.errX2);
1148 const float errXTrk2(positionAndError2Trk.second.errX2);
1149 const float errYHit2(positionAndError2Hit.second.errY2);
1150 const float errYHitWoApe2(positionAndError2HitWoApe.second.errY2);
1151 const float errYTrk2(positionAndError2Trk.second.errY2);
1153 const float errXHit =
std::sqrt(positionAndError2Hit.second.errX2);
1154 const float errXHitWoApe =
std::sqrt(positionAndError2HitWoApe.second.errX2);
1155 const float errXTrk =
std::sqrt(positionAndError2Trk.second.errX2);
1156 const float errYHit =
std::sqrt(positionAndError2Hit.second.errY2);
1157 const float errYHitWoApe =
std::sqrt(positionAndError2HitWoApe.second.errY2);
1158 const float errYTrk =
std::sqrt(positionAndError2Trk.second.errY2);
1160 const float resX = xTrk - xHit;
1161 const float resY = yTrk - yHit;
1163 const float errX =
std::sqrt(errXHit2 + errXTrk2);
1164 const float errXWoApe2 = errXHitWoApe2 + errXTrk2;
1165 const float errXWoApe =
std::sqrt(errXWoApe2);
1166 const float errY =
std::sqrt(errYHit2 + errYTrk2);
1167 const float errYWoApe2 = errYHitWoApe2 + errYTrk2;
1168 const float errYWoApe =
std::sqrt(errYWoApe2);
1170 const float norResX = resX/errX;
1171 const float norResY = resY/errY;
1177 float resXprime(999.
F), resYprime(999.
F), norResXprime(999.
F), norResYprime(999.
F);
1178 if(
m_tkTreeVar_[rawId].uDirection == 1){resXprime = resX; norResXprime = norResX;}
1179 else if(
m_tkTreeVar_[rawId].uDirection == -1){resXprime = -resX; norResXprime = -norResX;}
1181 if(
m_tkTreeVar_[rawId].vDirection == 1){resYprime = resY; norResYprime = norResY;}
1182 else if(
m_tkTreeVar_[rawId].vDirection == -1){resYprime = -resY; norResYprime = -norResY;}
1185 hitParams.
xHit = xHit;
1186 hitParams.
xTrk = xTrk;
1192 hitParams.
errX2 = errX*errX;
1193 hitParams.
errX = errX;
1196 hitParams.
resX = resXprime;
1197 hitParams.
norResX = norResXprime;
1199 const float norResX2(norResXprime*norResXprime);
1200 hitParams.
probX = TMath::Prob(norResX2,1);
1203 hitParams.
yHit = yHit;
1204 hitParams.
yTrk = yTrk;
1210 hitParams.
errY2 = errY*errY;
1211 hitParams.
errY = errY;
1214 hitParams.
resY = resYprime;
1215 hitParams.
norResY = norResYprime;
1217 const float norResY2(norResYprime*norResYprime);
1218 hitParams.
probY = TMath::Prob(norResY2,1);
1247 if(!(dynamic_cast<const SiStripRecHit2D*>(&recHit) || dynamic_cast<const SiStripRecHit1D*>(&recHit))){
1248 edm::LogError(
"FillHitVariables")<<
"RecHit in Strip is 'Matched' or 'Projected', but here all should be monohits per module";
1253 if(dynamic_cast<const SiStripRecHit1D*>(&recHit)){
1255 clusterPtr = &(*stripHit.
cluster());
1257 else if(dynamic_cast<const SiStripRecHit2D*>(&recHit)){
1258 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";
1260 clusterPtr = &(*stripHit.
cluster());
1265 clusterPtr = &(*stripHit.
cluster());
1268 edm::LogError(
"FillHitVariables")<<
"Pointer to cluster not valid!!! This should never happen...";
1275 const std::vector<uint8_t>::const_iterator stripChargeL(clusterInfo.
stripCharges().begin());
1276 const std::vector<uint8_t>::const_iterator stripChargeR(--(clusterInfo.
stripCharges().end()));
1277 const std::pair<uint16_t, uint16_t> stripChargeLR = std::make_pair(*stripChargeL,*stripChargeR);
1287 hitParams.
chargeOnEdges =
static_cast<float>(stripChargeLR.first + stripChargeLR.second)/static_cast<float>(hitParams.
chargeStrip);
1288 hitParams.
chargeAsymmetry =
static_cast<float>(stripChargeLR.first - stripChargeLR.second)/static_cast<float>(stripChargeLR.first + stripChargeLR.second);
1313 float dirX = -tanLorentzAnglePerTesla * bField.y();
1314 float dirY = tanLorentzAnglePerTesla * bField.x();
1329 if(momentumDir.z() > 0.)scaledMomentumDir *= std::fabs(thickness/momentumDir.z());
1330 else if(momentumDir.z() < 0.)scaledMomentumDir *= -std::fabs(thickness/momentumDir.z());
1331 else scaledMomentumDir *= maxLength/momentumDir.mag();
1334 if(projEdge1 < 0.)projEdge1 = 0.;
1337 if(projEdge2 < 0.)projEdge1 = 0.;
1341 float coveredStrips = std::fabs(projEdge2 - projEdge1);
1350 edm::LogError(
"FillHitVariables")<<
"Incorrect subdetector ID, hit not associated to tracker";
1370 const uint32_t& rawId(detId.rawId());
1373 if(localError.
xx()<0. || localError.
yy()<0.){
1390 if(!hit.
detUnit())
return vPE2;
1393 if(!dynamic_cast<const RadialStripTopology*>(&detUnit.
type().
topology()))
return vPE2;
1397 if(measError.
uu()<0. || measError.
vv()<0.){
1413 edm::LogError(
"FillHitVariables")<<
"Incorrect subdetector ID, hit not associated to tracker";
1424 const float x(lP.
x());
1425 const float y(lP.
y());
1426 const float errX2(lE.
xx());
1427 const float errY2(lE.
yy());
1446 float errX2(-999.
F);
1447 float errY2(-999.
F);
1453 y = measPos.
y()*stripLength;
1455 const float l_0 = r_0 - topol.
detHeight()/2;
1457 y = measPos.
y()*stripLength - 0.5*stripLength + l_0*(1./cosPhi - 1.);
1460 const float errPhi2(measErr.
uu()*angularWidth2);
1462 errX2 = errPhi2*r_0*r_0;
1466 errY2 = measErr.
vv()*stripLength*stripLength;
1469 const float helpSummand = l_0*l_0*(sinPhi2/cosPhi4*errPhi2);
1470 errY2 = measErr.
vv()*stripLength*stripLength + helpSummand;
1534 bool emptyMap(
true);
1536 if(0 < (*i_hitSelection).second.size()){
1537 int entry(1);
double intervalBegin(999.);
1538 for(std::vector<double>::iterator i_hitInterval = (*i_hitSelection).second.begin(); i_hitInterval != (*i_hitSelection).second.end(); ++entry){
1539 if(entry%2==1){intervalBegin = *i_hitInterval; ++i_hitInterval;}
1541 if(intervalBegin > *i_hitInterval){
1542 edm::LogError(
"HitSelector")<<
"INVALID Interval selected for "<<(*i_hitSelection).first<<
":\t"<<intervalBegin<<
" > "<<(*i_hitInterval)
1543 <<
"\n ... delete Selection for "<<(*i_hitSelection).first;
1544 (*i_hitSelection).second.clear(); i_hitInterval = (*i_hitSelection).second.begin();
1546 edm::LogInfo(
"HitSelector")<<
"Interval selected for "<<(*i_hitSelection).first<<
":\t"<<intervalBegin<<
", "<<(*i_hitInterval);
1551 if(0 < (*i_hitSelection).second.size())emptyMap =
false;
1556 bool emptyMapUInt(
true);
1558 if(0 < (*i_hitSelection).second.size()){
1559 int entry(1);
unsigned int intervalBegin(999);
1560 for(std::vector<unsigned int>::iterator i_hitInterval = (*i_hitSelection).second.begin(); i_hitInterval != (*i_hitSelection).second.end(); ++entry){
1561 if(entry%2==1){intervalBegin = *i_hitInterval; ++i_hitInterval;}
1563 if(intervalBegin > *i_hitInterval){
1564 edm::LogError(
"HitSelector")<<
"INVALID Interval selected for "<<(*i_hitSelection).first<<
":\t"<<intervalBegin<<
" > "<<(*i_hitInterval)
1565 <<
"\n ... delete Selection for "<<(*i_hitSelection).first;
1566 (*i_hitSelection).second.clear(); i_hitInterval = (*i_hitSelection).second.begin();
1568 edm::LogInfo(
"HitSelector")<<
"Interval selected for "<<(*i_hitSelection).first<<
":\t"<<intervalBegin<<
", "<<(*i_hitInterval);
1573 if(0 < (*i_hitSelection).second.size())emptyMapUInt =
false;
1577 if(emptyMap && emptyMapUInt){
1590 std::vector<double> v_cutVariable(parSet.
getParameter<std::vector<double> >(cutVariable));
1591 if(v_cutVariable.size()%2==1){
1592 edm::LogError(
"HitSelector")<<
"Invalid Hit Selection for "<<cutVariable<<
": need even number of arguments (intervals)"
1593 <<
"\n ... delete Selection for "<<cutVariable;
1594 v_cutVariable.clear();
1606 std::vector<unsigned int> v_cutVariable(parSet.
getParameter<std::vector<unsigned int> >(cutVariable));
1607 if(v_cutVariable.size()%2==1){
1608 edm::LogError(
"HitSelector")<<
"Invalid Hit Selection for "<<cutVariable<<
": need even number of arguments (intervals)"
1609 <<
"\n ... delete Selection for "<<cutVariable;
1610 v_cutVariable.clear();
1627 bool isGoodHit(
true);
1628 bool isGoodHitX(
true);
1629 bool isGoodHitY(
true);
1633 const std::vector<double>& v_hitSelection((*i_hitSelection).second);
1634 if(v_hitSelection.size()==0)
continue;
1637 if (hitSelection ==
"phiSens") {
if(!this->
inDoubleInterval(v_hitSelection, hitParams.
phiSens))isGoodHit =
false;}
1638 else if(hitSelection ==
"phiSensX") {
if(!this->
inDoubleInterval(v_hitSelection, hitParams.
phiSensX))isGoodHit =
false;}
1639 else if(hitSelection ==
"phiSensY") {
if(!this->
inDoubleInterval(v_hitSelection, hitParams.
phiSensY))isGoodHit =
false;}
1641 else if(hitSelection ==
"resX") {
if(!this->
inDoubleInterval(v_hitSelection, hitParams.
resX))isGoodHitX =
false;}
1642 else if(hitSelection ==
"norResX") {
if(!this->
inDoubleInterval(v_hitSelection, hitParams.
norResX))isGoodHitX =
false;}
1643 else if(hitSelection ==
"probX") {
if(!this->
inDoubleInterval(v_hitSelection, hitParams.
probX))isGoodHitX =
false;}
1644 else if(hitSelection ==
"errXHit") {
if(!this->
inDoubleInterval(v_hitSelection, hitParams.
errXHit))isGoodHitX =
false;}
1645 else if(hitSelection ==
"errXTrk") {
if(!this->
inDoubleInterval(v_hitSelection, hitParams.
errXTrk))isGoodHitX =
false;}
1646 else if(hitSelection ==
"errX") {
if(!this->
inDoubleInterval(v_hitSelection, hitParams.
errX))isGoodHitX =
false;}
1647 else if(hitSelection ==
"errX2") {
if(!this->
inDoubleInterval(v_hitSelection, hitParams.
errX2))isGoodHitX =
false;}
1662 else if(hitSelection ==
"resY") {
if(!this->
inDoubleInterval(v_hitSelection, hitParams.
resY))isGoodHitY =
false;}
1663 else if(hitSelection ==
"norResY") {
if(!this->
inDoubleInterval(v_hitSelection, hitParams.
norResY))isGoodHitY =
false;}
1664 else if(hitSelection ==
"probY") {
if(!this->
inDoubleInterval(v_hitSelection, hitParams.
probY))isGoodHitY =
false;}
1665 else if(hitSelection ==
"errYHit") {
if(!this->
inDoubleInterval(v_hitSelection, hitParams.
errYHit))isGoodHitY =
false;}
1666 else if(hitSelection ==
"errYTrk") {
if(!this->
inDoubleInterval(v_hitSelection, hitParams.
errYTrk))isGoodHitY =
false;}
1667 else if(hitSelection ==
"errY") {
if(!this->
inDoubleInterval(v_hitSelection, hitParams.
errY))isGoodHitY =
false;}
1668 else if(hitSelection ==
"errY2") {
if(!this->
inDoubleInterval(v_hitSelection, hitParams.
errY2))isGoodHitY =
false;}
1674 else if(hitSelection ==
"widthDiff") {
if(!this->
inDoubleInterval(v_hitSelection, hitParams.
projWidth-static_cast<float>(hitParams.
widthX)))isGoodHit =
false;}
1676 else if(hitSelection ==
"maxCharge") {
if(!this->
inDoubleInterval(v_hitSelection, hitParams.
maxCharge))isGoodHit =
false;}
1681 else if(hitSelection ==
"sOverN") {
if(!this->
inDoubleInterval(v_hitSelection, hitParams.
sOverN))isGoodHit =
false;}
1687 const std::vector<unsigned int>& v_hitSelection((*i_hitSelection).second);
1688 if(v_hitSelection.size()==0)
continue;
1694 if(hitSelection ==
"isOnEdge") {
if(!this->
inUintInterval(v_hitSelection, hitParams.
isOnEdge))isGoodHit =
false;}
1696 else if(hitSelection ==
"spansTwoRoc") {
if(!this->
inUintInterval(v_hitSelection, hitParams.
spansTwoRoc))isGoodHit =
false;}
1697 else if(hitSelection ==
"qBin") {
if(!this->
inUintInterval(v_hitSelection, hitParams.
qBin))isGoodHit =
false;}
1699 else if(hitSelection ==
"widthX") {
if(!this->
inUintInterval(v_hitSelection, hitParams.
widthX))isGoodHitX =
false;}
1700 else if(hitSelection ==
"widthY") {
if(!this->
inUintInterval(v_hitSelection, hitParams.
widthY))isGoodHitY =
false;}
1705 if (hitSelection ==
"width") {
if(!this->
inUintInterval(v_hitSelection, hitParams.
widthX))isGoodHit =
false;}
1707 else if(hitSelection ==
"maxIndex") {
if(!this->
inUintInterval(v_hitSelection, hitParams.
maxIndex))isGoodHit =
false;}
1727 int entry(1);
double intervalBegin(999.);
1728 bool isSelected(
false);
1729 for(std::vector<double>::const_iterator i_hitInterval = v_hitSelection.begin(); i_hitInterval != v_hitSelection.end(); ++i_hitInterval, ++entry){
1730 if(entry%2==1)intervalBegin = *i_hitInterval;
1731 else if(variable>=intervalBegin && variable<*i_hitInterval)isSelected =
true;
1739 int entry(1);
unsigned int intervalBegin(999);
1740 bool isSelected(
false);
1741 for(std::vector<unsigned int>::const_iterator i_hitInterval = v_hitSelection.begin(); i_hitInterval != v_hitSelection.end(); ++i_hitInterval, ++entry){
1742 if(entry%2==1)intervalBegin = *i_hitInterval;
1743 else if(variable>=intervalBegin && variable<=*i_hitInterval){
1744 if(variable2==999 || (variable2>=intervalBegin && variable2<=*i_hitInterval))isSelected =
true;
1758 unsigned int goodHitsPerTrack(trackStruct.
v_hitParams.size());
1816 for(std::vector<TrackStruct::HitParameterStruct>::const_iterator i_hit = trackStruct.
v_hitParams.begin();
1822 for(std::map<unsigned int,TrackerSectorStruct>::iterator i_sector =
m_tkSector_.begin(); i_sector !=
m_tkSector_.end(); ++i_sector){
1823 bool moduleInSector(
false);
1824 for(std::vector<unsigned int>::const_iterator i_hitSector = hit.
v_sector.begin(); i_hitSector != hit.
v_sector.end(); ++i_hitSector){
1825 if((*i_sector).first == *i_hitSector){moduleInSector =
true;
break;}
1827 if(!moduleInSector)
continue;
1831 std::map<std::string,TrackerSectorStruct::CorrelationHists>& m_corrHists(sector.
m_correlationHistsX);
1838 m_corrHists[
"HitsGood"].fillCorrHistsX(hit,goodHitsPerTrack);
1840 m_corrHists[
"Hits2D"].fillCorrHistsX(hit,trackStruct.
trkParams.
hits2D);
1846 m_corrHists[
"Phi"].fillCorrHistsX(hit,trackStruct.
trkParams.
phi*180./
M_PI);
1848 m_corrHists[
"Dz"].fillCorrHistsX(hit,trackStruct.
trkParams.
dz);
1849 m_corrHists[
"Pt"].fillCorrHistsX(hit,trackStruct.
trkParams.
pt);
1850 m_corrHists[
"P"].fillCorrHistsX(hit,trackStruct.
trkParams.
p);
1851 m_corrHists[
"InvP"].fillCorrHistsX(hit,1./trackStruct.
trkParams.
p);
1857 std::map<std::string,TrackerSectorStruct::CorrelationHists>& m_corrHists(sector.
m_correlationHistsY);
1864 m_corrHists[
"HitsGood"].fillCorrHistsY(hit,goodHitsPerTrack);
1866 m_corrHists[
"Hits2D"].fillCorrHistsY(hit,trackStruct.
trkParams.
hits2D);
1872 m_corrHists[
"Phi"].fillCorrHistsY(hit,trackStruct.
trkParams.
phi*180./
M_PI);
1874 m_corrHists[
"Dz"].fillCorrHistsY(hit,trackStruct.
trkParams.
dz);
1875 m_corrHists[
"Pt"].fillCorrHistsY(hit,trackStruct.
trkParams.
pt);
1876 m_corrHists[
"P"].fillCorrHistsY(hit,trackStruct.
trkParams.
p);
1877 m_corrHists[
"InvP"].fillCorrHistsY(hit,1./trackStruct.
trkParams.
p);
1883 for(std::vector<TH1*>::iterator iHist = (*i_sigmaX).second.begin(); iHist != (*i_sigmaX).second.end(); ++iHist){
1884 if ((*i_sigmaX).first==
"sigmaXHit")(*iHist)->Fill(hit.
errXHit*10000.);
1885 else if((*i_sigmaX).first==
"sigmaXTrk")(*iHist)->Fill(hit.
errXTrk*10000.);
1886 else if((*i_sigmaX).first==
"sigmaX") (*iHist)->Fill(hit.
errX*10000.);
1890 for(std::vector<TH1*>::iterator iHist = (*i_sigmaY).second.begin(); iHist != (*i_sigmaY).second.end(); ++iHist){
1891 if ((*i_sigmaY).first==
"sigmaYHit")(*iHist)->Fill(hit.
errYHit*10000.);
1892 else if((*i_sigmaY).first==
"sigmaYTrk")(*iHist)->Fill(hit.
errYTrk*10000.);
1893 else if((*i_sigmaY).first==
"sigmaY") (*iHist)->Fill(hit.
errY*10000.);
1904 std::map<std::string, TrackerSectorStruct::CorrelationHists>& m_corrHists(sector.
m_correlationHistsX);
1907 m_corrHists[
"WidthX"].fillCorrHistsX(hit, hit.
widthX);
1908 m_corrHists[
"BaryStripX"].fillCorrHistsX(hit, hit.
baryStripX);
1911 m_corrHists[
"ChargePixel"].fillCorrHistsX(hit, hit.
chargePixel);
1916 m_corrHists[
"IsOnEdge"].fillCorrHistsX(hit, hit.
isOnEdge);
1917 m_corrHists[
"HasBadPixels"].fillCorrHistsX(hit, hit.
hasBadPixels);
1918 m_corrHists[
"SpansTwoRoc"].fillCorrHistsX(hit, hit.
spansTwoRoc);
1919 m_corrHists[
"QBin"].fillCorrHistsX(hit, hit.
qBin);
1923 m_corrHists[
"ChargeStrip"].fillCorrHistsX(hit, hit.
chargeStrip);
1924 m_corrHists[
"MaxStrip"].fillCorrHistsX(hit, hit.
maxStrip);
1925 m_corrHists[
"MaxCharge"].fillCorrHistsX(hit, hit.
maxCharge);
1926 m_corrHists[
"MaxIndex"].fillCorrHistsX(hit, hit.
maxIndex);
1927 m_corrHists[
"ChargeOnEdges"].fillCorrHistsX(hit, hit.
chargeOnEdges);
1928 m_corrHists[
"ChargeAsymmetry"].fillCorrHistsX(hit, hit.
chargeAsymmetry);
1929 m_corrHists[
"ChargeLRplus"].fillCorrHistsX(hit, hit.
chargeLRplus);
1930 m_corrHists[
"ChargeLRminus"].fillCorrHistsX(hit, hit.
chargeLRminus);
1931 m_corrHists[
"SOverN"].fillCorrHistsX(hit, hit.
sOverN);
1932 m_corrHists[
"WidthProj"].fillCorrHistsX(hit, hit.
projWidth);
1933 m_corrHists[
"WidthDiff"].fillCorrHistsX(hit, hit.
projWidth-static_cast<float>( hit.
widthX));
1949 m_corrHists[
"SigmaXHit"].fillCorrHistsX(hit, hit.
errXHit*10000.);
1950 m_corrHists[
"SigmaXTrk"].fillCorrHistsX(hit, hit.
errXTrk*10000.);
1951 m_corrHists[
"SigmaX"].fillCorrHistsX(hit, hit.
errX*10000.);
1953 m_corrHists[
"PhiSens"].fillCorrHistsX(hit, hit.
phiSens*180./
M_PI);
1954 m_corrHists[
"PhiSensX"].fillCorrHistsX(hit, hit.
phiSensX*180./
M_PI);
1955 m_corrHists[
"PhiSensY"].fillCorrHistsX(hit, hit.
phiSensY*180./
M_PI);
1961 sector.
ResX ->Fill(hit.
resX*10000.);
1974 std::map<std::string, TrackerSectorStruct::CorrelationHists>& m_corrHists(sector.
m_correlationHistsY);
1979 m_corrHists[
"WidthY"].fillCorrHistsY(hit,hit.
widthY);
1980 m_corrHists[
"BaryStripY"].fillCorrHistsY(hit,hit.
baryStripY);
1982 m_corrHists[
"ChargePixel"].fillCorrHistsY(hit, hit.
chargePixel);
1987 m_corrHists[
"IsOnEdge"].fillCorrHistsY(hit, hit.
isOnEdge);
1988 m_corrHists[
"HasBadPixels"].fillCorrHistsY(hit, hit.
hasBadPixels);
1989 m_corrHists[
"SpansTwoRoc"].fillCorrHistsY(hit, hit.
spansTwoRoc);
1990 m_corrHists[
"QBin"].fillCorrHistsY(hit, hit.
qBin);
1993 m_corrHists[
"SigmaYHit"].fillCorrHistsY(hit, hit.
errYHit*10000.);
1994 m_corrHists[
"SigmaYTrk"].fillCorrHistsY(hit, hit.
errYTrk*10000.);
1995 m_corrHists[
"SigmaY"].fillCorrHistsY(hit, hit.
errY*10000.);
1997 m_corrHists[
"PhiSens"].fillCorrHistsY(hit, hit.
phiSens*180./
M_PI);
1998 m_corrHists[
"PhiSensX"].fillCorrHistsY(hit, hit.
phiSensX*180./
M_PI);
1999 m_corrHists[
"PhiSensY"].fillCorrHistsY(hit, hit.
phiSensY*180./
M_PI);
2005 sector.
ResY ->Fill(hit.
resY*10000.);
2019 unsigned int goodHitsPerTrack(trackStruct.
v_hitParams.size());
2027 for(std::vector<TrackStruct::HitParameterStruct>::const_iterator i_hit = trackStruct.
v_hitParams.begin();
2032 for(std::map<unsigned int,TrackerSectorStruct>::iterator i_sector =
m_tkSector_.begin(); i_sector !=
m_tkSector_.end(); ++i_sector){
2034 bool moduleInSector(
false);
2035 for(std::vector<unsigned int>::const_iterator i_hitSector = (*i_hit).v_sector.begin(); i_hitSector != (*i_hit).v_sector.end(); ++i_hitSector){
2036 if((*i_sector).first == *i_hitSector){moduleInSector =
true;
break;}
2038 if(!moduleInSector)
continue;
2043 if((*i_hit).goodXMeasurement){
2044 for(
std::map<
unsigned int,std::pair<double,double> >::const_iterator i_errBins =
m_resErrBins_.begin();
2049 if((*i_hit).errXWoApe < (*i_errBins).second.first || (*i_hit).errXWoApe >= (*i_errBins).second.second){
2052 (*i_sector).second.m_binnedHists[(*i_errBins).first][
"sigmaX"] ->Fill((*i_hit).errXWoApe);
2053 (*i_sector).second.m_binnedHists[(*i_errBins).first][
"norResX"]->Fill((*i_hit).norResX);
2056 (*i_sector).second.ResX->Fill((*i_hit).resX*10000.);
2057 (*i_sector).second.NorResX->Fill((*i_hit).norResX);
2060 if((*i_hit).goodYMeasurement){
2061 for(
std::map<
unsigned int,std::pair<double,double> >::const_iterator i_errBins =
m_resErrBins_.begin();
2066 if((*i_hit).errYWoApe < (*i_errBins).second.first || (*i_hit).errYWoApe >= (*i_errBins).second.second){
2069 (*i_sector).second.m_binnedHists[(*i_errBins).first][
"sigmaY"] ->Fill((*i_hit).errYWoApe);
2070 (*i_sector).second.m_binnedHists[(*i_errBins).first][
"norResY"]->Fill((*i_hit).norResY);
2073 (*i_sector).second.ResY->Fill((*i_hit).resY*10000.);
2074 (*i_sector).second.NorResY->Fill((*i_hit).norResY);
2090 for(std::map<unsigned int,TrackerSectorStruct>::iterator i_sector =
m_tkSector_.begin(); i_sector !=
m_tkSector_.end(); ++i_sector){
2094 for(
std::map<
unsigned int, std::map<std::string,TH1*> >::const_iterator i_errBins = (*i_sector).second.m_binnedHists.begin();
2095 i_errBins != (*i_sector).second.m_binnedHists.end(); ++i_errBins){
2096 std::map<std::string,TH1*> m_Hists = (*i_errBins).second;
2099 double integralX = m_Hists[
"norResX"]->Integral();
2100 (*i_sector).second.EntriesX->SetBinContent((*i_errBins).first, integralX);
2102 if((*i_sector).second.isPixel){
2103 double integralY = m_Hists[
"norResY"]->Integral();
2104 (*i_sector).second.EntriesY->SetBinContent((*i_errBins).first, integralY);
2132 if (stripId.
stereo())
return true;
2133 else if (dynamic_cast<const SiStripRecHit1D*>(&hit)
2136 else if (dynamic_cast<const SiStripMatchedRecHit2D*>(&hit))
return true;
2137 else if (dynamic_cast<const ProjectedSiStripRecHit2D*>(&hit)) {
2141 edm::LogError(
"UnkownType") <<
"@SUB=AlignmentTrackSelector::isHit2D"
2142 <<
"Tracker hit not in pixel, neither SiStripRecHit[12]D nor "
2143 <<
"SiStripMatchedRecHit2D nor ProjectedSiStripRecHit2D.";
2148 edm::LogWarning(
"DetectorMismatch") <<
"@SUB=AlignmentTrackSelector::isHit2D"
2149 <<
"Hit not in tracker with 'official' dimension >=2.";
2169 if (beamSpotHandle.
isValid()){
2170 beamSpot = *beamSpotHandle;
2174 edm::LogError(
"ApeEstimator")<<
"No beam spot available from EventSetup"
2175 <<
"\n...skip event";
2188 typedef std::vector<ConstTrajTrackPair> ConstTrajTrackPairCollection;
2189 ConstTrajTrackPairCollection trajTracks;
2192 for(i_trajTrack = m_TrajTracksMap->begin();i_trajTrack != m_TrajTracksMap->end();++i_trajTrack){
2193 trajTracks.push_back(
ConstTrajTrackPair(&(*(*i_trajTrack).key), &(*(*i_trajTrack).val)));
2198 unsigned int trackSizeGood(0);
2199 ConstTrajTrackPairCollection::const_iterator iTrack;
2200 for(iTrack = trajTracks.begin(); iTrack != trajTracks.end();++iTrack){
2210 const std::vector<TrajectoryMeasurement> v_meas = (*traj).measurements();
2213 for(std::vector<TrajectoryMeasurement>::const_iterator i_meas = v_meas.begin(); i_meas != v_meas.end(); ++i_meas){
2221 if(trackStruct.
v_hitParams.size()>0)++trackSizeGood;
ClusterRef cluster() const
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 int dimension() const =0
const edm::ParameterSet parameterSet_
double d0Error() const
error on d0
TProfile * PHitsPixelVsTheta
unsigned short lost() const
Number of lost (=invalid) hits on track.
float clusterProbability(unsigned int flags=0) const
float logClusterProbability
virtual float length() const =0
ConstRecHitPointer const & recHit() const
virtual float localStripLength(const LocalPoint &) const =0
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
bool getByToken(EDGetToken token, Handle< PROD > &result) const
std::pair< uint16_t, uint16_t > chargeLR() const
double theta() const
polar angle
#define DEFINE_FWK_MODULE(type)
size_t recHitsSize() const
Get number of RecHits. (Warning, this includes invalid hits, which are not physical hits)...
std::map< std::string, std::vector< TH1 * > > m_sigmaY
LocalVector localDirection() const
LocalPoint localPosition() const
ApeEstimator(const edm::ParameterSet &)
TH2 * WidthDiffVsMaxStrip
Sin< T >::type sin(const T &t)
std::map< std::string, std::vector< TH1 * > > m_sigmaX
TProfile * PMeanAngleVsHits
double etaError() const
error on eta
TH2 * WidthDiffVsSigmaXHit
double phi() const
azimuthal angle of momentum vector
const Bounds & bounds() const
PositionAndError2 radialPositionAndError2(const LocalPoint &, const LocalError &, const RadialStripTopology &)
void fillHitHistsYForAnalyzerMode(const TrackStruct::HitParameterStruct &, TrackerSectorStruct &)
LocalVector toLocal(const reco::Track::Vector &v, const Surface &s)
uint16_t maxIndex() const
virtual float detHeight() const =0
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
auto stripCharges() const -> decltype(cluster() ->amplitudes())
void residualErrorBinning()
uint32_t rawId() const
get the raw id
virtual float thickness() const =0
DataContainer const & measurements() const
TProfile * PWidthDiffVsMaxStrip
float signalOverNoise() const
float getLorentzAngle(const uint32_t &) const
TProfile * PPhiSensXVsBarycentreX
virtual MeasurementError measurementError(const LocalPoint &, const LocalError &) const =0
double eta() const
pseudorapidity of momentum vector
std::vector< HitParameterStruct > v_hitParams
double chi2() const
chi-squared of the fit
void statistics(const TrackerSectorStruct &, const Int_t) const
double ndof() const
number of degrees of freedom of the fit
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_
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
virtual MeasurementPoint measurementPosition(const LocalPoint &) const =0
bool hitSelected(TrackStruct::HitParameterStruct &) const
ClusterRef cluster() const
virtual float angularWidth() const =0
virtual MeasurementPoint measurementPosition(const LocalPoint &) const =0
bool checkModulePositions(const float, const std::vector< double > &) const
T * make(const Args &...args) const
make new ROOT object
const LocalTrajectoryError & localError() const
TH2 * HitsGoodVsHitsValid
bool checkModuleBools(const bool, const std::vector< unsigned int > &) const
bool checkModuleIds(const unsigned int, const std::vector< unsigned int > &) const
std::map< unsigned int, TrackerSectorStruct > m_tkSector_
std::map< std::string, std::vector< unsigned int > > m_hitSelectionUInt_
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 float stripAngle(float strip) const =0
virtual TrackingRecHit const * hit() const
virtual void analyze(const edm::Event &, const edm::EventSetup &)
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
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.
virtual LocalError localPositionError() const =0
XYZPointD XYZPoint
point in space with cartesian internal representation
bool checkModuleDirections(const int, const std::vector< int > &) const
float clusterProbabilityQ
ClusterRef cluster() const
T const * product() const
double BeamWidthY() const
beam width Y
virtual float originToIntersection() const =0
bool inUintInterval(const std::vector< unsigned int > &, const unsigned int, const unsigned int=999) const
virtual const Topology & topology() const =0
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 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 &)
DetId geographicalId() const
volatile std::atomic< bool > shutdown_flag false
void fillHistsForAnalyzerMode(const TrackStruct &)
void bookSectorHistsForApeCalculation()
std::map< std::string, CorrelationHists > m_correlationHistsY
static uInt32 F(BLOWFISH_CTX *ctx, uInt32 x)
TH2 * WidthVsWidthProjected
TProfile * PHitsPixelVsEta
Detector det() const
get the detector field from this detid
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_
virtual LocalPoint localPosition() const =0
virtual float width() const =0
TH2 * PhiSensYVsBarycentreY
const PositionType & position() const
TProfile * PWidthVsPhiSensX
void setHitSelectionMapUInt(const std::string &)
LocalError const & localAlignmentError() const
Return local alligment error.
Power< A, B >::type pow(const A &a, const B &b)
std::vector< unsigned int > v_rawId
const Plane & specificSurface() const
Same as surface(), kept for backward compatibility.
TrajectoryStateOnSurface const & backwardPredictedState() const
Access to backward predicted state (from smoother)
double x0() const
x coordinate
StatePositionAndError2 positionAndError2(const LocalPoint &, const LocalError &, const TransientTrackingRecHit &)