Ignore:
Timestamp:
03/13/00 09:12:26 (25 years ago)
Author:
harald
Message:
This is the Version of MTrigger Class from the 10th of March 2000.
Some work was done by Oscar Blanch and Harald Kornmayer.
File:
1 edited

Legend:

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

    r363 r373  
    1 #ifndef __MTrigger__
    2 #define __MTrigger__
     1#ifndef __MTrigger__
     2#define __MTrigger__
     3
     4#define    CASE_SHOW   0
     5#define    CASE_NSB    1
     6#define    CASE_STAR   2
    37
    48//     class MTrigger
     
    610//     implemented by Harald Kornmayer
    711//
    8 //     This is a class to simulate the trigger. 
    9 //     It assumes a special response of the PMT for one single Photo-electron. 
    10 //     
     12//     This is a class to simulate the trigger.
     13//     It assumes a special response of the PMT for one single Photo-electron.
     14//
    1115//
    1216//
    1317#include <iostream.h>
    14 #include <math.h> 
     18#include <math.h>
    1519
    1620#include "TROOT.h"
     
    1923#include "TH1.h"
    2024
    21 #include "Mdefine.h" 
     25#include "Mdefine.h"
    2226#include "MMcEvt.h"
    2327
    2428#include "MTriggerDefine.h"
    2529
     30
    2631//==========
    2732//  MTrigger
    2833//
    29 //  The simulation of the Trigger for MonteCarlo Events is using this 
     34//  The simulation of the Trigger for MonteCarlo Events is using this
    3035//  class. So all methods concerning the trigger should be done inside this
    31 //  class. 
     36//  class.
    3237//
    3338//  For a better understanding of the behavior of the trigger is here small
     
    3742//  We now from the camera program (This is the surrounding of the class
    3843//  MTrigger.) that one photo electron leaves at time t the photo cathode
    39 //  of the pixel number iPix). 
     44//  of the pixel number iPix).
    4045//
    4146//  At the end of the PMT, the preamp, the optical fiber transmission we
    42 //  get a signal of a given shape. After some discussion with Eckart the 
    43 //  standard response function looks like this :   
    44 //                                 
    45 //  It is a gaussian Signal with a given FWHM. 
     47//  get a signal of a given shape. After some discussion with Eckart the
     48//  standard response function looks like this :
     49//
     50//  It is a gaussian Signal with a given FWHM.
    4651//
    4752//  So whenever a photo electron leaves the photo cathod, on has to add
    48 //  the standard response function to the analog signal of the pixel. 
     53//  the standard response function to the analog signal of the pixel.
    4954//
    50 //  Each pixel of the camera has such an summed-up analog signal. It may 
    51 //  look like this picture: 
     55//  Each pixel of the camera has such an summed-up analog signal. It may
     56//  look like this picture:
    5257//
    5358//
    5459//  This is the input of the discriminator for the pixels. The output of
    5560//  the discriminator is a digital signal. The response of the diskriminator
    56 //  is not fixed at the moment. There are discussion about this topic. 
     61//  is not fixed at the moment. There are discussion about this topic.
    5762// 
    5863//  At the moment the response is very simple. Whenever the analog signal
    59 //  is crossing a defined threshold from below to above, a digital signal 
    60 //  with a given length is created. 
     64//  is crossing a defined threshold from below to above, a digital signal
     65//  with a given length is created.
    6166//
    62 //  Now one can start with the simulation of different trigger levels.
     67//  No one can start with the simulation of different trigger levels.
    6368// 
    6469//  The TriggerLevelZero is a very easy one. It is just looking if there
     
    6671//  a TriggerLevelZero signal is created.
    6772//
    68 //  The TriggerLevelOne is implemented now. This is be a kind of next
     73//  The TriggerLevelOne is not implemented now. This will be a kind of next
    6974//  neighbour condition (i.e. four neigbouring analog signals at the same
    7075//  time, but this requests at least four digital signals at level ON, what
    71 //  is equivalent with a TriggerLevelZero.   
     76//  is equivalent with a TriggerLevelZero.
    7277// 
    7378// 
     
    7681 private:
    7782  //
    78   //    then for all pixels the shape of all the analog signals 
     83  //    then for all pixels the shape of all the analog signals
    7984  //
    8085  Bool_t   used [TRIGGER_PIXELS] ;  //  a boolean to indicated if the pixels is used in this event
    81   Int_t    nphot[TRIGGER_PIXELS];   //  count the photo electrons per pixel (NSB phe are not counted)
     86  Int_t    nphotshow[TRIGGER_PIXELS];   //  count the photo electrons per pixel coming from showers
     87  Int_t    nphotnsb[TRIGGER_PIXELS];   //  count the photo electrons per pixel  coming from NSB
     88  Int_t    nphotstar[TRIGGER_PIXELS];   //  count the photo electrons per pixel coming from stars
    8289 
    8390  Float_t  *a_sig[TRIGGER_PIXELS] ; //  the analog signal for pixels
     
    96103  Float_t sum_d_sig[TRIGGER_TIME_SLICES] ;
    97104
    98 
    99105  //
    100106  //    first the data for the response function
     
    103109  Float_t ampl_resp ;                      // amplitude of the phe_response function (in mV)
    104110  Float_t sing_resp[ RESPONSE_SLICES ] ;   // the shape of the phe_response function
     111  Float_t peak_time  ;                      // the time from the start of the response function to the maximum peak
    105112
    106113  TH1F     *histPmt ;
     
    112119  //
    113120 
    114   Float_t chan_thres ; // the threshold (in mV) for each individuel pixels
     121  Float_t chan_thres[TRIGGER_PIXELS] ; // the threshold (in mV) for each individuel pixels
    115122  Float_t gate_leng  ; // the length of the digital signal if analog signal is above threshold
    116123
    117124  Float_t trigger_multi  ;  // Number of Pixels requested for a Trigger
    118 
     125  Int_t trigger_geometry ;  // 0 means a pixel with trigger_multi-1 neighbours
     126                            // 1 means trigger_multi neighbours
     127                            // 2 means trigger_multi closed neighbours
    119128  //
    120129  //  The lookup table for the next neighbours
     
    128137
    129138  Int_t  nZero ;         // how many ZeroLevel Trigger in one Event
    130   Int_t  SlicesZero[5] ; // Times Slices at which the ZeroLevel Triggers occur
     139  Bool_t  SlicesZero[TRIGGER_TIME_SLICES] ; // Times Slices at which the ZeroLevel Triggers occur
    131140
    132141  Int_t  nFirst ;         // how many FirstLevel Trigger in one Event
     
    136145  Int_t  SlicesSecond[5] ; // Times Slices at which the SecondLevel Triggers occur
    137146
     147private:
    138148
     149  Float_t  Fill( Int_t, Float_t, Int_t ) ; 
     150
     151  Bool_t PassNextNeighbour( Bool_t m[], Bool_t *n) ;
     152 
    139153public:
    140154
     
    145159  void Reset() ;
    146160
    147   Float_t  Fill( Int_t, Float_t ) ; 
     161  Float_t  FillShow( Int_t, Float_t ) ; 
    148162
    149163  Float_t  FillNSB( Int_t, Float_t ) ; 
    150164
     165  Float_t  FillStar( Int_t, Float_t ) ; 
     166
    151167  void ElecNoise() ;
    152168
    153   Int_t Diskriminate() ;
     169  void SetResponseShape();
     170
     171  void ReadParam(char name[]);
     172
     173  void Diskriminate() ;
     174
     175  void ShowSignal (MMcEvt *McEvt) ;
     176
     177  Int_t ZeroLevel() ;
    154178
    155179  Int_t FirstLevel() ;   
    156 
    157   Bool_t PassNextNeighbour( Bool_t m[] ) ;
    158  
    159   void ShowSignal (MMcEvt *McEvt) ;
    160180
    161181  Float_t GetFirstLevelTime( Int_t il ) ;
Note: See TracChangeset for help on using the changeset viewer.