Ignore:
Timestamp:
09/15/03 12:30:28 (21 years ago)
Author:
blanch
Message:
The number of pixels in the trigger region is a new variable member.
File:
1 edited

Legend:

Unmodified
Added
Removed
  • trunk/MagicSoft/Simulation/Detector/include-MTrigger/MTrigger.cxx

    r2292 r2341  
    1111#include "TObjArray.h"
    1212#include "MGTriggerSignal.hxx"
    13 
    14 
    15 MTrigger::MTrigger() {
     13#include "MGeomCam.h"
     14#include "MGeomPix.h"
     15
     16MTrigger::MTrigger(int pix) {
    1617  // ============================================================
    1718  //
     
    3536
    3637  Float_t threshold ;
     38
     39  // Number of pixels in the trigger region
     40  pixnum=pix;
    3741 
    3842  //
     
    4044  //
    4145
    42   for( Int_t j=0; j<TRIGGER_PIXELS; j++ ) {
     46  used = new Bool_t[pix];
     47  nphotshow = new Int_t[pix];
     48  nphotnsb = new Int_t[pix];
     49  nphotstar = new Int_t[pix];
     50  a_sig = new Float_t * [pix];
     51  d_sig = new Float_t * [pix];
     52  baseline = new Float_t[pix];
     53  dknt = new Bool_t[pix];
     54  noise = new Float_t[TRIGGER_TIME_SLICES*1001];
     55  chan_thres = new Float_t[pix];
     56  for(Int_t j=0;j<6;j++)
     57    NN[j] = new Int_t[pix];
     58  for(Int_t j=0;j<TRIGGER_CELLS;j++)
     59    TC[j] = new Int_t[pix];
     60
     61  for( Int_t j=0; j<pix; j++ ) {
    4362
    4463    a_sig[j] = new Float_t[TRIGGER_TIME_SLICES] ;
     
    4665    d_sig[j] = new Float_t[TRIGGER_TIME_SLICES] ;
    4766  }
     67
     68 
    4869
    4970  //
     
    155176      cout<<"WARNING: not able to read ..."<<input_thres<<endl;
    156177      cout<<"Threshold will be set to "<<threshold<<" for all pixels"<<endl;
    157       for (Int_t k=0; k<TRIGGER_PIXELS; k++ ) {
     178      for (Int_t k=0; k<CAMERA_PIXELS; k++ ) {
    158179        chan_thres[k] = threshold ;
    159180      }
    160181    }
    161182    else {
    162       for (i=0;i<TRIGGER_PIXELS;i++){
     183      for (i=0;i<CAMERA_PIXELS;i++){
    163184        fscanf(unit_thres, "%f",&chan_thres[i]);
    164185      }
     
    167188  }
    168189  else {
    169     for (Int_t k=0; k<TRIGGER_PIXELS; k++ ) {
     190    for (Int_t k=0; k<CAMERA_PIXELS; k++ ) {
    170191      chan_thres[k] = threshold ;
    171192    }
     
    256277  } 
    257278  else {
    258     while ( i < TRIGGER_PIXELS )
     279    while ( i < CAMERA_PIXELS )
    259280      {
    260281        fscanf ( unit, " %d", &id ) ;
    261282       
    262283        for ( Int_t k=0; k<6; k++ ) {
    263           fscanf ( unit, "%d ", &NN[i][k]  ) ;
     284          fscanf ( unit, "%d ", &NN[k][i]  ) ;
    264285        }
    265286        i++ ;
     
    282303  } 
    283304  else {
    284     while ( i < TRIGGER_PIXELS )
     305    while ( i < CAMERA_PIXELS )
    285306      {
    286307        for ( Int_t k=0; k<TRIGGER_CELLS; k++ ) {
     
    292313        for ( Int_t k=0; k<TRIGGER_CELLS; k++ ) {
    293314          fscanf ( unit, "%d ", &i ) ;
    294           if ((i-1)<TRIGGER_PIXELS)
     315          if ((i-1)<CAMERA_PIXELS)
    295316            TC[k][i-1]=TRUE;
    296317        }
     
    306327  //
    307328 
    308   for ( i =0 ; i <TRIGGER_PIXELS ; i++ ) {
     329  for ( i =0 ; i <CAMERA_PIXELS ; i++ ) {
    309330    used [i] = FALSE ;
    310331    dknt [i] = FALSE ;
     
    341362}
    342363
    343 MTrigger::MTrigger(float gate, float overt, float ampl, float fwhm) {
     364MTrigger::MTrigger(Int_t pix, MGeomCam *camgeom,
     365                   float gate, float overt, float ampl, float fwhm) {
    344366  // ============================================================
    345367  //
     
    356378  Float_t threshold ;
    357379 
     380  // Number of pixels in the trigger region
     381  pixnum=pix;
     382 
    358383  //
    359384  //   allocate the memory for the 2dim arrays (a_sig, d_sig )
    360385  //
    361386
    362   for( Int_t j=0; j<TRIGGER_PIXELS; j++ ) {
     387  used = new Bool_t[pix];
     388  nphotshow = new Int_t[pix];
     389  nphotnsb = new Int_t[pix];
     390  nphotstar = new Int_t[pix];
     391  a_sig = new Float_t * [pix];
     392  d_sig = new Float_t * [pix];
     393  baseline = new Float_t[pix];
     394  dknt = new Bool_t[pix];
     395  noise = new Float_t[TRIGGER_TIME_SLICES*1001];
     396  chan_thres = new Float_t[pix];
     397  for(Int_t j=0;j<6;j++)
     398    NN[j] = new Int_t[pix];
     399  for(Int_t j=0;j<TRIGGER_CELLS;j++)
     400    TC[j] = new Int_t[pix];
     401
     402  for( Int_t j=0; j<pix; j++ ) {
    363403
    364404    a_sig[j] = new Float_t[TRIGGER_TIME_SLICES] ;
     
    396436  cout << endl ;
    397437
    398 
    399   for (Int_t k=0; k<TRIGGER_PIXELS; k++ ) {
     438  for (Int_t k=0; k<pixnum; k++ ) {
    400439    chan_thres[k] = threshold ;
    401440  }
    402441 
    403 
    404442  //
    405443  //    set up the response shape
     
    439477  peak_time = ( (Float_t) imax )  / ( (Float_t) SLICES_PER_NSEC ) ;
    440478 
    441 
    442479  //
    443480  //   the amplitude of one single photo electron is not a constant.
     
    474511  //
    475512 
    476   FILE *unit ;
    477   int id ;
    478 
    479   i = 0 ;
    480 
    481   if ( (unit = fopen("../include-MTrigger/TABLE_NEXT_NEIGHBOUR", "r" )) == 0 ) {
    482     cout << "ERROR: not able to read ../include-MTrigger/TABLE_NEXT_NEIGHBOUR"
    483          << endl ;
    484     exit(123) ;
    485   } 
    486   else {
    487     while ( i < TRIGGER_PIXELS )
    488       {
    489         fscanf ( unit, " %d", &id ) ;
    490        
    491         for ( Int_t k=0; k<6; k++ ) {
    492           fscanf ( unit, "%d ", &NN[i][k]  ) ;
     513  for(i=0; i < pixnum;i++ )
     514    {
     515      MGeomPix &pixel = (*camgeom)[i];
     516      for ( Int_t k=0; k<6; k++ ) {
     517        NN[k][i]=pixel.GetNeighbor(k);
    493518        }
    494         i++ ;
    495       }
    496    
    497     fclose (unit) ;
    498   }
    499 
     519    }
    500520
    501521  //
    502522  //  Read in the lookup table for trigger cells
    503523  //
     524
     525  FILE *unit;
    504526 
    505527  i = 0 ;
     
    511533  } 
    512534  else {
    513     while ( i < TRIGGER_PIXELS )
     535    while ( i < pixnum )
    514536      {
    515537        for ( Int_t k=0; k<TRIGGER_CELLS; k++ ) {
     
    521543        for ( Int_t k=0; k<TRIGGER_CELLS; k++ ) {
    522544          fscanf ( unit, "%d ", &i ) ;
    523           if((i-1)<TRIGGER_PIXELS)
     545          if((i-1)<pixnum)
    524546            TC[k][i-1]=TRUE;
    525547        }
     
    528550  }
    529551
    530 
    531552  //
    532553  //
     
    535556  //
    536557 
    537   for ( i =0 ; i <TRIGGER_PIXELS ; i++ ) {
     558  for ( i =0 ; i <pixnum ; i++ ) {
    538559    used [i] = FALSE ;
    539560    dknt [i] = FALSE ;
     
    577598  delete histPmt ;
    578599
    579   for(i=0;i<TRIGGER_PIXELS;i++){
     600  for(i=0;i<pixnum;i++){
    580601    //delete [] a_sig[i];
    581602    //delete [] d_sig[i];
     
    593614  Int_t  i, ii ;
    594615 
    595   for ( i =0 ; i <TRIGGER_PIXELS ; i++ ) {
     616  for ( i =0 ; i <pixnum ; i++ ) {
    596617    used [i] = FALSE ;
    597618    dknt [i] = FALSE ;
     
    715736    exit (1) ;
    716737  }
    717   else if ( iPix >= TRIGGER_PIXELS ) {
     738  else if ( iPix >= pixnum ) {
    718739    //
    719740    //  We have not to fill information in the trigger part,
     
    816837    exit (1) ;
    817838  }
    818   else if ( iPix >= TRIGGER_PIXELS ) {
     839  else if ( iPix >= pixnum ) {
    819840    //
    820841    //  We have not to fill information in the trigger part.
     
    860881  rausch = RESPONSE_AMPLITUDE * factor ;
    861882 
    862   cout<<"MTrigger::SetElecNoise ... generating database for electroni noise."
     883  cout<<"MTrigger::SetElecNoise ... generating database for electronic noise."
    863884      <<endl;
    864885
    865   for (i=0;i<TRIGGER_PIXELS*TRIGGER_TIME_SLICES*101;i++){
    866     noise[i]=GenElec->Gaus(0., rausch  );
    867       }
    868 
     886    for (i=0;i<(UInt_t)(TRIGGER_TIME_SLICES*1001);i++){
     887      noise[i]=GenElec->Gaus(0., rausch  );
     888      }
     889 
    869890  cout<<"MTrigger::SetElecNoise ... done"<<endl;
    870891
     
    882903
    883904  UInt_t startslice;
    884 
    885   startslice=GenElec->Integer(TRIGGER_PIXELS*TRIGGER_TIME_SLICES*100);
    886 
    887 
    888905 
    889   for ( Int_t i=0 ; i < TRIGGER_PIXELS; i++  ) {
     906  for ( Int_t i=0 ; i < pixnum; i++  ) {
    890907      //
    891908      //  but at the beginning we must check if this pixel is
    892909      //  hitted the first time
    893910      //
     911    startslice=GenElec->Integer(TRIGGER_TIME_SLICES*1000);
    894912
    895913    if ( used[i] == FALSE ) {
     
    897915       
    898916        memcpy( (Float_t*)a_sig[i],
    899                 (Float_t*)&noise[startslice+TRIGGER_TIME_SLICES*i],
     917                (Float_t*)&noise[startslice],
    900918                TRIGGER_TIME_SLICES*sizeof(Float_t));
    901919        memset( (Float_t*)d_sig[i],
     
    908926    //
    909927    else
    910       for ( Int_t ii=1 ; ii<TRIGGER_TIME_SLICES; ii++ ) {
     928      for ( Int_t ii=0 ; ii<TRIGGER_TIME_SLICES; ii++ ) {
    911929     
    912         a_sig [i][ii] +=  noise[startslice+TRIGGER_TIME_SLICES*i+ii] ;
     930        a_sig [i][ii] +=  noise[startslice+ii] ;
    913931       
    914932      }
    915    
    916933  }
    917934}
     
    964981  //=============================================================
    965982  //
    966   //    It sets the private member chan_thres[TRIGGER_PIXELS]
     983  //    It sets the private member chan_thres[pixnum]
    967984
    968985  Int_t i;
    969986
    970   for(i=0;i<TRIGGER_PIXELS;i++){
     987  for(i=0;i<pixnum;i++){
    971988    chan_thres[i]=thres[i];
    972989  }
     
    974991
    975992
    976 void MTrigger::CheckThreshold(float *thres){
     993void MTrigger::CheckThreshold(float *thres, int cells){
    977994  //=============================================================
    978995  //
     
    9831000  float thres_aux[CAMERA_PIXELS];
    9841001  int id;
    985  
    986   for (int i=0;i<CAMERA_PIXELS;i++)
    987     thres_aux[i]=999999.99;
    988  
    989   if((unit =fopen("../include-MTrigger/TABLE_PIXELS_IN_CELLS", "r" )) == 0 ){
    990     cout << "ERROR: not able to read ../include-MTrigger/TABLE_PIXELS_IN_CELLS"
    991          << endl ;
    992     exit(123) ;
    993   } 
    994   else {
    995     while ( feof(unit) == 0 ) {
    996       for ( Int_t k=0; k<TRIGGER_CELLS; k++ ) {
    997         fscanf ( unit, "%d ", &id ) ;
    998         if ((id-1)<TRIGGER_PIXELS)
    999           thres_aux[id-1]=thres[id-1];
    1000       }
    1001     }
    1002   }
    1003   fclose (unit) ;
    1004 
    1005   for (int i=0;i<CAMERA_PIXELS;i++)
    1006     thres[i]=thres_aux[i];
    1007  
     1002
     1003  for (int i=0;i<CAMERA_PIXELS;i++){
     1004    if(i<pixnum){
     1005      thres_aux[i]=999999.99;
     1006      thres[i]=thres[i];
     1007    }
     1008    else{
     1009      thres_aux[i]=-10.0;
     1010      thres[i]=-10.0;
     1011    }
     1012  }
     1013
     1014  if (cells==1){
     1015    if((unit =fopen("../include-MTrigger/TABLE_PIXELS_IN_CELLS", "r" )) == 0 ){
     1016      cout << "ERROR: not able to read ../include-MTrigger/TABLE_PIXELS_IN_CELLS"
     1017           << endl ;
     1018      exit(123) ;
     1019    } 
     1020    else {
     1021      while ( feof(unit) == 0 ) {
     1022        for ( Int_t k=0; k<TRIGGER_CELLS; k++ ) {
     1023          fscanf ( unit, "%d ", &id ) ;
     1024          if ((id-1)<pixnum)
     1025            thres_aux[id-1]=thres[id-1];
     1026        }
     1027      }
     1028    }
     1029    fclose (unit) ;
     1030
     1031    for (int i=0;i<CAMERA_PIXELS;i++)
     1032      thres[i]=thres_aux[i];
     1033  }
    10081034}
    10091035
     
    10201046  }
    10211047  else {
    1022     while (i<TRIGGER_PIXELS){
     1048    while (i<pixnum){
    10231049      fscanf(unit, "%f",&chan_thres[i++]);
    10241050    }
     
    10431069  //=============================================================
    10441070  //
    1045   //   Gives a map of the fired pixels (Bool_t  dknt [TRIGGER_PIXELS])
     1071  //   Gives a map of the fired pixels (Bool_t  dknt [pixnum])
    10461072  //   in an array of Byte_t (each byte has the information for 8 pixels)
    10471073  //
     
    10491075  Int_t i,ii;
    10501076
    1051   for(i=0;i<TRIGGER_PIXELS/8+1;i++){
     1077  for(i=0;i<pixnum/8+1;i++){
    10521078    map[i]=0;
    10531079  }
    10541080
    1055   for(i=0;i<TRIGGER_PIXELS;i++){
     1081  for(i=0;i<pixnum;i++){
    10561082    ii=(Int_t)i/8;
    10571083    if (dknt[i]==TRUE){
     
    10841110  //
    10851111
    1086   for ( i=0 ; i < TRIGGER_PIXELS ; i++ ) {
     1112  for ( i=0 ; i < pixnum ; i++ ) {
    10871113    if ( used[i] == TRUE ) {
    10881114      baseline[i] = 0. ;
     
    11091135  //
    11101136
    1111   for ( i=0 ; i < TRIGGER_PIXELS; i++  ) {
     1137  for ( i=0 ; i < pixnum; i++  ) {
    11121138    if ( used [i] == TRUE ) {
    11131139           
     
    11761202 
    11771203  Int_t ic = 0 ;
    1178   for ( Int_t i=0 ; i < TRIGGER_PIXELS; i++  ) {
     1204  for ( Int_t i=0 ; i < pixnum; i++  ) {
    11791205    if ( used [i] == TRUE ) {
    11801206
     
    12551281  //
    12561282  Int_t iMul = 0 ;
    1257   for ( Int_t iP =0 ; iP < TRIGGER_PIXELS; iP++ ) {
     1283  for ( Int_t iP =0 ; iP < pixnum; iP++ ) {
    12581284    //
    12591285    //
     
    12701296    //  fill the sum signal of all diskriminator signals
    12711297    //
    1272     for ( Int_t iP =0 ; iP < TRIGGER_PIXELS; iP++ ) {
     1298    for ( Int_t iP =0 ; iP < pixnum; iP++ ) {
    12731299      //
    12741300      //
     
    13181344   
    13191345  //   Definition of needed variables 
    1320   Bool_t Muster[TRIGGER_PIXELS] ;
    1321   Bool_t Neighb[TRIGGER_PIXELS] ;
     1346  Bool_t Muster[pixnum] ;
     1347  Bool_t Neighb[pixnum] ;
    13221348  Int_t  iMulti = 0 ;
    13231349
     
    13701396          //  diskriminated signal is 1
    13711397          //
    1372           for ( Int_t iPix = 0 ; iPix < TRIGGER_PIXELS; iPix++ ) {
     1398          for ( Int_t iPix = 0 ; iPix < pixnum; iPix++ ) {
    13731399            Muster[iPix] = kFALSE ;
    13741400            Neighb[iPix] = kFALSE ;
     
    14011427            // trigger_multi-1 neighbour pixels above threshold
    14021428           
    1403             Bool_t Dummy[TRIGGER_PIXELS] ;
     1429            Bool_t Dummy[pixnum] ;
    14041430
    14051431            //  Loop over all pixels
    1406             for (int j=0;j<TRIGGER_PIXELS;j++){
     1432            for (int j=0;j<pixnum;j++){
    14071433             
    1408               for (int k=0; k<TRIGGER_PIXELS; k++){
     1434              for (int k=0; k<pixnum; k++){
    14091435                Neighb[k]=kFALSE;
    14101436               
     
    14191445                    break;
    14201446                  }
    1421                   for (int k=0; k<TRIGGER_PIXELS; k++){
     1447                  for (int k=0; k<pixnum; k++){
    14221448                    if (Neighb[k]){
    14231449                      Dummy[k]=kFALSE;
     
    14471473            //   threshold.
    14481474           
    1449             for (int j=0;j<TRIGGER_PIXELS;j++){
     1475            for (int j=0;j<pixnum;j++){
    14501476              if(Muster[j]){
    14511477                //  It checks if you can find
     
    14691495                else {
    14701496                  //  We put Neighb to kFALSE to check an other pixel
    1471                   for (int k=0; k<TRIGGER_PIXELS; k++){
     1497                  for (int k=0; k<pixnum; k++){
    14721498                    if (Neighb[k]){
    14731499                      Neighb[k]=kFALSE;
     
    14901516            Int_t closed_pack = 1;
    14911517           
    1492             for (int j=0;j<TRIGGER_PIXELS;j++){
     1518            for (int j=0;j<pixnum;j++){
    14931519              if(Muster[j]){
    14941520                //  It checks if there are trigger_multi
     
    15111537                  // Check if there is closed pack topology
    15121538
    1513                   Bool_t Aux1[TRIGGER_PIXELS];
    1514                   Bool_t Aux2[TRIGGER_PIXELS];
    1515                   for (int jj=0;jj<TRIGGER_PIXELS;jj++)
     1539                  Bool_t Aux1[pixnum];
     1540                  Bool_t Aux2[pixnum];
     1541                  for (int jj=0;jj<pixnum;jj++)
    15161542                    Aux2[jj]=kFALSE;
    15171543                 
    1518                   for (int i=0;i<TRIGGER_PIXELS;i++){
     1544                  for (int i=0;i<pixnum;i++){
    15191545                    if (Neighb[i]) {
    15201546                      //  Loop over pixels that achive neighbouring condition
    15211547                                     
    1522                       for (int jj=0;jj<TRIGGER_PIXELS;jj++) {
     1548                      for (int jj=0;jj<pixnum;jj++) {
    15231549
    15241550                        Aux1[jj] = Neighb[jj] ;   // huschel
     
    15311557                      Aux1[i]=kFALSE;
    15321558                      closed_pack=0;
    1533                       for (int jj=0;jj<TRIGGER_PIXELS;jj++) {
     1559                      for (int jj=0;jj<pixnum;jj++) {
    15341560                        if (Aux1[jj]==kTRUE){
    15351561                          Aux2[jj]=kTRUE;
     
    15611587                  }
    15621588                  else {
    1563                     for (int k=0; k<TRIGGER_PIXELS; k++){
     1589                    for (int k=0; k<pixnum; k++){
    15641590                      if (Neighb[k]){
    15651591                        Neighb[k]=kFALSE;
     
    15691595                }  //  end if trigger multiplicity achived
    15701596                else{
    1571                   for (int k=0; k<TRIGGER_PIXELS; k++)
     1597                  for (int k=0; k<pixnum; k++)
    15721598                    Neighb[k]=kFALSE;
    15731599                }                 
     
    16061632  Bool_t return_val = kFALSE;
    16071633 
    1608   for ( Int_t i=0; i<TRIGGER_PIXELS; i++) {
     1634  for ( Int_t i=0; i<pixnum; i++) {
    16091635    //
    16101636    //  check if this pixel has a diskrminator signal
     
    16231649        //
    16241650        if (!return_val){
    1625           if (NN[i][kk] >= TRIGGER_PIXELS ) {
     1651          if (NN[kk][i] >= pixnum ) {
    16261652           
    16271653          }
    1628           // the nextneighbour is not inside the TRIGGER_PIXELS
     1654          // the nextneighbour is not inside the pixnum
    16291655          else {
    16301656            //
     
    16321658            //
    16331659           
    1634             if ( m[ NN[i][kk] ] && !n[NN[i][kk]] ) {
    1635               n[NN[i][kk]]=kTRUE ;
     1660            if ( m[ NN[kk][i] ] && !n[NN[kk][i]] ) {
     1661              n[NN[kk][i]]=kTRUE ;
    16361662              return_val =kTRUE;
    16371663            } 
     
    16771703
    16781704  //  Put pixels that fulfill the requirement in n
    1679   for (i=0;i<TRIGGER_PIXELS;i++){
     1705  for (i=0;i<pixnum;i++){
    16801706    if (m[i]==kTRUE){
    16811707      for(j=ifSli;j<ifSli+iNumSli;j++){
Note: See TracChangeset for help on using the changeset viewer.