00001
00002
00003
00004 #include <assert.h>
00005 #include <string.h>
00006 #include "St_Module.h"
00007
00008
00009 ClassImp(St_Module)
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022
00023
00024
00025
00026
00027
00028
00029
00030
00031
00033
00034
00035 St_Module::St_Module()
00036 : fParams(0), fHeaders(0), fName(0), fIndex(0)
00037 {
00038 }
00039
00040 St_Module::St_Module(char *, TTable *,TTable *,TTable *,TTable *
00041 ,TTable *,TTable *,TTable *,TTable *
00042 ,TTable *,TTable *,TTable *,TTable *
00043 ,TTable *,TTable *,TTable *,TTable *
00044 ,TTable *,TTable *,TTable *,TTable *
00045 ,TTable *,TTable *,TTable *,TTable *
00046 ,TTable *,TTable *,TTable *,TTable *
00047 ,TTable *,TTable *,TTable *,TTable *
00048 ,TTable *,TTable *,TTable *,TTable *
00049 ,TTable *,TTable *
00050 )
00051 : fParams(0), fHeaders(0), fName(0), fIndex(38)
00052
00053 {}
00054
00055 St_Module::St_Module( TTable *f1,TTable *f2,TTable *f3,TTable *f4
00056 ,TTable *f5,TTable *f6,TTable *f7,TTable *f8
00057 ,TTable *f9,TTable *f10,TTable *f11,TTable *f12
00058 ,TTable *f13,TTable *f14,TTable *f15,TTable *f16
00059 ,TTable *f17,TTable *f18,TTable *f19,TTable *f20
00060 ,TTable *f21,TTable *f22,TTable *f23,TTable *f24
00061 ,TTable *f25,TTable *f26,TTable *f27,TTable *f28
00062 ,TTable *f29,TTable *f30,TTable *f31,TTable *f32
00063 ,TTable *f33,TTable *f34,TTable *f35,TTable *f36
00064 ,TTable *f37,TTable *f38
00065 )
00066 : fParams(0), fHeaders(0), fName(0), fIndex(38)
00067 {
00068 SetAllParameters( f1, f2, f3, f4, f5, f6, f7, f8, f9,f10,f11,f12
00069 ,f13,f14,f15,f16,f17,f18,f19,f20,f21,f22,f23,f24
00070 ,f25,f26,f27,f28,f29,f30,f31,f32,f33,f34,f35,f36
00071 ,f37,f38
00072 );
00073 }
00074
00075 St_Module::~St_Module()
00076 {
00077 if (fHeaders) fHeaders->Delete();
00078 SafeDelete(fHeaders);
00079 SafeDelete(fParams);
00080 }
00081
00082 void St_Module::ClearParams()
00083 {
00084 if (fHeaders) {
00085 fHeaders->Delete();
00086 fParams->Clear();
00087 }
00088 }
00089
00090 void St_Module::SetAllParameters(TTable *f1,TTable *f2,TTable *f3,TTable *f4
00091 ,TTable *f5,TTable *f6,TTable *f7,TTable *f8
00092 ,TTable *f9,TTable *f10,TTable *f11,TTable *f12
00093 ,TTable *f13,TTable *f14,TTable *f15,TTable *f16
00094 ,TTable *f17,TTable *f18,TTable *f19,TTable *f20
00095 ,TTable *f21,TTable *f22,TTable *f23,TTable *f24
00096 ,TTable *f25,TTable *f26,TTable *f27,TTable *f28
00097 ,TTable *f29,TTable *f30,TTable *f31,TTable *f32
00098 ,TTable *f33,TTable *f34,TTable *f35,TTable *f36
00099 ,TTable *f37,TTable *f38
00100 )
00101 {
00102 ClearParams();
00103 SetParameter(f38);
00104 SetParameter(f37);
00105 SetParameter(f36);
00106 SetParameter(f35);
00107 SetParameter(f34);
00108 SetParameter(f33);
00109 SetParameter(f32);
00110 SetParameter(f31);
00111 SetParameter(f30);
00112 SetParameter(f29);
00113 SetParameter(f28);
00114 SetParameter(f27);
00115 SetParameter(f26);
00116 SetParameter(f25);
00117 SetParameter(f24);
00118 SetParameter(f23);
00119 SetParameter(f22);
00120 SetParameter(f21);
00121 SetParameter(f20);
00122 SetParameter(f19);
00123 SetParameter(f18);
00124 SetParameter(f17);
00125 SetParameter(f16);
00126 SetParameter(f15);
00127 SetParameter(f14);
00128 SetParameter(f13);
00129 SetParameter(f12);
00130 SetParameter(f11);
00131 SetParameter(f10);
00132 SetParameter(f9);
00133 SetParameter(f8);
00134 SetParameter(f7);
00135 SetParameter(f6);
00136 SetParameter(f5);
00137 SetParameter(f4);
00138 SetParameter(f3);
00139 SetParameter(f2);
00140 SetParameter(f1);
00141 }
00142
00143
00144 void St_Module::SetParameter(TTable *f)
00145 {
00146 if (!fIndex) return;
00147 if (f) {
00148 if (!fParams) {
00149 fParams = new TObjArray(fIndex);
00150 fHeaders = new TObjArray(fIndex);
00151 }
00152 fParams->AddAt(f,fIndex-1);
00153 fHeaders->AddAt(new St_table_header(f),fIndex-1);
00154 }
00155 fIndex--;
00156 }
00157
00158 Int_t St_Module::CheckParameters(const Char_t *names[])
00159 {
00161
00162
00163
00164
00165
00166
00167
00168
00169
00170
00171
00172
00173
00175 Int_t errcode = 0;
00176 if (fParams) {
00177 TObjArray &thisParams = *fParams;
00178 Int_t thisSize = thisParams.GetSize();
00179 for (Int_t i=0;i<thisSize;i++)
00180 if (!thisParams[i]) {
00181
00182 errcode++;
00183 if (errcode == 1)
00184 fprintf(stderr, "\n \t ***** Error calling module <%s> *****\n"
00185 ,GetName());
00186 const Char_t *suffix[4]={"st","nd","d","th"};
00187 Int_t indx = i%10;
00188 if ( (10 < i && i < 20) || indx > 3 || indx == 0) indx = 4;
00189 indx--;
00190 const Char_t *name = names ? names[i] : "unknown" ;
00191 fprintf(stderr, "\t %i-%s table of <%s> has not been defined yet\n"
00192 ,i,suffix[indx],name);
00193 }
00194
00195 }
00196 return errcode;
00197 }
00198
00199 Int_t St_Module::CheckResults(Int_t res, const Char_t *names[])
00200 {
00201 Int_t errcode = 0;
00202 if (fParams) {
00203 Int_t thisSize = fParams->GetSize();
00204 for (Int_t i=0;i<thisSize;i++) {
00205 Bool_t bug = kFALSE;
00206
00207 table_head_st *h = GetHeader(i);
00208 TTable *table = GetTable(i);
00209 if (table) {
00210 assert(table->GetTableSize() == h->maxlen
00211 && table->GetRowSize() == h->rbytes
00212 && table == (TTable *)h->dsl_pointer);
00213 table->SetNRows(h->nok);
00214 if (h->nok > h->maxlen){
00215 res = kFALSE;
00216 errcode++;
00217 bug = kTRUE;
00218 }
00219 table->NaN();
00220 if (errcode && bug) {
00221 if (errcode == 1)
00222 fprintf(stderr,
00223 "\n \t ***** module <%s> returned the corrupted table %s *****\n \t * The number of the used rows more (or equal) of the allocated ones *\n"
00224 ,GetName(), table->GetName());
00225 const Char_t *suffix[4]={"st","nd","rd","th"};
00226 Int_t indx = i%10;
00227 if ( (10 < i && i < 20) || indx > 3 || indx == 0) indx = 4;
00228 indx--;
00229 const Char_t *name = names ? names[i] : "unknown" ;
00230 fprintf(stderr, "\t %i-%s <%s> %s has used %d with %d allocated\n"
00231 ,i+1,suffix[indx],name, table->GetName(),(int)h->nok,(int)h->maxlen);
00232 }
00233 }
00235 }
00236 }
00237 return res;
00238 }
00239
00240
00241 Int_t St_Module::ExecuteModule()
00242 {
00243
00244 Int_t errcode = 0;
00245 printf(" This \"%s\" module has ", GetName());
00246 if (fParams)
00247 {
00248 Int_t thisSize = fParams->GetSize();
00249 if (thisSize == 1)
00250 printf("only one parameter: ");
00251 else
00252 printf("%i parameters: ",thisSize);
00253 for (Int_t i=0;i<thisSize;i++)
00254 {
00255 if (fParams->At(i)) printf(" %lx ",*((ULong_t *)fParams->At(i)));
00256 else {
00257 errcode++;
00258
00259
00260 printf("%i parameter has not been defined yet\n"
00261 ,i+1);
00262 }
00263
00264 if (i < thisSize-1) printf(", ");
00265 }
00266 printf("; \n");
00268 }
00269 else
00270 printf(" NO parameters \n");
00271 return errcode;
00272 }
00273 #if 0
00274
00275 void St_Module::SetEntryName()
00276 {
00277 st_Name = new char[strlen(GetName()+10];
00278 strcpy(st_Name,GetName());
00279
00280 if (st_Name)
00281 {
00282 if (st_Type==kFortran)
00283 {
00284 #ifdef U_CASE
00285 strupr(st_Name);
00286 # ifdef CERNLIB_MSSTDCALL
00287 char buftmp[10];
00288 strcat(st_Name,"@");
00289 atoi(buftmp,fN*4,10);
00290 strcat(st_Name,buftmp);
00291 # endif
00292 #else //VP if defined(uscope)
00293 strcat(st_Name,"_");
00294 #endif
00295 }
00296 }
00297 SetTitle(st_Name);
00298 }
00299 #endif
00300
00301 Int_t St_Module::InvokeModule(TTable *f1,TTable *f2,TTable *f3,TTable *f4,
00302 TTable *f5,TTable *f6,TTable *f7,TTable *f8,
00303 TTable *f9,TTable *f10,TTable *f11,TTable *f12,
00304 TTable *f13,TTable *f14,TTable *f15,TTable *f16,
00305 TTable *f17,TTable *f18,TTable *f19,TTable *f20
00306 ,TTable *f21,TTable *f22,TTable *f23,TTable *f24,
00307 TTable *f25,TTable *f26,TTable *f27,TTable *f28,
00308 TTable *f29,TTable *f30,TTable *f31,TTable *f32,
00309 TTable *f33,TTable *f34,TTable *f35,TTable *f36,
00310 TTable *f37,TTable *f38
00311 )
00312 {
00313 fIndex = 38;
00314 SetAllParameters( f1, f2, f3, f4, f5, f6, f7, f8, f9,f10,f11,f12
00315 ,f13,f14,f15,f16,f17,f18,f19,f20,f21,f22,f23,f24,
00316 f25,f26,f27,f28,f29,f30,f31,f32,f33,f34,f35,f36,
00317 f37,f38
00318 );
00319 return ExecuteModule();
00320 }
00321 void St_Module::Streamer(TBuffer &)
00322 { assert(0);}
00323
00324
00325
00326
00327
00328
00329
00330
00331
00332
00333
00334
00335
00336
00337
00338
00339
00340
00341
00342
00343
00344
00345
00346
00347
00348
00349
00350
00351
00352
00353
00354
00355
00356
00357
00358
00359
00360
00361
00362
00363
00364
00365
00366
00367
00368
00369
00370
00371