Ignore:
Timestamp:
02/23/01 11:05:57 (24 years ago)
Author:
magicsol
Message:
Small changes due to slightly different output format and the introduction of
pedesals for teh FADC.
File:
1 edited

Legend:

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

    r577 r646  
    2121//
    2222// $RCSfile: camera.cxx,v $
    23 // $Revision: 1.16 $
     23// $Revision: 1.17 $
    2424// $Author: magicsol $
    25 // $Date: 2001-01-18 18:44:40 $
     25// $Date: 2001-02-23 11:05:57 $
    2626//
    2727////////////////////////////////////////////////////////////////////////
     
    6161#include "MTrigger.hxx"
    6262#include "MFadc.hxx"
     63#include "MLons.hxx"
    6364
    6465#include "MRawEvtData.h"
     
    6768#include "MMcEvt.hxx"
    6869#include "MMcTrig.hxx"
    69 #include "MHeaderTrig.hxx"
     70#include "MMcTrigHeader.hxx"
     71#include "MMcFadcHeader.hxx"
    7072
    7173/*!@"
     
    272274//@: contents of the pixels (ph.e.)
    273275static float *fnpix;   
    274 
    275 //@: contents of the pixels (ph.e.) after cleanning
    276 static float *fnpixclean;
    277276
    278277 
     
    391390  char parname[256];          //@< parameters file name
    392391
     392  char nsbpathname[256];      //@< directory with the dataabse for th NSB
     393
    393394  char flag[SIZE_OF_FLAGS + 1];  //@< flags in the .rfl file
    394395
     
    399400  MCCphoton cphoton;          //@< Cherenkov Photon class (MC)
    400401
    401   int inumphe;                //@< number of photoelectrons in an event
     402  int inumphe;                //@< number of photoelectrons in an event from showers
     403  float inumphensb;             //@< number of photoelectrons in an event from nsb
    402404
    403405  float arrtmin_ns;           //@ arrival time of the first photoelectron
     
    406408  float thetaCT, phiCT;       //@< parameters of a given shower
    407409  float thetashw, phishw;     //@< parameters of a given shower
    408   float coreD, coreX, coreY;  //@< core position and distance
     410  float coreD, coreX, coreY;         //@< core position
    409411  float impactD;              //@< impact parameter
    410412  float l1, m1, n1;           //@< auxiliary variables
    411413  float l2, m2, n2;           //@< auxiliary variables
    412   float num, den;             //@< auxiliary variables
     414  float num, den;      //@< auxiliary variables
    413415
    414416  int nshow=0;                //@< partial number of shower in a given run
     
    425427  float nsbrate_phepns[iMAXNUMPIX][iNUMWAVEBANDS];    //@< non-diffuse nsb
    426428                                                     //@< photoelectron rates
     429  float nsb_phepns[iMAXNUMPIX];      //@< NSB values for each pixel
     430
     431  Float_t nsb_trigresp[TRIGGER_TIME_SLICES];    //@< array to write the trigger
     432                                                //@< response from the database
     433  Float_t nsb_fadcresp[(Int_t) SLICES_MFADC];   //@< array to write the fadc
     434                                                //@< response from the database
     435  Byte_t trigger_map[((Int_t)(TRIGGER_PIXELS/8))+1];//@< Pixels on when the
     436                                                    //@< camera triggers
     437
    427438  float ext[iNUMWAVEBANDS] = { //@< average atmospheric extinction in each waveband
    428439    EXTWAVEBAND1,
     
    432443    EXTWAVEBAND5
    433444  };                         
    434   float baseline_mv[iMAXNUMPIX]; //@< The baseline (mV) caused by the NSB; to be subtracted
    435                                  //@< in order to simulate the preamps' AC coupling
    436445
    437446  float qThreshold;           //@< Threshold value
     
    467476
    468477  int ch, errflg = 0;          //@< used by getopt
     478
     479  //!@' @#### Initialisation of some variables
     480  //@'
     481
     482  for(i=0;i<iMAXNUMPIX;i++)
     483    for(j=0;j<iNUMWAVEBANDS;j++)
     484      nsbrate_phepns[i][j]=0.0;    //@< Starlight rates initialised at 0.0
    469485
    470486  /*!@'
     
    561577  strcpy( rootname_loop, get_loop_filename() );
    562578  strcpy( ct_filename, get_ct_filename() );
     579  strcpy( nsbpathname, get_nsb_directory() );
    563580
    564581  // get different parameters of the simulation
     
    576593
    577594  log(SIGNATURE,
    578       "%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",
     595      "%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",
    579596      "Filenames",
    580597      "In", inname,
    581598      "Stars", starfieldname,
     599      "NSB database", nsbpathname,
    582600      "CT", ct_filename,
    583601      "Data", datname,
     
    697715
    698716  MMcTrig **McTrig;
    699   MHeaderTrig **HeaderTrig;
     717  MMcTrigHeader **HeaderTrig;
    700718
    701719  if (Write_McTrig){
     
    707725    }
    708726
    709     HeaderTrig = new MHeaderTrig * [icontrigger];
     727    HeaderTrig = new MMcTrigHeader * [icontrigger];
    710728 
    711729    for (i=0;i<icontrigger;i++) {
    712       HeaderTrig[i] = new MHeaderTrig();
     730      HeaderTrig[i] = new MMcTrigHeader();
    713731    }
    714732  }
     
    716734  MFadc fadc ;                //@< A instance of the Class MFadc
    717735
     736  // Set the FADC pedestals for that run
     737  // The values of pedestal follow a flat distribution. Some modifications
     738  // mut be done to simulate a more realistic distribution of the pedestals.
     739  // This simualtion is done int the SetPedestals methode inside the
     740  // class MFadc
     741  fadc.SetPedestals(50);
    718742
    719743  // Prepare the raw data output
     
    762786  if(!Trigger_Loop && Write_McTrig){
    763787   
    764     HeaderTree.Branch("MHeaderTrig","MHeaderTrig",
     788    HeaderTree.Branch("MMcTrigHeader","MMcTrigHeader",
    765789                 &HeaderTrig[0], bsize, split);   
    766790  }
    767791  if (Trigger_Loop && Write_McTrig){
    768     for(char branchname[10],i=0;i<icontrigger;i++){
     792    for(char branchname[20],i=0;i<icontrigger;i++){
    769793     
    770794      sprintf(help,"%i",i+1);
    771       strcpy (branchname, "MHeaderTrig");
     795      strcpy (branchname, "MMcTrigHeader");
    772796      strcat (branchname, & help[0]);
    773797      strcat (branchname, ".");
    774       HeaderTree.Branch(branchname,"MHeaderTrig",
     798      HeaderTree.Branch(branchname,"MMcTrigHeader",
    775799                     &HeaderTrig[i], bsize, split);
    776800    }
     
    787811    }
    788812    HeaderTrig[0]->SetThreshold( fpixelthres);
    789 
     813    HeaderTrig[0]->SetAmplitud(Trigger_response_ampl);
     814    HeaderTrig[0]->SetFwhm(Trigger_response_fwhm);
     815    HeaderTrig[0]->SetOverlap(Trigger_overlaping_time);
     816    HeaderTrig[0]->SetGate(Trigger_gate_length);
    790817  }
    791818  if(Trigger_Loop && Write_McTrig){
     
    800827          }
    801828          HeaderTrig[iconcount]->SetThreshold( fpixelthres);
     829          HeaderTrig[iconcount]->SetAmplitud(Trigger_response_ampl);
     830          HeaderTrig[iconcount]->SetFwhm(Trigger_response_fwhm);
     831          HeaderTrig[iconcount]->SetOverlap(Trigger_overlaping_time);
     832          HeaderTrig[iconcount]->SetGate(Trigger_gate_length);
    802833          iconcount++;
    803834        }
     
    902933  // prepare the NSB simulation
    903934
     935  //  Instance of the Mlons class
     936  MLons lons(Trigger_response_ampl, Trigger_response_fwhm,
     937             MFADC_RESPONSE_AMPLITUDE, MFADC_RESPONSE_FWHM);
     938
     939  lons.SetPath(nsbpathname);
     940
    904941  if( simulateNSB ){
    905942
     
    911948                          &cam,
    912949                          nsbrate_phepns );
     950    float dum;
     951    for(i=0; i<cam.inumpixels;i++){
     952      dum=0;
     953      for(j=0;j<iNUMWAVEBANDS;j++)
     954        dum+=nsbrate_phepns[i][j];
     955      cout<<"Wuschel "<<dum<<endl;
     956    }
     957
    913958    if (k != 0){
    914959      cout << "Error when reading starfield... \nExiting.\n";
     
    923968    }
    924969
     970    // calculate nsb rate including diffuse and starlight
     971    for(i=0; i<cam.inumpixels;i++){
     972      nsb_phepns[i]= diffnsb_phepns[i];
     973      for(j=0;j<iNUMWAVEBANDS;j++)
     974        nsb_phepns[i]=nsb_phepns[i]+ nsbrate_phepns[i][j];
     975      cout<<"Huschel "<<nsb_phepns[i]<<endl;
     976    }
    925977  }
    926978
     
    9661018 
    9671019  fnpix = new float [ ct_NPixels ];
    968   fnpixclean = new float [ ct_NPixels ];
    969 
    970   // initialize baseline
    971 
    972   for(i=0; i<cam.inumpixels; i++){
    973     baseline_mv[i] = 0.;
    974   }
    975        
     1020
     1021     
    9761022  //!@' @#### Main loop.
    9771023  //@'
     
    10231069       
    10241070        fread( (char*)&mcevth, mcevth.mysize(), 1, inputfile );
    1025        
     1071
    10261072        // calculate core distance and impact parameter
    10271073       
    10281074        coreD = mcevth.get_core(&coreX, &coreY);
    1029        
     1075               
    10301076        // calculate impact parameter (shortest distance betwee the original
    10311077        // trajectory of the primary (assumed shower-axis) and the
     
    11021148          impactD = fabs(num)/den;
    11031149         
    1104           // fprintf(stderr, "[%f %f,%f %f] (%f %f %f) (%f %f %f) %f/%f = ",
    1105           //         thetashw, phishw, thetaCT, phiCT, l1, m1, n1, l2, m2, n2,
    1106           //         num, den);
    1107          
    11081150        }
    11091151
     
    11271169        if(simulateNSB){
    11281170
    1129           k = produce_nsb_phes( &arrtmin_ns, // will be changed by the function!
    1130                                 &arrtmax_ns, // will be changed by the function!
    1131                                 thetaCT,
    1132                                 &cam,
    1133                                 nsbrate_phepns,
    1134                                 diffnsb_phepns,
    1135                                 ext,
    1136                                 fnpix,   // will be changed by the function!
    1137                                 &Trigger,  // will be changed by the function!
    1138                                 &fadc,      // will be changed by the function!
    1139                                 &inumphe, // important for later: the size of photoe[]
    1140                                 baseline_mv // will be generated by the function
    1141                                 );
    1142 
    1143           if( k != 0 ){ // non-zero returnvalue means error
    1144             cout << "Exiting.\n";
    1145             exit(1);
    1146           }
    1147          
     1171          //  Fill trigger and fadc response in the trigger class from teh database
     1172          for(i=0;i<cam.inumpixels;i++)
     1173            if(nsb_phepns[i]>0.0){
     1174              k=lons.GetResponse(nsb_phepns[i],0.1,
     1175                                 & nsb_trigresp[0],& nsb_fadcresp[0]);
     1176              if(k==0){
     1177                cout << "Exiting.\n";
     1178                exit(1);
     1179              }
     1180              Trigger.SetNSB(i,nsb_trigresp);
     1181              fadc.Set(i,nsb_fadcresp);
     1182            }
    11481183        }// end if(simulateNSB) ...
    11491184
     
    11671202          exit(1);
    11681203        }
    1169          
     1204 
    11701205        log(SIGNATURE, "End of this event: %d cphs(+%d). . .\n",
    11711206            ncph, ntcph);
     
    11911226        }
    11921227       
    1193         cout << "Total number of phes: " << inumphe <<endl;
    1194        
     1228        cout << "Total number of phes: " << inumphe<<" + ";
     1229        inumphensb=0;
     1230        for (i=0;i<cam.inumpixels;i++){
     1231          inumphensb+=nsb_phepns[i]*TOTAL_TRIGGER_TIME;
     1232        }
     1233        cout<<inumphensb<<endl;
    11951234
    11961235        //++++++++++++++++++++++++++++++++++++++++++++++++++
     
    12061245        // TRIGGER HERE
    12071246
    1208 
    12091247        //
    12101248        //   now the noise of the electronic
     
    12151253       
    12161254        fadc.ElecNoise() ;
     1255
     1256        //  now a shift in the fadc signal due to the pedestlas is
     1257        //  intorduced
     1258        //  This is done inside the class MFadc by the method Pedestals
     1259        fadc.Pedestals();
    12171260
    12181261        //   We study several trigger conditons
     
    12741317                    if (Write_McTrig)
    12751318                      McTrig[iconcount]->SetTime(Trigger.GetFirstLevelTime(ii),ii+1);
    1276                     if (Write_McTrig)
    1277                       McTrig[iconcount]->SetPixel(Trigger.GetFirstLevelPixel(ii),ii+1);
    1278                    
     1319                    if (Write_McTrig){
     1320                      Trigger.GetMapDiskriminator(trigger_map);
     1321                      McTrig[iconcount]->SetMapPixels(trigger_map,ii);
     1322                    }
    12791323                    //
    12801324                    //  fill inside the class fadc the member output
     
    12921336                      for(i=0;i<ct_NPixels;i++){
    12931337                        for (j=0;j<FADC_SLICES;j++){
    1294                           fadcValues->AddAt((Char_t) (fadc.GetFadcSignal(i,j)),j);
     1338                          fadcValues->AddAt(fadc.GetFadcSignal(i,j),j);
    12951339                        }
    12961340                        EvtData[iconcount]->AddPixel(i+1000*ii,fadcValues,0);
     
    13251369                           mcevth.get_coreY(),
    13261370                           impactD,
    1327                            ulli, ulli,
    1328                            (UShort_t) ncph,
    13291371                           ulli,
    1330                            (UShort_t) ncph) ;
    1331             }
     1372                           ulli,
     1373                           (UInt_t) ncph,
     1374                           (UInt_t) ncph,
     1375                           (UInt_t) inumphe,
     1376                           (UInt_t) inumphensb+inumphe);
     1377                }
    13321378            //  Fill the Tree with the current leaves of each branch
    13331379            i=EvtTree.Fill() ;
     
    14021448              McTrig[0]->SetTime(Trigger.GetFirstLevelTime(ii),ii+1);
    14031449
    1404             if (Write_McTrig)
    1405               McTrig[0]->SetPixel(Trigger.GetFirstLevelPixel(ii),ii+1);
     1450            if (Write_McTrig){
     1451              Trigger.GetMapDiskriminator(trigger_map);
     1452              McTrig[0]->SetMapPixels(trigger_map,ii);
     1453            }
    14061454
    14071455            //  Fill Evt information
     
    14191467              for(i=0;i<ct_NPixels;i++){
    14201468                for (j=0;j<FADC_SLICES;j++){
    1421                   fadcValues->AddAt((Char_t) (fadc.GetFadcSignal(i,j)),j);
     1469                  fadcValues->AddAt(fadc.GetFadcSignal(i,j),j);
    14221470                }
    14231471                EvtData[0]->AddPixel(i+ii*1000,fadcValues,0);
     
    14371485                           mcevth.get_coreY(),
    14381486                           impactD,
    1439                            ulli, ulli,
    1440                            (UShort_t) ncph,
    14411487                           ulli,
    1442                            (UShort_t) ncph) ;
    1443             }
     1488                           ulli,
     1489                           (UInt_t) ncph,
     1490                           (UInt_t) ncph,
     1491                           (UInt_t) inumphe,
     1492                           (UInt_t) inumphensb+inumphe);
     1493                }
    14441494            //   We don not count photons out of the camera.   
    14451495           
     
    30963146//
    30973147// $Log: not supported by cvs2svn $
     3148// Revision 1.16  2001/01/18 18:44:40  magicsol
     3149// *** empty log message ***
     3150//
    30983151// Revision 1.15  2001/01/17 09:32:27  harald
    30993152// The changes are neccessary to have the same name for trees in MC and in
     
    31193172//
    31203173// $Log: not supported by cvs2svn $
     3174// Revision 1.16  2001/01/18 18:44:40  magicsol
     3175// *** empty log message ***
     3176//
    31213177// Revision 1.15  2001/01/17 09:32:27  harald
    31223178// The changes are neccessary to have the same name for trees in MC and in
Note: See TracChangeset for help on using the changeset viewer.