Pluto v6.3.0
Loading...
Searching...
No Matches
PBatch.h
Go to the documentation of this file.
1// Author: I. Froehlich
2// Written: 14.02.2008
3//
4
5#ifndef _PBATCH_H_
6#define _PBATCH_H_
7
8#include "TInterpreter.h"
9#include "TMethodCall.h"
10#include "TMethodArg.h"
11
12#include "PFormula.h"
13#include "PValues.h"
14#include "PParticle.h"
15
16#include "TROOT.h"
17#include "TTree.h"
18#include "TH1.h"
19#include "TH2.h"
20#include "TH3.h"
21#include "TGraph.h"
22#include "TGraph2D.h"
23
24#include <iostream>
25#include "PDefines.h"
26
27using namespace std;
28
29#define MAX_COMMAND_POINTER 1000
30#define MAX_COMMAND_TMETHODS 100
31#define MAX_COMMAND_OPTIONS 10
32#define MAX_STACK_GOSUB 20
33#define MAX_READLINE_ARGS 20
34
35
36#define IS_OBJECT 1
37#define IS_DOUBLE 2
38
39#define kFOREACH 2
40#define kGOTO 4
41#define kFOREACHEND 8
42#define kUPDATE 16
43#define kEOF 32
44#define kPUSH 64
45#define kPUSHBRANCH 128
46#define kELSE 256
47
48#define COMMAND_MASS '1'
49#define COMMAND_MASS2 '2'
50#define COMMAND_GETBEAM '3'
51#define COMMAND_GETTARGET '4'
52#define COMMAND_IF '?'
53#define COMMAND_ELSE '%'
54#define COMMAND_PLUS '+'
55#define COMMAND_MINUS '-'
56#define COMMAND_DIV '/'
57#define COMMAND_MULT '*'
58#define COMMAND_IS '='
59#define COMMAND_EQUAL '~'
60
61
62#define COMMAND_BOOST 'b'
63#define COMMAND_COS 'c'
64#define COMMAND_EVAL 'e'
65#define COMMAND_FABS 'f'
66#define COMMAND_INTERNAL 'i'
67#define COMMAND_PRINT 'p'
68#define COMMAND_ROT 'r'
69#define COMMAND_THETA 't'
70#define COMMAND_GETRANDOM 'v'
71#define COMMAND_GETRANDOMX 'x'
72#define COMMAND_GETRANDOMY 'y'
73
74
75#define COMMAND_ANGLE 'A'
76#define COMMAND_BRANCH 'B'
77#define COMMAND_P3E 'E'
78#define COMMAND_GOTO 'G'
79#define COMMAND_PUSH 'H'
80#define COMMAND_LABEL 'L'
81#define COMMAND_PFORMULA 'P'
82#define COMMAND_P3M 'Q'
83#define COMMAND_RETURN 'R'
84#define COMMAND_GOSUB 'S'
85#define COMMAND_PVALUE 'V'
86#define COMMAND_EXIT 'X'
87#define COMMAND_ECHO 'Y'
88#define COMMAND_READLINE 'Z'
89#define COMMAND_FORMORE '>'
90#define COMMAND_FOREACH '<'
91
92
93
94#define METHOD_RETURN_DOUBLE 1
95#define METHOD_RETURN_INT 2
96#define METHOD_RETURN_VOID 4
97#define METHOD_RETURN_PPARTICLE 8
98
99#define STREAM_MAX_POS "npar"
100#define STREAM_DEFAULT_POS "cpos"
101
102class PBatch;
105
106
107class PBatch : public TObject {
108
109 private:
110
111 Bool_t CheckAndSplit(char * arg, char delim, int *key1, int *key2);
112
113 Bool_t GetArguments(const char *a, /* const char *b, */
114 char *name, char **function, char **arg1, char **arg2);
115 Int_t CheckObjectType(Int_t key);
116 Int_t GetKey(char *name, int fl, int makeflag);
117 Int_t GetDelimPosition(char *arg, char delim, Int_t *yes=NULL);
118
119 Int_t GetMethodHandle(char *name, Int_t flag=0);
120 Int_t CrackMethodArgs(char *name);
121 Int_t arg1, arg2, arg3, arg4;
122
123 Int_t command_pointer, method_pointer, last_command_pointer;
124 TMethodCall *methods[MAX_COMMAND_TMETHODS];
125 char *method_name[MAX_COMMAND_TMETHODS];
126 Int_t methods_flags[MAX_COMMAND_TMETHODS],
127 methods_arg_flags[4][MAX_COMMAND_TMETHODS];
128
129 char lst_command[MAX_COMMAND_POINTER];
130 Int_t lst_command_int[MAX_COMMAND_POINTER];
131 Int_t flag_command_int[MAX_COMMAND_POINTER]; //=0: PParticle, =1: PUtilsRengine
132 Int_t lst_key_a[MAX_COMMAND_POINTER];
133 Int_t error_flag[MAX_COMMAND_POINTER];
135 Int_t lst_options_counter[MAX_COMMAND_POINTER];
136 PFormula *lst_form[MAX_COMMAND_POINTER];
137 // Int_t lst_key2[MAX_COMMAND_POINTER];
138 // Int_t lst_key3[MAX_COMMAND_POINTER];
139 // Int_t lst_key4[MAX_COMMAND_POINTER];
140
141 char *echo_string[MAX_COMMAND_POINTER];
142 char *readline_format_string[MAX_COMMAND_POINTER];
143 char *readline_string[MAX_COMMAND_POINTER];
144 Double_t **readline_args[MAX_COMMAND_POINTER];
145 int readline_num_args[MAX_COMMAND_POINTER];
146 char *varlist; //Allowed command for new variables
147
148 Int_t batch_particle_param, batch_value_param, pid_param, num_command_param, num_batch_param, num_bulk_param,
149 stream_default_pos_param, stream_max_pos_param, batch_update_param, batch_models_param;
150 Int_t batch_histogram_param;
151 Int_t num_batch,num_bulk, locnum_batch, locnum_bulk, locnum_command, locnum_old_command; //Position in the projector & reaction loop
152 Int_t locnum_branch; //current branch number
153 Int_t else_position;
154 Int_t current_position;
155
156 static Int_t stack_num_batch[MAX_STACK_GOSUB], stack_num_bulk[MAX_STACK_GOSUB],
157 stack_num_command[MAX_STACK_GOSUB], stack_num_pos;
158
159 void AddSpacePlaceholder(char *command);
160 void RemoveSpacePlaceholder(char *command);
161 Int_t EvalPFormula(char *command);
162
163
164 PValues pdummy;
165
166 TH1 *fHisto1;
167 TH2 *fHisto2;
168 TH3 *fHisto3;
169 TGraph *fGraph;
170 TGraph2D *fGraph2D;
171 Int_t is_readonly;
172 TH1D **slicesx, **slicesy;
173
174 FILE *file, *tmp_file;
175 PParticle *current_particle; //For push command
176
177 Double_t *x, *y, *z; //Axis values for _eval
178 Int_t eval_err_dumped;
179
180 Int_t status;
181
182 TTree *tree; //Pointer to storage tree
183 Int_t *size_branches;
184 Int_t *key_branches;
185
186
187 public:
188
189 //constructor
191
192 void Print(const Option_t *delme=NULL) const ;
193
194 Bool_t AddCommand(const char *command); //adds a command line to batch
195 Bool_t AddCommand(char command, int key_a, int key1, int key2, int key3=-1, int key4=-1, int key5=-1);
196
197 void SetPosition(Int_t my_num_batch, Int_t my_num_bulk) {
198 num_batch = my_num_batch;
199 num_bulk = my_num_bulk;
200 };
201 Int_t GetNewBatch() {return locnum_batch;};
202 Int_t GetNewBulk() {return locnum_bulk;};
203 Int_t GetNewCommand() {return locnum_command;};
204 Int_t GetOldCommand() {return locnum_old_command;};
205 Int_t GetBranch() {return locnum_branch;};
206 Int_t GetElsePosition() {return else_position;};
207 Int_t GetCurrentPosition() {return current_position;};
208
209 using TObject::Execute;
210 Int_t Execute(Int_t command_pos=0, Int_t retval=kFALSE);
211 Int_t ExecuteLastLine(void) {
212 Bool_t retval = Execute(last_command_pointer);
213 last_command_pointer = command_pointer;
214 return retval;
215 }
216 Bool_t Execute(const char *command) {
217 if (AddCommand(command)) {
218 return (Bool_t)ExecuteLastLine();
219 }
220 last_command_pointer = command_pointer;
221 Error("Execute", "Command not executed");
222 return kFALSE;
223 }
224
225 void SetToolObject(TH1 *Histo1) {
226 fHisto1 = Histo1;
227 }
228 void SetToolObject(TH2 *Histo2) {
229 fHisto2 = Histo2;
230 }
231 void SetToolObject(TH3 *Histo3) {
232 fHisto3 = Histo3;
233 }
234 void SetToolObject(TGraph *Graph) {
235 fGraph = Graph;
236 }
237 void SetToolObject(TGraph2D *Graph2D) {
238 fGraph2D = Graph2D;
239 }
240 void SetToolObject(FILE *f) {
241 file = f;
242 }
243 void SetToolObjectTmp(FILE *f) {
244 tmp_file = f;
245 }
246 Int_t IsReadonly() {
247 return is_readonly;
248 }
249
251 return current_particle;
252 }
253
254 Int_t Status(void) {
255 //workaround to check for a "[+]"
256 //=1 for such a case
257 //=0 in all other cases
258 return status;
259 }
260
261 void SetVarList(char *my_x) {
262 //Allowed commands for new variables
263 //Format must be "a;b;c;" with trailing ;'s
264 //If NULL don't care!
265 varlist = my_x;
266 };
267
268 void ReplaceAll(TString *op, const char *oldstring, const char *newstring);
269
270 void SetTree(TTree *my_tree) {tree = my_tree;};
271 TTree *GetTree(void) {return tree;};
272
273 void SetSizeBranches(Int_t *my_size_branches) {size_branches = my_size_branches;};
274 void SetKeysBranches(Int_t *my_key_branches) {key_branches = my_key_branches;};
275
276 ClassDef(PBatch, 0) //Batch commands
277};
278
279#endif
PBatch * makeGlobalBatch()
PBatch & fBatch()
#define MAX_COMMAND_POINTER
Definition PBatch.h:29
#define MAX_COMMAND_OPTIONS
Definition PBatch.h:31
#define MAX_STACK_GOSUB
Definition PBatch.h:32
#define MAX_COMMAND_TMETHODS
Definition PBatch.h:30
TFile * f
Definition analyze_g12C.C:8
input AddCommand("myeta = P3M(0.,0.,0.,eta.mass)")
void SetToolObject(FILE *f)
Definition PBatch.h:240
void SetTree(TTree *my_tree)
Definition PBatch.h:270
void SetPosition(Int_t my_num_batch, Int_t my_num_bulk)
Definition PBatch.h:197
void SetVarList(char *my_x)
Definition PBatch.h:261
void ReplaceAll(TString *op, const char *oldstring, const char *newstring)
void SetSizeBranches(Int_t *my_size_branches)
Definition PBatch.h:273
void SetKeysBranches(Int_t *my_key_branches)
Definition PBatch.h:274
void SetToolObject(TH3 *Histo3)
Definition PBatch.h:231
void SetToolObjectTmp(FILE *f)
Definition PBatch.h:243
void SetToolObject(TH2 *Histo2)
Definition PBatch.h:228
Int_t GetBranch()
Definition PBatch.h:205
Bool_t Execute(const char *command)
Definition PBatch.h:216
void Print(const Option_t *delme=NULL) const
Bool_t AddCommand(const char *command)
Int_t GetNewBulk()
Definition PBatch.h:202
void SetToolObject(TGraph2D *Graph2D)
Definition PBatch.h:237
Int_t ExecuteLastLine(void)
Definition PBatch.h:211
PParticle * GetCurrentParticle(void)
Definition PBatch.h:250
Int_t GetNewBatch()
Definition PBatch.h:201
Int_t Status(void)
Definition PBatch.h:254
TTree * GetTree(void)
Definition PBatch.h:271
Int_t GetElsePosition()
Definition PBatch.h:206
Int_t Execute(Int_t command_pos=0, Int_t retval=kFALSE)
Int_t GetNewCommand()
Definition PBatch.h:203
Int_t IsReadonly()
Definition PBatch.h:246
void SetToolObject(TGraph *Graph)
Definition PBatch.h:234
Bool_t AddCommand(char command, int key_a, int key1, int key2, int key3=-1, int key4=-1, int key5=-1)
void SetToolObject(TH1 *Histo1)
Definition PBatch.h:225
Int_t GetCurrentPosition()
Definition PBatch.h:207
Int_t GetOldCommand()
Definition PBatch.h:204