95 enableDTMeasurement,enableCSCMeasurement,
false,
false,
false);
128 std::vector<TrajectorySeed> rawSeeds;
129 std::vector<float> etaOfSeed;
130 std::vector<float> phiOfSeed;
131 std::vector<int> nSegOnSeed;
156 std::cout <<
"*** Number of DT segments is: " << DTlist4.size()+DTlist3.size()+DTlist2.size()+DTlist1.size() << std::endl;
157 std::cout <<
"In MB1: " << DTlist1.size() << std::endl;
158 std::cout <<
"In MB2: " << DTlist2.size() << std::endl;
159 std::cout <<
"In MB3: " << DTlist3.size() << std::endl;
160 std::cout <<
"In MB4: " << DTlist4.size() << std::endl;
193 std::cout <<
"*** Number of CSC segments is " << CSClist4F.size()+CSClist3F.size()+CSClist2F.size()+CSClist1F.size()+CSClist0F.size()+CSClist4B.size()+CSClist3B.size()+CSClist2B.size()+CSClist1B.size()+CSClist0B.size()<< std::endl;
194 std::cout <<
"In ME11: " << CSClist0F.size()+CSClist0B.size() << std::endl;
195 std::cout <<
"In ME12: " << CSClist1F.size()+CSClist1B.size() << std::endl;
196 std::cout <<
"In ME2 : " << CSClist2F.size()+CSClist2B.size() << std::endl;
197 std::cout <<
"In ME3 : " << CSClist3F.size()+CSClist3B.size() << std::endl;
198 std::cout <<
"In ME4 : " << CSClist4F.size()+CSClist4B.size() << std::endl;
211 for (SegmentContainer::iterator it = DTlist1.begin(); it != DTlist1.end(); ++it ){
215 if (usedDTlist1[index] ==
true)
continue;
217 if ((*it)->dimension() != 4)
continue;
224 float eta_temp = gp.
eta();
225 float phi_temp = gp.
phi();
226 bool showeringBefore =
false;
230 if ( showeringBefore ) {
236 protoTrack.push_back(*it);
239 layers.push_back(-1);
242 if (
foundMatchingSegment(3, protoTrack, DTlist2, usedDTlist2, eta_temp, phi_temp, layers[layers.size()-1], showeringBefore )) layers.push_back(-2);
243 if ( showeringBefore ) NShowers++ ;
244 if (
foundMatchingSegment(3, protoTrack, DTlist3, usedDTlist3, eta_temp, phi_temp, layers[layers.size()-1], showeringBefore )) layers.push_back(-3);
245 if ( showeringBefore ) NShowers++ ;
246 if (
foundMatchingSegment(3, protoTrack, DTlist4, usedDTlist4, eta_temp, phi_temp, layers[layers.size()-1], showeringBefore )) layers.push_back(-4);
247 if ( showeringBefore ) NShowers++ ;
250 if (eta_temp > 0.8) {
251 if (
foundMatchingSegment(2, protoTrack, CSClist1F, usedCSClist1F, eta_temp, phi_temp, layers[layers.size()-1], showeringBefore )) layers.push_back(1);
252 if ( showeringBefore ) NShowers++ ;
253 if (
foundMatchingSegment(2, protoTrack, CSClist2F, usedCSClist2F, eta_temp, phi_temp, layers[layers.size()-1], showeringBefore )) layers.push_back(2);
254 if ( showeringBefore ) NShowers++ ;
255 if (
foundMatchingSegment(2, protoTrack, CSClist3F, usedCSClist3F, eta_temp, phi_temp, layers[layers.size()-1], showeringBefore )) layers.push_back(3);
256 if ( showeringBefore ) NShowers++ ;
258 else if (eta_temp < -0.8) {
259 if (
foundMatchingSegment(2, protoTrack, CSClist1B, usedCSClist1B, eta_temp, phi_temp, layers[layers.size()-1], showeringBefore )) layers.push_back(1);
260 if ( showeringBefore ) NShowers++ ;
261 if (
foundMatchingSegment(2, protoTrack, CSClist2B, usedCSClist2B, eta_temp, phi_temp, layers[layers.size()-1], showeringBefore )) layers.push_back(2);
262 if ( showeringBefore ) NShowers++ ;
263 if (
foundMatchingSegment(2, protoTrack, CSClist3B, usedCSClist3B, eta_temp, phi_temp, layers[layers.size()-1], showeringBefore )) layers.push_back(3);
264 if ( showeringBefore ) NShowers++ ;
288 if ( layers.size() < 2 ) {
291 if ( layers[ layers.size()-1] > 0 ) {
298 rawSeeds.push_back(thisSeed);
299 etaOfSeed.push_back(eta_temp);
300 phiOfSeed.push_back(phi_temp);
301 nSegOnSeed.push_back( protoTrack.size() );
304 usedDTlist1[
index] =
true;
310 for (SegmentContainer::iterator it = DTlist2.begin(); it != DTlist2.end(); ++it ){
314 if (usedDTlist2[index] ==
true)
continue;
316 if ((*it)->dimension() != 4)
continue;
323 float eta_temp = gp.
eta();
324 float phi_temp = gp.
phi();
325 bool showeringBefore =
false;
329 if ( showeringBefore ) {
335 protoTrack.push_back(*it);
338 layers.push_back(-2);
342 if (
foundMatchingSegment(3, protoTrack, DTlist3, usedDTlist3, eta_temp, phi_temp, layers[layers.size()-1], showeringBefore )) layers.push_back(-3);
343 if ( showeringBefore ) NShowers++ ;
344 if (
foundMatchingSegment(3, protoTrack, DTlist4, usedDTlist4, eta_temp, phi_temp, layers[layers.size()-1], showeringBefore )) layers.push_back(-4);
345 if ( showeringBefore ) NShowers++ ;
348 if (eta_temp > 0.8) {
349 if (
foundMatchingSegment(2, protoTrack, CSClist1F, usedCSClist1F, eta_temp, phi_temp, layers[layers.size()-1], showeringBefore )) layers.push_back(1);
350 if ( showeringBefore ) NShowers++ ;
351 if (
foundMatchingSegment(2, protoTrack, CSClist2F, usedCSClist2F, eta_temp, phi_temp, layers[layers.size()-1], showeringBefore )) layers.push_back(2);
352 if ( showeringBefore ) NShowers++ ;
353 if (
foundMatchingSegment(2, protoTrack, CSClist3F, usedCSClist3F, eta_temp, phi_temp, layers[layers.size()-1], showeringBefore )) layers.push_back(3);
354 if ( showeringBefore ) NShowers++ ;
356 else if (eta_temp < -0.8) {
357 if (
foundMatchingSegment(2, protoTrack, CSClist1B, usedCSClist1B, eta_temp, phi_temp, layers[layers.size()-1], showeringBefore )) layers.push_back(1);
358 if ( showeringBefore ) NShowers++ ;
359 if (
foundMatchingSegment(2, protoTrack, CSClist2B, usedCSClist2B, eta_temp, phi_temp, layers[layers.size()-1], showeringBefore )) layers.push_back(2);
360 if ( showeringBefore ) NShowers++ ;
361 if (
foundMatchingSegment(2, protoTrack, CSClist3B, usedCSClist3B, eta_temp, phi_temp, layers[layers.size()-1], showeringBefore )) layers.push_back(3);
362 if ( showeringBefore ) NShowers++ ;
386 if ( layers.size() < 2 ) {
389 if ( layers[ layers.size()-1] > 0 ) {
396 rawSeeds.push_back(thisSeed);
397 etaOfSeed.push_back(eta_temp);
398 phiOfSeed.push_back(phi_temp);
399 nSegOnSeed.push_back( protoTrack.size() );
402 usedDTlist2[
index] =
true;
408 for (SegmentContainer::iterator it = DTlist3.begin(); it != DTlist3.end(); ++it ){
412 if (usedDTlist3[index] ==
true)
continue;
414 if ((*it)->dimension() != 4)
continue;
421 float eta_temp = gp.
eta();
422 float phi_temp = gp.
phi();
423 bool showeringBefore =
false;
427 if ( showeringBefore ) {
433 protoTrack.push_back(*it);
436 layers.push_back(-3);
439 if (
foundMatchingSegment(3, protoTrack, DTlist4, usedDTlist4, eta_temp, phi_temp, layers[layers.size()-1], showeringBefore )) layers.push_back(-4);
440 if ( showeringBefore ) NShowers++ ;
443 if (eta_temp > 0.8) {
444 if (
foundMatchingSegment(2, protoTrack, CSClist1F, usedCSClist1F, eta_temp, phi_temp, layers[layers.size()-1], showeringBefore )) layers.push_back(1);
445 if ( showeringBefore ) NShowers++ ;
446 if (
foundMatchingSegment(2, protoTrack, CSClist2F, usedCSClist2F, eta_temp, phi_temp, layers[layers.size()-1], showeringBefore )) layers.push_back(2);
447 if ( showeringBefore ) NShowers++ ;
448 if (
foundMatchingSegment(2, protoTrack, CSClist3F, usedCSClist3F, eta_temp, phi_temp, layers[layers.size()-1], showeringBefore )) layers.push_back(3);
449 if ( showeringBefore ) NShowers++ ;
451 else if (eta_temp < -0.8) {
452 if (
foundMatchingSegment(2, protoTrack, CSClist1B, usedCSClist1B, eta_temp, phi_temp, layers[layers.size()-1], showeringBefore )) layers.push_back(1);
453 if ( showeringBefore ) NShowers++ ;
454 if (
foundMatchingSegment(2, protoTrack, CSClist2B, usedCSClist2B, eta_temp, phi_temp, layers[layers.size()-1], showeringBefore )) layers.push_back(2);
455 if ( showeringBefore ) NShowers++ ;
456 if (
foundMatchingSegment(2, protoTrack, CSClist3B, usedCSClist3B, eta_temp, phi_temp, layers[layers.size()-1], showeringBefore )) layers.push_back(3);
457 if ( showeringBefore ) NShowers++ ;
480 if ( layers.size() < 2 ) {
483 if ( layers[ layers.size()-1] > 0 ) {
491 rawSeeds.push_back(thisSeed);
492 etaOfSeed.push_back(eta_temp);
493 phiOfSeed.push_back(phi_temp);
494 nSegOnSeed.push_back( protoTrack.size() );
497 usedDTlist3[
index] =
true;
509 for (SegmentContainer::iterator it = CSClist0B.begin(); it != CSClist0B.end(); ++it ){
513 if (usedCSClist0B[index] ==
true)
continue;
521 float eta_temp = gp.
eta();
522 float phi_temp = gp.
phi();
523 bool showeringBefore =
false;
527 if ( showeringBefore ) {
533 protoTrack.push_back(*it);
539 if (
foundMatchingSegment(1, protoTrack, CSClist1B, usedCSClist1B, eta_temp, phi_temp, layers[layers.size()-1], showeringBefore )) layers.push_back(1);
540 if ( showeringBefore ) NShowers++ ;
541 if (
foundMatchingSegment(1, protoTrack, CSClist2B, usedCSClist2B, eta_temp, phi_temp, layers[layers.size()-1], showeringBefore )) layers.push_back(2);
542 if ( showeringBefore ) NShowers++ ;
543 if (
foundMatchingSegment(1, protoTrack, CSClist3B, usedCSClist3B, eta_temp, phi_temp, layers[layers.size()-1], showeringBefore )) layers.push_back(3);
544 if ( showeringBefore ) NShowers++ ;
545 if (
foundMatchingSegment(1, protoTrack, CSClist4B, usedCSClist4B, eta_temp, phi_temp, layers[layers.size()-1], showeringBefore )) layers.push_back(4);
546 if ( showeringBefore ) NShowers++ ;
562 if ( layers.size() < 2 ) {
565 if ( fabs( gp.
eta() ) > 1.7 ) {
573 rawSeeds.push_back(thisSeed);
574 etaOfSeed.push_back(eta_temp);
575 phiOfSeed.push_back(phi_temp);
576 nSegOnSeed.push_back( protoTrack.size() );
579 usedCSClist0B[
index] =
true;
585 for (SegmentContainer::iterator it = CSClist1B.begin(); it != CSClist1B.end(); ++it ){
589 if (usedCSClist1B[index] ==
true)
continue;
597 float eta_temp = gp.
eta();
598 float phi_temp = gp.
phi();
599 bool showeringBefore =
false;
603 if ( showeringBefore ) {
609 protoTrack.push_back(*it);
615 if (
foundMatchingSegment(1, protoTrack, CSClist2B, usedCSClist2B, eta_temp, phi_temp, layers[layers.size()-1], showeringBefore )) layers.push_back(2);
616 if ( showeringBefore ) NShowers++ ;
617 if (
foundMatchingSegment(1, protoTrack, CSClist3B, usedCSClist3B, eta_temp, phi_temp, layers[layers.size()-1], showeringBefore )) layers.push_back(3);
618 if ( showeringBefore ) NShowers++ ;
619 if (
foundMatchingSegment(1, protoTrack, CSClist4B, usedCSClist4B, eta_temp, phi_temp, layers[layers.size()-1], showeringBefore )) layers.push_back(4);
620 if ( showeringBefore ) NShowers++ ;
634 if ( layers.size() < 2 ) {
640 rawSeeds.push_back(thisSeed);
641 etaOfSeed.push_back(eta_temp);
642 phiOfSeed.push_back(phi_temp);
643 nSegOnSeed.push_back( protoTrack.size() );
646 usedCSClist1B[
index] =
true;
653 for (SegmentContainer::iterator it = CSClist2B.begin(); it != CSClist2B.end(); ++it ){
657 if (usedCSClist2B[index] ==
true)
continue;
660 double dof =
static_cast<double>( (*it)->degreesOfFreedom() ) ;
661 if ( ((*it)->chi2()/
dof) > 20000.0 )
continue;
665 float eta_temp = gp.
eta();
666 float phi_temp = gp.
phi();
667 bool showeringBefore =
false;
671 if ( showeringBefore ) {
677 protoTrack.push_back(*it);
683 if (
foundMatchingSegment(1, protoTrack, CSClist3B, usedCSClist3B, eta_temp, phi_temp, layers[layers.size()-1], showeringBefore )) layers.push_back(3);
684 if ( showeringBefore ) NShowers++ ;
685 if (
foundMatchingSegment(1, protoTrack, CSClist4B, usedCSClist4B, eta_temp, phi_temp, layers[layers.size()-1], showeringBefore )) layers.push_back(4);
686 if ( showeringBefore ) NShowers++ ;
701 if ( layers.size() < 2) {
708 rawSeeds.push_back(thisSeed);
709 etaOfSeed.push_back(eta_temp);
710 phiOfSeed.push_back(phi_temp);
711 nSegOnSeed.push_back( protoTrack.size() );
713 usedCSClist2B[
index] =
true;
718 for (SegmentContainer::iterator it = CSClist3B.begin(); it != CSClist3B.end(); ++it ){
722 if (usedCSClist3B[index] ==
true)
continue;
725 double dof =
static_cast<double>( (*it)->degreesOfFreedom() ) ;
726 if ( ((*it)->chi2()/
dof) > 20000.0 )
continue;
730 float eta_temp = gp.
eta();
731 float phi_temp = gp.
phi();
732 bool showeringBefore =
false;
736 if ( showeringBefore ) {
742 protoTrack.push_back(*it);
748 if (
foundMatchingSegment(1, protoTrack, CSClist4B, usedCSClist4B, eta_temp, phi_temp, layers[layers.size()-1], showeringBefore )) layers.push_back(4);
749 if ( showeringBefore ) NShowers++ ;
764 usedCSClist3B[
index] =
true;
766 if ( layers.size() < 2 )
continue;
770 rawSeeds.push_back(thisSeed);
771 etaOfSeed.push_back(eta_temp);
772 phiOfSeed.push_back(phi_temp);
773 nSegOnSeed.push_back( protoTrack.size() );
785 for (SegmentContainer::iterator it = CSClist0F.begin(); it != CSClist0F.end(); ++it ){
789 if (usedCSClist0F[index] ==
true)
continue;
797 float eta_temp = gp.
eta();
798 float phi_temp = gp.
phi();
799 bool showeringBefore =
false;
803 if ( showeringBefore ) {
809 protoTrack.push_back(*it);
815 if (
foundMatchingSegment(1, protoTrack, CSClist1F, usedCSClist1F, eta_temp, phi_temp, layers[layers.size()-1], showeringBefore )) layers.push_back(1);
816 if ( showeringBefore ) NShowers++ ;
817 if (
foundMatchingSegment(1, protoTrack, CSClist2F, usedCSClist2F, eta_temp, phi_temp, layers[layers.size()-1], showeringBefore )) layers.push_back(2);
818 if ( showeringBefore ) NShowers++ ;
819 if (
foundMatchingSegment(1, protoTrack, CSClist3F, usedCSClist3F, eta_temp, phi_temp, layers[layers.size()-1], showeringBefore )) layers.push_back(3);
820 if ( showeringBefore ) NShowers++ ;
821 if (
foundMatchingSegment(1, protoTrack, CSClist4F, usedCSClist4F, eta_temp, phi_temp, layers[layers.size()-1], showeringBefore )) layers.push_back(4);
822 if ( showeringBefore ) NShowers++ ;
838 if ( layers.size() < 2 ) {
841 if ( fabs( gp.
eta() ) > 1.7 ) {
848 rawSeeds.push_back(thisSeed);
849 etaOfSeed.push_back(eta_temp);
850 phiOfSeed.push_back(phi_temp);
851 nSegOnSeed.push_back( protoTrack.size() );
854 usedCSClist0F[
index] =
true;
860 for (SegmentContainer::iterator it = CSClist1F.begin(); it != CSClist1F.end(); ++it ){
864 if (usedCSClist1F[index] ==
true)
continue;
872 float eta_temp = gp.
eta();
873 float phi_temp = gp.
phi();
874 bool showeringBefore =
false;
878 if ( showeringBefore ) {
884 protoTrack.push_back(*it);
890 if (
foundMatchingSegment(1, protoTrack, CSClist2F, usedCSClist2F, eta_temp, phi_temp, layers[layers.size()-1], showeringBefore )) layers.push_back(2);
891 if ( showeringBefore ) NShowers++ ;
892 if (
foundMatchingSegment(1, protoTrack, CSClist3F, usedCSClist3F, eta_temp, phi_temp, layers[layers.size()-1], showeringBefore )) layers.push_back(3);
893 if ( showeringBefore ) NShowers++ ;
894 if (
foundMatchingSegment(1, protoTrack, CSClist4F, usedCSClist4F, eta_temp, phi_temp, layers[layers.size()-1], showeringBefore )) layers.push_back(4);
895 if ( showeringBefore ) NShowers++ ;
911 if ( layers.size() < 2) {
918 rawSeeds.push_back(thisSeed);
919 etaOfSeed.push_back(eta_temp);
920 phiOfSeed.push_back(phi_temp);
921 nSegOnSeed.push_back( protoTrack.size() );
924 usedCSClist1F[
index] =
true;
930 for (SegmentContainer::iterator it = CSClist2F.begin(); it != CSClist2F.end(); ++it ){
934 if (usedCSClist2F[index] ==
true)
continue;
937 double dof =
static_cast<double>( (*it)->degreesOfFreedom() ) ;
938 if ( ((*it)->chi2()/
dof) > 20000.0 )
continue;
942 float eta_temp = gp.
eta();
943 float phi_temp = gp.
phi();
944 bool showeringBefore =
false;
948 if ( showeringBefore ) {
954 protoTrack.push_back(*it);
960 if (
foundMatchingSegment(1, protoTrack, CSClist3F, usedCSClist3F, eta_temp, phi_temp, layers[layers.size()-1], showeringBefore )) layers.push_back(3);
961 if ( showeringBefore ) NShowers++ ;
962 if (
foundMatchingSegment(1, protoTrack, CSClist4F, usedCSClist4F, eta_temp, phi_temp, layers[layers.size()-1], showeringBefore )) layers.push_back(4);
963 if ( showeringBefore ) NShowers++ ;
978 if ( layers.size() < 2) {
985 rawSeeds.push_back(thisSeed);
986 etaOfSeed.push_back(eta_temp);
987 phiOfSeed.push_back(phi_temp);
988 nSegOnSeed.push_back( protoTrack.size() );
991 usedCSClist2F[
index] =
true;
996 for (SegmentContainer::iterator it = CSClist3F.begin(); it != CSClist3F.end(); ++it ){
1000 if (usedCSClist3F[index] ==
true)
continue;
1003 double dof =
static_cast<double>( (*it)->degreesOfFreedom() ) ;
1004 if ( ((*it)->chi2()/
dof) > 20000.0 )
continue;
1008 float eta_temp = gp.
eta();
1009 float phi_temp = gp.
phi();
1010 bool showeringBefore =
false;
1014 if ( showeringBefore ) {
1020 protoTrack.push_back(*it);
1023 layers.push_back(2);
1026 if (
foundMatchingSegment(1, protoTrack, CSClist4F, usedCSClist4F, eta_temp, phi_temp, layers[layers.size()-1], showeringBefore )) layers.push_back(4);
1027 if ( showeringBefore ) NShowers++ ;
1042 usedCSClist3F[
index] =
true;
1044 if ( layers.size() < 2 )
continue;
1049 rawSeeds.push_back(thisSeed);
1050 etaOfSeed.push_back(eta_temp);
1051 phiOfSeed.push_back(phi_temp);
1052 nSegOnSeed.push_back( protoTrack.size() );
1062 if (
debug)
std::cout <<
"Number of seeds BEFORE " << rawSeeds.size() << std::endl;
1068 goodSeeds = theSeeds.size();
1073 if (
debug)
std::cout <<
"Number of seeds AFTER " << goodSeeds << std::endl;
1091 BoolContainer& usedSeg,
float& eta_last,
float& phi_last,
int& lastLayer,
bool& showeringBefore ) {
1094 int scanlayer = (lastLayer < 0 ) ? (lastLayer-1) : (lastLayer+1) ;
1097 showeringBefore =
true;
1108 if ( lastLayer == 0 || lastLayer == 1 ) {
1110 else { maxdPhi = 0.06; }
1115 }
else if ( type == 2 ) {
1125 else if ( lastLayer == -2 ) { maxdPhi = 0.8*
maxDeltaPhiDT; }
1131 if ( showeringBefore && maxdPhi > 0.03 ) maxdPhi = 0.03;
1133 showeringBefore =
false ;
1136 float eta_temp = eta_last;
1137 float phi_temp = phi_last;
1141 int best_match =
index;
1142 float best_R =
sqrt( (maxdEta*maxdEta) + (maxdPhi*maxdPhi) );
1143 float best_chi2 = 200;
1144 int best_dimension = 2;
1148 for (SegmentContainer::iterator it=segs.begin(); it!=segs.end(); ++it){
1155 double dh = fabs( gp2.
eta() - eta_temp );
1156 double df = fabs( gp2.
phi() - phi_temp );
1157 double dR =
sqrt( (dh*dh) + (df*df) );
1160 bool case1 = ( dh < maxdEta && df < maxdPhi ) ?
true:
false ;
1162 bool case2 = ( ((*it)->dimension()!= 4) && (dh< 0.5) && (df < maxdPhi) ) ?
true:
false ;
1163 if ( !case1 && !case2 )
continue;
1167 if ( NRechits < best_nhits )
continue;
1168 best_nhits = NRechits ;
1171 if ( (*it)->dimension() < best_dimension )
continue;
1172 best_dimension = (*it)->dimension();
1175 if ( dR > best_R )
continue;
1178 double dof =
static_cast<double>( (*it)->degreesOfFreedom() ) ;
1180 if ( (*it)->chi2()/dof < 0.001 && NRechits < 6 && type == 1)
continue;
1181 if ( (*it)->chi2()/dof > best_chi2 )
continue;
1182 best_chi2 = (*it)->chi2()/
dof ;
1185 if ((*it)->dimension() != 4 ) {
1191 phi_last = gp2.
phi();
1192 eta_last = gp2.
eta();
1196 if (best_match < 0)
return ok;
1200 for (SegmentContainer::iterator it=segs.begin(); it!=segs.end(); ++it){
1202 if (index != best_match)
continue;
1203 protoTrack.push_back(*it);
1204 usedSeg[best_match] =
true;
1213 bool showering =
false ;
1217 double nChi2 = 9999. ;
1219 std::vector<int> badtag;
1221 double aveEta = 0.0;
1222 for (SegmentContainer::iterator it = segs.begin(); it != segs.end(); ++it){
1226 double dh = gp.
eta() - eta_last ;
1227 double df = gp.
phi() - phi_last ;
1228 double dR =
sqrt( (dh*dh) + (df*df) ) ;
1230 double dof =
static_cast<double>( (*it)->degreesOfFreedom() );
1231 double nX2 = (*it)->chi2() /
dof ;
1234 DetId geoId = (*it)->geographicalId();
1239 badtag.push_back( index ) ;
1240 aveEta += fabs( gp.
eta() ) ;
1243 if (rh < 6 && !isDT)
continue;
1244 if (rh < 12 && isDT)
continue;
1245 if ( rh > nRhits ) {
1247 if ( nX2 > nChi2 ) continue ;
1248 if (layer != 0 && layer != 1 && layer != -1 ) {
1255 aveEta = aveEta/
static_cast<double>(nSeg) ;
1256 bool isME11A = (aveEta >= 2.1 && layer == 0) ?
true :
false ;
1257 bool isME12 = (aveEta > 1.2 && aveEta <= 1.65 && layer == 1) ?
true :
false ;
1258 bool isME11 = (aveEta > 1.65 && aveEta <= 2.1 && layer == 0) ?
true :
false ;
1259 bool is1stLayer = (layer == -1 || layer == 0 || isME12 || isME11 || isME11A) ?
true :
false ;
1261 NShoweringSegments += nSeg;
1263 if ( nSeg > 3 && !isME11A ) showering =
true ;
1264 if ( nSeg > 6 && isME11A ) showering =
true ;
1268 if (showering && !is1stLayer ) {
1269 for (std::vector<int>::iterator it = badtag.begin(); it != badtag.end(); ++it ) {
1270 usedSeg[*it] =
true;
1271 if ( (*it) != theOrigin )
continue;
1282 double dHdTheta = 0.0;
1283 double dThetadR = 0.0;
1284 double etaErr = 1.0;
1286 if (gp.
perp() != 0) {
1288 dHdTheta = ( gp.
mag()+gp.
z() )/gp.
perp();
1289 dThetadR = gp.
z() / gp.
perp2() ;
1290 etaErr = 0.25 * (dHdTheta * dThetadR) * (dHdTheta * dThetadR) * rErr ;
bool debug
group the seeds
T getParameter(std::string const &) const
double etaError(const GlobalPoint gp, double rErr)
calculate the eta error from global R error
#define case2(par1, par2)
std::vector< LayerSetAndLayers > layers(const SeedingLayerSetsHits &sets)
MuonTransientTrackingRecHit::MuonRecHitContainer SegmentContainer
SegmentContainer ShoweringSegments
float maxPhiResolutionCSC
bool IdentifyShowering(SegmentContainer &segs, BoolContainer &usedSeg, float &eta_last, float &phi_last, int layer, int &NShoweringSegments)
identify the showering layer
int build(edm::Event &event, const edm::EventSetup &eventSetup, TrajectorySeedCollection &seeds)
Build seed collection.
bool foundMatchingSegment(int type, SegmentContainer &protoTrack, SegmentContainer &segments, BoolContainer &usedSeg, float &eta_temp, float &phi_temp, int &lastLayer, bool &showeringBefore)
Find segment which matches protoTrack for endcap only.
Geom::Phi< T > phi() const
TrajectorySeed createSeed(int type, const SegmentContainer &seg, const std::vector< int > &layers, int NShower, int NShowerSeg)
Create a seed from set of segments.
bool isDT(GeomDetEnumerators::SubDetector m)
MuonDetLayerMeasurements * muonMeasurements
MuonSeedCleaner * muonSeedClean_
const MagneticField * BField
edm::InputTag theCSCSegmentLabel
Name of the CSC segment collection.
std::deque< bool > BoolContainer
edm::InputTag theDTSegmentLabel
Name of the DT segment collection.
std::vector< int > ShoweringLayers
std::vector< TrajectorySeed > TrajectorySeedCollection
MuonRecHitContainer recHits(const DetLayer *layer, const edm::Event &iEvent)
returns the rechits which are on the layer
bool enableCSCMeasurement
void setBField(const MagneticField *theField)
Cache Magnetic Field for current event.
constexpr int subdetId() const
get the contents of the subdetector field (not cast into any detector's numbering enum) ...
int NRecHitsFromSegment(const TrackingRecHit &rhit)
const std::vector< const DetLayer * > & allDTLayers() const
return the DT DetLayers (barrel), inside-out
const std::vector< const DetLayer * > & forwardCSCLayers() const
return the forward (+Z) CSC DetLayers, inside-out
float maxEtaResolutionCSC
MuonSeedBuilder(const edm::ParameterSet &, edm::ConsumesCollector &)
Constructor.
MuonServiceProxy * theService
~MuonSeedBuilder()
Destructor.
std::vector< TrajectorySeed > seedCleaner(const edm::EventSetup &eventSetup, std::vector< TrajectorySeed > &seeds)
Cache pointer to geometry.
const std::vector< const DetLayer * > & backwardCSCLayers() const
return the backward (-Z) CSC DetLayers, inside-out
MuonSeedCreator * muonSeedCreate_
Create seed according to region (CSC, DT, Overlap)
const MuonDetLayerGeometry * muonLayers