//---- // function to display PMT pulse (flash-ADC array arr[]) : // void ANTI2DBc::displ_a(char comm[], int id, int mf, const geant arr[]){ integer i; geant tm,a(0.); geant tb,tbi; char name[80], buf[10]; sprintf(buf, "%4d\n",id); strcpy(name,comm); strcat(name,buf); tb=geant(mf)*ANTI2DBc::fadcbw(); tbi=ANTI2DBc::fadcbw(); HBOOK1(2638,name,100,0.,100*tb,0.); for(i=1;i<=ANTI2C::ANFADC;i++){ if(i%mf==0){ a+=arr[i-1]; tm=i*tbi-0.5*tb; HF1(2638,tm,a/geant(mf)); a=0.; } else{ a+=arr[i-1]; } } HPRINT(2638); HDELET(2638); return ; }
INT adc_summing(EVENT_HEADER * pheader, void *pevent) { INT i, j, n_adc; float *cadc; ASUM_BANK *asum; /* look for CADC bank, return if not present */ n_adc = bk_locate(pevent, "CADC", &cadc); if (n_adc == 0) return 1; /* create ADC sum bank */ bk_create(pevent, "ASUM", TID_STRUCT, &asum); /* sum all channels above threashold */ asum->sum = 0.f; for (i = j = 0; i < n_adc; i++) if (cadc[i] > adc_summing_param.adc_threshold) { asum->sum += cadc[i]; j++; } /* calculate ADC average */ asum->average = j > 0 ? asum->sum / j : 0; /* fill sum histo */ HF1(ADCSUM_ID_BASE, asum->sum, 1.f); /* close calculated bank */ bk_close(pevent, asum + 1); return SUCCESS; }
void cEqHomogFormelle::StdRepondere(ElPackHomologue & aPack,REAL aCoeff) { cElHomographie H1 = HF1().HomCur(); cElHomographie H2 = HF2().HomCur(); ElDistRadiale_PolynImpair Dist(1e5,Pt2dr(0,0)); if (DRF()) Dist = DRF()->DistCur(); for ( ElPackHomologue::iterator it=aPack.begin(); it!=aPack.end(); it++ ) { Pt2dr aP1 = it->P1(); Pt2dr aP2 = it->P2(); if (mDRF) { aP1 = Dist.Direct(aP1); aP2 = Dist.Direct(aP2); } Pt2dr Ec = H1.Direct(Dist.Direct(it->P1())) - H2.Direct(Dist.Direct(it->P2())); REAL D = euclid(Ec); REAL Pds = 1 / (1 + ElSquare(D/aCoeff)); it->Pds() = Pds; } }
INT adc_summing(EVENT_HEADER *pheader, void *pevent) { INT i, n_adc; float *cadc; ASUM_BANK *asum; /* look for CADC bank, return if not present */ n_adc = bk_locate(pevent, "CADC", &cadc); if (n_adc == 0) return 1; /* create ADC sum bank */ bk_create(pevent, "ASUM", TID_STRUCT, &asum); /* sum all channels above threshold */ asum->sum = 0.f; for (i=0 ; i<n_adc ; i++) asum->sum += cadc[i]; #ifdef MANA_LITE printf("manalite: adc_summing: HBOOK disable\n"); #else /* fill sum histo */ HF1(ADCSUM_ID_BASE, asum->sum, 1.f); #endif /* close calculated bank */ bk_close(pevent, asum+1); return SUCCESS; }
thStatus thExecuteaHist(thHistSpecList *Hist) { float vals[2]; int id,nd; daVarStruct *(varp[2]); int indxy[2]; thHistOpaque *opqptr; double weight; /* nd = Hist->nd;*/ opqptr = Hist->varname->opaque; if(!opqptr) return(S_SUCCESS); /* Assume it is a user filled histogram */ nd = opqptr->nd; varp[0] = opqptr->x; indxy[0] = opqptr->xindex; varp[1] = opqptr->y; indxy[1] = opqptr->yindex; for(id=0;id<nd;id++){ switch(varp[id]->type) { case DAVARINT: vals[id] = *((DAINT *) varp[id]->varptr + indxy[id]); break; case DAVARFLOAT: vals[id] = *((DAFLOAT *) varp[id]->varptr + indxy[id]); break; case DAVARDOUBLE: vals[id] = *((DADOUBLE *) varp[id]->varptr + indxy[id]); break; } } if(opqptr->weight) { switch(opqptr->weight->type) { case DAVARINT: weight = *((DAINT *) opqptr->weight->varptr + opqptr->weightindex); break; case DAVARFLOAT: weight = *((DAFLOAT *) opqptr->weight->varptr + opqptr->weightindex); break; case DAVARDOUBLE: weight = *((DADOUBLE *) opqptr->weight->varptr + opqptr->weightindex); break; } } else { weight = 1.0; } if((opqptr->test ? *((DAINT *) opqptr->test->varptr + opqptr->testindex) : 1)) { if(nd==1){ HF1(*(DAINT *) Hist->varname->varptr,vals[0],weight); /* printf("Filling %s at %f\n",Hist->varname->name,vals[0]);*/ } else HF2(*(int *) Hist->varname->varptr,vals[0],vals[1],weight); } return(S_SUCCESS); }
bool TraceGrabber::operator()(PixieFunctionParms<> &par) { char traceName[] = "test trace"; static unsigned int modRead = par.pif.GetNumberCards(); const size_t size = PixieInterface::GetTraceLength(); unsigned short trace[size]; if (modRead != par.mod) { par.pif.AcquireTraces(par.mod); modRead = par.mod; } unsigned int nhis = 100 * (par.mod + 1) + par.ch; usleep(10); if (par.pif.ReadSglChanTrace(trace, size, par.mod, par.ch)) { HBOOK1(nhis,traceName,size,0,size,0); unsigned long sum = 0; unsigned long sumsq = 0; for (size_t i=0; i < size; i++) { sum += trace[i]; sumsq += trace[i] * trace[i]; HF1(nhis, i, trace[i]); } printf("Trace ---- MOD/CHAN %2u / %2u AVER |- %6.1f -| SIG %4.1f \n", par.mod, par.ch, (float)sum / size, (float)sqrt(size * sumsq - sum * sum) / size); return true; } else return false; }
// Двойное хеширование inline int CDHash::HFDouble(int k, int size, int numberOfTry) { return (HF1(k, size) + numberOfTry * HF1_2(k, size)) % size; }