Changeset 15347


Ignore:
Timestamp:
04/15/13 17:02:29 (12 years ago)
Author:
tbretz
Message:
More structural improvements; more local variables; simplified the k0-loop
File:
1 edited

Legend:

Unmodified
Added
Removed
  • trunk/FACT++/src/EventBuilder.c

    r15346 r15347  
    561561//        < 0    if no space left
    562562
    563    struct timeval tv;
    564    uint32_t tsec, tusec;
    565    uint oldest;
    566    int jold;
    567 
    568    int i, b, evFree;
     563//   int evFree;
    569564//   int headmem = 0;
    570565//   size_t needmem = 0;
    571566
    572567
    573    b = sk / 7;
     568   const int b = sk / 7;
    574569
    575570   if (nRoi[0] < 0 || nRoi[0] > 1024) {
     
    596591
    597592
    598    i = evID % MAX_EVT;
    599    evFree = -1;
     593   int i = evID % MAX_EVT;
     594   int evFree = -1;
    600595
    601596   for (int k = 0; k < MAX_RUN; k++) {
     
    635630   i = evFree;                  //found free entry; use it ...
    636631
     632   struct timeval tv;
    637633   gettimeofday (&tv, NULL);
    638    tsec = tv.tv_sec;
    639    tusec = tv.tv_usec;
     634
     635   const uint32_t tsec = tv.tv_sec;
     636   const uint32_t tusec = tv.tv_usec;
    640637
    641638   //check if runId already registered in runCtrl
    642639   evFree = -1;
    643    oldest = g_actTime + 1000;
    644    jold = -1;
     640
     641   uint oldest = g_actTime + 1000;
     642   int jold = -1;
     643
    645644   for (int k = 0; k < MAX_RUN; k++) {
    646645      if (runCtrl[k].runId == runID) {
     
    10491048{
    10501049/* *** main loop reading FAD data and sorting them to complete events */
    1051    int head_len, frst_len, numok, numok2, numokx, dest, evID, i, k;
    1052    int actBoards = 0, minLen;
    1053    int32_t jrd;
     1050   int actBoards = 0;
    10541051   uint gi_SecTime;             //time in seconds
    1055    int boardId, roi[9], drs, px, src, pixS, /*pixH,*/ pixC, pixR, tmS;
    1056 
    1057    int goodhed = 0;
    10581052
    10591053   int sockDef[NBOARDS];        //internal state of sockets
    1060    int jrdx;
    1061 
    1062 
    1063    struct timespec xwait;
    1064 
    10651054
    10661055   struct timeval tv;
     
    10861075
    10871076
    1088    head_len = sizeof (PEVNT_HEADER);
    1089    frst_len = head_len;         //max #bytes to read first: fad_header only, so each event must be longer, even for roi=0
    1090    minLen = head_len;           //min #bytes needed to check header: full header for debug
     1077   int frst_len = sizeof(PEVNT_HEADER);  //max #bytes to read first: fad_header only, so each event must be longer, even for roi=0
     1078   int minLen   = sizeof(PEVNT_HEADER);  //min #bytes needed to check header: full header for debug
    10911079
    10921080   start.S = 0xFB01;
     
    10941082
    10951083/* initialize run control logics */
    1096    for (i = 0; i < MAX_RUN; i++) {
     1084   for (int i = 0; i < MAX_RUN; i++) {
    10971085      runCtrl[i].runId = 0;
    10981086      runCtrl[i].fileId = -2;
     
    11001088   }
    11011089   gi_resetS = gi_resetR = 9;
    1102    for (i = 0; i < NBOARDS; i++)
     1090   for (int i = 0; i < NBOARDS; i++)
    11031091      sockDef[i] = 0;
    11041092
     
    11141102   gi_runStat = g_runStat;
    11151103   gj.readStat = g_runStat;
    1116    numok = numok2 = 0;
    1117 
    1118    int cntsock = 8 - NUMSOCK ;
     1104
     1105   const int cntsock = 8 - NUMSOCK ;
    11191106
    11201107   if (gi_resetS > 0) {
    11211108      //make sure all sockets are preallocated as 'not exist'
    1122       for (i = 0; i < MAX_SOCK; i++) {
     1109      for (int i = 0; i < MAX_SOCK; i++) {
    11231110         rd[i].socket = -1;
    11241111         rd[i].sockStat = 99;
    11251112      }
    11261113
    1127       for (k = 0; k < NBOARDS; k++) {
     1114      for (int k = 0; k < NBOARDS; k++) {
    11281115         gi_NumConnect[k] = 0;
    11291116         gi.numConn[k] = 0;
     
    11711158
    11721159
    1173       int b, p, p0, s0, nch;
    1174       nch = 0;
    1175       for (b = 0; b < NBOARDS; b++) {
    1176          k = b * 7;
     1160      int nch = 0;
     1161      for (int b = 0; b < NBOARDS; b++) {
     1162         int k = b * 7;
    11771163         if (g_port[b].sockDef != sockDef[b]) { //something has changed ...
    11781164            nch++;
     
    11801166            gi.numConn[b] = 0;
    11811167            gj.numConn[b] = 0;
     1168
     1169            int s0;
    11821170            if (sockDef[b] == 0)
    11831171               s0 = 0;          //sockets to be defined and opened   
     
    11871175               s0 = +1;         //sockets to be closed and reopened
    11881176
    1189             if (s0 == 0)
    1190                p0 = ntohs (g_port[b].sockAddr.sin_port);
    1191             else
    1192                p0 = 0;
    1193 
    1194             for (p = p0 + 1; p < p0 + 8; p++) {
     1177            const int p0 = s0==0 ? 0 : ntohs (g_port[b].sockAddr.sin_port);
     1178
     1179            for (int p = p0 + 1; p < p0 + 8; p++) {
    11951180               GenSock (s0, k, p, &g_port[b].sockAddr, &rd[k]); //generate address and socket
    11961181               k++;
     
    12021187      if (nch > 0) {
    12031188         actBoards = 0;
    1204          for (b = 0; b < NBOARDS; b++) {
     1189         for (int b = 0; b < NBOARDS; b++) {
    12051190            if (sockDef[b] > 0)
    12061191               actBoards++;
     
    12091194
    12101195
    1211       jrdx = 0;
    1212       numokx = 0;
    1213       numok = 0;                //count number of succesfull actions
     1196#ifdef EVTDEBUG
     1197      int jrdx = 0;
     1198#endif
     1199
     1200      int numokx = 0;
     1201      int numok = 0;                //count number of succesfull actions
    12141202
    12151203/*
     
    12291217      */
    12301218
    1231       for (i = 0; i < MAX_SOCK; i+=7) {  //check all sockets if something to read
    1232 
    1233          b = i / 7 ;
    1234          p = i % 7 ;
     1219      for (int i = 0; i < MAX_SOCK; i+=7) {  //check all sockets if something to read
     1220
     1221          const int b = i / 7 ;
     1222          //const int p = i % 7 ;
    12351223
    12361224/*if ( p >= NUMSOCK) { ; }
    1237 else*/ {
    1238          if (sockDef[b] > 0)
    1239             s0 = +1;
    1240          else
    1241             s0 = -1;
     1225 else*/ {
     1226     const int s0 = sockDef[b] > 0 ? +1 : -1;
    12421227
    12431228         if (rd[i].sockStat < 0) {      //try to connect if not yet done
     
    12911276               numok++;
    12921277
    1293                jrd =
     1278               const int32_t jrd =
    12941279                  recv (rd[i].socket, &rd[i].rBuf->B[rd[i].bufPos],
    12951280                        rd[i].bufLen, MSG_DONTWAIT);
     
    13391324            //if (jrd > 0) {
    13401325               numokx++;
     1326#ifdef EVTDEBUG
    13411327               jrdx += jrd;
     1328#endif
    13421329            //}
    13431330
     
    14471434
    14481435
    1449                   int jr, kr;
    1450                   int  checkRoi;
    1451                   int roiHopper = head_len/2 + 2; //points to the very first roi
     1436                  int checkRoi;
     1437                  int roiHopper = sizeof(PEVNT_HEADER)/2 + 2; //points to the very first roi
     1438                  int roi[9];
    14521439                  roi[0] = rd[i].rBuf->S[roiHopper];
    14531440                  roiHopper += roi[0]+4;//skip to the second roi (i.e. next board, same patch-pixel)
    1454                   for (kr = 1; kr < 4; kr++)
     1441                  for (int kr = 1; kr < 4; kr++)
    14551442                  {
    14561443                      checkRoi = rd[i].rBuf->S[roiHopper];
     
    14641451                  }
    14651452                  //roiHopper now points to the first pixel of board 2. Do the 8 remaining pixels
    1466                   for (jr = 1; jr < 9; jr++) {
     1453                  for (int jr = 1; jr < 9; jr++) {
    14671454                     roi[jr] = rd[i].rBuf->S[roiHopper];
    14681455                     checkRoi = roi[jr];
    1469                      for (kr = 1; kr < 4; kr++)
     1456                     for (int kr = 1; kr < 4; kr++)
    14701457                     {
    14711458                         roiHopper += checkRoi+4;
     
    14871474//                     actid = rd[i].ftmID;
    14881475
    1489                   evID = mBufEvt (rd[i].evtID, rd[i].runID, roi, i,
     1476                  const int evID = mBufEvt (rd[i].evtID, rd[i].runID, roi, i,
    14901477                                  rd[i].fadLen, rd[i].ftmTyp, rd[i].ftmID,
    14911478                                  rd[i].evtID);
     
    15301517                  }
    15311518#endif
    1532                   int qncpy = 0;
    1533                   boardId = b;
    1534                   int fadBoard = rd[i].rBuf->S[12];
    1535                   int fadCrate = fadBoard / 256;
     1519                  const int boardId = b;
     1520                  const int fadBoard = rd[i].rBuf->S[12];
     1521                  const int fadCrate = fadBoard / 256;
     1522
    15361523                  if (boardId != (fadCrate * 10 + fadBoard % 256)) {
    15371524                     factPrintf(kWarn, 301, "Board ID mismatch. Expected %d, got %d (C=%d, B=%d)",
     
    15511538                  }
    15521539
    1553                   int iDx = evtIdx[evID];       //index into evtCtrl
     1540                  const int iDx = evtIdx[evID];       //index into evtCtrl
    15541541
    15551542                  memcpy (&mBuffer[evID].FADhead[boardId].start_package_flag,
    1556                           &rd[i].rBuf->S[0], head_len);
    1557                   qncpy += head_len;
    1558 
    1559                   src = head_len / 2;
    1560                   for (px = 0; px < 9; px++) {  //different sort in FAD board.....
    1561                      for (drs = 0; drs < 4; drs++) {
     1543                          &rd[i].rBuf->S[0], sizeof(PEVNT_HEADER));
     1544
     1545                  int src = sizeof(PEVNT_HEADER) / 2;
     1546                  for (int px = 0; px < 9; px++) {  //different sort in FAD board.....
     1547                     for (int drs = 0; drs < 4; drs++) {
    15621548                         // pixH = rd[i].rBuf->S[src++];    // ID
    15631549                         src++;
    1564                         pixC = rd[i].rBuf->S[src++];    // start-cell
    1565                         pixR = rd[i].rBuf->S[src++];    // roi
     1550                        const int pixC = rd[i].rBuf->S[src++];    // start-cell
     1551                        const int pixR = rd[i].rBuf->S[src++];    // roi
    15661552//here we should check if pixH is correct ....
    15671553
    1568                         pixS = boardId * 36 + drs * 9 + px;
     1554                        const int pixS = boardId * 36 + drs * 9 + px;
    15691555                        src++;
    15701556
    15711557
    15721558                        mBuffer[evID].fEvent->StartPix[pixS] = pixC;
    1573                         dest = pixS * roi[0];
     1559
     1560                        int dest = pixS * roi[0];
    15741561                        memcpy (&mBuffer[evID].fEvent->Adc_Data[dest],
    15751562                                &rd[i].rBuf->S[src], roi[0] * 2);
    1576                         qncpy += roi[0] * 2;
    15771563                        src += pixR;
    15781564
    15791565                        if (px == 8) {
    1580                            tmS = boardId * 4 + drs;
     1566                           const int tmS = boardId * 4 + drs;
    15811567                           if (pixR > roi[0]) { //and we have additional TM info
    15821568                              dest = tmS * roi[0] + NPIX * roi[0];
     
    15861572                              memcpy (&mBuffer[evID].fEvent->Adc_Data[dest],
    15871573                                      &rd[i].rBuf->S[srcT], roi[0] * 2);
    1588                               qncpy += roi[0] * 2;
    15891574                           } else {
    15901575                              mBuffer[evID].fEvent->StartTM[tmS] = -1;
     
    16221607                        }
    16231608                     }
    1624 #ifdef EVTDEBUG
    1625                      factPrintf(kDebug, -1, "%5d complete event roi %4d roiTM %d cpy %8d %5d",
    1626                                mBuffer[evID].evNum, roi[0], roi[8] - roi[0], qncpy, qnrun);
    1627 #endif
    16281609                     //complete event read ---> flag for next processing
    16291610                     evtCtrl.evtStat[iDx] = 99;
     
    16501631                }
    16511632
    1652                   //check if startflag correct; else shift block ....
     1633                //check if startflag correct; else shift block ....
     1634                int k;
    16531635                  for (k = 0; k < rd[i].bufPos - 1; k++) {
    16541636                     if (rd[i].rBuf->B[k] == start.B[1]
     
    16601642                  if (k >= rd[i].bufPos - 1) {  //no start of header found
    16611643                     rd[i].bufPos = 0;
    1662                      rd[i].bufLen = head_len;
     1644                     rd[i].bufLen = sizeof(PEVNT_HEADER);
    16631645                     continue;
    16641646                  }
     
    16901672
    16911673                     // TGB: This needs much more checks than just the first two bytes!
    1692                      goodhed++;
    16931674
    16941675                     // Swap everything except start_package_flag.
     
    17661747      gi_SecTime = g_actTime;
    17671748
     1749      gj.bufNew = gj.bufEvt = 0;
    17681750
    17691751      //loop over all active events and flag those older than read-timeout
    17701752      //delete those that are written to disk ....
    1771 
    1772       int kd = evtCtrl.lastPtr - evtCtrl.frstPtr;
    1773       if (kd < 0)
    1774           kd += (MAX_EVT * MAX_RUN);
    1775 
    1776       gj.bufNew = gj.bufEvt = 0;
    1777 
    1778       const int k1 = evtCtrl.frstPtr;
    1779       for (int k=k1; k<k1+kd; k++)
     1753      for (int k0=evtCtrl.frstPtr; k0!=evtCtrl.lastPtr; k0++, k0 %= MAX_EVT*MAX_RUN)
    17801754      {
    1781           const int k0 = k % (MAX_EVT * MAX_RUN);
    1782 
    17831755          if (k0==evtCtrl.frstPtr && evtCtrl.evtStat[k0]<0)
    17841756          {
     
    18481820         gj.maxMem = gj.usdMem;
    18491821         gj.maxEvt = gj.bufTot;
    1850          for (b = 0; b < NBOARDS; b++)
     1822         for (int b = 0; b < NBOARDS; b++)
    18511823            gj.rateBytes[b] = 0;
    18521824/*
     
    18941866      //must close all open sockets ...
    18951867      factPrintf(kInfo, -1, "Close all sockets...");
    1896       for (i = 0; i < MAX_SOCK; i++) {
     1868      for (int i = 0; i < MAX_SOCK; i++) {
    18971869         if (rd[i].sockStat == 0) {
    18981870            GenSock (-1, i, 0, NULL, &rd[i]);   //close and destroy open socket   
     
    19131885   {
    19141886       //flag all events as 'read finished'
    1915        int kd = evtCtrl.lastPtr - evtCtrl.frstPtr;
    1916        if (kd < 0)
    1917            kd += (MAX_EVT * MAX_RUN);
    1918 
    1919        const int k1 = evtCtrl.frstPtr;
    1920        for (int k=k1; k<k1+kd; k++)
    1921        {
    1922            const int k0 = k % (MAX_EVT * MAX_RUN);
     1887      for (int k0=evtCtrl.frstPtr; k0!=evtCtrl.lastPtr; k0++, k0 %= MAX_EVT*MAX_RUN)
     1888      {
    19231889           if (evtCtrl.evtStat[k0] > 0 && evtCtrl.evtStat[k0] < 90)
    19241890           {
     
    19441910         numclear = 0;
    19451911
    1946          int kd = evtCtrl.lastPtr - evtCtrl.frstPtr;
    1947          if (kd < 0)
    1948              kd += (MAX_EVT * MAX_RUN);
    1949 
    1950          const int k1 = evtCtrl.frstPtr;
    1951          for (int k=k1; k<k1+kd; k++)
     1912         for (int k0=evtCtrl.frstPtr; k0!=evtCtrl.lastPtr; k0++, k0 %= MAX_EVT*MAX_RUN)
    19521913         {
    1953              const int k0 = k % (MAX_EVT * MAX_RUN);
    19541914             if (evtCtrl.evtStat[k0] > minclear)
    19551915             {
     
    19801940         CloseRunFile (0, 0, 0);        //ask all Runs to be closed
    19811941      }
    1982       if (gi_resetX > 0) {
    1983          xwait.tv_sec = gi_resetX;
    1984          xwait.tv_nsec = 0;
    1985          nanosleep (&xwait, NULL);
     1942      if (gi_resetX > 0)
     1943      {
     1944          struct timespec xwait;
     1945          xwait.tv_sec = gi_resetX;
     1946          xwait.tv_nsec = 0;
     1947          nanosleep (&xwait, NULL);
    19861948      }
    19871949
     
    20191981        int numProc = 0;
    20201982
    2021         int kd = evtCtrl.lastPtr - evtCtrl.frstPtr;
    2022         if (kd < 0)
    2023             kd += (MAX_EVT * MAX_RUN);
    2024 
    2025         const int k1 = evtCtrl.frstPtr;
    2026         for (int k=k1; k<k1+kd; k++)
     1983        for (int k0=evtCtrl.frstPtr; k0!=evtCtrl.lastPtr; k0++, k0 %= MAX_EVT*MAX_RUN)
    20271984        {
    2028             const int k0 = k % (MAX_EVT * MAX_RUN);
    2029 
    20301985            if (!(evtCtrl.evtStat[k0] == 1000 + threadID))
    20311986            {
     
    20852040{
    20862041/* *** main loop processing file, including SW-trigger */
    2087    int status, j;
     2042   int status;
    20882043
    20892044   int lastRun = 0;             //usually run from last event still valid
     
    21252080       int numProc = 0;
    21262081
    2127        int kd = evtCtrl.lastPtr - evtCtrl.frstPtr;
    2128        if (kd < 0)
    2129            kd += (MAX_EVT * MAX_RUN);
    2130 
    2131        const int k1 = evtCtrl.frstPtr;
    2132        for (int k=k1; k<k1+kd; k++)
     2082       for (int k0=evtCtrl.frstPtr; k0!=evtCtrl.lastPtr; k0++, k0 %= MAX_EVT*MAX_RUN)
    21332083       {
    2134            const int k0 = k % (MAX_EVT * MAX_RUN);
    21352084           if (!(evtCtrl.evtStat[k0] > 90 && evtCtrl.evtStat[k0] < 1000))
    21362085           {
     
    23292278
    23302279   factPrintf(kInfo, -1, "Abort Processing Process ...");
    2331    int kd = evtCtrl.lastPtr - evtCtrl.frstPtr;
    2332    if (kd < 0)
    2333       kd += (MAX_EVT * MAX_RUN);
    23342280
    23352281   for (int k = 0; k < gi_maxProc; k++) {
     
    23372283   }
    23382284
    2339    const int k1 = evtCtrl.frstPtr;
    2340    for (int k=k1; k<k1+kd; k++)
     2285   for (int k0=evtCtrl.frstPtr; k0!=evtCtrl.lastPtr; k0++, k0 %= MAX_EVT*MAX_RUN)
    23412286   {
    2342        const int k0 = k % (MAX_EVT * MAX_RUN);
    23432287       if (evtCtrl.evtStat[k0] >= 0 && evtCtrl.evtStat[k0] < 1000)
    23442288           evtCtrl.evtStat[k0] = 9800;    //flag event as 'processed'
     
    24622406       int numWait  = 0;
    24632407
    2464        int kd = evtCtrl.lastPtr - evtCtrl.frstPtr;
    2465        if (kd < 0)
    2466            kd += (MAX_EVT * MAX_RUN);
    2467 
    2468        const int k1 = evtCtrl.frstPtr;
    2469        for (int k=k1; k<k1+kd; k++)
     2408       for (int k0=evtCtrl.frstPtr; k0!=evtCtrl.lastPtr; k0++, k0 %= MAX_EVT*MAX_RUN)
    24702409       {
    2471            const int k0 = k % (MAX_EVT * MAX_RUN);
    2472 
    24732410           if (evtCtrl.evtStat[k0] <= 5000 || evtCtrl.evtStat[k0] >= 9000)
    24742411           {
     
    24832420           //we must drain the buffer asap
    24842421           if (gi_resetR > 1)
    2485            {       
     2422           {
    24862423               evtCtrl.evtStat[k0] = 9904;
    24872424               continue;
Note: See TracChangeset for help on using the changeset viewer.