128 iConfig.getUntrackedParameter<
edm::
InputTag>(
"TrackAssociatorByHitsOld"))),
130 iConfig.getUntrackedParameter<
edm::
InputTag>(
"TrackAssociatorByHitsOut"))),
132 LogTrace(
"TestOutliers") <<
"constructor";
142 LogTrace(
"TestOutliers") <<
"end constructor";
164 LogTrace(
"TestOutliers") <<
"analyze event #" << iEvent.
id();
173 iEvent.
getByLabel(
"offlineBeamSpot", beamSpot);
192 LogTrace(
"TestOutliers") <<
"tOld size=" << tracksOld->size() <<
" tOut size=" << tracksOut->size()
193 <<
" aOld size=" << recSimCollOld.
size() <<
" aOut size=" << recSimCollOut.
size();
196 LogTrace(
"TestOutliers") <<
"recSimCollOld.size()=" << recSimCollOld.
size() ;
200 LogTrace(
"TestOutliers") <<
"trackOld->pt()=" << trackOld->pt() <<
" trackOld->numberOfValidHits()=" << trackOld->numberOfValidHits();
201 std::vector<pair<TrackingParticleRef, double> > tpOld;
202 if(recSimCollOld.
find(trackOld) != recSimCollOld.
end()){
203 tpOld = recSimCollOld[trackOld];
204 if (tpOld.size()!=0)
LogTrace(
"TestOutliers") <<
" associated" ;
205 else LogTrace(
"TestOutliers") <<
" NOT associated" ;
206 }
else LogTrace(
"TestOutliers") <<
" NOT associated" ;
208 LogTrace(
"TestOutliers") <<
"recSimCollOut.size()=" << recSimCollOut.
size() ;
212 LogTrace(
"TestOutliers") <<
"trackOut->pt()=" << trackOut->pt() <<
" trackOut->numberOfValidHits()=" << trackOut->numberOfValidHits();
213 std::vector<pair<TrackingParticleRef, double> > tpOut;
214 if(recSimCollOut.
find(trackOut) != recSimCollOut.
end()){
215 tpOut = recSimCollOut[trackOut];
216 if (tpOut.size()!=0)
LogTrace(
"TestOutliers") <<
" associated" ;
217 else LogTrace(
"TestOutliers") <<
" NOT associated" ;
218 }
else LogTrace(
"TestOutliers") <<
" NOT associated" ;
222 LogTrace(
"TestOutliers") <<
"tracksOut->size()=" << tracksOut->size();
223 LogTrace(
"TestOutliers") <<
"tracksOld->size()=" << tracksOld->size();
225 std::vector<unsigned int> outused;
226 for (
unsigned int j = 0;
j < tracksOld->size(); ++
j) {
229 LogTrace(
"TestOutliers") <<
"now track old with id=" <<
j <<
" seed ref=" << trackOld->
seedRef().
get()
230 <<
" pt=" << trackOld->
pt() <<
" eta=" << trackOld->
eta()
232 <<
" tip= " << fabs(trackOld->
dxy(beamSpot->
position()))
233 <<
" lip= " << fabs(trackOld->
dsz(beamSpot->
position()));
248 std::vector<unsigned int> outtest;
249 for (
unsigned int k = 0;
k < tracksOut->size(); ++
k) {
252 outtest.push_back(
k);
257 if (outtest.size() == 1) {
259 LogTrace(
"TestOutliers") <<
"now track out with id=" << outtest[0] <<
" seed ref=" << trackOut->
seedRef().
get()
260 <<
" pt=" << trackOut->
pt();
261 outused.push_back(outtest[0]);
262 }
else if (outtest.size() > 1) {
263 for (
unsigned int p = 0;
p < outtest.size(); ++
p) {
267 if ((*itOut)->isValid()) {
268 bool thishit =
false;
270 if ((*itOld)->isValid()) {
284 LogTrace(
"TestOutliers") <<
"now track out with id=" << outtest[
p]
285 <<
" seed ref=" << trackOut->
seedRef().
get() <<
" pt=" << trackOut->
pt();
286 outused.push_back(outtest[
p]);
291 if (outtest.empty() || trackOut.
get() ==
nullptr) {
292 if (recSimCollOld.
find(trackOld) != recSimCollOld.
end()) {
293 vector<pair<TrackingParticleRef, double> > tpOld;
294 tpOld = recSimCollOld[trackOld];
295 if (!tpOld.empty()) {
296 LogTrace(
"TestOutliers") <<
"no match: old associated and out lost! old has #hits=" 298 if (tpOld.begin()->second > 0.5)
302 LogTrace(
"TestOutliers") <<
"...skip to next old track";
308 <<
" trackOld->seedRef()=" << trackOld->
seedRef().
get();
309 bool oldAssoc = recSimCollOld.
find(trackOld) != recSimCollOld.
end();
310 bool outAssoc = recSimCollOut.
find(trackOut) != recSimCollOut.
end();
311 LogTrace(
"TestOutliers") <<
"outAssoc=" << outAssoc <<
" oldAssoc=" << oldAssoc;
339 std::vector<unsigned int> tpids;
340 std::vector<std::pair<TrackingParticleRef, double> > tpOut;
341 std::vector<pair<TrackingParticleRef, double> > tpOld;
345 tpOut = recSimCollOut[trackOut];
346 if (!tpOut.empty()) {
348 tprOut = tpOut.begin()->first;
349 fracOut = tpOut.begin()->second;
351 tpids.push_back(g4T->trackId());
357 tpOld = recSimCollOld[trackOld];
358 if (!tpOld.empty()) {
359 tprOld = tpOld.begin()->first;
365 tpids.push_back(g4T->trackId());
371 if (tprOut.
get() !=
nullptr || tprOld.
get() !=
nullptr) {
373 tpr = tprOut.
get() !=
nullptr ? tprOut : tprOld;
375 const SimTrack *assocTrack = &(*tpr->g4Track_begin());
388 <<
"Out->pt=" << trackOut->
pt() <<
" Old->pt=" << trackOld->
pt() <<
" tp->pt=" 389 <<
sqrt(tpr->momentum().perp2())
397 double PtPullOut = (trackOut->
pt() -
sqrt(tpr->momentum().perp2())) / trackOut->
ptError();
398 double PtPullOld = (trackOld->
pt() -
sqrt(tpr->momentum().perp2())) / trackOld->
ptError();
406 GlobalPoint(tpr->vertex().x(), tpr->vertex().y(), tpr->vertex().z()),
412 tscpBuilder(ftsAtProduction,
GlobalPoint(0, 0, 0));
417 double qoverpSim = tsAtClosestApproach.
charge() / p.
mag();
419 double phiSim = p.
phi();
421 double dszSim = v.
z() * p.
perp() / p.
mag() - (v.
x() * p.
x() + v.
y() * p.
y()) / p.
perp() * p.
z() / p.
mag();
422 double d0Sim = -dxySim;
423 double dzSim = dszSim * p.
mag() / p.
perp();
426 double qoverpPullOut = (trackOut->
qoverp() - qoverpSim) / trackOut->
qoverpError();
427 double qoverpPullOld = (trackOld->
qoverp() - qoverpSim) / trackOld->
qoverpError();
428 double lambdaPullOut = (trackOut->
lambda() - lambdaSim) / trackOut->
thetaError();
429 double lambdaPullOld = (trackOld->
lambda() - lambdaSim) / trackOld->
thetaError();
430 double phi0PullOut = (trackOut->
phi() - phiSim) / trackOut->
phiError();
431 double phi0PullOld = (trackOld->
phi() - phiSim) / trackOld->
phiError();
432 double d0PullOut = (trackOut->
d0() - d0Sim) / trackOut->
d0Error();
433 double d0PullOld = (trackOld->
d0() - d0Sim) / trackOld->
d0Error();
434 double dzPullOut = (trackOut->
dz() - dzSim) / trackOut->
dzError();
435 double dzPullOld = (trackOld->
dz() - dzSim) / trackOld->
dzError();
453 if (tprOut.
get() !=
nullptr && tprOld.
get() ==
nullptr) {
454 if (!tpOld.empty() && tpOld.begin()->second <= 0.5) {
465 }
else if (tprOut.
get() ==
nullptr && tprOld.
get() !=
nullptr) {
467 <<
" and fraction=" << tpOld.begin()->second;
468 if (tpOld.begin()->second > 0.5) {
474 if (fabs(PtPullOut) < fabs(PtPullOld))
483 LogTrace(
"TestOutliers") <<
"track old";
485 LogTrace(
"TestOutliers") << (*itOld)->isValid() <<
" " << (*itOld)->geographicalId().rawId();
487 LogTrace(
"TestOutliers") <<
"track out";
489 LogTrace(
"TestOutliers") << (*itOut)->isValid() <<
" " << (*itOut)->geographicalId().rawId();
493 vector<pair<int, trackingRecHit_iterator> > gainedlostoutliers;
497 if ((*itOut)->isValid()) {
499 if ((*itOld)->geographicalId().rawId() == (*itOut)->geographicalId().rawId())
503 gainedlostoutliers.push_back(pair<int, trackingRecHit_iterator>(1, itOut));
504 LogTrace(
"TestOutliers") <<
"broken trajectory during old fit... gained hit " 505 << (*itOut)->geographicalId().rawId();
513 bool outlier =
false;
517 if ((*itOld)->geographicalId().rawId() == (*itOut)->geographicalId().rawId()) {
519 if ((*itOld)->isValid() && !(*itOut)->isValid() &&
520 (*itOld)->geographicalId().rawId() == (*itOut)->geographicalId().rawId()) {
521 LogTrace(
"TestOutliers") << (*itOld)->isValid() <<
" " << (*itOut)->isValid() <<
" " 522 << (*itOld)->geographicalId().rawId() <<
" " 523 << (*itOut)->geographicalId().rawId();
529 gainedlostoutliers.push_back(pair<int, trackingRecHit_iterator>(2, itOld));
533 gainedlostoutliers.push_back(pair<int, trackingRecHit_iterator>(3, itOld));
536 for (std::vector<pair<int, trackingRecHit_iterator> >::iterator it = gainedlostoutliers.begin();
537 it != gainedlostoutliers.end();
539 LogTrace(
"TestOutliers") <<
"type of processed hit:" << it->first;
543 bool outlier =
false;
546 else if (it->first == 2)
548 else if (it->first == 3)
551 if (outlier || lost || gained) {
554 if (lost && (*itHit)->isValid() ==
false) {
556 LogTrace(
"TestOutliers") <<
"lost invalid";
558 }
else if (gained && (*itHit)->isValid() ==
false) {
560 LogTrace(
"TestOutliers") <<
"gained invalid";
566 std::vector<SimHitIdpr> simTrackIds = hitAssociator.
associateHitId(**itHit);
567 bool goodhit =
false;
568 for (
size_t j = 0;
j < simTrackIds.size();
j++) {
569 for (
size_t jj = 0;
jj < tpids.size();
jj++) {
570 if (simTrackIds[
j].
first == tpids[
jj])
580 if (dynamic_cast<const SiPixelRecHit *>(&**itHit)) {
581 LogTrace(
"TestOutliers") <<
"SiPixelRecHit";
582 clustersize = ((
const SiPixelRecHit *)(&**itHit))->cluster()->size();
584 }
else if (dynamic_cast<const SiStripRecHit2D *>(&**itHit)) {
585 LogTrace(
"TestOutliers") <<
"SiStripRecHit2D";
586 clustersize = ((
const SiStripRecHit2D *)(&**itHit))->cluster()->amplitudes().size();
588 }
else if (dynamic_cast<const SiStripMatchedRecHit2D *>(&**itHit)) {
589 LogTrace(
"TestOutliers") <<
"SiStripMatchedRecHit2D";
592 if (clsize1 > clsize2)
593 clustersize = clsize1;
595 clustersize = clsize2;
597 }
else if (dynamic_cast<const ProjectedSiStripRecHit2D *>(&**itHit)) {
598 LogTrace(
"TestOutliers") <<
"ProjectedSiStripRecHit2D";
605 int subdetId = (*itHit)->geographicalId().subdetId();
606 DetId id = (*itHit)->geographicalId();
607 int layerId = tTopo->
layer(
id);
608 layerval = subdetId * 10 + layerId;
626 double energyLoss_ = 0.;
627 unsigned int monoId = 0;
628 std::vector<double> energyLossM;
629 std::vector<double> energyLossS;
630 std::vector<PSimHit> assSimHits = hitAssociator.
associateHit(**itHit);
631 if (assSimHits.empty())
634 std::vector<unsigned int> trackIds;
638 for (std::vector<PSimHit>::const_iterator
m = assSimHits.begin();
m < assSimHits.end();
m++) {
641 unsigned int tId =
m->trackId();
642 if (
find(trackIds.begin(), trackIds.end(), tId) == trackIds.end())
643 trackIds.push_back(tId);
644 LogTrace(
"TestOutliers") <<
"id=" << tId;
645 if (
m->energyLoss() > energyLoss_) {
647 energyLoss_ =
m->energyLoss();
649 if (hittypeval == 3) {
651 monoId =
m->detUnitId();
652 if (monoId ==
m->detUnitId()) {
653 energyLossM.push_back(
m->energyLoss());
655 energyLossS.push_back(
m->energyLoss());
659 energyLossM.push_back(
m->energyLoss());
662 unsigned int nIds = trackIds.size();
666 posxy->Fill(fabs(gpos.
x()), fabs(gpos.
y()));
667 poszr->Fill(fabs(gpos.
z()),
sqrt(gpos.
x() * gpos.
x() + gpos.
y() * gpos.
y()));
674 bool ioniOnly =
true;
675 unsigned int idc = 0;
676 for (
size_t jj = 0;
jj < tpids.size();
jj++) {
677 idc +=
std::count(trackIds.begin(), trackIds.end(), tpids[
jj]);
679 if (idc == trackIds.size()) {
682 for (std::vector<PSimHit>::const_iterator
m = assSimHits.begin() + 1;
m < assSimHits.end();
m++) {
683 if ((
m->processType() != 7 &&
m->processType() != 8 &&
m->processType() != 9) &&
684 abs(
m->particleType()) != 11) {
689 if (ioniOnly && !shared) {
690 LogTrace(
"TestOutliers") <<
"delta";
696 if (clustersize >= 4) {
704 if (hittypeval == 1 && clustersize >= 4)
706 if (hittypeval == 1 && clustersize < 4)
708 if (hittypeval == 2 && clustersize >= 4)
710 if (hittypeval == 2 && clustersize < 4)
712 if (hittypeval == 3 && clustersize >= 4)
714 if (hittypeval == 3 && clustersize < 4)
716 if (hittypeval == 4 && clustersize >= 4)
718 if (hittypeval == 4 && clustersize < 4)
741 if (hittypeval != 3) {
742 if (energyLossM.size() > 1) {
743 sort(energyLossM.begin(), energyLossM.end(), greater<double>());
748 if (energyLossM.size() > 1 && energyLossS.size() <= 1) {
749 sort(energyLossM.begin(), energyLossM.end(), greater<double>());
751 }
else if (energyLossS.size() > 1 && energyLossM.size() <= 1) {
752 sort(energyLossS.begin(), energyLossS.end(), greater<double>());
754 }
else if (energyLossS.size() > 1 && energyLossM.size() > 1) {
755 sort(energyLossM.begin(), energyLossM.end(), greater<double>());
756 sort(energyLossS.begin(), energyLossS.end(), greater<double>());
757 energyLossM[1] / energyLossM[0] > energyLossS[1] / energyLossS[0]
763 LogTrace(
"TestOutliers") <<
"before merged";
766 LogTrace(
"TestOutliers") <<
"assSimHits.size()=" << assSimHits.size();
767 if ((assSimHits.size() > 1 && tmp ==
nullptr) || (assSimHits.size() > 2 && tmp !=
nullptr)) {
774 for (std::vector<PSimHit>::const_iterator
m = assSimHits.begin();
m < assSimHits.end();
m++) {
775 unsigned int tId =
m->trackId();
776 LogTrace(
"TestOutliers") <<
"component with id=" << tId <<
" eLoss=" <<
m->energyLoss()
777 <<
" proc=" <<
m->processType() <<
" part=" <<
m->particleType();
778 if (
find(tpids.begin(), tpids.end(), tId) == tpids.end())
780 if (
m->processType() == 2) {
784 .
transform((*itHit)->localPositionError(),
785 theG->
idToDet((*itHit)->geographicalId())->surface())
791 ROOT::Math::SVector<double, 3>
delta;
792 delta[0] = gpos.
x() - gps.
x();
793 delta[1] = gpos.
y() - gps.
y();
794 delta[2] = gpos.
z() - gps.
z();
795 LogTrace(
"TestOutliers") << delta <<
" " << ger;
796 double mpull =
sqrt(delta[0] * delta[0] / ger[0][0] + delta[1] * delta[1] / ger[1][1] +
797 delta[2] * delta[2] / ger[2][2]);
798 LogTrace(
"TestOutliers") <<
"hit pull=" << mpull;
802 LogTrace(
"TestOutliers") <<
"end merged";
812 if ((hittypeval != 3 && assSimHits.size() < 2) || (hittypeval == 3 && assSimHits.size() < 3)) {
821 LogTrace(
"TestOutliers") <<
"out good";
824 LogTrace(
"TestOutliers") <<
"lost good";
827 LogTrace(
"TestOutliers") <<
"gained good";
834 if (ioniOnly && !shared) {
840 }
else if (!ioniOnly && !shared) {
853 LogTrace(
"TestOutliers") <<
"out merged, ioniOnly=" << ioniOnly <<
" shared=" << shared;
855 if (ioniOnly && !shared)
857 else if (!ioniOnly && !shared)
861 LogTrace(
"TestOutliers") <<
"lost merged, ioniOnly=" << ioniOnly <<
" shared=" << shared;
863 if (ioniOnly && !shared)
865 else if (!ioniOnly && !shared)
869 LogTrace(
"TestOutliers") <<
"gained merged, ioniOnly=" << ioniOnly <<
" shared=" << shared;
871 LogTrace(
"TestOutliers") <<
"merged, ioniOnly=" << ioniOnly <<
" shared=" << shared;
887 LogTrace(
"TestOutliers") <<
"out bad";
890 LogTrace(
"TestOutliers") <<
"lost bad";
893 LogTrace(
"TestOutliers") <<
"gained bad";
905 <<
"Out->pt=" << trackOut->
pt() <<
" Old->pt=" << trackOld->
pt() <<
" tp->pt=" 906 <<
sqrt(tpr->momentum().perp2())
912 LogTrace(
"TestOutliers") <<
"track with gained hits";
918 LogTrace(
"TestOutliers") <<
"end track old #" <<
j;
921 for (
unsigned int k = 0;
k < tracksOut->size(); ++
k) {
922 if (
find(outused.begin(), outused.end(),
k) == outused.end()) {
924 bool outAssoc = recSimCollOut.
find(trackOut) != recSimCollOut.
end();
936 const bool oldAddDir = TH1::AddDirectoryStatus();
937 TH1::AddDirectory(
true);
938 file =
new TFile(
out.c_str(),
"recreate");
939 histoPtOut =
new TH1F(
"histoPtOut",
"histoPtOut", 100, -10, 10);
940 histoPtOld =
new TH1F(
"histoPtOld",
"histoPtOld", 100, -10, 10);
941 histoQoverpOut =
new TH1F(
"histoQoverpOut",
"histoQoverpOut", 250, -25, 25);
942 histoQoverpOld =
new TH1F(
"histoQoverpOld",
"histoQoverpOld", 250, -25, 25);
943 histoPhiOut =
new TH1F(
"histoPhiOut",
"histoPhiOut", 250, -25, 25);
944 histoPhiOld =
new TH1F(
"histoPhiOld",
"histoPhiOld", 250, -25, 25);
945 histoD0Out =
new TH1F(
"histoD0Out",
"histoD0Out", 250, -25, 25);
946 histoD0Old =
new TH1F(
"histoD0Old",
"histoD0Old", 250, -25, 25);
947 histoDzOut =
new TH1F(
"histoDzOut",
"histoDzOut", 250, -25, 25);
948 histoDzOld =
new TH1F(
"histoDzOld",
"histoDzOld", 250, -25, 25);
949 histoLambdaOut =
new TH1F(
"histoLambdaOut",
"histoLambdaOut", 250, -25, 25);
950 histoLambdaOld =
new TH1F(
"histoLambdaOld",
"histoLambdaOld", 250, -25, 25);
951 deltahits =
new TH1F(
"deltahits",
"deltahits", 80, -40, 40);
952 deltahitsOK =
new TH1F(
"deltahitsOK",
"deltahitsOK", 20, 0, 20);
953 deltahitsNO =
new TH1F(
"deltahitsNO",
"deltahitsNO", 20, 0, 20);
954 okcutsOut =
new TH1F(
"okcutsOut",
"okcutsOut", 2, -0.5, 1.5);
955 okcutsOld =
new TH1F(
"okcutsOld",
"okcutsOld", 2, -0.5, 1.5);
956 tracks =
new TH1F(
"tracks_",
"tracks_", 2, -0.5, 1.5);
957 goodbadhits =
new TH1F(
"goodbadhits",
"goodbadhits", 2, -0.5, 1.5);
958 process =
new TH1F(
"process",
"process", 20, -0.5, 19.5);
959 goodcluster =
new TH1F(
"goodcluster",
"goodcluster", 40, -0.5, 39.5);
960 goodprocess =
new TH1F(
"goodprocess",
"goodprocess", 20, -0.5, 19.5);
961 badcluster =
new TH1F(
"badcluster",
"badcluster", 40, -0.5, 39.5);
962 badprocess =
new TH1F(
"badprocess",
"badprocess", 20, -0.5, 19.5);
963 goodhittype =
new TH1F(
"goodhittype",
"goodhittype", 5, -0.5, 4.5);
964 goodlayer =
new TH1F(
"goodlayer",
"goodlayer", 70, -0.5, 69.5);
965 goodhittype_clgteq4 =
new TH1F(
"goodhittype_clgteq4",
"goodhittype_clgteq4", 5, -0.5, 4.5);
966 goodlayer_clgteq4 =
new TH1F(
"goodlayer_clgteq4",
"goodlayer_clgteq4", 70, -0.5, 69.5);
967 goodhittype_cllt4 =
new TH1F(
"goodhittype_cllt4",
"goodhittype_cllt4", 5, -0.5, 4.5);
968 goodlayer_cllt4 =
new TH1F(
"goodlayer_cllt4",
"goodlayer_cllt4", 70, -0.5, 69.5);
969 badhittype =
new TH1F(
"badhittype",
"badhittype", 5, -0.5, 4.5);
970 badlayer =
new TH1F(
"badlayer",
"badlayer", 70, -0.5, 69.5);
971 posxy =
new TH2F(
"posxy",
"posxy", 1200, 0, 120, 1200, 0, 120);
972 poszr =
new TH2F(
"poszr",
"poszr", 3000, 0, 300, 1200, 0, 120);
981 goodpix_clustersize =
new TH1F(
"goodpix_clustersize",
"goodpix_clustersize", 40, -0.5, 39.5);
982 goodst1_clustersize =
new TH1F(
"goodst1_clustersize",
"goodst1_clustersize", 40, -0.5, 39.5);
983 goodst2_clustersize =
new TH1F(
"goodst2_clustersize",
"goodst2_clustersize", 40, -0.5, 39.5);
984 goodprj_clustersize =
new TH1F(
"goodprj_clustersize",
"goodprj_clustersize", 40, -0.5, 39.5);
985 goodpix_simvecsize =
new TH1F(
"goodpix_simvecsize",
"goodpix_simvecsize", 40, -0.5, 39.5);
986 goodst1_simvecsize =
new TH1F(
"goodst1_simvecsize",
"goodst1_simvecsize", 40, -0.5, 39.5);
987 goodst2_simvecsize =
new TH1F(
"goodst2_simvecsize",
"goodst2_simvecsize", 40, -0.5, 39.5);
988 goodprj_simvecsize =
new TH1F(
"goodprj_simvecsize",
"goodprj_simvecsize", 40, -0.5, 39.5);
992 goodlayer_simvecbig =
new TH1F(
"goodlayer_simvecbig",
"goodlayer_simvecbig", 70, -0.5, 69.5);
993 goodbadmerged =
new TH1F(
"goodbadmerged",
"goodbadmerged", 5, 0.5, 5.5);
994 goodbadmergedLost =
new TH1F(
"goodbadmergedLost",
"goodbadmergedLost", 5, 0.5, 5.5);
996 energyLoss =
new TH1F(
"energyLoss",
"energyLoss", 1000, 0, 0.1);
997 energyLossMax =
new TH1F(
"energyLossMax",
"energyLossMax", 1000, 0, 0.1);
998 energyLossRatio =
new TH1F(
"energyLossRatio",
"energyLossRatio", 100, 0, 1);
999 nOfTrackIds =
new TH1F(
"nOfTrackIds",
"nOfTrackIds", 10, 0, 10);
1000 mergedPull =
new TH1F(
"mergedPull",
"mergedPull", 100, 0, 10);
1001 mergedlayer =
new TH1F(
"mergedlayer",
"mergedlayer", 70, -0.5, 69.5);
1002 mergedhittype =
new TH1F(
"mergedhittype",
"mergedhittype", 5, -0.5, 4.5);
1003 mergedcluster =
new TH1F(
"mergedcluster",
"mergedcluster", 40, -0.5, 39.5);
1005 deltahitsAssocLost =
new TH1F(
"deltahitsAssocLost",
"deltahitsAssocLost", 80, -40, 40);
1006 hitsPerTrackLost =
new TH1F(
"hitsPerTrackLost",
"hitsPerTrackLost", 40, -0.5, 39.5);
1008 hitsPerTrackGained =
new TH1F(
"hitsPerTrackGained",
"hitsPerTrackGained", 40, -0.5, 39.5);
1010 sizeOut =
new TH1F(
"sizeOut",
"sizeOut", 900, -0.5, 899.5);
1011 sizeOld =
new TH1F(
"sizeOld",
"sizeOld", 900, -0.5, 899.5);
1012 sizeOutT =
new TH1F(
"sizeOutT",
"sizeOutT", 900, -0.5, 899.5);
1013 sizeOldT =
new TH1F(
"sizeOldT",
"sizeOldT", 900, -0.5, 899.5);
1014 countOutA =
new TH1F(
"countOutA",
"countOutA", 2, 0, 2);
1015 countOutT =
new TH1F(
"countOutT",
"countOutT", 2, 0, 2);
1016 countOldT =
new TH1F(
"countOldT",
"countOldT", 2, 0, 2);
1017 gainedhits =
new TH1F(
"gainedhits",
"gainedhits", 2, 0, 2);
1018 gainedhits2 =
new TH1F(
"gainedhits2",
"gainedhits2", 30, -0.5, 29.5);
1019 probXgood =
new TH1F(
"probXgood",
"probXgood", 110, 0, 1.1);
1020 probXbad =
new TH1F(
"probXbad",
"probXbad", 110, 0, 1.1);
1021 probXdelta =
new TH1F(
"probXdelta",
"probXdelta", 110, 0, 1.1);
1022 probXshared =
new TH1F(
"probXshared",
"probXshared", 110, 0, 1.1);
1023 probXnoshare =
new TH1F(
"probXnoshare",
"probXnoshare", 110, 0, 1.1);
1024 probYgood =
new TH1F(
"probYgood",
"probYgood", 110, 0, 1.1);
1025 probYbad =
new TH1F(
"probYbad",
"probYbad", 110, 0, 1.1);
1026 probYdelta =
new TH1F(
"probYdelta",
"probYdelta", 110, 0, 1.1);
1027 probYshared =
new TH1F(
"probYshared",
"probYshared", 110, 0, 1.1);
1028 probYnoshare =
new TH1F(
"probYnoshare",
"probYnoshare", 110, 0, 1.1);
1029 TH1::AddDirectory(oldAddDir);
1033 LogTrace(
"TestOutliers") <<
"TestOutliers::endJob";
1035 LogTrace(
"TestOutliers") <<
"outfile written";
1037 LogTrace(
"TestOutliers") <<
"oufile closed";
1038 LogTrace(
"TestOutliers") <<
"exiting TestOutliers::endJob";
double qoverp() const
q / p
const edm::RefToBase< TrajectorySeed > & seedRef() const
value_type const * get() const
TH1F * hitsPerTrackGained
edm::EDGetTokenT< reco::TrackToTrackingParticleAssociator > theAssociatorOutToken
double d0Error() const
error on d0
TH1F * goodprj_clustersize
double d0() const
dxy parameter in perigee convention (d0 = -dxy)
TH1F * goodpixlt4_simvecsize
const_iterator end() const
last iterator over the map (read only)
double normalizedChi2() const
chi-squared divided by n.d.o.f. (or chi-squared * 1e6 if n.d.o.f. is zero)
bool getByToken(EDGetToken token, Handle< PROD > &result) const
TH1F * hitsPerTrackAssocLost
const FreeTrajectoryState & theState() const
TH1F * goodst1_simvecsize
TH1F * goodst2lt4_simvecsize
TH1F * goodst1gteq4_simvecsize
GlobalPoint toGlobal(const Local2DPoint &lp) const
Conversion to the global R.F. from the R.F. of the GeomDet.
TH1F * goodprj_simvecsize
Sin< T >::type sin(const T &t)
const_iterator find(const key_type &k) const
find element with specified reference key
Geom::Phi< T > phi() const
Global3DPoint GlobalPoint
std::vector< Track > TrackCollection
collection of Tracks
double phi() const
azimuthal angle of momentum vector
void find(edm::Handle< EcalRecHitCollection > &hits, DetId thisDet, std::vector< EcalRecHitCollection::const_iterator > &hit, bool debug=false)
double dsz() const
dsz parameter (THIS IS NOT the SZ impact parameter to (0,0,0) if refPoint is far from (0...
TrackCharge charge() const
TH1F * hitsPerTrackAssocGained
TH1F * goodst2_simvecsize
edm::EDGetTokenT< reco::TrackToTrackingParticleAssociator > theAssociatorOldToken
EDGetTokenT< ProductType > consumes(edm::InputTag const &tag)
Geom::Theta< T > theta() const
TH1F * goodhittype_simvecsmall
TH1F * goodpix_clustersize
TH1F * goodprjgteq4_simvecsize
#define DEFINE_FWK_MODULE(type)
double eta() const
pseudorapidity of momentum vector
TH1F * goodst1_clustersize
TH1F * goodpixgteq4_simvecsize
TH1F * goodprjlt4_simvecsize
ConsumesCollector consumesCollector()
Use a ConsumesCollector to gather consumes information from helper functions.
double pt() const
track transverse momentum
TH1F * goodpix_simvecsize
Cos< T >::type cos(const T &t)
double ptError() const
error on Pt (set to 1000 TeV if charge==0 for safety)
double phiError() const
error on phi
Abs< T >::type abs(const T &t)
double lambda() const
Lambda angle.
TH1F * goodlayer_simvecsmall
TH1F * goodhittype_simvecbig
float probabilityY() const
unsigned short numberOfValidHits() const
number of valid hits found
T const * get() const
Returns C++ pointer to the item.
trackingRecHit_iterator recHitsBegin() const
Iterator to first hit on the track.
TestOutliers(const edm::ParameterSet &)
edm::InputTag trackTagsOut_
bool getByLabel(InputTag const &tag, Handle< PROD > &result) const
GlobalVector momentum() const
reco::RecoToSimCollection associateRecoToSim(const edm::Handle< edm::View< reco::Track >> &tCH, const edm::Handle< TrackingParticleCollection > &tPCH) const
double qoverpError() const
error on signed transverse curvature
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
std::vector< SimTrack >::const_iterator g4t_iterator
GlobalPoint position() const
TH1F * goodst1lt4_simvecsize
TH1F * goodhittype_clgteq4
size_type size() const
map size
T const * product() const
TH1F * deltahitsAssocGained
void beginRun(edm::Run const &run, const edm::EventSetup &) override
TH1F * goodst2_clustersize
unsigned short processType() const
unsigned int layer(const DetId &id) const
TrackerHitAssociator::Config trackerHitAssociatorConfig_
std::vector< SimHitIdpr > associateHitId(const TrackingRecHit &thit) const
const math::XYZTLorentzVectorD & momentum() const
TH1F * goodst2gteq4_simvecsize
edm::ESHandle< TrackerGeometry > theG
const TrackerGeomDet * idToDet(DetId) const override
ROOT::Math::SMatrix< double, 3, 3, ROOT::Math::MatRepSym< double, 3 > > AlgebraicSymMatrix33
std::vector< PSimHit > associateHit(const TrackingRecHit &thit) const
void analyze(const edm::Event &, const edm::EventSetup &) override
int charge() const
track electric charge
const Point & position() const
position
TH1F * deltahitsAssocLost
TH1F * goodlayer_simvecbig
float probabilityX() const
edm::InputTag trackTagsOld_
double dxy() const
dxy parameter. (This is the transverse impact parameter w.r.t. to (0,0,0) ONLY if refPoint is close t...
T const * product() const
Global3DVector GlobalVector
double thetaError() const
error on theta
TH1F * goodbadmergedGained
trackingRecHit_iterator recHitsEnd() const
Iterator to last hit on the track.