Changeset 342 in Sophya for trunk/Poubelle/archTOI.old/ssthandler.cc
- Timestamp:
- Aug 2, 1999, 3:45:52 PM (26 years ago)
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/Poubelle/archTOI.old/ssthandler.cc
r315 r342 7 7 // free parameters = period + phase 8 8 9 #define DIODE_UNUSED_1 310 #define DIODE_UNUSED_2 711 12 9 #include <math.h> 13 10 #include "ssthandler.h" 11 12 // diodpermut[i] = channel de la diode i 13 int SSTHandler::diodpermut[46]= 14 { 8,24,40, 9,25,41,10,26,42,11, 15 27,43,16,32, 1,17,33, 2,18,34, 16 3,19,35,12,28,44,13,29,45,14, 17 30,46,15,31,47,20,36, 5,21,37, 18 6,22,38, 7,23,39}; 19 // voies 0 et 4 non connectees, voie 1 en panne. 14 20 15 21 SSTHandler::SSTHandler() … … 21 27 lastBlkNum = -1; 22 28 23 Has2Bars(false);29 //Has2Bars(false); 24 30 prcTodo=0; 31 seuil=100; 32 25 33 } 26 34 … … 36 44 37 45 prcTodo = x.prcTodo; 38 has2bars = x.has2bars;39 elecOffset = x.elecOffset;46 // has2bars = x.has2bars; 47 // elecOffset = x.elecOffset; 40 48 lastBlkNum = x.lastBlkNum; 49 seuil = x.seuil; 41 50 } 42 51 … … 53 62 54 63 prcTodo = x.prcTodo; 55 has2bars = x.has2bars;56 elecOffset = x.elecOffset;64 // has2bars = x.has2bars; 65 // elecOffset = x.elecOffset; 57 66 lastBlkNum = x.lastBlkNum; 67 seuil = x.seuil; 58 68 59 69 return *this; … … 74 84 } 75 85 86 bool SSTHandler::has2bars = false; 87 int SSTHandler::elecOffset = 1; 88 76 89 void SSTHandler::Has2Bars(bool has, int eo) 77 90 { … … 89 102 RemoveOffset(); 90 103 } 91 104 if (prcTodo & findStars) { 105 FindStars(); 106 } 92 107 } 93 108 … … 101 116 // numero de la diode (0-47) = j*8+l; 102 117 // indice dans le bloc sst du mot de 32 bits (0-17) = j*3+k; 103 // indice dans mot de 32 bits du premier bit utile = 28-4*l;118 // indice dans mot de 32 bits du premier bit utile = 4*l; 104 119 105 120 for (j=0; j<48; j++) diod[j] = 0; … … 108 123 for (k=0; k<3; k++) 109 124 for (l=0; l<8; l++) { 110 longword = blk->sst[i][j*3+k];111 word = (word >> ( 28-4*l)) & 0xF;112 //printf("diode %d mot %d valeur %d\n", j*8+l, k, word);125 int4 word = blk->sst[i][j*3+k]; 126 word = (word >> (4*l)) & 0xF; 127 // printf("diode %d mot %d valeur %d\n", j*8+l, k, word); 113 128 diod[j*8+l] = (diod[j*8+l] << 4) + word; 114 129 } 130 131 //for (j=0; j<48; j++) if (diod[j]>2047) diod[j] -= 4096; 132 for (j=0; j<48; j++) diod[j] -= 2048; 133 115 134 } 116 135 … … 124 143 125 144 for (int j=0; j<nb_per_block*2; j++) { 126 // suppression des positions non utilisees. 3 et 7 ? 127 for (int i=0; i<DIODE_UNUSED_1; i++) 128 diode(j+j0,i) = diodeRaw[j][i]; 129 for (int i=DIODE_UNUSED_1; i<46; i++) 130 diode(j+j0,i) = diodeRaw[j][ i<DIODE_UNUSED_2-1 ? i+1 : i+2 ]; 131 145 // permutation des diodes 146 for (int i=0; i<46; i++) 147 diode(j+j0,i) = diodeRaw[j][diodpermut[i]]; 148 149 /* 132 150 // calcul d'un fond sur la rangee. Moyenne clippee. 133 151 float m = 0; float sig = 1.e10; … … 147 165 for (int i=0; i<46; i++) 148 166 diode(j+j0,i) -= m; 167 */ 149 168 } 150 169 } … … 164 183 } 165 184 166 185 int SSTHandler::getStarZ(int imesure, int istar) // for last block 186 { 187 int j0 = starHistLength-(nb_per_block*2); 188 if (imesure+j0<0 || imesure>=nb_per_block*2) return -99999; 189 if (istar < 0 || istar >= stars[imesure+j0].size()) return -99999; 190 return stars[imesure+j0][istar].z; 191 } 192 193 int SSTHandler::getStarF(int imesure, int istar) // for last block 194 { 195 int j0 = starHistLength-(nb_per_block*2); 196 if (imesure+j0<0 || imesure>=nb_per_block*2) return -99999; 197 if (istar < 0 || istar >= stars[imesure+j0].size()) return -99999; 198 return stars[imesure+j0][istar].m; 199 } 200 201 202 void SSTHandler::FindStars() // sur les 72 derniers echantillons dans diode. 203 { 204 int js0 = starHistLength-(nb_per_block*2); 205 int jd0 = diodeHistLength-(nb_per_block*2); 206 // Decalage vers la gauche de la taille d'un bloc 207 for (int i=0; i<js0; i++) { 208 stars[i] = stars[i+(nb_per_block*2)]; 209 } 210 211 // Recherche d'etoiles 212 for (int i=0; i<(nb_per_block*2); i++) { 213 stars[js0+i].clear(); 214 for (int idiode=0; idiode<46; idiode++) { 215 if (diode(jd0+i,idiode) < -seuil) { 216 if (has2bars) { 217 for (int j=-2; j>=-5; j--) { 218 if (diode(jd0+i+j,(idiode+elecOffset)%46) < -seuil) { 219 star s; 220 s.z = idiode; 221 s.m = -diode(jd0+i,idiode); 222 s.t = i; // $CHECK$ need absolute time... 223 stars[js0+i].push_back(s); 224 break; 225 } else if (idiode<45 && diode(jd0+i+j,(idiode+1+elecOffset)%46) > seuil) { 226 star s; 227 s.z = idiode+.5; 228 s.m = -diode(jd0+i,idiode); 229 s.t = i; // $CHECK$ need absolute time... 230 stars[js0+i].push_back(s); 231 break; 232 } 233 } 234 } else { 235 if (diode(jd0+i,idiode) > diode(jd0+i-1,idiode)) { 236 star s; 237 s.z = idiode; 238 s.m = -diode(jd0+i-1,idiode); 239 s.t = i; // $CHECK$ need absolute time... 240 stars[js0+i].push_back(s); 241 } 242 } 243 } 244 } 245 } 246 247 248 }
Note:
See TracChangeset
for help on using the changeset viewer.