Beispiel #1
0
//----
// 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 ;
}
Beispiel #2
0
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;
}
Beispiel #3
0
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;
    }
}
Beispiel #4
0
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;
}
Beispiel #5
0
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);
}
Beispiel #6
0
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;
}
Beispiel #7
0
// Двойное хеширование
inline int CDHash::HFDouble(int k, int size, int numberOfTry)
{
	return (HF1(k, size) + numberOfTry * HF1_2(k, size)) % size;
}