#include "ReactorFortran.hh"
#include "ReactorConstants.hh"
#include "ReactorEvent.hh"
#include "ReactorDetector.hh"
#include "ReactorXC.hh"
#include "ReactorNtuple.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.
Functions | |
| int | main () |
| Top level function of ReactorFsim. More... | |
ReactorFsim simulates any number of spherical, three-zone liquid scintillator neutrino detectors.
Main author: Tim Bolton
Contributing authors: Erin Abouzaid, Matthew Worcester
Definition in file ReactorFsim.cpp.
|
|
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 30 of file ReactorFsim.cpp. References ReactorNtuple::Fill, ReactorDetector::LightsOut, ReactorDetector::SetParam_FastNeutronOption, ReactorDetector::SetParam_R0, ReactorDetector::SetParam_R1, ReactorDetector::SetParam_R2, and ReactorTrigger::Trigger.
00030 {
00031
00032 // ReactorNeutrons Neutrons;
00033 //
00034 // Set number of events, paw file name, and ntuple name
00035 //
00036 // defaults
00037 int nevents = 100;
00038 double r0=260;
00039 double r1=260;
00040 double rmaxgen=270;
00041 double r2=350;
00042 int fast=0;
00043 int trigger=0;
00044 char* fileName="test.ntuple";
00045 char* ntName="event data";
00046 //
00047 // setup the event
00048 fstream fin("src/event_setup.txt", ios::in);
00049 //cout << "setup file: src/event_setup.txt" << endl;
00050
00051 char paramLine[256];
00052 std::string dummy;
00053 bool done = false;
00054 std::string fastneutron;
00055 std::string trigsim;
00056
00057 while(!done){
00058
00059 // '#' specifies a comment line -- ignore it
00060 if(fin.peek() == '#'){
00061
00062 fin.getline(paramLine, 256);
00063 continue;
00064 }
00065
00066 // 'E'ND or 'e'nd specifies end of file -- set done flag to true
00067 if(fin.peek() == 'e' || fin.peek() == 'E'){
00068
00069 done = true;
00070 continue;
00071 }
00072
00073 // 'N'EVENT or 'n'event specifies the number of events
00074 if(fin.peek() == 'n' || fin.peek() == 'N'){
00075
00076 fin >> dummy;
00077 while(fin.peek() == ' ' || fin.peek() == '=')
00078 fin.ignore(1);
00079
00080 fin >> nevents;
00081
00082 if(nevents <= 0){
00083 cout << " SETUP ERROR: number of events <= 0!" << endl;
00084 nevents = 1;
00085 }
00086
00087 continue;
00088 }
00089
00090 // 'O'UTPUTFILE or 'o'utputfile specifies the output filename
00091 if(fin.peek() == 'o' || fin.peek() == 'O'){
00092
00093 fin >> dummy;
00094 while(fin.peek() == ' ' || fin.peek() == '=')
00095 fin.ignore(1);
00096
00097 char newFile[256];
00098 fin >> newFile;
00099 fileName = newFile;
00100
00101 continue;
00102 }
00103
00104 // 'R'ADII or 'r'adii specifies the three detector radii: R0 R1 R2
00105 if(fin.peek() == 'r' || fin.peek() == 'R'){
00106
00107 fin >> dummy;
00108 while(fin.peek() == ' ' || fin.peek() == '=')
00109 fin.ignore(1);
00110
00111 fin >> r0 >> r1 >> r2 >> rmaxgen;
00112
00113 continue;
00114 }
00115
00116 // 'F'ASTNEUTRON or 'f'astneutron turns on/off fast neutrons
00117 if(fin.peek() == 'f' || fin.peek() == 'F'){
00118
00119 fin >> dummy;
00120 while(fin.peek() == ' ' || fin.peek() == '=')
00121 fin.ignore(1);
00122
00123 fin >> fastneutron;
00124
00125 if(fastneutron == "off"){
00126 fast = 0;
00127 }
00128 else{
00129 fast = 1;
00130 }
00131
00132 continue;
00133 }
00134
00135 // 'T'RIGGER or 't'rigger turns on/off trigger simulation
00136 if(fin.peek() == 't' || fin.peek() == 'T'){
00137
00138 fin >> dummy;
00139 while(fin.peek() == ' ' || fin.peek() == '=')
00140 fin.ignore(1);
00141
00142 fin >> trigsim;
00143
00144 if(trigsim == "off"){
00145 trigger = 0;
00146 }
00147 else{
00148 trigger = 1;
00149 }
00150
00151 continue;
00152 }
00153
00154 // skip K, P, and D
00155 if(fin.peek() == 'K' || fin.peek() == 'k' ||
00156 fin.peek() == 'P' || fin.peek() == 'p' ||
00157 fin.peek() == 'D' || fin.peek() == 'd'){
00158
00159 fin.getline(paramLine, 256);
00160 continue;
00161 }
00162
00163 // ignore extra whitespace
00164 if(fin.peek() == ' ' || fin.peek() == '\n'){
00165
00166 fin.ignore(1);
00167 continue;
00168 }
00169 }
00170 //
00171 cout << "ReactorFsim v0_0_4 by T. Bolton" << endl;
00172 cout << "===============================" << endl;
00173 cout << " " << nevents << " events" << endl;
00174 cout << " Output file: " << fileName << endl;
00175 cout << " R0 = " << r0 << ", R1 = " << r1 << ", R2 = " << r2
00176 << " (Rmaxgen = " << rmaxgen << ") cm" << endl;
00177 cout << " Fast neutrons are " << fastneutron << endl;
00178 cout << " Trigger simulation is " << trigsim << endl;
00179 cout << "===============================" << endl;
00180 //
00181 // init random number seed
00182 //
00183 int luxury = 2;
00184 int seed = 8796896;
00185 int k1=0;
00186 int k2=0;
00187 rluxgo_(luxury,seed,k1,k2);
00188 //
00189 // Paw setup.
00190 //
00191 hbook_init__();
00192 //
00193 int iostat;
00194 int ntLun=99;
00195 int ntBuf=1024;
00196 char* dirName = "TEST";
00197 char* chopt = "N";
00198 hropen_(ntLun,dirName,fileName,chopt,ntBuf,iostat,
00199 strlen(dirName),strlen(fileName),strlen(chopt));
00200 //
00201 // Set up simple detector models
00202 // Set up simple Ntuple and histogranms
00203 // See ReactorNtuple.hh for ntuple/histogram details.
00204 //
00205 ReactorDetector DetectorA;
00206 DetectorA.SetParam_FastNeutronOption(fast);
00207 DetectorA.SetParam_R0(r0);
00208 DetectorA.SetParam_R1(r1);
00209 DetectorA.SetParam_R2(r2);
00210 ReactorNtuple ModelA(1,"model A",dirName);
00211 ReactorTrigger TriggerA;
00212 //
00213 // event loop
00214 //
00215 for (int events = 0;events<nevents;events++){
00216 //
00217 // create neutrino event
00218 //
00219 ReactorEvent Event(nevents,rmaxgen);
00220 //
00221 // create fast detector simulation
00222 //
00223 DetectorA.LightsOut(Event);
00224 ModelA.Fill(Event,DetectorA);
00225 if(trigger) TriggerA.Trigger(Event,DetectorA);
00226 }
00227 //
00228 // close up paw
00229 //
00230 hldir_(" "," ",strlen(" "),strlen(" "));
00231 char dirName2[strlen(dirName)+2];
00232 *dirName2='\0';
00233 strcat(dirName2,"//");
00234 strcat(dirName2,dirName);
00235 hcdir_(dirName2," ",strlen(dirName2),strlen(" "));
00236 int outopt = 0;
00237 int icycle;
00238 hrout_(outopt,icycle," ",strlen(" "));
00239 hrend_(dirName,strlen(dirName));
00240 }
|
1.2.14 written by Dimitri van Heesch,
© 1997-2002