HARPO  5.1.1
 All Data Structures Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Macros Pages
HarpoAnalyse.cxx
Go to the documentation of this file.
1 //
2 // File HarpoAnalyse.cxx
3 //
12 #include "HarpoAnalyse.h"
13 #include "TSystem.h"
14 #include "TKey.h"
15 #include "TFile.h"
16 #include <cstdlib>
17 #include <cstring>
18 #include <iostream>
19 
20 ClassImp(HarpoAnalyse)
21 
22 HarpoHistManager* HarpoHistManager::fManager = 0;
23 
24 
26 {
27  fHistFile = NULL;
28 }
29 
31 {
32  if(!fManager) {
33  static HarpoHistManager manager;
34  fManager = &manager;
35  }
36  return fManager;
37 }
38 
39 
40 
41 TFile* HarpoHistManager::OpenHistFile(const char* ananame, HarpoRunHeader* rh)
42 {
43  Info("OpenHistFile","%s, %p",ananame,(void*)rh);
44  // TFile *fHistFile = NULL;
45  if(fHistFile==NULL){
46  Bool_t isZombie = kTRUE;
47  TString * hstFile = gHConfig->GetHistFile();
48  if ( hstFile != NULL ){
49  fHistFile = new TFile(hstFile->Data(),"UPDATE");
50  Info("OpenHistFile","Opened %s",fHistFile->GetName());
51  }
52  isZombie = fHistFile->IsZombie();
53 
54  std::cout << "fHistFile = " << fHistFile << std::endl;
55  if(fHistFile == NULL || isZombie){
56  std::cout << gHConfig->GetProgramName() << " " <<
57  "No Hist File name given, use default" << std::endl;
58  const char* dir = Form("$HARPO_ANA_DIR/%s",ananame);
59 
60  if(gSystem->AccessPathName(dir)) // If directory not available, write on local dir
61  hstFile = new TString(Form("%s%lli.root",ananame,gHConfig->GetRunNo()));
62  else
63  hstFile = new TString(Form("%s/%s%lli.root",dir,ananame,gHConfig->GetRunNo()));
64 
65  fHistFile = new TFile(hstFile->Data(),"RECREATE");
66  Info("OpenHistFile","Opened %s",fHistFile->GetName());
67  if(rh != NULL)
68  rh->Write("fRunHeader");
69  }
70 
71  if(rh != NULL){
72  Info("OpenHistFile","RunHeader: %p",(void*)rh);
73  fHistFile->Delete("fRunHeader;*");
74  fHistFile->Delete("fDetHeader*;*");
75  Info("OpenHistFile","RunHeader: %p",(void*)rh);
76  for (UInt_t ndet = 0; ndet < gkNDetectors; ndet++){
77  if (gHDetSet->isExist(ndet)){
78  HarpoDetHeader* hdr = rh->GetHeader(ndet);
79  std::cout << "Save Header " << ndet << " " << hdr << std::endl;
80  if(hdr) hdr->Write(Form("fDetHeader%d",ndet));
81  }
82  }
83  std::cout << "Save RunHeader " << rh->GetRun() << std::endl;
84  Info("OpenHistFile","RunHeader->GetRun() = %d",rh->GetRun());
85  rh->Write("fRunHeader");
86  if(gHConfig->GetRunNo()==0)
87  gHConfig->SetRunNo(rh->GetRun());
88  }
89  }
90 
91 
92  const char* dirname1 = Form("run%lli",gHConfig->GetRunNo());
93  const char* dirname2 = Form("%s/%s",dirname1,ananame);
94 
95  if(fHistFile->GetDirectory(dirname2) == NULL){
96  Info("OpenHistFile","make dir %s",dirname2);
97  fHistFile->mkdir(dirname2);
98  }else{
99  TDirectory* dir = fHistFile->GetDirectory(dirname2);
100  dir->Delete("*;*");
101  }
102  fHistFile->cd(dirname2);
103 
104  return fHistFile;
105 }
106 
107 
109 {
110  if(fHistFile){
111  Info("CloseHistFile","Closing %s",fHistFile->GetName());
112  fHistFile->Write();
113  fHistFile->Close();
114  }
115 }
116 
117 
118 
119 
120 
121 
122 
123 
125 {
126  fEvt = event;
127 }
128 
130 {
131 }
132 
134  {
135  nEvents++;
136  }
137 
140 {
141  if ( event->GetHeader()->GetEvAnaStatus() < hAnaOK )
142  return;
143 
144  Set(event);
145  process();
146  // delete fEvt;
147  // fEvt->Delete();
148 }
149 
150 TFile* HarpoAnalyse::OpenHistFile(const char* ananame)
151 {
152  Info("HarpoAnalyse::OpenHistFile","RunHeader->GetrRun() = %d",fRunHeader->GetRun());
154 }
A class hold HARPO run iformation.
TString * GetProgramName()
Get Program Name.
Definition: HarpoConfig.h:105
static HarpoHistManager * GetPointer()
Long64_t GetRunNo()
Set Run Number.
Definition: HarpoConfig.h:127
HarpoDetHeader * GetHeader(UInt_t ndet=XDCC)
void SetRunNo(Long64_t nrun)
Set Run Number.
Definition: HarpoConfig.h:87
A virtual class which define intrafece between HARPO Reader and Event Analysis code.
Definition: HarpoAnalyse.h:47
Int_t GetEvAnaStatus()
Get Event Analise status.
virtual void print()
Bool_t isExist(ULong_t det)
Detecror date exist //! Number of Real Detectors.
Definition: HarpoDetSet.h:33
A class hold HARPO run iformation.
static HarpoHistManager * fManager
Definition: HarpoAnalyse.h:37
virtual void process()=0
TFile * OpenHistFile(const char *ananame)
void Set(HarpoEvent *event)
virtual void ProcessEvent(HarpoEvent *event)
Set pointer to new event for analyse, anlyse event , and delete.
stop event analysis, but write event
HarpoEventHeader * GetHeader()
Definition: HarpoEvent.cxx:80
HarpoEvent * fEvt
Definition: HarpoAnalyse.h:70
ULong_t nEvents
Definition: HarpoAnalyse.h:75
A class store HARPO row event data and header. Provide access metods to the row event data...
Definition: HarpoEvent.h:29
HarpoRunHeader * fRunHeader
Definition: HarpoAnalyse.h:76
TString * GetHistFile()
Get Name of Histogram output file.
Definition: HarpoConfig.h:100
const ULong_t gkNDetectors
Definition: HarpoDet.h:14
HarpoConfig * gHConfig
R__EXTERN HarpoDetSet * gHDetSet
Definition: HarpoDetSet.h:71
TFile * OpenHistFile(const char *ananame, HarpoRunHeader *rh)