00001
00007 #ifndef STAR_StMaker
00008 #define STAR_StMaker
00009
00010 #include <assert.h>
00011 #include "Stypes.h"
00012 #include "TDataSet.h"
00013 #include "TDataSetIter.h"
00014 #include "TObjectSet.h"
00015 #include "TClass.h"
00016 #include "TMath.h"
00017 #include "TString.h"
00018 #include "TDatime.h"
00019 #include "TH1.h"
00020 #include "TFile.h"
00021 #include "StEvtHddr.h"
00022 #ifndef ROOT_TClonesArray
00023 #include "TClonesArray.h"
00024 #endif
00025 #include "TStopwatch.h"
00026 #include "StMessMgr.h"
00027
00028 #ifndef __CINT__
00029 #if ROOT_VERSION_CODE >= ROOT_VERSION(3,05,04)
00030 typedef TDataSet::EDataSetPass EDataSetPass;
00031 #endif
00032 #endif
00033
00034 class TList;
00035 class TBrowser;
00036 class TChain;
00037 class TTree;
00038 class TTable;
00039 class StMemStat;
00040 class StEvtHddr;
00041 class TAttr;
00042
00043 class StTurnLogger;
00044
00045 class StTestMaker;
00046 class StChainOpt;
00047
00048 struct DbAlias_t {
00049 const char *tag;
00050 Int_t date;
00051 Int_t time;
00052 const char *geometry;
00053 const char *comment;
00054 };
00055
00056
00057 class StMaker : public TDataSet{
00058
00059 public:
00060 typedef enum {kNormal, kDebug} EDebugLevel;
00061 enum {kSTAFCV_BAD, kSTAFCV_OK, kSTAFCV_ERR=2, kSTAFCV_FATAL=3} EModule_return_Status;
00062 enum EMakerStatus {kInitBeg = 1, kInitEnd = 2,
00063 kMakeBeg = 3, kCleaBeg = 4,
00064 kFiniBeg = 5, kFiniEnd = 6,
00065 kActive = 7};
00066 protected:
00067
00068 TDataSet *m_DataSet;
00069 TDataSet *m_ConstSet;
00070 TDataSet *m_GarbSet;
00071 TDataSet *m_Inputs;
00072 TDataSet *m_Ouputs;
00073 TDataSet *m_Runco;
00074 TList *m_Histograms;
00075 static StMaker *fgTopChain;
00076 static StMaker *fgStChain;
00077 static StMaker *fgFailedMaker;
00078 static StTestMaker *fgTestMaker;
00079 static Int_t fgTallyMaker[kStFatal+1];
00080 Int_t fTallyMaker[kStFatal+1];
00081 Int_t m_Mode;
00082 Int_t m_Number;
00083 Int_t m_LastRun;
00084 Int_t m_DebugLevel;
00085 Int_t m_MakeReturn;
00086 TStopwatch m_Timer;
00087 StMemStat *fMemStatMake;
00088 StMemStat *fMemStatClear;
00089 Int_t fStatus;
00090 mutable StMessMgr *fLogger;
00091 mutable StTurnLogger *fLoggerHold;
00092 protected:
00093
00094 inline StMessMgr *GetLogger() const {return fLogger;}
00095 public:
00096
00098
00099 StMaker(const char *name="",const char *dummy=0);
00100 virtual ~StMaker();
00101 virtual Int_t IsChain() const {return 0;}
00102
00103
00105 virtual void Clear(Option_t *option="");
00106 virtual Int_t InitRun(Int_t runumber);
00107 virtual Int_t Init();
00108 virtual void StartMaker();
00109 virtual Int_t Make();
00110 virtual Int_t IMake(Int_t number){SetNumber(number);return Make();};
00111 virtual void EndMaker (Int_t ierr);
00112 virtual Int_t Finish();
00113 virtual Int_t FinishRun(Int_t oldrunumber);
00114
00115
00116 virtual void FatalErr(Int_t Ierr, const char *Com);
00117 virtual void PrintInfo();
00118 virtual void NotifyMe(const char *,const void *){}
00119 virtual void AddMaker (StMaker *mk);
00120 #if 0
00121 virtual void MakeDoc(const TString &stardir="$(STAR)",const TString &outdir="$(STAR)/StRoot/html",Bool_t baseClasses=kTRUE);
00122 #else
00123 virtual void MakeDoc(const TString &,const TString &,Bool_t ) {}
00124 #endif
00126 virtual void AddData (TDataSet *data,const char *dir=".data");
00127 virtual TDataSet *AddObj (TObject *obj ,const char *dir, int owner=1);
00128 virtual TDataSet *ToWhiteBoard(const char *name, void *dat);
00129 virtual TDataSet *ToWhiteBoard(const char *name, void *dat, void *del);
00130 virtual TDataSet *ToWhiteBoard(const char *name, TObject *dat, Int_t owner);
00131
00132 virtual TDataSet *ToWhiteConst(const char *name, TObject *dat);
00133 virtual TDataSet *ToWhiteConst(const char *name, void *dat);
00134
00135
00136 virtual TDataSet *WhiteBoard (const char *name, void *v=0) const;
00137
00138 virtual Int_t Skip(Int_t nskip);
00139
00140 virtual void AddConst(TDataSet *data=0){AddData(data,".const");}
00141 virtual void AddHist(TH1 *h,const char *dir=0);
00142 virtual void AddGarb (TDataSet *data=0){AddData(data,".garb");};
00143 virtual void AddRunco (TDataSet *data=0){AddData(data,".runco");};
00144 virtual void AddRunco (Double_t par,const char *name,const char *comment);
00145 void AddRunCont (TDataSet *data=0){AddRunco(data);};
00146 virtual TList *GetHistList() const {return (TList*)GetDirObj(".hist");};
00147 virtual TH1 *GetHist(const char *histName) const {TList *l=GetHistList(); return l?(TH1*)l->FindObject(histName):(TH1*)0;};
00148 virtual StMaker *cd(){StMaker *ret = fgStChain; fgStChain=this; return ret;};
00149 virtual StMaker *Cd(){return cd();};
00150 static StMaker *New(const char *classname, const char *name="", void *title=0);
00151
00152
00154 virtual Int_t GetNumber() const ;
00155 virtual void SetNumber(Int_t number) ;
00156 static StMaker *GetTopChain(){return fgTopChain;}
00157 static StMaker *GetChain(){return fgStChain;}
00158 static StMaker *GetFailedMaker(){return fgFailedMaker;}
00159 virtual StMaker *GetParentChain() const;
00160 virtual Int_t GetIventNumber() const ;
00161 virtual void SetIventNumber(Int_t iv);
00162 virtual Int_t GetEventNumber() const ;
00163 virtual Int_t GetRunNumber() const ;
00164 virtual const TDatime &GetDateTime() const;
00165 virtual const TDatime &GetDBTime() const;
00166 virtual void SetDateTime(Int_t idat,Int_t itim);
00167 virtual StEvtHddr *GetEvtHddr() const;
00168 virtual Int_t GetDate() const ;
00169 virtual Int_t GetTime() const ;
00170 virtual const char *GetEventType() const ;
00171
00172
00173
00174 virtual TDataSet *GetData(const char *name, const char *dir=".data") const;
00175 virtual TDataSet *GetDataSet (const char *logInput) const {return FindDataSet(logInput);}
00176 virtual TDataSet * DataSet (const char *logInput) const
00177 {return GetDataSet(logInput);};
00178 virtual TDataSet *GetInputDS (const char *logInput) const
00179 {return GetDataSet(logInput);};
00180
00181 virtual TDataSet *GetDataBase(const char *logInput,const TDatime *td=0);
00182 virtual TDataSet *GetInputDB (const char *logInput)
00183 {return GetDataBase(logInput);};
00184
00185
00186 virtual Int_t GetDebug() const {return m_DebugLevel;}
00187 virtual Int_t Debug() const {return GetDebug();};
00188 virtual Int_t GetMakeReturn() const {return m_MakeReturn;}
00189 virtual TList *Histograms() const {return GetHistList();}
00190 virtual TString GetAlias (const char *log, const char *dir=".aliases") const ;
00191 virtual TString GetInput (const char *log) const {return GetAlias(log);};
00192 virtual TString GetOutput(const char *log) const {return GetAlias(log,".aliases");};
00193 virtual TList *GetMakeList() const ;
00194 virtual StMaker *GetParentMaker () const;
00195 virtual StMaker *GetMaker (const char *mkname);
00196 virtual StMaker *GetMakerInheritsFrom (const char *mktype) const;
00197 virtual Bool_t IsActive() {return TestBIT(kActive);}
00198 virtual StMaker *Maker (const char *mkname){return GetMaker (mkname);};
00199
00200
00202 virtual void SetBIT(EMakerStatus k) {SETBIT(fStatus,k);}
00203 virtual void ResetBIT(EMakerStatus k) {CLRBIT(fStatus,k);}
00204 virtual Bool_t TestBIT(EMakerStatus k) {return TESTBIT(fStatus,k);}
00206 virtual void SetActive(Bool_t k=kTRUE) {if(k) SetBIT(kActive); else ResetBIT(kActive);}
00207 virtual void SetDebug(Int_t l=1);
00208 virtual void SetDEBUG(Int_t l=1);
00209 virtual void SetFlavor(const char *flav,const char *tabname);
00210 virtual void SetMakeReturn(Int_t ret){m_MakeReturn=ret;}
00211 virtual void SetAlias(const char *log,const char *act,const char *dir=".aliases");
00212 virtual void AddAlias(const char *log,const char *act,const char *dir=".aliases");
00213 virtual void SetInput(const char *log,const char *act){SetAlias(log,act);};
00214 virtual void SetOutput(const char *log,const char *act){SetAlias(log,act,".aliases");};
00215 virtual void SetOutput(const char *log,TDataSet *ds);
00216 virtual void SetOutput(TDataSet *ds){SetOutput(0,ds);};
00217 virtual void SetOutputAll(TDataSet *ds,Int_t level=1);
00218 virtual void SetMode(Int_t mode=0) {m_Mode=mode;}
00219 virtual void SetNotify(const char *about,StMaker *mk);
00220 virtual Int_t GetMode() { return m_Mode;}
00221 virtual Int_t GetDebug(){ return m_DebugLevel;}
00222 virtual const StChainOpt *GetChainOpt() const;
00223 virtual TFile *GetTFile() const;
00224
00225 virtual void NotifyEm(const char *about,const void *ptr);
00226
00227 virtual Double_t RealTime(){ return m_Timer.RealTime();}
00228 virtual Double_t CpuTime() { return m_Timer.CpuTime();}
00229 virtual void StartTimer(Bool_t reset = kFALSE){m_Timer.Start(reset);}
00230 virtual void StopTimer(){m_Timer.Stop();}
00231 virtual void PrintTimer(Option_t *option="");
00232 virtual void PrintTotalTime(){}
00234 virtual const char *GetName() const;
00235
00237 static StMaker *GetMaker(const TDataSet *ds) ;
00238 static EDataSetPass ClearDS (TDataSet* ds,void *user );
00239 static const char *RetCodeAsString(Int_t kode);
00240 static Int_t AliasDate(const char *alias);
00241 static Int_t AliasTime(const char *alias);
00242 static const char *AliasGeometry(const char *alias);
00243 static const DbAlias_t *GetDbAliases();
00244 static void SetTestMaker(StTestMaker *mk) {fgTestMaker=mk;}
00245
00246 TObject *GetDirObj(const char *dir) const;
00247 void SetDirObj(TObject *obj,const char *dir);
00248 virtual const char *GetCVS() const
00249 {static const char cvs[]="Tag $Name: $ $Id: StMaker.h,v 1.100 2014/08/06 11:42:55 jeromel Exp $ built " __DATE__ " " __TIME__ ; return cvs;}
00250 protected:
00251 virtual TDataSet *FindDataSet (const char *logInput,
00252 const StMaker *uppMk=0,
00253 const StMaker *dowMk=0) const ;
00254
00255 public:
00256 static Int_t Cleanup(TDataSet *&ds);
00257 static void lsMakers(const StMaker *top);
00258
00259 private:
00260 TAttr *m_Attr;
00263 public:
00264 Int_t SetAttr(const char *key,const char *val,const char *to=".");
00265 Int_t SetAttr(const char *key,Int_t val,const char *to=".");
00266 Int_t SetAttr(const char *key,UInt_t val,const char *to=".");
00267 Int_t SetAttr(const char *key,Double_t val,const char *to=".");
00268 Int_t SetAttr(const StMaker *mk);
00269 Int_t RemAttr(const char *key, const char *to=".")
00270 {return SetAttr(key,".remove",to);}
00271 const TAttr *GetAttr() const {return m_Attr;}
00272 Int_t IAttr(const char *key) const;
00273 UInt_t UAttr(const char *key) const;
00274 Double_t DAttr(const char *key) const;
00275 const char *SAttr(const char *key) const;
00276 void PrintAttr() const;
00277 ClassDef(StMaker, 0)
00278 };
00279
00280 class StMakerIter
00281 {
00282 public:
00283 StMakerIter(const StMaker *mk, Int_t second = 0);
00284 ~StMakerIter();
00285 StMaker *NextMaker();
00286 StMaker *GetMaker () const {return (StMaker *)fMaker;}
00287 private:
00288 Int_t fState;
00289 Int_t fSecond;
00290 const StMaker *fMaker;
00291 StMakerIter *fMakerIter;
00292 const TDataSet *fItWas;
00293 TDataSetIter *fIter;
00294 };
00295 class StTestMaker : public StMaker {
00296 public:
00298
00299 StTestMaker(const char *name="");
00300 virtual ~StTestMaker(){};
00301 virtual void SetNext(StMaker *mk);
00302 virtual void Print(const char *opt="") const;
00303 protected:
00304
00305 StMaker *fNext;
00306 StMaker *fLast;
00307
00308 ClassDef(StTestMaker,0)
00309 };
00310 #endif
00311
00312
00313
00314
00315
00316
00317
00318
00319
00320
00321
00322
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
00372
00373
00374
00375
00376
00377
00378
00379
00380
00381
00382
00383
00384
00385
00386
00387
00388
00389
00390
00391
00392
00393
00394
00395
00396
00397
00398
00399
00400
00401
00402
00403
00404
00405
00406
00407
00408
00409
00410
00411
00412
00413
00414
00415
00416
00417
00418
00419
00420
00421
00422
00423
00424
00425
00426
00427
00428
00429
00430
00431
00432
00433
00434
00435
00436
00437
00438
00439
00440
00441
00442
00443
00444
00445
00446
00447
00448
00449
00450
00451
00452
00453
00454
00455
00456
00457
00458
00459
00460
00461
00462
00463
00464
00465
00466
00467
00468
00469
00470
00471
00472
00473
00474
00475
00476
00477
00478
00479
00480
00481
00482
00483
00484
00485
00486
00487
00488
00489
00490
00491
00492
00493
00494
00495
00496
00497
00498
00499
00500
00501
00502
00503
00504
00505
00506
00507
00508
00509
00510
00511
00512
00513
00514
00515
00516
00517
00518
00519
00520
00521
00522
00523
00524
00525
00526
00527
00528
00529
00530
00531
00532
00533
00534
00535
00536
00537
00538
00539
00540
00541
00542
00543
00544
00545
00546
00547
00548
00549
00550
00551
00552
00553
00554
00555
00556
00557
00558
00559
00560
00561
00562
00563
00564
00565
00566
00567
00568
00569
00570
00571
00572
00573
00574
00575
00576
00577
00578
00579
00580
00581
00582
00583
00584