12 #define PI 3.141592654
25 if(
fabs(distance-DriftConfR) < 2.*StrawConfR )
return true;
43 bool* InclusionListSciTil,
45 Short_t maxscitilhitsintrack,
70 for(iScitHit=0; iScitHit<nSciTilHits; iScitHit++){
71 if(!InclusionListSciTil[iScitHit])
continue;
75 posizSciTil[iScitHit][0],
76 posizSciTil[iScitHit][1],
86 if( igoodScit == maxscitilhitsintrack)
break;
87 List[igoodScit] = iScitHit;
91 esse[igoodScit] =
atan2(YintersectionList[0]-Oyy,
92 XintersectionList[0]-Oxx);
95 esse[igoodScit] =
atan2( 0.5*(YintersectionList[0]+
96 YintersectionList[1])-Oyy,
97 0.5*(XintersectionList[0]+
98 XintersectionList[1])-Oxx);
100 if ( esse[igoodScit]<0.) esse[igoodScit] += 2.*
PI;
117 Short_t nParallelHits,
136 for(ihit=0, nleft=0, nright=0, minr = 9999999., minl = 9999999.; ihit<nParallelHits; ihit++){
156 }
else if ( nleft > nright) {
159 if( minr < minl ) *Charge = -1;
199 ListHitsinTrackinWhichToSearch[in->
maxstthits];
266 for(i=0; i< Nouter;i++){
267 ListHitsinTrackinWhichToSearch[
i]=
271 for(i=0; i< Nouter;i++){
272 Naux = FindTrackPatterninBoxConformalSpecial(
277 ListHitsinTrackinWhichToSearch[i],
278 ListHitsinTrackinWhichToSearch,
289 OutputListHitsinTrack,
301 ListHitsinTrackinWhichToSearch[j-Nouter] =
305 Nbaux = FindTrackStrictCollection(
308 ListHitsinTrackinWhichToSearch[i],
309 ListHitsinTrackinWhichToSearch,
315 OutputList2HitsinTrack
324 OutputListHitsinTrack[j];
326 for(j=0;j<Nbaux;j++){
328 OutputList2HitsinTrack[j];
346 for(j=0, rotationcos=0., rotationsin=0.; j<*(in->
nHitsinTrack); j++){
347 rotationcos +=
cos((0.5+
351 rotationsin +=
sin((0.5+
357 rotationangle =
atan2(rotationsin, rotationcos);
375 DriftRadiusconformal[0]=-1.;
390 ErrorDriftRadiusconformal[j+
offset]=
392 DriftRadiusconformal[j+
offset]=
405 DriftRadiusconformal,
406 ErrorDriftRadiusconformal,
421 if(
status < 0 )
return false;
425 *(in->
Oxx)= -0.5*(*(in->
ALFA));
426 *(in->
Oyy)= -0.5*(*(in->
BETA));
430 if( *(in->
Rr) < 0. )
return false;
436 if(aaa< 0.9*in->rstrawdetectormin/2.)
return false;
439 if ( *(in->
Rr) + aaa < in->rstrawdetectormin *0.9 )
return false;
512 GeomCalculator.FindingParallelTrackAngularRange(
524 NN = TrkAssociatedParallelHitsToHelix5(
541 NN = TrkAssociatedParallelHitsToHelixQuater(
633 GeomCalculator.FindingParallelTrackAngularRange(
646 if( flagStt == -2 )
return false;
647 if( flagStt == -1 )
return false;
648 if( flagStt == 1 )
return false;
665 Short_t *FiConformalIndex,
666 Short_t* HitsinBoxConformal,
668 bool *InclusionListStt,
670 Short_t* ListHitsinTrack,
671 Short_t* ListSttParHits,
672 Short_t maxstthitsintrack,
674 Short_t minimumhitspertrack,
675 Short_t* nBoxConformal,
678 Short_t NFiCELLDISTANCE,
682 Short_t NRCELLDISTANCE,
683 Short_t *RConformalIndex,
690 TemporaryInclusionList[maxstthits];
713 for(i=0, nRemainingHits=0; i<Nparal; i++){
715 if( i != ihit && InclusionListStt[ ListSttParHits[i] ] ) {
719 TemporaryInclusionList[ ListSttParHits[
i] ]=
true;
723 TemporaryInclusionList[ ListSttParHits[
i] ]=
false;
727 if( nRemainingHits < minimumhitspertrack )
return 0;
734 ListHitsinTrack[0]= ListSttParHits[ihit] ;
744 while( nRemainingHits > 0 && i < nHitsinTrack && status) {
747 if (nRcell - NRCELLDISTANCE < 0 ) {
750 nRmin = nRcell - NRCELLDISTANCE;
752 if (nRcell + NRCELLDISTANCE >= nrd ) {
755 nRmax = nRcell + NRCELLDISTANCE;
760 for( iR= nRmin ; iR<= nRmax &&
status ; iR++){
761 for(iFi2=nFicell-NFiCELLDISTANCE;iFi2<=nFicell+NFiCELLDISTANCE &&
status;iFi2++){
764 }
else if ( iFi2 >= nfid) {
769 bi_index = iR*nfid+iFi;
770 for (j = 0; j< nBoxConformal[bi_index]; j++){
771 tri_index = j*nrd*nfid+bi_index;
772 if( InclusionListStt[ HitsinBoxConformal[tri_index] ]
774 TemporaryInclusionList[HitsinBoxConformal[tri_index]]) {
776 ListHitsinTrack[nHitsinTrack]=HitsinBoxConformal[tri_index] ;
778 if( nHitsinTrack >= maxstthitsintrack){
783 TemporaryInclusionList[HitsinBoxConformal[tri_index]]=
false;
791 if(i<maxstthitsintrack){
792 nRcell = RConformalIndex[ListHitsinTrack[
i]];
793 nFicell = FiConformalIndex[ListHitsinTrack[
i]];
815 Short_t *FiConformalIndex,
816 Short_t* HitsinBoxConformal,
817 bool *InclusionListStt,
820 Short_t *ListHitsinTrackinWhichToSearch,
821 Short_t* ListSttParHits,
823 Short_t minimumhitspertrack,
824 Short_t* nBoxConformal,
825 Short_t NFiCELLDISTANCE,
828 Short_t NparallelToSearch,
829 Short_t NRCELLDISTANCE,
831 Short_t *OutputListHitsinTrack,
832 Short_t *RConformalIndex
837 bool TemporaryInclusionList[maxstthits];
866 for(i=0; i<Nparal; i++){
867 TemporaryInclusionList[ ListSttParHits[
i] ]=
false;
871 for(i2=0, nRemainingHits=0; i2<NparallelToSearch; i2++){
872 i=ListHitsinTrackinWhichToSearch[i2];
875 if( i != iSeed && InclusionListStt[ListSttParHits[i]] ) {
876 TemporaryInclusionList[ListSttParHits[
i]]=
true;
883 if( nRemainingHits < minimumhitspertrack )
return 0;
888 OutputListHitsinTrack[0]= iSeed ;
890 while( nRemainingHits > 0 && i < nHitsinTrack) {
892 nRcell = RConformalIndex[OutputListHitsinTrack[
i]];
893 nFicell = FiConformalIndex[OutputListHitsinTrack[
i]];
897 if (nRcell - NRCELLDISTANCE < 0 ) {
900 nRmin = nRcell - NRCELLDISTANCE;
902 if (nRcell + NRCELLDISTANCE >= nrd ) {
905 nRmax = nRcell + NRCELLDISTANCE;
908 for( iR= nRmin ; iR<= nRmax ; iR++){
909 for( iFi2=nFicell-NFiCELLDISTANCE ;
910 iFi2<=nFicell+NFiCELLDISTANCE;iFi2++){
913 }
else if ( iFi2 >= nfid) {
918 bi_index = iR*nfid+iFi;
919 for (j = 0; j< nBoxConformal[bi_index]; j++){
920 tri_index = j*nrd*nfid+bi_index;
922 if(InclusionListStt[HitsinBoxConformal[tri_index]]
924 TemporaryInclusionList[ HitsinBoxConformal[tri_index]]
927 OutputListHitsinTrack[nHitsinTrack]=HitsinBoxConformal[tri_index] ;
929 TemporaryInclusionList[HitsinBoxConformal[tri_index]]
953 Short_t *FiConformalIndex,
954 bool *InclusionListStt,
957 Short_t *ListHitsinTrackinWhichToSearch,
959 Short_t NFiCELLDISTANCE,
962 Short_t NParallelToSearch,
963 Short_t *OutputListHitsinTrack
980 iFiseed = FiConformalIndex[iSeed];
983 for(i=0; i<NParallelToSearch; i++){
985 if( InclusionListStt[ListHitsinTrackinWhichToSearch[i]]) {
988 iFi = FiConformalIndex[ListHitsinTrackinWhichToSearch[
i]];
989 if( iFi == iFiseed ) {
990 OutputListHitsinTrack[nHitsinTrack]=ListHitsinTrackinWhichToSearch[
i];
992 }
else if ( iFi < iFiseed ) {
993 if(iFiseed - iFi <= NFiCELLDISTANCE ){
994 OutputListHitsinTrack[nHitsinTrack]=ListHitsinTrackinWhichToSearch[
i];
997 if(iFi+nfid-iFiseed<=NFiCELLDISTANCE) {
998 OutputListHitsinTrack[nHitsinTrack]=ListHitsinTrackinWhichToSearch[
i];
1003 if( -iFiseed + iFi <= NFiCELLDISTANCE ) {
1004 OutputListHitsinTrack[nHitsinTrack]=ListHitsinTrackinWhichToSearch[
i];
1007 if( -iFi + nfid + iFiseed<= NFiCELLDISTANCE ) {
1008 OutputListHitsinTrack[nHitsinTrack]=ListHitsinTrackinWhichToSearch[
i];
1021 return nHitsinTrack;
1032 Double_t *Fi_initial_helix_referenceframe,
1033 Double_t *Fi_final_helix_referenceframe,
1035 Short_t *ListParallelHits,
1036 Short_t nParallelHits,
1049 Int_t tempo[nParallelHits];
1075 aaa =
atan2( oY, oX);
1082 if((b1<aaa && aaa<3.*b1) || (aaa>-3.*b1&&aaa<-b1)){
1084 for (j = 0; j< nParallelHits; j++){
1085 U[j]=info[ ListParallelHits[j] ][0]/(
1086 info[ ListParallelHits[j] ][0]*
1087 info[ ListParallelHits[j] ][0]+
1088 info[ ListParallelHits[j] ][1]*
1089 info[ ListParallelHits[j] ][1]);
1091 for (j = 0; j< nParallelHits; j++){
1092 tempo[j]= (Int_t) ListParallelHits[j];
1094 MergeSort.
Merge_Sort( nParallelHits, U, tempo);
1095 for (j = 0; j< nParallelHits; j++){
1096 ListParallelHits[j] = (Short_t) tempo[j];
1099 if((aaa>b1&&aaa<3.*b1)){
1102 for(i=0;i<nParallelHits;i++){
1103 tmp[
i]=ListParallelHits[nParallelHits-1-
i];
1104 aux[
i] = U[nParallelHits-1-
i];
1106 for(i=0;i<nParallelHits;i++){
1107 ListParallelHits[
i]=tmp[
i];
1111 for (j = 0; j< nParallelHits; j++){
1112 V[j]=info[ ListParallelHits[j] ][1]/(
1113 info[ ListParallelHits[j] ][0]*
1114 info[ ListParallelHits[j] ][0]+
1115 info[ ListParallelHits[j] ][1]*
1116 info[ ListParallelHits[j] ][1]);
1121 for(i=0;i<nParallelHits;i++){
1122 tmp[
i]=ListParallelHits[nParallelHits-1-
i];
1123 aux[
i] = U[nParallelHits-1-
i];
1125 for(i=0;i<nParallelHits;i++){
1126 ListParallelHits[
i]=tmp[
i];
1130 for (j = 0; j< nParallelHits; j++){
1131 V[j]=info[ ListParallelHits[j] ][1]/(
1132 info[ ListParallelHits[j] ][0]*
1133 info[ ListParallelHits[j] ][0]+
1134 info[ ListParallelHits[j] ][1]*
1135 info[ ListParallelHits[j] ][1]);
1140 for (j = 0; j< nParallelHits; j++){
1141 V[j]=info[ ListParallelHits[j] ][1]/(
1142 info[ ListParallelHits[j] ][0]*
1143 info[ ListParallelHits[j] ][0]+
1144 info[ ListParallelHits[j] ][1]*
1145 info[ ListParallelHits[j] ][1]);
1147 for (j = 0; j< nParallelHits; j++){
1148 tempo[j]= (Int_t) ListParallelHits[j];
1150 MergeSort.
Merge_Sort( nParallelHits, V, tempo);
1151 for (j = 0; j< nParallelHits; j++){
1152 ListParallelHits[j] = (Short_t) tempo[j];
1155 if((aaa<=-3.*b1 || aaa>=3.*b1)){
1158 for(i=0;i<nParallelHits;i++){
1159 tmp[
i]=ListParallelHits[nParallelHits-1-
i];
1160 aux[
i] = V[nParallelHits-1-
i];
1162 for(i=0;i<nParallelHits;i++){
1163 ListParallelHits[
i]=tmp[
i];
1167 for (j = 0; j< nParallelHits; j++){
1168 U[j]=info[ ListParallelHits[j] ][0]/(
1169 info[ ListParallelHits[j] ][0]*
1170 info[ ListParallelHits[j] ][0]+
1171 info[ ListParallelHits[j] ][1]*
1172 info[ ListParallelHits[j] ][1]);
1177 for(i=0;i<nParallelHits;i++){
1178 tmp[
i]=ListParallelHits[nParallelHits-1-
i];
1179 aux[
i] = V[nParallelHits-1-
i];
1181 for(i=0;i<nParallelHits;i++){
1182 ListParallelHits[
i]=tmp[
i];
1186 for (j = 0; j< nParallelHits; j++){
1187 U[j]=info[ ListParallelHits[j] ][0]/(
1188 info[ ListParallelHits[j] ][0]*
1189 info[ ListParallelHits[j] ][0]+
1190 info[ ListParallelHits[j] ][1]*
1191 info[ ListParallelHits[j] ][1]);
1204 *Fi_initial_helix_referenceframe =
atan2(-oY,-oX) ;
1207 if ( *Fi_initial_helix_referenceframe <0.)
1208 *Fi_initial_helix_referenceframe += 2.*
PI;
1212 *Fi_final_helix_referenceframe =
atan2(
1213 info[ ListParallelHits[nParallelHits-1] ][1]-oY,
1214 info[ ListParallelHits[nParallelHits-1] ][0]-oX
1216 if ( *Fi_final_helix_referenceframe <0.)
1217 *Fi_final_helix_referenceframe += 2.*
PI;
1220 if( *Fi_final_helix_referenceframe> *Fi_initial_helix_referenceframe)
1221 *Fi_final_helix_referenceframe -= 2.*
PI;
1222 if( *Fi_final_helix_referenceframe> *Fi_initial_helix_referenceframe)
1223 *Fi_final_helix_referenceframe = *Fi_initial_helix_referenceframe;
1225 if( *Fi_final_helix_referenceframe< *Fi_initial_helix_referenceframe)
1226 *Fi_final_helix_referenceframe += 2.*
PI;
1227 if( *Fi_final_helix_referenceframe< *Fi_initial_helix_referenceframe)
1228 *Fi_final_helix_referenceframe = *Fi_initial_helix_referenceframe;
1245 Short_t *auxListHitsinTrack,
1247 Short_t *FiConformalIndex,
1248 Short_t* HitsinBoxConformal,
1249 bool* InclusionListStt,
1252 Short_t *ListHitsinTrack,
1255 Short_t* nBoxConformal,
1257 Short_t nHitsinTrack,
1276 Unselected[maxstthits];
1277 Short_t
i, i2, j, k, l, l2, l3, itemp, kstart, kend,
1278 iFi0,FFimin, FFimax;
1311 size_t len =
sizeof(Unselected);
1312 memset (Unselected,
true,len);
1320 for(j=0; j<nHitsinTrack; j++){
1321 i = ListHitsinTrack[j];
1324 if( FiConformalIndex[i] < FFimin ) FFimin = FiConformalIndex[
i];
1325 if( FiConformalIndex[i] > FFimax ) FFimax = FiConformalIndex[
i];
1336 if( FFimax > 3.*nfid/4. && FFimin < nfid/4.) {
1339 for(j=0; j<nHitsinTrack; j++){
1340 i = ListHitsinTrack[j];
1341 Fi = FiConformalIndex[
i];
1342 if( Fi < nfid/4. ) Fi = FiConformalIndex[
i]+nfid;
1343 if( Fi < FFimin ) FFimin = Fi;
1344 if( Fi > FFimax ) FFimax = Fi;
1352 FFimin -= (Short_t) nfid/Nextra;
1353 FFimax += (Short_t) nfid/Nextra;
1354 if( FFimax - FFimin > nfid/2 ) {
1355 cout<<
"something fishy is going on in TrkAssociatedParallelHitsToHelixQuater!"
1356 <<
"Range in Fi (rad) is "<<(FFimax - FFimin)*2.*
PI/nfid<<endl;
1365 if(
fabs(q) > 1.e-10 ) {
1368 for(itemp=FFimin; itemp<=FFimax;itemp++){
1372 }
else if (i>=nfid){
1373 i -= nfid*( i/nfid );
1375 angle = (i+0.5)*2.*
PI/nfid;
1377 if(
fabs(
cos(angle)) <1.e-10)
continue;
1379 if(r< radiaConf[0] || r>= 1./rstrawdetectormin)
continue;
1380 for(j=nrd-1; j>=0;j--){
1381 if( r>= radiaConf[j] ){
1388 for(l=(Short_t) (-deltanr) ; l<(Short_t)deltanr+1;l++){
1390 if( l2<0 || l2 >= nrd )
continue;
1391 for( k=0;k<*(nBoxConformal+l2*nrd+
i);k++){
1392 nHit_original = (Short_t)
1393 infoparalConformal[*(HitsinBoxConformal+k*nrd*nfid+l2*nfid+i)][3];
1394 if( !InclusionListStt[ nHit_original ] )
continue;
1396 dx = -Oxx+info[ nHit_original ][0];
1397 dy = -Oyy+info[ nHit_original ][1];
1398 distance =
sqrt(dx*dx+dy*dy);
1399 if (
fabs(Rr - distance ) > NTIMES*STRAWRADIUS )
continue;
1402 xx=infoparalConformal[ *(HitsinBoxConformal+k*nrd*nfid+l2*nfid+
i) ][0];
1403 dist =
fabs( xx +q );
1404 if( AcceptHitsConformal( dist,
1405 infoparalConformal[*(HitsinBoxConformal+k*nrd*nfid+l2*nfid+i)][2],
1406 infoparalConformal[*(HitsinBoxConformal+k*nrd*nfid+l2*nfid+i)][4]
1408 auxListHitsinTrack[nAssociatedHits]= *(HitsinBoxConformal+k*nrd*nfid+l2*nfid+
i);
1416 if((nR == nrd-1 && passamin && ! passamax) || (nR==0 && passamax && !passamin) ) {
1417 if(nR == nrd-1) passamax=
true;
1418 if(nR == 0) passamin=
true;
1420 for(l2=1;l2<3;l2++){
1422 if(i2>=nfid) i2 -= nfid;
1425 if( l3<0 || l3 >= nrd )
continue;
1426 for( k=0;k<*(nBoxConformal+l3*nfid+i2);k++){
1427 nHit_original = (Short_t)
1428 infoparalConformal[*(HitsinBoxConformal+k*nrd*nfid+l3*nfid+i2)][3];
1429 if( !InclusionListStt[ nHit_original ] )
continue;
1431 dx = -Oxx+info[ nHit_original ][0];
1432 dy = -Oyy+info[ nHit_original ][1];
1433 distance =
sqrt(dx*dx+dy*dy);
1434 if (
fabs(Rr - distance ) > NTIMES*STRAWRADIUS )
continue;
1437 xx=infoparalConformal[ *(HitsinBoxConformal+k*nrd*nfid+l3*nfid+i2) ][0];
1438 dist =
fabs( xx +q );
1440 if( AcceptHitsConformal( dist,
1441 infoparalConformal[*(HitsinBoxConformal+k*nrd*nfid+l3*nfid+i2)][2],
1442 infoparalConformal[*(HitsinBoxConformal+k*nrd*nfid+l3*nfid+i2)][4]
1444 auxListHitsinTrack[nAssociatedHits]= *(HitsinBoxConformal+k*nrd*nfid+l3*nfid+i2);
1450 return nAssociatedHits;
1451 }
else if ((nR == nrd-1 && ! passamin && !passamax) || (nR==0 && !passamax && !passamin)){
1452 if(nR == nrd-1) passamax=
true;
1453 if(nR == 0) passamin=
true;
1455 for(l2=1;l2<3;l2++){
1457 if(i2<nfid) i2 += nfid;
1460 if( l3<0 || l3 >= nrd )
continue;
1461 for( k=0;k<*(nBoxConformal+l3*nfid+i2);k++){
1462 nHit_original = (Short_t)
1463 infoparalConformal[*(HitsinBoxConformal+k*nrd*nfid+l3*nfid+i2)][3];
1464 if( !InclusionListStt[ nHit_original ] )
continue;
1466 dx = -Oxx+info[ nHit_original ][0];
1467 dy = -Oyy+info[ nHit_original ][1];
1468 distance =
sqrt(dx*dx+dy*dy);
1469 if (
fabs(Rr - distance ) > NTIMES*STRAWRADIUS )
continue;
1472 xx=infoparalConformal[*(HitsinBoxConformal+k*nrd*nfid+l3*nfid+i2)][0];
1473 dist =
fabs( xx +q );
1475 if( AcceptHitsConformal( dist,
1476 infoparalConformal[*(HitsinBoxConformal+k*nrd*nfid+l3*nfid+i2)][2],
1477 infoparalConformal[*(HitsinBoxConformal+k*nrd*nfid+l3*nfid+i2)][4]
1479 auxListHitsinTrack[nAssociatedHits]= *(HitsinBoxConformal+k*nrd*nfid+l3*nfid+i2);
1496 if( FFimax > nrd/4 && FFimin < nrd/4 ) {
1497 iFi0 = (Short_t) (nrd/4 );
1498 }
else if ( FFimax > 3*nrd/4 && FFimin < 3*nrd/4 ){
1499 iFi0 = (Short_t) (3*nrd/4 );
1501 cout <<
"From TrkAssociatedParallelHitsToHelixQuater :"
1502 <<
" inconsistency, 0 associated hits to this track candidate\n";
1506 for(itemp=iFi0-5; itemp<=iFi0+5;itemp++){
1510 }
else if (i>=nfid){
1511 i -= nfid*( i/nfid );
1514 for(l=0; l<nrd;l++){
1515 for( k=0;k<*(nBoxConformal+l*nfid+
i);k++){
1516 nHit_original = (Short_t)
1517 infoparalConformal[*(HitsinBoxConformal+k*nrd*nfid+l*nfid+i)][3];
1518 if( !InclusionListStt[ nHit_original ] )
continue;
1520 dx = -Oxx+info[ nHit_original ][0];
1521 dy = -Oyy+info[ nHit_original ][1];
1522 distance =
sqrt(dx*dx+dy*dy);
1523 if (
fabs(Rr - distance ) >NTIMES*STRAWRADIUS )
continue;
1526 xx=infoparalConformal[*(HitsinBoxConformal+k*nrd*nfid+l*nfid+
i)][0];
1529 if( AcceptHitsConformal( dist,
1530 infoparalConformal[*(HitsinBoxConformal+k*nrd*nfid+l*nfid+i)][2],
1531 infoparalConformal[*(HitsinBoxConformal+k*nrd*nfid+l*nfid+i)][4]
1533 auxListHitsinTrack[nAssociatedHits]=*(HitsinBoxConformal+k*nrd*nfid+l*nfid+
i);
1546 }
else if(
fabs(q)> 1.e-10) {
1550 aaa =
atan2(q, -m*q);
1553 if (Fi0 <0. ) Fi0 =0.;
1554 if (Fi0 >
PI ) Fi0 =
PI;
1559 for(itemp=FFimin; itemp<=FFimax;itemp++){
1563 }
else if (i>=nfid){
1564 i -= nfid*( i/nfid );
1573 fi1 = i*2.*(
PI/nfid);
1575 erre1 = q/(
sin(fi1)-m*
cos(fi1));
1577 erre1 = 99999999999.;
1580 fi2 = (i+1)*2.*(
PI/nfid);
1582 erre2 = q/(
sin(fi2)-m*
cos(fi2));
1584 erre2 = 99999999999.;
1588 for(j=0; j<nrd; j++){
1592 Rout = radiaConf[j+1];
1594 Rout = 1./rstrawdetectormin;
1601 if(erre2< 0. || erre2 > Rout ){
1604 }
else if(
fabs(erre1) < 1.e-10){
1605 if( Fi0 > fi2 || Fi0 < fi1){
1608 }
else if ( erre1<Rin) {
1609 if( erre2< Rin && erre2> 0. ) {
1612 }
else if (erre1> Rout && erre2 > Rout &&
1613 !( fi1<= aaa && aaa<=fi2 && ddd<=Rout )
1618 for(l=itemp-2; l<=itemp+2; l++){
1621 }
else if (l>=nfid){
1622 l2 = l- nfid*( l/nfid );
1637 for(k=kstart;k<kend;k++){
1639 for( l3=0;l3<*(nBoxConformal+k*nfid+l2);l3++){
1640 if( ! Unselected[*(HitsinBoxConformal+l3*nrd*nfid+k*nfid+l2)] )
continue;
1641 nHit_original = (Short_t) infoparalConformal
1642 [*(HitsinBoxConformal+l3*nrd*nfid+k*nfid+l2)][3];
1644 if( !InclusionListStt[ nHit_original ] )
continue;
1646 dx = -Oxx+info[ nHit_original ][0];
1647 dy = -Oyy+info[ nHit_original ][1];
1648 distance =
sqrt(dx*dx+dy*dy);
1649 if (
fabs(Rr - distance ) > NTIMES*STRAWRADIUS )
continue;
1652 xx=infoparalConformal[*(HitsinBoxConformal+l3*nrd*nfid+k*nfid+l2)][0];
1653 yy=infoparalConformal[*(HitsinBoxConformal+l3*nrd*nfid+k*nfid+l2)][1];
1654 dist =
fabs( -yy+ m*xx +q )/
sqrt(m*m+1.);
1655 if( AcceptHitsConformal( dist,
1656 infoparalConformal[*(HitsinBoxConformal+l3*nrd*nfid+k*nfid+l2)][2],
1657 infoparalConformal[*(HitsinBoxConformal+l3*nrd*nfid+k*nfid+l2)][4]
1660 auxListHitsinTrack[nAssociatedHits]=*(HitsinBoxConformal+l3*nrd*nfid+k*nfid+l2);
1661 Unselected[*(HitsinBoxConformal+l3*nrd*nfid+k*nfid+l2)]=
false;
1677 iFi0 = (Short_t) (atan(m)*nrd/(2.*
PI) );
1678 for(itemp=iFi0-5; itemp<=iFi0+5;itemp++){
1682 }
else if (i>=nfid){
1683 i -= nfid*( i/nfid );
1685 for(l=0; l<nrd;l++){
1686 for( k=0;k<*(nBoxConformal+l*nfid+
i);k++){
1687 nHit_original = (Short_t)
1688 infoparalConformal[*(HitsinBoxConformal+k*nrd*nfid+l*nfid+i)][3];
1689 if( !InclusionListStt[ nHit_original ] )
continue;
1691 dx = -Oxx+info[ nHit_original ][0];
1692 dy = -Oyy+info[ nHit_original ][1];
1693 distance =
sqrt(dx*dx+dy*dy);
1694 if (
fabs(Rr - distance ) > NTIMES*STRAWRADIUS )
continue;
1697 xx=infoparalConformal[*(HitsinBoxConformal+k*nrd*nfid+l*nfid+
i)][0];
1698 yy=infoparalConformal[*(HitsinBoxConformal+k*nrd*nfid+l*nfid+
i)][1];
1699 dist =
fabs( m*xx-yy )/
sqrt( m*m+1.);
1700 if( AcceptHitsConformal( dist,
1701 infoparalConformal[*(HitsinBoxConformal+k*nrd*nfid+l*nfid+i)][2],
1702 infoparalConformal[*(HitsinBoxConformal+k*nrd*nfid+l*nfid+i)][4]
1704 auxListHitsinTrack[nAssociatedHits]=*(HitsinBoxConformal+k*nrd*nfid+l*nfid+
i);
1719 return nAssociatedHits;
1731 Short_t *auxListHitsinTrack,
1732 bool *InclusionListStt,
1736 Short_t *ListSttParHits,
1737 Int_t NhitsParallel,
1747 Short_t nAssociatedHits;
1760 for(i=0; i<NhitsParallel;i++){
1761 if( !InclusionListStt[ ListSttParHits[i] ] )
continue;
1764 dx = -Oxx+info[ListSttParHits[
i]][0];
1765 dy = -Oyy+info[ListSttParHits[
i]][1];
1767 if(angle<0.) angle += 2.*
PI;
1768 if(angle<0.) angle =0.;
1769 distance =
sqrt(dx*dx+dy*dy);
1770 if (
fabs(Rr - distance ) > NTIMES*STRAWRADIUS )
continue;
1771 if(angle<Fi_low) angle += 2.*
PI;
1772 if(angle>Fi_up)
continue;
1773 auxListHitsinTrack[nAssociatedHits]= ListSttParHits[
i];
1777 return nAssociatedHits;
bool FindTrackInXYProjection(struct FindTrackInXYProjection_InputData *inputdata)
friend F32vec4 cos(const F32vec4 &a)
Short_t FitHelixCylinder(Short_t nHitsinTrack, Double_t *Xconformal, Double_t *Yconformal, Double_t *DriftRadiusconformal, Double_t *ErrorDriftRadiusconformal, Double_t rotationangle, Double_t trajectory_vertex[2], Short_t NMAX, Double_t *m, Double_t *q, Double_t *pAlfa, Double_t *pBeta, Double_t *pGamma, bool *Type, int istampa, int IVOLTE)
friend F32vec4 sqrt(const F32vec4 &a)
friend F32vec4 sin(const F32vec4 &a)
bool AcceptHitsConformal(Double_t distance, Double_t DriftConfR, Double_t StrawConfR)
Short_t FindTrackStrictCollection(Short_t *FiConformalIndex, bool *InclusionListStt, Short_t iSeed, Short_t *ListHitsinTrackinWhichToSearch, Short_t MAXSTTHITS, Short_t NFiCELLDISTANCE, Short_t nfidivconformal, Short_t NParallelToSearch, Short_t *OutputListHitsinTrack)
void OrderingParallel(Short_t Charge, Double_t *Fi_initial_helix_referenceframe, Double_t *Fi_final_helix_referenceframe, Double_t info[][7], Short_t *ListParallelHits, Short_t nParallelHits, Double_t oX, Double_t oY, Double_t *U, Double_t *V)
Short_t TrkAssociatedParallelHitsToHelixQuater(Short_t *auxListHitsinTrack, Double_t deltanr, Short_t *FiConformalIndex, Short_t *HitsinBoxConformal, bool *InclusionListStt, Double_t info[][7], Double_t infoparalConformal[][5], Short_t *ListHitsinTrack, Double_t m, Short_t MAXSTTHITS, Short_t *nBoxConformal, Short_t nfidivconformal, Short_t nHitsinTrack, Int_t NhitsParallel, Short_t nrdivconformal, Double_t Oxx, Double_t Oyy, Double_t q, Double_t *radiaConf, Short_t *RConformalIndex, Double_t Rr, Double_t rstrawdetectormin, Short_t Status, Double_t strawradius)
Short_t TrkAssociatedParallelHitsToHelix5(Short_t *auxListHitsinTrack, bool *InclusionListStt, Double_t Fi_low, Double_t Fi_up, Double_t info[][7], Short_t *ListSttParHits, Int_t NhitsParallel, Double_t Oxx, Double_t Oyy, Double_t Rr, Double_t strawradius)
const Double_t STRAWRADIUS
Short_t FindTrackPatterninBoxConformalSpecial(Short_t *FiConformalIndex, Short_t *HitsinBoxConformal, bool *InclusionListStt, Double_t info[][7], Short_t iSeed, Short_t *ListHitsinTrackinWhichToSearch, Short_t *ListSttParHits, Short_t maxstthits, Short_t minimumhitspertrack, Short_t *nBoxConformal, Short_t NFiCELLDISTANCE, Short_t nfidivconformal, Short_t Nparal, Short_t NparallelToSearch, Short_t NRCELLDISTANCE, Short_t nrdivconformal, Short_t *OutputListHitsinTrack, Short_t *RConformalIndex)
Short_t FindTrackPatterninBoxConformal(Short_t *FiConformalIndex, Short_t *HitsinBoxConformal, Short_t ihit, bool *InclusionListStt, Double_t info[][7], Short_t *ListHitsinTrack, Short_t *ListSttParHits, Short_t maxstthitsintracks, Short_t maxstthits, Short_t minimumhitspertrack, Short_t *nBoxConformal, Short_t nfidivconformal, Short_t nFicell, Short_t NFiCELLDISTANCE, Short_t Nparal, Short_t nRcell, Short_t NRCELLDISTANCE, Short_t *RConformalIndex, Short_t nrdivconformal)
Short_t AssociateSciTilHit(Double_t dimensionscitil, Double_t *esse, bool *InclusionListSciTil, Short_t *List, Short_t maxscitilhitsintrack, Short_t nSciTilHits, Double_t Oxx, Double_t Oyy, Double_t posizSciTil[][3], Double_t Rr)
friend F32vec4 fabs(const F32vec4 &a)
void Merge_Sort(Short_t n_ele, Double_t *array, Int_t *ind)
friend F32vec4 atan2(const F32vec4 &y, const F32vec4 &x)
bool IntersectionSciTil_Circle(Double_t posizSciTilx, Double_t posizSciTily, Double_t Oxx, Double_t Oyy, Double_t Rr, Short_t *Nintersections, Double_t XintersectionList[2], Double_t YintersectionList[2])
void FindCharge(Double_t oX, Double_t oY, Short_t nHits, Double_t *X, Double_t *Y, Short_t *Charge)