| 1406 | } |
| 1407 | |
| 1408 | void SMS :: add(grain *g0, grain *g1, grain *g2, int c) |
| 1409 | { |
| 1410 | if(c == 0) { |
| 1411 | if(band >= minTrial1Band) { |
| 1412 | c2even(g0->x, x00[0], N); |
| 1413 | } |
| 1414 | if(band >= minTrial2Band) { |
| 1415 | c2even(g1->x, x10[0], N); |
| 1416 | } |
| 1417 | c2even(g2->x, x2[0], N); |
| 1418 | } else { |
| 1419 | if(band >= minTrial1Band) { |
| 1420 | c2odd(g0->x, x00[1], N); |
| 1421 | } |
| 1422 | if(band >= minTrial2Band) { |
| 1423 | c2odd(g1->x, x10[1], N); |
| 1424 | } |
| 1425 | c2odd(g2->x, x2[1], N); |
| 1426 | } |
| 1427 | |
| 1428 | float *mag0; |
| 1429 | if(band >= minTrial1Band) { |
| 1430 | mag0 = (float*)malloc((Nover2+1)*sizeof(float)); |
| 1431 | calcmags(mag0, x00[c]); |
| 1432 | } |
| 1433 | float *mag1; |
| 1434 | if(band >= minTrial2Band) { |
| 1435 | mag1 = (float*)malloc((Nover2+1)*sizeof(float)); |
| 1436 | calcmags(mag1, x10[c]); |
| 1437 | } |
| 1438 | float mag2sum[1024]; |
| 1439 | memset(mag2sum,0,1024*sizeof(float)); |
| 1440 | |
| 1441 | float *mag2 = this->mag2[c]; |
| 1442 | calcmags(mag2sum, g2->x); |
| 1443 | calcmags(mag2sum, x2[c]); |
| 1444 | calcmags(mag2, x2[c]); |
| 1445 | #ifdef MULTITHREADED |
| 1446 | pthread_mutex_lock(&magMutex[c]); |
| 1447 | #endif |
| 1448 | if(band >= minTrial1Band) mag0Queue[c].push(mag0); |
| 1449 | if(band >= minTrial2Band) mag1Queue[c].push(mag1); |
| 1450 | #ifdef MULTITHREADED |
| 1451 | pthread_mutex_unlock(&magMutex[c]); |
| 1452 | #endif |
| 1453 | float magmax = mag2[0]; |
| 1454 | for(int k=1;k<=kEnd;k++) { |
| 1455 | if(magmax < mag2[k]) magmax = mag2[k]; |
| 1456 | } |
| 1457 | float peakmin = magmax * peakThresh; |
| 1458 | |
| 1459 | float xt2 = 1.0f; |
| 1460 | bool bTroughN1 = false; |
| 1461 | bool bTroughN2 = false; |
| 1462 | float x0 = 1.0f; |
| 1463 | float y0 = mag2[1]; |
| 1464 | float x1 = 0.0f; |
| 1465 | float y1 = 0.0f; |