#include #include "table_header.h" #include "dMutArrayParams.h" #include "dMutFitParams.h" #include "mumdigipar.h" #include "dMutCathodeClusters.h" #include "dMutCathodeClustersN.h" #include "sublink.h" #include "fpmlink.h" #include "MUMPAR.h" #include "MutGeom.h" /** DESCRIPTION: Put linear structure mMutCathodeClusts into a multi-dimensional array structure that can be indexed by arm, station, octant, plane, hit

@param

IN:

dMutCathodeClusts - Structure that holds cathode clusters

dMutCathodeClusts_h -

OUT:

dMutCathodeClustsN - Cathode cluster structure in multi-dimensional array format

@return STAF Condition Value

@author Melynda Brooks, LANL, mbrooks@lanl.gov */ int mMutNestCathodeClustsCC( TABLE_HEAD_ST *mumdigipar_h, MUMDIGIPAR_ST *mumdigipar , TABLE_HEAD_ST *dMutCathodeClusters_h, DMUTCATHODECLUSTERS_ST *dMutCathodeClusters, dMutCathodeClustersN_ST *dMutCathodeClustersN[NumberOfArms] [NumberOfStations] [NumberOfOctants] [NumberOfHalfOctants] [3] [NumberOfCathodePlanes] ) { // // Declare local variables // int mMutNestCathodeClustsCC_STATUS; int ihit; int istrip; int nhits; int i; int arm; int station; int octant; int halfoctant; int gap; int cath; int oldarm; int oldstation; int oldoctant; int oldhalfoctant, oldgap, oldcath; int first; int iclust; // Zero NHITS: for (arm = 0; arm < NumberOfArms; ++arm) { for (station = 0; station < NumberOfStations; ++station) { for (octant = 0; octant < NumberOfOctants; ++octant) { for (halfoctant = 0; halfoctant < NumberOfHalfOctants; ++halfoctant) { for (gap = 0; gap < 3; ++gap) { for (cath = 0; cath < NumberOfCathodePlanes; ++cath) { dMutCathodeClustersN[arm][station][octant][halfoctant][gap][cath] = new dMutCathodeClustersN_ST; dMutCathodeClustersN[arm][station][octant][halfoctant][gap][cath]->nhits = 0; for (iclust=0; iclust clust[iclust] = 0; } } } } } } } // // Sort by strip first: // oldarm = -999; oldstation = -999; oldoctant = -999; oldhalfoctant = -999; oldgap= -999; oldcath= -999; nhits = 0; first = 1; for (ihit = 0; ihit < dMutCathodeClusters_h->nok; ++ihit) { arm = dMutCathodeClusters[ihit].arm; station = dMutCathodeClusters[ihit].station; octant = dMutCathodeClusters[ihit].octant; halfoctant = dMutCathodeClusters[ihit].halfoctant; gap = dMutCathodeClusters[ihit].gap; cath = dMutCathodeClusters[ihit].cath; if (arm != oldarm || station != oldstation || octant != oldoctant || halfoctant != oldhalfoctant || gap != oldgap || cath!= oldcath) { if (first == 0) { dMutCathodeClustersN[oldarm][oldstation][oldoctant][oldhalfoctant] [oldgap][oldcath]->nhits = (long int)nhits; } if (first == 1) { first = 0; } nhits = 1; } else { if (nhits < MUT_MAX_CLHITS) { nhits++; } else { cout << "NHITS exceeds " << MUT_MAX_CLHITS << " in mMutNestCathodeClustsCC\n"; cout << "Structure dMutCathodeClustersN will be incomplete\n"; } } if (!dMutCathodeClustersN[arm][station][octant][halfoctant][gap][cath]->clust[nhits-1]) dMutCathodeClustersN[arm][station][octant][halfoctant][gap][cath]->clust[nhits-1] = new CathodeClust_ST; dMutCathodeClustersN[arm][station][octant][halfoctant][gap][cath]->clust[nhits-1]->cluswid = dMutCathodeClusters[ihit].cluswid; dMutCathodeClustersN[arm][station][octant][halfoctant][gap][cath]->clust[nhits-1]->stripbegin = dMutCathodeClusters[ihit].stripbegin; dMutCathodeClustersN[arm][station][octant][halfoctant][gap][cath]->clust[nhits-1]->nfit = dMutCathodeClusters[ihit].nfit; dMutCathodeClustersN[arm][station][octant][halfoctant][gap][cath]->clust[nhits-1]->nclus = dMutCathodeClusters[ihit].nclus; dMutCathodeClustersN[arm][station][octant][halfoctant][gap][cath]->clust[nhits-1]->chisqr = dMutCathodeClusters[ihit].chisqr; for (i = 0; i < MUT_MAX_CLHITS; ++i) { dMutCathodeClustersN[arm][station][octant][halfoctant][gap][cath]->clust[nhits-1]->iclus[i] = dMutCathodeClusters[ihit].iclus[i]; } for (istrip = 0; istrip < MAXWID; ++istrip) { dMutCathodeClustersN[arm][station][octant][halfoctant][gap][cath]->clust[nhits-1]-> qstrip[istrip] = dMutCathodeClusters[ihit].qstrip[istrip]; dMutCathodeClustersN[arm][station][octant][halfoctant][gap][cath]->clust[nhits-1]-> qrms[istrip] = dMutCathodeClusters[ihit].qrms[istrip]; } for (istrip = 0; istrip < MAXFIT; ++istrip) { dMutCathodeClustersN[arm][station][octant][halfoctant][gap][cath]->clust[nhits-1]-> xfit[istrip] = dMutCathodeClusters[ihit].xfit[istrip]; dMutCathodeClustersN[arm][station][octant][halfoctant][gap][cath]->clust[nhits-1]-> qfit[istrip] = dMutCathodeClusters[ihit].qfit[istrip]; dMutCathodeClustersN[arm][station][octant][halfoctant][gap][cath]->clust[nhits-1]-> res[istrip] = dMutCathodeClusters[ihit].res[istrip]; dMutCathodeClustersN[arm][station][octant][halfoctant][gap][cath]->clust[nhits-1]-> ntracks[istrip] = dMutCathodeClusters[ihit].ntracks[istrip]; dMutCathodeClustersN[arm][station][octant][halfoctant][gap][cath]->clust[nhits-1]-> trackhitflag[istrip] = dMutCathodeClusters[ihit].trackhitflag[istrip]; dMutCathodeClustersN[arm][station][octant][halfoctant][gap][cath]->clust[nhits-1]-> ncath[istrip] = dMutCathodeClusters[ihit].ncath[istrip]; for (i = 0; i < 2; ++i) { dMutCathodeClustersN[arm][station][octant][halfoctant][gap][cath]->clust[nhits-1]-> cathhit[i][istrip] = dMutCathodeClusters[ihit].cathhit[i][istrip]; dMutCathodeClustersN[arm][station][octant][halfoctant][gap][cath]->clust[nhits-1]-> cathfit[i][istrip] = dMutCathodeClusters[ihit].cathfit[i][istrip]; } } oldarm = arm; oldstation = station; oldoctant = octant; oldhalfoctant = halfoctant; oldgap = gap; oldcath = cath; } // Loop over clusters if (oldarm != -999) { dMutCathodeClustersN[oldarm][oldstation][oldoctant][oldhalfoctant][oldgap] [oldcath]->nhits = nhits; } mMutNestCathodeClustsCC_STATUS = 1; return mMutNestCathodeClustsCC_STATUS; }