Main Page   Compound List   File List   Compound Members   File Members  

ReactorFsim.cpp File Reference

ReactorFsim simulation for MWtheta13. More...

#include "ReactorFortran.hh"
#include "cfortran.h"
#include "ReactorConstants.hh"
#include "ReactorEvent.hh"
#include "ReactorDetector.hh"
#include "ReactorXC.hh"
#include "TFile.h"
#include "ReactorNtuple.hh"
#include "ReactorTree.hh"
#include "ReactorTrigger.hh"
#include <iostream.h>
#include <fstream.h>
#include <iomanip.h>
#include <math.h>
#include <string.h>
#include <cstdio>

Go to the source code of this file.

Compounds

struct  PAWC_DEF

Defines

#define PAWC_SIZE   50000
#define PAWC   COMMON_BLOCK(PAWC,pawc)

Functions

 COMMON_BLOCK_DEF (PAWC_DEF, PAWC)
int main ()
 Top level function of ReactorFsim. More...


Variables

PAWC_DEF PAWC


Detailed Description

ReactorFsim simulation for MWtheta13.

ReactorFsim simulates any number of spherical, three-zone liquid scintillator neutrino detectors.

Main author: Tim Bolton

Contributing authors: Erin Abouzaid, Josh Klein, Matthew Worcester

Definition in file ReactorFsim.cpp.


Function Documentation

int main  
 

Top level function of ReactorFsim.

First sets the number of events, initializes paw, and defines each detector. The event loop creates an event and runs it through each detector added to the loop, so that each detector "sees" the exact same event each time. Finally, paw is closed and the hbook file created.

Definition at line 42 of file ReactorFsim.cpp.

References ReactorTree::CloseOut, ReactorTree::Fill, ReactorNtuple::Fill, ReactorDetector::LightsOut, ReactorDetector::SetParam_FastNeutronOption, ReactorDetector::SetParam_PMTDebugOption, ReactorDetector::SetParam_PMTMergeTime, ReactorDetector::SetParam_R0, ReactorDetector::SetParam_R1, ReactorDetector::SetParam_R2, and ReactorTrigger::Trigger.

