Index: trunk/MagicSoft/Simulation/Detector/include-MTrigger/MTrigger.cxx
===================================================================
--- trunk/MagicSoft/Simulation/Detector/include-MTrigger/MTrigger.cxx	(revision 2340)
+++ trunk/MagicSoft/Simulation/Detector/include-MTrigger/MTrigger.cxx	(revision 2341)
@@ -11,7 +11,8 @@
 #include "TObjArray.h"
 #include "MGTriggerSignal.hxx"
-
-
-MTrigger::MTrigger() { 
+#include "MGeomCam.h"
+#include "MGeomPix.h"
+
+MTrigger::MTrigger(int pix) { 
   // ============================================================
   //
@@ -35,4 +36,7 @@
 
   Float_t threshold ; 
+
+  // Number of pixels in the trigger region
+  pixnum=pix;
  
   // 
@@ -40,5 +44,20 @@
   //
 
-  for( Int_t j=0; j<TRIGGER_PIXELS; j++ ) { 
+  used = new Bool_t[pix];
+  nphotshow = new Int_t[pix];
+  nphotnsb = new Int_t[pix];
+  nphotstar = new Int_t[pix];
+  a_sig = new Float_t * [pix];
+  d_sig = new Float_t * [pix];
+  baseline = new Float_t[pix];
+  dknt = new Bool_t[pix];
+  noise = new Float_t[TRIGGER_TIME_SLICES*1001];
+  chan_thres = new Float_t[pix];
+  for(Int_t j=0;j<6;j++)
+    NN[j] = new Int_t[pix];
+  for(Int_t j=0;j<TRIGGER_CELLS;j++)
+    TC[j] = new Int_t[pix];
+
+  for( Int_t j=0; j<pix; j++ ) { 
 
     a_sig[j] = new Float_t[TRIGGER_TIME_SLICES] ; 
@@ -46,4 +65,6 @@
     d_sig[j] = new Float_t[TRIGGER_TIME_SLICES] ; 
   } 
+
+  
 
   //
@@ -155,10 +176,10 @@
       cout<<"WARNING: not able to read ..."<<input_thres<<endl;
       cout<<"Threshold will be set to "<<threshold<<" for all pixels"<<endl;
-      for (Int_t k=0; k<TRIGGER_PIXELS; k++ ) {
+      for (Int_t k=0; k<CAMERA_PIXELS; k++ ) {
 	chan_thres[k] = threshold ; 
       }
     }
     else {
-      for (i=0;i<TRIGGER_PIXELS;i++){
+      for (i=0;i<CAMERA_PIXELS;i++){
       	fscanf(unit_thres, "%f",&chan_thres[i]);
       }
@@ -167,5 +188,5 @@
   }
   else {
-    for (Int_t k=0; k<TRIGGER_PIXELS; k++ ) {
+    for (Int_t k=0; k<CAMERA_PIXELS; k++ ) {
       chan_thres[k] = threshold ; 
     }
@@ -256,10 +277,10 @@
   }  
   else { 
-    while ( i < TRIGGER_PIXELS )
+    while ( i < CAMERA_PIXELS )
       {
 	fscanf ( unit, " %d", &id ) ;
 	
 	for ( Int_t k=0; k<6; k++ ) { 
-	  fscanf ( unit, "%d ", &NN[i][k]  ) ; 
+	  fscanf ( unit, "%d ", &NN[k][i]  ) ; 
 	}
 	i++ ;
@@ -282,5 +303,5 @@
   }  
   else { 
-    while ( i < TRIGGER_PIXELS )
+    while ( i < CAMERA_PIXELS )
       {	
 	for ( Int_t k=0; k<TRIGGER_CELLS; k++ ) { 
@@ -292,5 +313,5 @@
 	for ( Int_t k=0; k<TRIGGER_CELLS; k++ ) { 
 	  fscanf ( unit, "%d ", &i ) ;
-	  if ((i-1)<TRIGGER_PIXELS)
+	  if ((i-1)<CAMERA_PIXELS)
 	    TC[k][i-1]=TRUE;
 	}
@@ -306,5 +327,5 @@
   //
   
-  for ( i =0 ; i <TRIGGER_PIXELS ; i++ ) { 
+  for ( i =0 ; i <CAMERA_PIXELS ; i++ ) { 
     used [i] = FALSE ;
     dknt [i] = FALSE ;
@@ -341,5 +362,6 @@
 } 
 
-MTrigger::MTrigger(float gate, float overt, float ampl, float fwhm) { 
+MTrigger::MTrigger(Int_t pix, MGeomCam *camgeom,
+		   float gate, float overt, float ampl, float fwhm) { 
   // ============================================================
   //
@@ -356,9 +378,27 @@
   Float_t threshold ; 
  
+  // Number of pixels in the trigger region
+  pixnum=pix;
+ 
   // 
   //   allocate the memory for the 2dim arrays (a_sig, d_sig ) 
   //
 
-  for( Int_t j=0; j<TRIGGER_PIXELS; j++ ) { 
+  used = new Bool_t[pix];
+  nphotshow = new Int_t[pix];
+  nphotnsb = new Int_t[pix];
+  nphotstar = new Int_t[pix];
+  a_sig = new Float_t * [pix];
+  d_sig = new Float_t * [pix];
+  baseline = new Float_t[pix];
+  dknt = new Bool_t[pix];
+  noise = new Float_t[TRIGGER_TIME_SLICES*1001];
+  chan_thres = new Float_t[pix];
+  for(Int_t j=0;j<6;j++)
+    NN[j] = new Int_t[pix];
+  for(Int_t j=0;j<TRIGGER_CELLS;j++)
+    TC[j] = new Int_t[pix];
+
+  for( Int_t j=0; j<pix; j++ ) { 
 
     a_sig[j] = new Float_t[TRIGGER_TIME_SLICES] ; 
@@ -396,10 +436,8 @@
   cout << endl ; 
 
-
-  for (Int_t k=0; k<TRIGGER_PIXELS; k++ ) {
+  for (Int_t k=0; k<pixnum; k++ ) {
     chan_thres[k] = threshold ; 
   }
   
-
   //
   //    set up the response shape
@@ -439,5 +477,4 @@
   peak_time = ( (Float_t) imax )  / ( (Float_t) SLICES_PER_NSEC ) ;
  
-
   //
   //   the amplitude of one single photo electron is not a constant. 
@@ -474,32 +511,17 @@
   //
   
-  FILE *unit ;
-  int id ;
-
-  i = 0 ; 
-
-  if ( (unit = fopen("../include-MTrigger/TABLE_NEXT_NEIGHBOUR", "r" )) == 0 ) { 
-    cout << "ERROR: not able to read ../include-MTrigger/TABLE_NEXT_NEIGHBOUR"
-	 << endl ; 
-    exit(123) ; 
-  }  
-  else { 
-    while ( i < TRIGGER_PIXELS )
-      {
-	fscanf ( unit, " %d", &id ) ;
-	
-	for ( Int_t k=0; k<6; k++ ) { 
-	  fscanf ( unit, "%d ", &NN[i][k]  ) ; 
+  for(i=0; i < pixnum;i++ )
+    {
+      MGeomPix &pixel = (*camgeom)[i];
+      for ( Int_t k=0; k<6; k++ ) { 
+	NN[k][i]=pixel.GetNeighbor(k);
 	}
-	i++ ;
-      }
-    
-    fclose (unit) ;
-  }
-
+    }
 
   //
   //  Read in the lookup table for trigger cells
   //
+
+  FILE *unit;
   
   i = 0 ; 
@@ -511,5 +533,5 @@
   }  
   else { 
-    while ( i < TRIGGER_PIXELS )
+    while ( i < pixnum )
       {	
 	for ( Int_t k=0; k<TRIGGER_CELLS; k++ ) { 
@@ -521,5 +543,5 @@
 	for ( Int_t k=0; k<TRIGGER_CELLS; k++ ) { 
 	  fscanf ( unit, "%d ", &i ) ; 
-	  if((i-1)<TRIGGER_PIXELS)
+	  if((i-1)<pixnum)
 	    TC[k][i-1]=TRUE;
 	}
@@ -528,5 +550,4 @@
   }
 
-
   //
   //
@@ -535,5 +556,5 @@
   //
   
-  for ( i =0 ; i <TRIGGER_PIXELS ; i++ ) { 
+  for ( i =0 ; i <pixnum ; i++ ) { 
     used [i] = FALSE ;
     dknt [i] = FALSE ;
@@ -577,5 +598,5 @@
   delete histPmt ; 
 
-  for(i=0;i<TRIGGER_PIXELS;i++){
+  for(i=0;i<pixnum;i++){
     //delete [] a_sig[i];
     //delete [] d_sig[i];
@@ -593,5 +614,5 @@
   Int_t  i, ii ; 
   
-  for ( i =0 ; i <TRIGGER_PIXELS ; i++ ) {
+  for ( i =0 ; i <pixnum ; i++ ) {
     used [i] = FALSE ; 
     dknt [i] = FALSE ; 
@@ -715,5 +736,5 @@
     exit (1) ; 
   }
-  else if ( iPix >= TRIGGER_PIXELS ) {
+  else if ( iPix >= pixnum ) {
     //
     //  We have not to fill information in the trigger part, 
@@ -816,5 +837,5 @@
     exit (1) ; 
   }
-  else if ( iPix >= TRIGGER_PIXELS ) {
+  else if ( iPix >= pixnum ) {
     //
     //  We have not to fill information in the trigger part. 
@@ -860,11 +881,11 @@
   rausch = RESPONSE_AMPLITUDE * factor ; 
  
-  cout<<"MTrigger::SetElecNoise ... generating database for electroni noise."
+  cout<<"MTrigger::SetElecNoise ... generating database for electronic noise."
       <<endl;
 
-  for (i=0;i<TRIGGER_PIXELS*TRIGGER_TIME_SLICES*101;i++){
-    noise[i]=GenElec->Gaus(0., rausch  );
-      }
-
+    for (i=0;i<(UInt_t)(TRIGGER_TIME_SLICES*1001);i++){
+      noise[i]=GenElec->Gaus(0., rausch  );
+      }
+  
   cout<<"MTrigger::SetElecNoise ... done"<<endl;
 
@@ -882,14 +903,11 @@
 
   UInt_t startslice;
-
-  startslice=GenElec->Integer(TRIGGER_PIXELS*TRIGGER_TIME_SLICES*100);
-
-
  
-  for ( Int_t i=0 ; i < TRIGGER_PIXELS; i++  ) {
+  for ( Int_t i=0 ; i < pixnum; i++  ) {
       //
       //  but at the beginning we must check if this pixel is
       //  hitted the first time
       //
+    startslice=GenElec->Integer(TRIGGER_TIME_SLICES*1000);
 
     if ( used[i] == FALSE ) {
@@ -897,5 +915,5 @@
 	
 	memcpy( (Float_t*)a_sig[i],
-		(Float_t*)&noise[startslice+TRIGGER_TIME_SLICES*i], 
+		(Float_t*)&noise[startslice], 
 		TRIGGER_TIME_SLICES*sizeof(Float_t));
 	memset( (Float_t*)d_sig[i],
@@ -908,10 +926,9 @@
     //
     else
-      for ( Int_t ii=1 ; ii<TRIGGER_TIME_SLICES; ii++ ) { 
+      for ( Int_t ii=0 ; ii<TRIGGER_TIME_SLICES; ii++ ) { 
       
-	a_sig [i][ii] +=  noise[startslice+TRIGGER_TIME_SLICES*i+ii] ; 
+	a_sig [i][ii] +=  noise[startslice+ii] ; 
 	
       }
-    
   }
 }
@@ -964,9 +981,9 @@
   //=============================================================
   //
-  //    It sets the private member chan_thres[TRIGGER_PIXELS]
+  //    It sets the private member chan_thres[pixnum]
 
   Int_t i;
 
-  for(i=0;i<TRIGGER_PIXELS;i++){
+  for(i=0;i<pixnum;i++){
     chan_thres[i]=thres[i];
   }
@@ -974,5 +991,5 @@
 
 
-void MTrigger::CheckThreshold(float *thres){
+void MTrigger::CheckThreshold(float *thres, int cells){
   //=============================================================
   //
@@ -983,27 +1000,36 @@
   float thres_aux[CAMERA_PIXELS];
   int id;
-  
-  for (int i=0;i<CAMERA_PIXELS;i++)
-    thres_aux[i]=999999.99;
-  
-  if((unit =fopen("../include-MTrigger/TABLE_PIXELS_IN_CELLS", "r" )) == 0 ){ 
-    cout << "ERROR: not able to read ../include-MTrigger/TABLE_PIXELS_IN_CELLS"
-	 << endl ; 
-    exit(123) ; 
-  }  
-  else { 
-    while ( feof(unit) == 0 ) {
-      for ( Int_t k=0; k<TRIGGER_CELLS; k++ ) { 
-	fscanf ( unit, "%d ", &id ) ;
-	if ((id-1)<TRIGGER_PIXELS)
-	  thres_aux[id-1]=thres[id-1];
-      }
-    }
-  }
-  fclose (unit) ;
-
-  for (int i=0;i<CAMERA_PIXELS;i++)
-    thres[i]=thres_aux[i];
-  
+
+  for (int i=0;i<CAMERA_PIXELS;i++){
+    if(i<pixnum){
+      thres_aux[i]=999999.99;
+      thres[i]=thres[i];
+    }
+    else{
+      thres_aux[i]=-10.0;
+      thres[i]=-10.0;
+    }
+  }
+
+  if (cells==1){
+    if((unit =fopen("../include-MTrigger/TABLE_PIXELS_IN_CELLS", "r" )) == 0 ){ 
+      cout << "ERROR: not able to read ../include-MTrigger/TABLE_PIXELS_IN_CELLS"
+	   << endl ; 
+      exit(123) ; 
+    }  
+    else { 
+      while ( feof(unit) == 0 ) {
+	for ( Int_t k=0; k<TRIGGER_CELLS; k++ ) { 
+	  fscanf ( unit, "%d ", &id ) ;
+	  if ((id-1)<pixnum)
+	    thres_aux[id-1]=thres[id-1];
+	}
+      }
+    }
+    fclose (unit) ;
+
+    for (int i=0;i<CAMERA_PIXELS;i++)
+      thres[i]=thres_aux[i];
+  }
 }
 
@@ -1020,5 +1046,5 @@
   }
   else {
-    while (i<TRIGGER_PIXELS){
+    while (i<pixnum){
       fscanf(unit, "%f",&chan_thres[i++]);
     }
@@ -1043,5 +1069,5 @@
   //=============================================================
   //
-  //   Gives a map of the fired pixels (Bool_t  dknt [TRIGGER_PIXELS])
+  //   Gives a map of the fired pixels (Bool_t  dknt [pixnum])
   //   in an array of Byte_t (each byte has the information for 8 pixels)
   //
@@ -1049,9 +1075,9 @@
   Int_t i,ii;
 
-  for(i=0;i<TRIGGER_PIXELS/8+1;i++){
+  for(i=0;i<pixnum/8+1;i++){
     map[i]=0;
   }
 
-  for(i=0;i<TRIGGER_PIXELS;i++){
+  for(i=0;i<pixnum;i++){
     ii=(Int_t)i/8;
     if (dknt[i]==TRUE){
@@ -1084,5 +1110,5 @@
   // 
 
-  for ( i=0 ; i < TRIGGER_PIXELS ; i++ ) {
+  for ( i=0 ; i < pixnum ; i++ ) {
     if ( used[i] == TRUE ) {
       baseline[i] = 0. ; 
@@ -1109,5 +1135,5 @@
   //
 
-  for ( i=0 ; i < TRIGGER_PIXELS; i++  ) {
+  for ( i=0 ; i < pixnum; i++  ) {
     if ( used [i] == TRUE ) {
            
@@ -1176,5 +1202,5 @@
   
   Int_t ic = 0 ; 
-  for ( Int_t i=0 ; i < TRIGGER_PIXELS; i++  ) {
+  for ( Int_t i=0 ; i < pixnum; i++  ) {
     if ( used [i] == TRUE ) {
 
@@ -1255,5 +1281,5 @@
   //
   Int_t iMul = 0 ; 
-  for ( Int_t iP =0 ; iP < TRIGGER_PIXELS; iP++ ) {
+  for ( Int_t iP =0 ; iP < pixnum; iP++ ) {
     //
     //
@@ -1270,5 +1296,5 @@
     //  fill the sum signal of all diskriminator signals
     // 
-    for ( Int_t iP =0 ; iP < TRIGGER_PIXELS; iP++ ) {
+    for ( Int_t iP =0 ; iP < pixnum; iP++ ) {
       //
       //
@@ -1318,6 +1344,6 @@
     
   //   Definition of needed variables  
-  Bool_t Muster[TRIGGER_PIXELS] ; 
-  Bool_t Neighb[TRIGGER_PIXELS] ; 
+  Bool_t Muster[pixnum] ; 
+  Bool_t Neighb[pixnum] ; 
   Int_t  iMulti = 0 ; 
 
@@ -1370,5 +1396,5 @@
 	  //  diskriminated signal is 1
 	  //
-	  for ( Int_t iPix = 0 ; iPix < TRIGGER_PIXELS; iPix++ ) {
+	  for ( Int_t iPix = 0 ; iPix < pixnum; iPix++ ) {
 	    Muster[iPix] = kFALSE ; 
 	    Neighb[iPix] = kFALSE ;
@@ -1401,10 +1427,10 @@
 	    // trigger_multi-1 neighbour pixels above threshold 
 	    
-	    Bool_t Dummy[TRIGGER_PIXELS] ;
+	    Bool_t Dummy[pixnum] ;
 
 	    //  Loop over all pixels
-	    for (int j=0;j<TRIGGER_PIXELS;j++){
+	    for (int j=0;j<pixnum;j++){
 	      
-	      for (int k=0; k<TRIGGER_PIXELS; k++){
+	      for (int k=0; k<pixnum; k++){
 		Neighb[k]=kFALSE;
 		
@@ -1419,5 +1445,5 @@
 		    break;
 		  } 
-		  for (int k=0; k<TRIGGER_PIXELS; k++){
+		  for (int k=0; k<pixnum; k++){
 		    if (Neighb[k]){
 		      Dummy[k]=kFALSE;
@@ -1447,5 +1473,5 @@
 	    //   threshold.
 	    
-	    for (int j=0;j<TRIGGER_PIXELS;j++){
+	    for (int j=0;j<pixnum;j++){
 	      if(Muster[j]){
 		//  It checks if you can find 
@@ -1469,5 +1495,5 @@
 		else {
 		  //  We put Neighb to kFALSE to check an other pixel
-		  for (int k=0; k<TRIGGER_PIXELS; k++){
+		  for (int k=0; k<pixnum; k++){
 		    if (Neighb[k]){
 		      Neighb[k]=kFALSE;
@@ -1490,5 +1516,5 @@
 	    Int_t closed_pack = 1;
 	    
-	    for (int j=0;j<TRIGGER_PIXELS;j++){
+	    for (int j=0;j<pixnum;j++){
 	      if(Muster[j]){
 		//  It checks if there are trigger_multi
@@ -1511,14 +1537,14 @@
 		  // Check if there is closed pack topology
 
-		  Bool_t Aux1[TRIGGER_PIXELS];
-		  Bool_t Aux2[TRIGGER_PIXELS];
-		  for (int jj=0;jj<TRIGGER_PIXELS;jj++)
+		  Bool_t Aux1[pixnum];
+		  Bool_t Aux2[pixnum];
+		  for (int jj=0;jj<pixnum;jj++)
 		    Aux2[jj]=kFALSE;
 		  
-		  for (int i=0;i<TRIGGER_PIXELS;i++){
+		  for (int i=0;i<pixnum;i++){
 		    if (Neighb[i]) {
 		      //  Loop over pixels that achive neighbouring condition
 		      		      
-		      for (int jj=0;jj<TRIGGER_PIXELS;jj++) {
+		      for (int jj=0;jj<pixnum;jj++) {
 
 			Aux1[jj] = Neighb[jj] ;   // huschel
@@ -1531,5 +1557,5 @@
 		      Aux1[i]=kFALSE;
 		      closed_pack=0;
-		      for (int jj=0;jj<TRIGGER_PIXELS;jj++) {
+		      for (int jj=0;jj<pixnum;jj++) {
 			if (Aux1[jj]==kTRUE){
 			  Aux2[jj]=kTRUE;
@@ -1561,5 +1587,5 @@
 		  }
 		  else {
-		    for (int k=0; k<TRIGGER_PIXELS; k++){
+		    for (int k=0; k<pixnum; k++){
 		      if (Neighb[k]){
 			Neighb[k]=kFALSE;
@@ -1569,5 +1595,5 @@
 		}  //  end if trigger multiplicity achived
 		else{
-		  for (int k=0; k<TRIGGER_PIXELS; k++)
+		  for (int k=0; k<pixnum; k++)
 		    Neighb[k]=kFALSE;
 		}		  
@@ -1606,5 +1632,5 @@
   Bool_t return_val = kFALSE;
   
-  for ( Int_t i=0; i<TRIGGER_PIXELS; i++) { 
+  for ( Int_t i=0; i<pixnum; i++) { 
     //
     //  check if this pixel has a diskrminator signal 
@@ -1623,8 +1649,8 @@
 	//
 	if (!return_val){
-	  if (NN[i][kk] >= TRIGGER_PIXELS ) {
+	  if (NN[kk][i] >= pixnum ) {
 	    
 	  } 
-	  // the nextneighbour is not inside the TRIGGER_PIXELS
+	  // the nextneighbour is not inside the pixnum
 	  else { 
 	    //
@@ -1632,6 +1658,6 @@
 	    //
 	    
-	    if ( m[ NN[i][kk] ] && !n[NN[i][kk]] ) { 
-	      n[NN[i][kk]]=kTRUE ;
+	    if ( m[ NN[kk][i] ] && !n[NN[kk][i]] ) { 
+	      n[NN[kk][i]]=kTRUE ;
 	      return_val =kTRUE;
 	    }  
@@ -1677,5 +1703,5 @@
 
   //  Put pixels that fulfill the requirement in n
-  for (i=0;i<TRIGGER_PIXELS;i++){
+  for (i=0;i<pixnum;i++){
     if (m[i]==kTRUE){
       for(j=ifSli;j<ifSli+iNumSli;j++){
