Ignore:
Timestamp:
07/04/00 15:10:20 (24 years ago)
Author:
MagicSol
Message:
Some changes have been done in the root output file. The RawEvt tree is only
stored in the single trigger mode.
The trigger input parameters are also given by the general input card.
The diffuse NSB and the star NSB have been decoupled. Now the contribution of
each one can be studied seperately.
File:
1 edited

Legend:

Unmodified
Added
Removed
  • trunk/MagicSoft/Simulation/Detector/Camera/camera.cxx

    r402 r408  
    2121//
    2222// $RCSfile: camera.cxx,v $
    23 // $Revision: 1.9 $
    24 // $Author: blanch $
    25 // $Date: 2000-06-13 13:25:24 $
     23// $Revision: 1.10 $
     24// $Author: MagicSol $
     25// $Date: 2000-07-04 14:10:20 $
    2626//
    2727////////////////////////////////////////////////////////////////////////
     
    200200
    201201static int Write_McEvt  = TRUE;
    202 static int Write_McTrig = FALSE;
     202static int Write_McTrig = TRUE;
    203203static int Write_RawEvt = FALSE;
    204204
     
    220220//@: flag: TRUE: loop trigger analysis over several thresholds, multiplicities and topologies; FALSE: a single trigger configuration
    221221static int Trigger_Loop = FALSE;
     222
     223//@: Properties of the trigger
     224static float Trigger_gate_length = 3.0;
     225static float Trigger_response_ampl = 1.0;
     226static float Trigger_response_fwhm = 2.0;
     227
     228//@: Trigger conditions for a single trigger mode
     229static float Trigger_threshold = 7.0;
     230static int Trigger_multiplicity = 4;
     231static int Trigger_topology = 2;
    222232
    223233//@: Upper and lower edges of the trigger loop
     
    368378
    369379  char datname[256];          //@< data (ASCII) output file name
    370   char diagname[256];         //@< diagnistic output file (ROOT format)
    371380
    372381  char rootname[256] ;        //@< ROOT file name
     382  char rootname_loop[256] ;   //@< ROOT file name
    373383
    374384  char parname[256];          //@< parameters file name
    375 
    376   char sign[20];              //@< initialize sign
    377385
    378386  char flag[SIZE_OF_FLAGS + 1];  //@< flags in the .rfl file
     
    428436  float fCorrection;          //@< Factor to apply to pixel values (def. 1.)
    429437
    430   int trigger;                //@< trigger flag
    431   int itrigger;               //@< index of pixel fired
    432438  int ntrigger = 0;           //@< number of triggers in the whole file
    433439  int ithrescount;            //@< counter for loop over threshold trigger
     
    441447  float degTriggerZone;       //@< trigger area in the camera (radius, in deg.)
    442448
    443   float dtheta, dphi;         //@< deviations of CT from shower axis
    444 
    445449  int still_in_loop = FALSE;
    446 
    447   float *image_data;
    448   int nvar, hidt;
    449450
    450451  struct camera cam; // structure holding the camera definition
     
    527528  FADC_Scan = get_FADC_Scan();
    528529  Trigger_Scan = get_Trigger_Scan();
     530
     531  get_Trigger_properties( &Trigger_gate_length, &Trigger_response_ampl, &Trigger_response_fwhm);
     532
    529533  Trigger_Loop = get_Trigger_Loop(&Trigger_loop_lthres, &Trigger_loop_uthres, &Trigger_loop_lmult, &Trigger_loop_umult, &Trigger_loop_ltop, &Trigger_loop_utop);
    530534
     535  if (!Trigger_Loop){
     536    get_Trigger_Single (&Trigger_threshold, &Trigger_multiplicity, &Trigger_topology);
     537  }
    531538
    532539  // get filenames
     
    535542  strcpy( starfieldname, get_starfield_filename() );
    536543  strcpy( datname, get_data_filename() );
    537   strcpy( diagname, get_diag_filename() );
    538544  strcpy( rootname, get_root_filename() );
     545  strcpy( rootname_loop, get_loop_filename() );
    539546  strcpy( ct_filename, get_ct_filename() );
    540547
     
    553560
    554561  log(SIGNATURE,
    555       "%s:\n\t%20s:\t%s\n\t%20s:\t%s\n\t%20s:\t%s\n\t%20s:\t%s\n\t%20s:\t%s\n\t%20s:\t%s\n",
     562      "%s:\n\t%20s:\t%s\n\t%20s:\t%s\n\t%20s:\t%s\n\t%20s:\t%s\n\t%20s:\t%s\n",
    556563      "Filenames",
    557564      "In", inname,
     
    559566      "CT", ct_filename,
    560567      "Data", datname,
    561       "Diag", diagname,
    562568      "ROOT",  rootname
    563569      );
    564570
    565  
     571  // log Trigger information
     572
     573  if (Trigger_Loop) {
     574    log(SIGNATURE,
     575        "%s:\n\t%20s: %i - %i\n\t%20s: %i - %i\n\t%20s: %i - %i\n\t%20s\n",
     576        "Trigger Loop mode",
     577        "Threshold",Trigger_loop_lthres,Trigger_loop_uthres,
     578        "Multiplicity",Trigger_loop_lmult,Trigger_loop_umult,
     579        "Topology",Trigger_loop_ltop,Trigger_loop_utop,
     580        rootname_loop);
     581  }
     582  else{
     583    log(SIGNATURE,
     584        "%s:\n\t%20s: %f\n\t%20s: %i\n\t%20s: %i\n",
     585        "Single Trigger mode",
     586        "Threshold",Trigger_threshold,
     587        "Multiplicity",Trigger_multiplicity,
     588        "Topology",Trigger_topology);
     589  }   
     590 
    566591  // log flags information
    567592
     
    630655      log(SIGNATURE, "\tshower # %d\n", Skip[i]);
    631656  }
     657
    632658 
    633659  // read parameters from the ct.def file
     
    647673  // initialise instance of Trigger and FADC classes
    648674
    649   MTrigger  Trigger ;         //@< A instance of the Class MTrigger
     675  MTrigger  Trigger(Trigger_gate_length, Trigger_response_ampl, Trigger_response_fwhm);         //@< A instance of the Class MTrigger
    650676
    651677  MMcTrig *McTrig   = new MMcTrig() ;
     
    659685  MMcEvt  *McEvt = new MMcEvt ();
    660686
    661   // initalize the ROOT file
     687  // 
     688  // initalize a temporal ROOT file
    662689  //
    663 
    664   TFile outfile ( rootname , "RECREATE" );
    665 
     690 
     691  TFile outfile_temp ( rootname , "RECREATE" );
     692
     693 
    666694  //      create a Tree for the Event data stream
    667 
    668695  TTree EvtTree("EvtTree","Events of Run");
    669696
    670697  Int_t bsize=128000; Int_t split=1;
    671698
    672   EvtTree.Branch("MRawEvt","MRawEvt",
    673                  &Evt, bsize, split);
     699  if(!Trigger_Loop){
     700   
     701    EvtTree.Branch("MRawEvt","MRawEvt",
     702                   &Evt, bsize, split);
     703  }
    674704
    675705  EvtTree.Branch("MMcEvt","MMcEvt",
    676                  &McEvt, bsize, split);
    677 
     706                 &McEvt, bsize, split);
     707 
    678708  EvtTree.Branch("MMcTrig","MMcTrig",
    679                    &McTrig, bsize, split);
     709                 &McTrig, bsize, split);
     710
     711 
     712  //      create a Tree for the Event data stream
     713  TTree EvtTree_loop("EvtTree","Events of Run");
     714
     715  if (Trigger_Loop && Write_RawEvt){
     716   
     717    EvtTree_loop.Branch("MRawEvt","MRawEvt",
     718                        &Evt, bsize, split);
     719   
     720    EvtTree_loop.Branch("MMcEvt","MMcEvt",
     721                        &McEvt, bsize, split);
     722   
     723    EvtTree_loop.Branch("MMcTrig","MMcTrig",
     724                        &McTrig, bsize, split);
     725   
     726  }
    680727
    681728  unsigned short ulli = 0 ;
     
    697744  }
    698745 
    699   // for safety and for dimensioning image_data: count the elements in the
    700   // diagnostic data branch
    701 
    702   i=0;
    703   i++; // "n"
    704   i++; // "primary"
    705   i++; // "energy"
    706   i++; // "cored"
    707   i++; // "impact"
    708   i++; // "xcore"
    709   i++; // "ycore"
    710   i++; // "theta"
    711   i++; // "phi"
    712   i++; // "deviations"
    713   i++; // "dtheta"
    714   i++; // "dphi"
    715   i++; // "trigger"
    716   i++; // "ncphs"
    717   i++; // "maxpassthr_phe"   
    718   i++; // "nphes"
    719   i++; // "nphes2"
    720   i++; // "length"
    721   i++; // "width"
    722   i++; // "dist"
    723   i++; // "xdist"
    724   i++; // "azw"
    725   i++; // "miss"
    726   i++; // "alpha"
    727   i++; // "conc2"
    728   i++; // "conc3"
    729   i++; // "conc4"
    730   i++; // "conc5"
    731   i++; // "conc6"
    732   i++; // "conc7"
    733   i++; // "conc8"
    734   i++; // "conc9"
    735   i++; // "conc10"
    736   i++; // "asymx"
    737   i++; // "asymy"
    738   i++; // "phiasym"
    739 
    740   nvar = i;
    741   image_data = new float[nvar];
    742 
    743746  // set plate scale (deg/cm) and trigger area (deg)
    744747
     
    849852    // reading .rfl files
    850853    if(!isA( flag, FLAG_START_OF_RUN )){
     854
     855      //We write some trigger information in data file before exit
     856
     857      datafile<<ntshow<<" event(s), with a total of "<<ntcph<<" C.photons"<<endl;
     858      if (Trigger_Loop){
     859        datafile<<"Fraction of triggers: "<<endl;
     860        for (ithrescount=Trigger_loop_lthres;ithrescount<=Trigger_loop_uthres;ithrescount++){
     861          for (imulticount=Trigger_loop_lmult;imulticount<=Trigger_loop_umult;imulticount++){
     862            for(itopocount=Trigger_loop_ltop;itopocount<=Trigger_loop_utop;itopocount++){
     863              datafile<<"Thres "<<ithrescount<<", Multi "<<imulticount<<", Topo"<<itopocount<<": ";
     864              datafile<<((float)ntriggerloop[ithrescount-Trigger_loop_lthres][imulticount-Trigger_loop_lmult][itopocount-Trigger_loop_ltop] / ((float)ntshow) * 100.0)<<"% ("<<ntriggerloop[ithrescount-Trigger_loop_lthres][imulticount-Trigger_loop_lmult][itopocount-Trigger_loop_ltop]<<" out of "<<ntshow<<")"<<endl;
     865            }
     866          }   
     867        }
     868      }
     869      else{
     870        datafile<<"Fraction of triggers: "<<((float)ntrigger) / ((float)ntshow) * 100.0<<" ("<<ntrigger<<" out of "<<ntshow<<" )"<<endl;
     871      }
     872      //  We exit
    851873      error( SIGNATURE, "Expected start of run flag, but found: %s\n", flag );
    852874    }
     
    10651087       
    10661088        //   We study several trigger conditons
    1067         if(Trigger_Loop)
    1068 
     1089        if(Trigger_Loop){
    10691090          //  Loop over trigger threshold
    10701091          for (ithrescount=Trigger_loop_lthres;ithrescount<=Trigger_loop_uthres;ithrescount++){
     
    10891110
    10901111              Lev0=(Short_t) Trigger.ZeroLevel();
    1091               if (Lev0>0){
     1112              if (Lev0>0 || Write_All_Images){
    10921113                Lev1=Lev2=0;
    10931114
     
    11021123                  //   Start the First Level Trigger simulation
    11031124                  //
    1104 
    11051125                  McTrig->SetFirstLevel (Lev1=Trigger.FirstLevel());
    11061126                  if(Lev1>0) {
     
    11081128                    McTrig->SetTopology(itopocount);
    11091129                    McTrig->SetMultiplicity(imulticount);
    1110                     McTrig->SetThreshold(fpixelthres);
     1130                    McTrig->SetThreshold(fpixelthres);           
    11111131                  }
    11121132                  if(Lev1==0 && Write_All_Images){
     
    11201140                    McTrig->SetPixel(Trigger.GetFirstLevelPixel(ii));
    11211141                    fadc.TriggeredFadc(Trigger.GetFirstLevelTime(ii));
    1122                     //
    1123                     //  Fill the header of this event
    1124                     //
    1125                    
    1126                     Evt->FillHeader ( (UShort_t) (ntshow + nshow) ,  20 ) ;
    1127                    
     1142
    11281143                    //   fill pixel information
    11291144                   
     
    11321147                        fadcValues[j]=fadc.GetFadcSignal(i,j);
    11331148                      }
     1149                    }
     1150
     1151                    if( Write_RawEvt ){
     1152                      //
     1153                      //  Fill the header of this event
     1154                      //
     1155                     
     1156                      Evt->FillHeader ( (UShort_t) (ntshow + nshow) ,  20 ) ;
     1157                     
     1158                      //   fill pixel information
     1159                     
    11341160                      Evt->FillPixel(i,fadcValues);
     1161                   
     1162                      //
     1163                      //   fill the MMcEvt with all information 
     1164                      //
     1165                   
     1166                      McEvt->Fill( (UShort_t) mcevth.get_primary() ,
     1167                                   mcevth.get_energy(),
     1168                                   mcevth.get_theta(),
     1169                                   mcevth.get_phi(),
     1170                                   mcevth.get_core(),
     1171                                   mcevth.get_coreX(),
     1172                                   mcevth.get_coreY(),
     1173                                   impactD,
     1174                                   ulli, ulli,
     1175                                   (UShort_t) ncph,
     1176                                   ulli,
     1177                                   (UShort_t) ncph) ;
     1178                      //   We don not count phtons out of the camera.   
     1179                     
     1180                      //
     1181                      //    write it out to the file outfile
     1182                      //
     1183                   
     1184                      EvtTree_loop.Fill() ;
     1185
     1186                      //    clear all
     1187                      Evt->Clear() ;
     1188                      McEvt->Clear() ; 
    11351189                    }
    1136                     //
    1137                     //   fill the MMcEvt with all information 
    1138                     //
    1139                    
    1140                     McEvt->Fill( (UShort_t) mcevth.get_primary() ,
    1141                                  mcevth.get_energy(),
    1142                                  mcevth.get_theta(),
    1143                                  mcevth.get_phi(),
    1144                                  mcevth.get_core(),
    1145                                  mcevth.get_coreX(),
    1146                                  mcevth.get_coreY(),
    1147                                  impactD,
    1148                                  ulli, ulli,
    1149                                  (UShort_t) ncph,
    1150                                  ulli,
    1151                                  (UShort_t) ncph) ;
    1152                    
    1153                     //   We don not count phtons out of the camera.     
    1154 
    1155                     //
    1156                     //    write it out to the file outfile
    1157                     //
    1158                    
    1159                     EvtTree.Fill() ;
    1160                     //    clear all
    1161                     Evt->Clear() ;
    1162                     McEvt->Clear() ; 
    1163                    
    11641190                  }
     1191                  //
     1192                  //   fill the MMcEvt with all information 
     1193                  //
     1194                 
     1195                  McEvt->Fill( (UShort_t) mcevth.get_primary() ,
     1196                               mcevth.get_energy(),
     1197                               mcevth.get_theta(),
     1198                               mcevth.get_phi(),
     1199                               mcevth.get_core(),
     1200                               mcevth.get_coreX(),
     1201                               mcevth.get_coreY(),
     1202                               impactD,
     1203                               ulli, ulli,
     1204                               (UShort_t) ncph,
     1205                               ulli,
     1206                               (UShort_t) ncph) ;
     1207
     1208                  EvtTree.Fill() ;
     1209       
    11651210                  McTrig->Clear() ;
    11661211                }
     
    11691214            }
    11701215          }
    1171 
     1216        }
    11721217        //  We study a single trigger condition
    11731218        else {
    11741219
     1220          //  Setting trigger conditions
     1221          Trigger.SetMultiplicity(Trigger_multiplicity);
     1222          Trigger.SetTopology(Trigger_topology);
     1223          for (i=0;i<TRIGGER_PIXELS;i++)
     1224            fpixelthres[i]=Trigger_threshold;
     1225          Trigger.SetThreshold(fpixelthres);
     1226                                 
    11751227          Trigger.Diskriminate() ;
    11761228
     
    11921244          //
    11931245         
    1194           if ( Lev0 > 0 ) {
    1195             McTrig->SetFirstLevel (Lev1 = Trigger.FirstLevel());
     1246          if ( Lev0 > 0 || Write_All_Images) {
     1247            McTrig->SetFirstLevel (Lev1= Trigger.FirstLevel());
    11961248          }
    11971249          if (Lev1>0){
     
    12171269            //  Fill the header of this event
    12181270            //
    1219       
     1271           
    12201272            Evt->FillHeader ( (UShort_t) (ntshow + nshow) ,  20 ) ;
    12211273           
     
    12471299           
    12481300            //   We don not count photons out of the camera.   
    1249                    
     1301           
    12501302           
    12511303            //
    12521304            //    write it out to the file outfile
    12531305            //
    1254          
     1306           
    12551307            EvtTree.Fill() ;
    12561308           
    1257            
     1309         
     1310         
    12581311            //
    12591312            //    if a first level trigger occurred, then
     
    13531406  // put the Event to the root file
    13541407  //--
    1355  
     1408
     1409  EvtTree.Write() ;
     1410  outfile_temp.Write() ;
     1411  outfile_temp.Close() ;
     1412 
     1413  // 
     1414  // initalize the ROOT file
     1415  //
     1416 
     1417  TFile outfile ( rootname , "RECREATE" );
    13561418  EvtTree.Write() ;
    13571419  outfile.Write() ;
    13581420  outfile.Close() ;
    13591421
    1360  
     1422  if(Trigger_Loop && Write_RawEvt){
     1423    //++
     1424    // put the Event to the special root file
     1425    //--
     1426    TFile outfile_loop( rootname_loop , "RECREATE" );
     1427    EvtTree_loop.Write() ;
     1428    outfile_loop.Write() ;
     1429
     1430    outfile_loop.Close() ;
     1431  }
    13611432  // close input file
    13621433 
    13631434  log( SIGNATURE, "%d event(s), with a total of %d C.photons\n",
    13641435       ntshow, ntcph );
     1436  datafile<<ntshow<<" event(s), with a total of "<<ntcph<<" C.photons"<<endl;
    13651437  if (Trigger_Loop){
     1438    log( SIGNATURE, "Trigger Mode. \n");
    13661439    log( SIGNATURE, "Fraction of triggers: \n");
     1440    datafile<<"Fraction of triggers: "<<endl;
    13671441    for (ithrescount=Trigger_loop_lthres;ithrescount<=Trigger_loop_uthres;ithrescount++){
    13681442      for (imulticount=Trigger_loop_lmult;imulticount<=Trigger_loop_umult;imulticount++){
     
    13701444          log( SIGNATURE, "Thres %d, Multi %d, Topo %d: %5.1f%% (%d out of %d)\n",
    13711445               ithrescount,imulticount,itopocount,((float)ntriggerloop[ithrescount-Trigger_loop_lthres][imulticount-Trigger_loop_lmult][itopocount-Trigger_loop_ltop] / ((float)ntshow) * 100.0), ntriggerloop[ithrescount-Trigger_loop_lthres][imulticount-Trigger_loop_lmult][itopocount-Trigger_loop_ltop], ntshow);
     1446          datafile<<"Thres "<<ithrescount<<", Multi "<<imulticount<<", Topo"<<itopocount<<": ";
     1447          datafile<<((float)ntriggerloop[ithrescount-Trigger_loop_lthres][imulticount-Trigger_loop_lmult][itopocount-Trigger_loop_ltop] / ((float)ntshow) * 100.0)<<"% ("<<ntriggerloop[ithrescount-Trigger_loop_lthres][imulticount-Trigger_loop_lmult][itopocount-Trigger_loop_ltop]<<" out of "<<ntshow<<")"<<endl;
    13721448        }
    13731449      }   
     
    13771453    log( SIGNATURE, "Fraction of triggers: %5.1f%% (%d out of %d)\n",
    13781454         ((float)ntrigger) / ((float)ntshow) * 100.0, ntrigger, ntshow);
     1455    datafile<<"Fraction of triggers: "<<((float)ntrigger) / ((float)ntshow) * 100.0<<" ("<<ntrigger<<" out of "<<ntshow<<" )"<<endl;
    13791456  }
    13801457
     
    26032680  int i, j, k, ii; // counters
    26042681
    2605   MTrigger trigger;
     2682  MTrigger trigger(Trigger_gate_length, Trigger_response_ampl, Trigger_response_fwhm);
    26062683  MFadc flashadc;
    26072684                     
     
    26302707
    26312708  infile = fopen( iname, "r" );
    2632   if ( infile == NULL )
    2633     error( SIGNATURE, "Cannot open starfield input file: %s\n", iname );
     2709
     2710  // check if the satrfield input file exists
     2711
     2712  if ( infile == NULL ) {
     2713
     2714    log( SIGNATURE, "Cannot open starfield input file: %s\n", iname );
     2715
     2716    log( SIGNATURE, "There is not NSB from the Stars\n");
     2717
     2718    return (0);
     2719  }
    26342720 
    26352721  // get signature, and check it
     
    28692955//
    28702956// $Log: not supported by cvs2svn $
     2957// Revision 1.9  2000/06/13 13:25:24  blanch
     2958// The multiple arrays have been replaced, since they do not work
     2959// in alpha machines. Now we are using pointers and the command new
     2960// to allocate memory.
     2961//
    28712962// Revision 1.8  2000/05/11 13:57:27  blanch
    28722963// The option to loop over several trigger configurations has been included.
Note: See TracChangeset for help on using the changeset viewer.