00042           {
00043 
00044   //  ReactorNeutrons Neutrons;
00045   //
00046   //  Set number of events, paw file name, and ntuple name
00047   //
00048   // defaults
00049   int nevents = 100;
00050   double r0=260;
00051   double r1=260;
00052   double rmaxgen=290;
00053   double r2=350;
00054   int fast=0;
00055   int PMTdebug = 0;
00056   double MergeTime = 1;
00057   int trigger=0;
00058   char* fileName="test.ntuple";
00059   char* rootName="test.root";
00060   char* ntName="event data";
00061   //
00062   // setup the event
00063   //
00064   fstream fin("src/event_setup.txt", ios::in);
00065   //cout << "setup file: src/event_setup.txt" << endl;
00066 
00067   char paramLine[256];
00068   std::string dummy;
00069   bool done = false;
00070   std::string fastneutron;
00071   std::string trigsim;
00072   std::string PMTdebugoption;
00073   char pawFile[256];
00074   char rootFile[256];
00075 
00076   while(!done){
00077 
00078     // '#' specifies a comment line -- ignore it
00079     if(fin.peek() == '#'){
00080 
00081       fin.getline(paramLine, 256);
00082       continue;
00083     }
00084 
00085     // 'E'ND or 'e'nd specifies end of file -- set done flag to true
00086     if(fin.peek() == 'e' || fin.peek() == 'E'){
00087 
00088       done = true;
00089       continue;
00090     }
00091 
00092     // 'N'EVENT or 'n'event specifies the number of events
00093     if(fin.peek() == 'n' || fin.peek() == 'N'){
00094 
00095       fin >> dummy;
00096       while(fin.peek() == ' ' || fin.peek() == '=')
00097         fin.ignore(1);
00098 
00099       fin >> nevents;
00100 
00101       if(nevents <= 0){
00102         cout << "  SETUP ERROR: number of events <= 0!" << endl;
00103         nevents = 1;
00104       }
00105 
00106       continue;
00107     }
00108 
00109     // 'O'UTPUTFILE or 'o'utputfile specifies the output filename
00110     if(fin.peek() == 'o' || fin.peek() == 'O'){
00111 
00112       fin >> dummy;
00113       while(fin.peek() == ' ' || fin.peek() == '=')
00114         fin.ignore(1);
00115 
00116       fin >> pawFile;
00117       fileName = pawFile;
00118 
00119       continue;
00120     }
00121 
00122     // 'A'ROOTFILE or 'a'rootfile specifies the output filename
00123     if(fin.peek() == 'a' || fin.peek() == 'A'){
00124 
00125       fin >> dummy;
00126       while(fin.peek() == ' ' || fin.peek() == '=')
00127         fin.ignore(1);
00128 
00129       fin >> rootFile;
00130       rootName = rootFile;
00131 
00132       continue;
00133     }
00134 
00135     // 'R'ADII or 'r'adii specifies the three detector radii: R0 R1 R2
00136     if(fin.peek() == 'r' || fin.peek() == 'R'){
00137 
00138       fin >> dummy;
00139       while(fin.peek() == ' ' || fin.peek() == '=')
00140         fin.ignore(1);
00141 
00142       fin >> r0 >> r1 >> r2 >> rmaxgen;
00143 
00144       continue;
00145     }
00146 
00147     // 'F'ASTNEUTRON or 'f'astneutron turns on/off fast neutrons
00148     if(fin.peek() == 'f' || fin.peek() == 'F'){
00149 
00150       fin >> dummy;
00151       while(fin.peek() == ' ' || fin.peek() == '=')
00152         fin.ignore(1);
00153 
00154       fin >> fastneutron;
00155 
00156       if(fastneutron == "off"){
00157         fast = 0;
00158       }
00159       else{
00160         fast = 1;
00161       }
00162 
00163       continue;
00164     }
00165 
00166     // 'B'PMTOUTPUTFILE 'b'PMTOUTPUTFILE turns on/off the PMT Debug file
00167     if(fin.peek() == 'b' || fin.peek() == 'B'){
00168 
00169       fin >> dummy;
00170       while(fin.peek() == ' ' || fin.peek() == '=')
00171         fin.ignore(1);
00172 
00173       fin >> PMTdebugoption;
00174 
00175       if(PMTdebugoption == "on"){
00176         PMTdebug = 1;
00177       }
00178       else{
00179         PMTdebug = 0;
00180       }
00181       continue;
00182     }
00183 
00184     // 'M'ERGETIME or 'm'ergetime specifies the PMTOutput Resolution (MergeTime)
00185     if(fin.peek() == 'm' || fin.peek() == 'M'){
00186 
00187       fin >> dummy;
00188       while(fin.peek() == ' ' || fin.peek() == '=')
00189         fin.ignore(1);
00190 
00191       fin >> MergeTime;
00192 
00193       continue;
00194     }
00195 
00196     // 'T'RIGGER or 't'rigger turns on/off trigger simulation
00197     if(fin.peek() == 't' || fin.peek() == 'T'){
00198 
00199       fin >> dummy;
00200       while(fin.peek() == ' ' || fin.peek() == '=')
00201         fin.ignore(1);
00202 
00203       fin >> trigsim;
00204 
00205       if(trigsim == "off"){
00206         trigger = 0;
00207       }
00208       else{
00209         trigger = 1;
00210       }
00211 
00212       continue;
00213     }
00214 
00215     // skip K, P, and D
00216     if(fin.peek() == 'K' || fin.peek() == 'k' ||
00217        fin.peek() == 'P' || fin.peek() == 'p' ||
00218        fin.peek() == 'D' || fin.peek() == 'd'){
00219 
00220       fin.getline(paramLine, 256);
00221       continue;
00222     }
00223 
00224     // ignore extra whitespace
00225     if(fin.peek() == ' ' || fin.peek() == '\n'){
00226 
00227       fin.ignore(1);
00228       continue;
00229     }
00230   }
00231   //
00232   cout << "ReactorFsim v0_0_5 by T. Bolton" << endl;
00233   cout << "===============================" << endl;
00234   cout << "  " << nevents << " events" << endl;
00235   cout << "  Paw output file: " << fileName << endl;
00236   cout << "  Root output file: " << rootName << endl;
00237   cout << "  R0 = " << r0 << ", R1 = " << r1 << ", R2 = " << r2
00238        << " (Rmaxgen = " << rmaxgen << ") cm" << endl;
00239   cout << "  Fast neutrons are " << fastneutron << endl;
00240   cout << "  Trigger simulation is " << trigsim << endl;
00241   cout << "  PMT output debugging is " << PMTdebugoption << endl;
00242   cout << "  PMT MergeTime is " << MergeTime << endl;
00243   cout << "===============================" << endl;
00244   //
00245   // init random number seed
00246   //
00247   int luxury = 2;
00248   int seed = 8796896;
00249   int k1=0;
00250   int k2=0;
00251   rluxgo_(luxury,seed,k1,k2);
00252   //
00253   // setup root output file and create tree
00254   //
00255   TFile *rfile= new TFile(rootName,"RECREATE","ReactorTree");
00256   ReactorTree rtree("RTree");
00257   //
00258   // Paw setup.
00259   //
00260   hlimit_(PAWC_SIZE);
00261   int iostat;
00262   int ntLun=99;
00263   int ntBuf=1024;
00264   char* dirName = "TEST";
00265   char* chopt = "N";
00266   hropen_(ntLun,dirName,fileName,chopt,ntBuf,iostat,
00267           strlen(dirName),strlen(fileName),strlen(chopt));
00268   //
00269   // Set up simple detector models
00270   // Set up simple Ntuple and histogranms
00271   // See ReactorNtuple.hh for ntuple/histogram details.
00272   //
00273 
00274   ReactorDetector DetectorA;
00275   DetectorA.SetParam_FastNeutronOption(fast);
00276   DetectorA.SetParam_PMTDebugOption(PMTdebug);
00277   DetectorA.SetParam_PMTMergeTime(MergeTime);
00278   DetectorA.SetParam_R0(r0);
00279   DetectorA.SetParam_R1(r1);
00280   DetectorA.SetParam_R2(r2);
00281   ReactorNtuple ModelA(1,"model A",dirName);
00282   ReactorTrigger TriggerA;
00283   //
00284   // event loop
00285   //
00286   for (int events = 0;events<nevents;events++){
00287     //
00288     // create neutrino event
00289     //
00290     ReactorEvent Event(nevents,rmaxgen);
00291     //
00292     // create fast detector simulation
00293     //
00294     DetectorA.LightsOut(Event, events);
00295     ModelA.Fill(Event,DetectorA);
00296     rtree.Fill(Event,DetectorA);
00297     if(trigger) TriggerA.Trigger(Event,DetectorA);
00298   }
00299   // close up root
00300   //
00301      rfile->Write();
00302      rtree.CloseOut();
00303   // close up paw
00304   //
00305   hldir_(" "," ",strlen(" "),strlen(" "));
00306   char *dirName2 = new char[strlen(dirName)+2];
00307   *dirName2='\0';
00308   strcat(dirName2,"//");
00309   strcat(dirName2,dirName);
00310   hcdir_(dirName2," ",strlen(dirName2),strlen(" "));
00311   int outopt = 0;
00312   int icycle;
00313   hrout_(outopt,icycle," ",strlen(" "));
00314   hrend_(dirName,strlen(dirName));
00315 }


Generated on Mon Feb 21 16:11:19 2005 for ReactorFsim by doxygen1.2.14 written by Dimitri van Heesch, © 1997-2002