FEDRA emulsion software from the OPERA Collaboration
EdbRun Class Reference

#include <EdbRun.h>

Inheritance diagram for EdbRun:
Collaboration diagram for EdbRun:

Public Member Functions

int AddAsciiFile (const char *fname, const char *objname)
 
void AddFrameAlign (Int_t frame1, Int_t frame2, Int_t view, Int_t area, Int_t side, Float_t dxglobal, Float_t dyglobal, Float_t dx, Float_t dy, Float_t z1, Float_t z2, Int_t n1tot, Int_t n2tot, Int_t n1, Int_t n2, Int_t nsg, Int_t nbg, Int_t flag)
 
void AddPinViewHeader (EdbViewHeader &h)
 
void AddView ()
 
void AddView (EdbView *view)
 
void AddViewAlign (Int_t view1, Int_t view2, Int_t area1, Int_t area2, Int_t side1, Int_t side2, Float_t dx, Float_t dy, Float_t dz, Int_t n1tot, Int_t n2tot, Int_t n1, Int_t n2, Int_t nsg, Int_t nbg, Int_t flag, EdbViewHeader &vh1, EdbViewHeader &vh2)
 
void AddViewMerge (Int_t view1, Int_t view2, Int_t area1, Int_t area2, Int_t side1, Int_t side2, Float_t dx, Float_t dy, Float_t dz, Int_t n1tot, Int_t n2tot, Int_t n1, Int_t n2, Int_t nsg, Int_t nbg, Int_t flag)
 
void Close ()
 
void Create (const char *fname)
 
 EdbRun ()
 
 EdbRun (const char *fname, const char *status="READ")
 
 EdbRun (EdbRun &run, const char *fname)
 
 EdbRun (int id, const char *status="READ", const char *path=".")
 
int ExtractAsciiFile (const char *fname, const char *objname)
 
void GeneratePredictions (int n)
 
int GetEntries () const
 
EdbViewGetEntry (int entry, int ih=1, int icl=0, int iseg=1, int itr=0, int ifr=0)
 
TClonesArray * GetEntryClusters (int entry) const
 
TObjArray * GetEntryFrames (int entry) const
 
EdbViewHeaderGetEntryHeader (int entry) const
 
int GetEntryNumberWithIndex (int event, int view) const
 
TClonesArray * GetEntrySegments (int entry) const
 
TClonesArray * GetEntryTracks (int entry) const
 
TFile * GetFile ()
 
TDatime * GetFinishTime () const
 
EdbRunHeaderGetHeader () const
 
EdbMarksSetGetMarks () const
 
TTree * GetPinViews () const
 
EdbPredictionDCGetPrediction (int ip)
 
EdbPredictionsBoxGetPredictions () const
 
int GetRunID () const
 
TDatime * GetStartTime () const
 
TTree * GetTree () const
 
EdbViewGetView () const
 
void Init ()
 
int Npredictions () const
 
void Open (const char *fname)
 
void OpenUpdate (const char *fname)
 
void Print () const
 
void PrintBranchesStatus () const
 
void PrintLog (const char *fname) const
 
void Save ()
 
void SaveViews ()
 
void SelectOpenMode (const char *fname, const char *status="READ")
 
void SetComment (const char *com)
 
void SetMarks (EdbMarksSet *marks)
 
void SetRunID (int id)
 
void SetTitle (const char *tit)
 
void SetView ()
 
void SetView (EdbView *view)
 
void TransformDC ()
 
virtual ~EdbRun ()
 

Public Attributes

EdbMarksSeteMarks
 

Private Attributes

AlignmentParFrame eFA
 
TFile * eFile
 
TTree * eFrameAlign
 
EdbRunHeadereHeader
 
TString ePath
 
TTree * ePinViews
 
EdbPredictionsBoxePredictions
 
EdbViewHeaderePVH
 
TTree * eTree
 
AlignmentParView eVA
 
EdbViewHeadereVH1
 
EdbViewHeadereVH2
 
EdbVieweView
 
TTree * eViewAlign
 
TTree * eViewMerge
 
AlignmentParView eVM
 

Constructor & Destructor Documentation

◆ EdbRun() [1/4]

EdbRun::EdbRun ( )

◆ EdbRun() [2/4]

EdbRun::EdbRun ( int  id,
const char *  status = "READ",
const char *  path = "." 
)
57 {
58  Init();
59 
60  eHeader = new EdbRunHeader(id);
61 
62  ePath = path;
63 
64  char fname[256]="";
65  sprintf(fname,"%s/run%4.4d.root",path,id);
66 
67  SelectOpenMode( fname, status );
68 }
Definition: EdbRunHeader.h:94
void SelectOpenMode(const char *fname, const char *status="READ")
Definition: EdbRun.cxx:164
TString ePath
Definition: EdbRun.h:84
void Init()
Definition: EdbRun.cxx:145
EdbRunHeader * eHeader
Definition: EdbRun.h:78
const char * fname
Definition: mc2raw.cxx:41

◆ EdbRun() [3/4]

EdbRun::EdbRun ( const char *  fname,
const char *  status = "READ" 
)
72 {
73  Init();
74 
75  eHeader = new EdbRunHeader(0);
76 
77  SelectOpenMode( fname, status );
78 }

◆ EdbRun() [4/4]

EdbRun::EdbRun ( EdbRun run,
const char *  fname 
)
82 {
83  Init();
84 
85  if(run.GetHeader())
86  eHeader = new EdbRunHeader(*(run.GetHeader()));
87  if(run.GetMarks())
88  eMarks = new EdbMarksSet(*(run.GetMarks()));
89  if(run.GetPredictions())
91  Log(3,"EdbRun::EdbRun","Run headers are copied");
92  SelectOpenMode( fname, "RECREATE" );
93 }
bool Log(int level, const char *location, const char *fmt,...)
Definition: EdbLog.cxx:75
Definition: EdbFiducial.h:88
Definition: EdbPrediction.h:71
EdbMarksSet * eMarks
Definition: EdbRun.h:100
EdbPredictionsBox * GetPredictions() const
Definition: EdbRun.h:118
EdbMarksSet * GetMarks() const
Definition: EdbRun.h:119
EdbRunHeader * GetHeader() const
Definition: EdbRun.h:137
EdbPredictionsBox * ePredictions
Definition: EdbRun.h:86
EdbRun * run
Definition: check_raw.C:38

◆ ~EdbRun()

EdbRun::~EdbRun ( )
virtual
97 {
98  //SafeDelete(eTree);
99 
100  SafeDelete(eFile);
101  SafeDelete(eHeader);
102  SafeDelete(ePredictions);
103  SafeDelete(eMarks);
104 
105  //SafeDelete(eView); // provocate crash in EdbRunAccess::CopyRawDataXY - to understand!
106 /*
107  if(ePVH)
108  SafeDelete(ePVH);
109  if(eVH1)
110  SafeDelete(eVH1);
111  if(eVH2)
112  SafeDelete(eVH2);
113 */
114 }
TFile * eFile
Definition: EdbRun.h:83

Member Function Documentation

◆ AddAsciiFile()

int EdbRun::AddAsciiFile ( const char *  fname,
const char *  objname 
)
620 {
621  // can be used for reading relativly small ascii files from fname and
622  // save into the current run with name objname as TObjString
623 
624  FILE *fp=fopen(fname,"r");
625  if (fp==NULL) {
626  printf("ERROR open file: %s n", fname); return(-1);
627  }else
628  printf( "Read Ascii file: %s\n", fname );
629  TObjString str;
630  char buf[256];
631  while( fgets(buf,256,fp)!=NULL ) str.String().Append(buf);
632  fclose(fp);
633  return str.Write(objname);
634 }
fclose(pFile)
#define NULL
Definition: nidaqmx.h:84

◆ AddFrameAlign()

void EdbRun::AddFrameAlign ( Int_t  frame1,
Int_t  frame2,
Int_t  view,
Int_t  area,
Int_t  side,
Float_t  dxglobal,
Float_t  dyglobal,
Float_t  dx,
Float_t  dy,
Float_t  z1,
Float_t  z2,
Int_t  n1tot,
Int_t  n2tot,
Int_t  n1,
Int_t  n2,
Int_t  nsg,
Int_t  nbg,
Int_t  flag 
)
415 {
416  if(!eFrameAlign) {
417  eFrameAlign = new TTree("FrameAlign","Neighbour frames offsets");
418  eFrameAlign->Branch("frpar",&eFA,"frame1/I:frame2/I:view/I:area/I:side/I:dxglobal/F:dyglobal/F:dx/F:dy/F:z1/F:z2/F:n1tot/I:n2tot/I:n1/I:n2/I:nsg/I:nbg/I:flag/I");
419  }
420  if(eFrameAlign) {
421  eFA.frame1=frame1; eFA.frame2=frame2;
422  eFA.view=view;
423  eFA.area=area;
424  eFA.side=side;
425  eFA.dxglobal=dxglobal;
426  eFA.dyglobal=dyglobal;
427  eFA.dx=dx; eFA.dy=dy;
428  eFA.z1=z1; eFA.z2=z2;
429  eFA.n1tot=n1tot; eFA.n2tot=n2tot;
430  eFA.n1=n1; eFA.n2=n2;
431  eFA.nsg=nsg; eFA.nbg=nbg;
432  eFA.flag=flag;
433  eFrameAlign->Fill();
434  }
435 }
AlignmentParFrame eFA
Definition: EdbRun.h:94
TTree * eFrameAlign
Definition: EdbRun.h:90
Int_t frame1
Definition: EdbRun.h:53
Float_t dyglobal
Definition: EdbRun.h:59
Int_t view
Definition: EdbRun.h:55
Float_t dx
Definition: EdbRun.h:60
Int_t n2tot
Definition: EdbRun.h:65
Int_t nsg
Definition: EdbRun.h:68
Float_t z2
Definition: EdbRun.h:63
Int_t n1
Definition: EdbRun.h:66
Float_t dy
Definition: EdbRun.h:61
Float_t dxglobal
Definition: EdbRun.h:58
Int_t flag
Definition: EdbRun.h:70
Int_t nbg
Definition: EdbRun.h:69
Int_t side
Definition: EdbRun.h:57
Int_t frame2
Definition: EdbRun.h:54
Float_t z1
Definition: EdbRun.h:62
Int_t n2
Definition: EdbRun.h:67
Int_t n1tot
Definition: EdbRun.h:64
Int_t area
Definition: EdbRun.h:56

◆ AddPinViewHeader()

void EdbRun::AddPinViewHeader ( EdbViewHeader h)
439 {
440  if(!ePinViews) {
441  ePinViews = new TTree("PinViews","Pinned Views");
442  ePinViews->Branch("headers","EdbViewHeader",&ePVH);
443  }
444  if(ePinViews) {
445  *ePVH=h;
446  ePinViews->Fill();
447  }
448 }
EdbViewHeader * ePVH
Definition: EdbRun.h:95
TTree * ePinViews
Definition: EdbRun.h:91

◆ AddView() [1/2]

void EdbRun::AddView ( )
333 {
334  AddView(eView);
335 }
EdbView * eView
Definition: EdbRun.h:80
void AddView()
Definition: EdbRun.cxx:332

◆ AddView() [2/2]

void EdbRun::AddView ( EdbView view)
339 {
340 
341  if( view != eView ) {
342  Log(3," EdbRun::AddView","WARNING: view!=eView - inefficient cycle!");
343  SetView(view);
344  }
345 
346  EdbViewHeader *viewHeader = eView->GetHeader();
347 
348  //Long_t oldtime = eView->GetLastSystemTime();
349  //Long_t newtime = gSystem->Now();
350  //viewHeader->SetTime( (Int_t)((ULong_t)newtime-(ULong_t)oldtime) );
351  //eView->SetLastSystemTime(newtime);
352 
353  viewHeader->SetNclusters(eView->Nclusters());
354  viewHeader->SetNsegments(eView->Nsegments());
355  viewHeader->SetEvent( GetHeader()->GetFlag(8) );
356  viewHeader->SetTrack( GetHeader()->GetFlag(9) );
357 
358  eTree->Fill();
359  eView->Clear();
360 }
void SetView()
Definition: EdbRun.cxx:312
TTree * eTree
Definition: EdbRun.h:82
Definition: EdbView.h:26
void SetTrack(int track)
Definition: EdbView.h:107
void SetNsegments(int nseg)
Definition: EdbView.h:86
void SetEvent(int event)
Definition: EdbView.h:108
void SetNclusters(int nclu)
Definition: EdbView.h:85
EdbViewHeader * GetHeader() const
Definition: EdbView.h:163
Int_t Nsegments() const
Definition: EdbView.h:216
Int_t Nclusters() const
Definition: EdbView.h:215
void Clear()
Definition: EdbView.cxx:79

◆ AddViewAlign()

void EdbRun::AddViewAlign ( Int_t  view1,
Int_t  view2,
Int_t  area1,
Int_t  area2,
Int_t  side1,
Int_t  side2,
Float_t  dx,
Float_t  dy,
Float_t  dz,
Int_t  n1tot,
Int_t  n2tot,
Int_t  n1,
Int_t  n2,
Int_t  nsg,
Int_t  nbg,
Int_t  flag,
EdbViewHeader vh1,
EdbViewHeader vh2 
)
389 {
390  if(!eViewAlign) {
391  eViewAlign = new TTree("ViewAlign","Alignment offsets");
392  eViewAlign->Branch("alpar",&eVA,"view1/I:view2/I:area1/I:area2/I:side1/I:side2/I:dx/F:dy/F:dz/F:n1tot/I:n2tot/I:n1/I:n2/I:nsg/I:nbg/I:flag/I");
393  eViewAlign->Branch("vh1","EdbViewHeader",&eVH1);
394  eViewAlign->Branch("vh2","EdbViewHeader",&eVH2);
395  }
396  if(eViewAlign) {
397  eVA.view1=view1; eVA.view2=view2;
398  eVA.area1=area1; eVA.area2=area2;
399  eVA.side1=side1; eVA.side2=side2;
400  eVA.dx=dx; eVA.dy=dy; eVA.dz=dz;
401  eVA.n1tot=n1tot; eVA.n2tot=n2tot;
402  eVA.n1=n1; eVA.n2=n2;
403  eVA.nsg=nsg; eVA.nbg=nbg;
404  eVA.flag=flag;
405  *eVH1=vh1;
406  *eVH2=vh2;
407  eViewAlign->Fill();
408  }
409 }
brick dz
Definition: RecDispMC.C:107
EdbViewHeader * eVH1
Definition: EdbRun.h:96
AlignmentParView eVA
Definition: EdbRun.h:93
EdbViewHeader * eVH2
Definition: EdbRun.h:97
TTree * eViewAlign
Definition: EdbRun.h:89
Float_t dy
Definition: EdbRun.h:40
Int_t n1
Definition: EdbRun.h:44
Int_t n2tot
Definition: EdbRun.h:43
Int_t side1
Definition: EdbRun.h:37
Float_t dz
Definition: EdbRun.h:41
Float_t dx
Definition: EdbRun.h:39
Int_t n1tot
Definition: EdbRun.h:42
Int_t nsg
Definition: EdbRun.h:46
Int_t view2
Definition: EdbRun.h:34
Int_t n2
Definition: EdbRun.h:45
Int_t flag
Definition: EdbRun.h:48
Int_t area2
Definition: EdbRun.h:36
Int_t side2
Definition: EdbRun.h:38
Int_t view1
Definition: EdbRun.h:33
Int_t area1
Definition: EdbRun.h:35
Int_t nbg
Definition: EdbRun.h:47

◆ AddViewMerge()

void EdbRun::AddViewMerge ( Int_t  view1,
Int_t  view2,
Int_t  area1,
Int_t  area2,
Int_t  side1,
Int_t  side2,
Float_t  dx,
Float_t  dy,
Float_t  dz,
Int_t  n1tot,
Int_t  n2tot,
Int_t  n1,
Int_t  n2,
Int_t  nsg,
Int_t  nbg,
Int_t  flag 
)
366 {
367  if(!eViewMerge) {
368  eViewMerge = new TTree("ViewMerge","Merging offsets");
369  eViewMerge->Branch("alpar",&eVM,"view1/I:view2/I:area1/I:area2/I:side1/I:side2/I:dx/F:dy/F:dz/F:n1tot/I:n2tot/I:n1/I:n2/I:nsg/I:nbg/I:flag/I");
370  }
371  if(eViewMerge) {
372  eVM.view1=view1; eVM.view2=view2;
373  eVM.area1=area1; eVM.area2=area2;
374  eVM.side1=side1; eVM.side2=side2;
375  eVM.dx=dx; eVM.dy=dy; eVM.dz=dz;
376  eVM.n1tot=n1tot; eVM.n2tot=n2tot;
377  eVM.n1=n1; eVM.n2=n2;
378  eVM.nsg=nsg; eVM.nbg=nbg;
379  eVM.flag=flag;
380  eViewMerge->Fill();
381  }
382 }
TTree * eViewMerge
Definition: EdbRun.h:88
AlignmentParView eVM
Definition: EdbRun.h:92

◆ Close()

void EdbRun::Close ( )
467 {
468  eFile = eTree->GetCurrentFile();
469  const char *status = eFile->GetOption();
470 
471  GetFile()->cd();
472  if(eHeader) eHeader->GetFinishTime()->Set();
473 
474  if( strcmp(status,"READ") ) { // file is in "write" mode
475  if( !strcmp(status,"CREATE") ) { // save header in CREATE mode only
476  Save();
477  }
478  if(eTree) eTree->Write();
479  if(eViewMerge) eViewMerge->Write();
480  if(eViewAlign) eViewAlign->Write();
481  if(eFrameAlign) eFrameAlign->Write();
482  if(ePinViews) ePinViews->Write();
483  }
484  eFile->Purge();
485  eFile->Close();
486 }
TDatime * GetFinishTime()
Definition: EdbRunHeader.h:144
TFile * GetFile()
Definition: EdbRun.h:148
void Save()
Definition: EdbRun.cxx:451

◆ Create()

void EdbRun::Create ( const char *  fname)
250 {
251  // Check if the file already exists
252  if (!gSystem->AccessPathName(fname, kFileExists)) {
253  Log(1, "EdbRun::Create", "WARNING: File %s already exists!", fname);
254 // return;
255  }
256  // Check if the directory exists and is writable
257  TString dirPath = gSystem->DirName(fname);
258  if (gSystem->AccessPathName(dirPath, kFileExists)) {
259  Log(1, "EdbRun::Create", "ERROR! Directory does not exist: %s", dirPath.Data());
260  return;
261  }
262  // Create the file (handles remote paths)
263  eFile = TFile::Open(fname, "RECREATE");
264  if (!eFile || eFile->IsZombie()) {
265  Log(1, "EdbRun::Create", "ERROR! Failed to open file: %s (IsZomby)", fname);
266  return;
267  }
268  // Initialize predictions and marks
270  if (!eMarks) eMarks = new EdbMarksSet();
271 
272  eFile->SetCompressionLevel(2);
273  // Create the tree
274  eTree = new TTree("Views", "Scanning Views data");
275  eTree->SetAutoSave(-100000000); // Autosave each 100MB
276  eTree->SetMaxTreeSize(512000000000LL); // Set 512GB file size limit
277  Log(3, "EdbRun::Create", "Set max tree size as: %lld", eTree->GetMaxTreeSize());
278 
279  // Create branches
280  TClonesArray *eClusters = eView->GetClusters();
281  TClonesArray *eSegments = eView->GetSegments();
282  TClonesArray *eTracks = eView->GetTracks();
283  TClonesArray *eFrames = eView->GetFrames();
284 
285  int savelevel = gErrorIgnoreLevel;
286  gErrorIgnoreLevel = kError;
287  eTree->Branch("clusters", &eClusters);
288  eTree->Branch("segments", &eSegments);
289  eTree->Branch("tracks", &eTracks);
290  eTree->Branch("frames", &eFrames);
291  eTree->Branch("headers", "EdbViewHeader", eView->GetHeaderAddr(), 32000, 99);
292  gErrorIgnoreLevel = savelevel;
293 
294  SetView();
295  Log(2, "EdbRun::Create", "Successfully created file: %s", fname);
296 }
TClonesArray * GetClusters() const
Definition: EdbView.h:164
TClonesArray * GetFrames() const
Definition: EdbView.h:167
TClonesArray * GetSegments() const
Definition: EdbView.h:165
void * GetHeaderAddr()
Definition: EdbView.h:169
TClonesArray * GetTracks() const
Definition: EdbView.h:166

◆ ExtractAsciiFile()

int EdbRun::ExtractAsciiFile ( const char *  fname,
const char *  objname 
)
638 {
639  FILE *fp=fopen(fname,"w");
640  if (fp==NULL) {
641  printf("ERROR open file: %s n", fname); return(-1);
642  }else
643  printf( "Write to Ascii file: %s\n", fname );
644  TObjString *str=(TObjString *)(eFile->Get(objname));
645  fprintf(fp,"%s",str->String().Data());
646  fclose(fp);
647  return str->String().Sizeof();
648 }

◆ GeneratePredictions()

void EdbRun::GeneratePredictions ( int  n)
667 {
669 
671 }
void Generate(int n)
Definition: EdbPrediction.cxx:193

◆ GetEntries()

int EdbRun::GetEntries ( ) const
inline
135 { return (Int_t)eTree->GetEntries(); }

◆ GetEntry()

EdbView * EdbRun::GetEntry ( int  entry,
int  ih = 1,
int  icl = 0,
int  iseg = 1,
int  itr = 0,
int  ifr = 0 
)
490 {
491  if(eView) eView->Clear();
492  else SetView();
493 
494  if( !eView->GetClusters() ) SetView();
495 
496  if(ih) GetEntryHeader( entry );
497  if(icl) GetEntryClusters( entry );
498  if(iseg) GetEntrySegments( entry );
499  if(itr) GetEntryTracks( entry );
500  if(ifr) GetEntryFrames( entry );
501 
502  return eView;
503 }
TLegendEntry * entry
Definition: Canv_SYSTEMATICS_ALLCOMBINED__RMSEnergy__vs__Energy__ELECTRON.C:130
TClonesArray * GetEntryTracks(int entry) const
Definition: EdbRun.cxx:506
TClonesArray * GetEntryClusters(int entry) const
Definition: EdbRun.cxx:534
TObjArray * GetEntryFrames(int entry) const
Definition: EdbRun.cxx:561
EdbViewHeader * GetEntryHeader(int entry) const
Definition: EdbRun.cxx:548
TClonesArray * GetEntrySegments(int entry) const
Definition: EdbRun.cxx:520

◆ GetEntryClusters()

TClonesArray * EdbRun::GetEntryClusters ( int  entry) const
535 {
536  TClonesArray *clusters = eView->GetClusters();
537  TBranchClones *clustersBranch = (TBranchClones*)(eTree->GetBranch("clusters"));
538  if(!clustersBranch) return 0;
539  //clustersBranch->SetAutoDelete( kTRUE );
540  clustersBranch->ResetReadEntry();
541  clustersBranch->SetAddress(&clusters);
542  clustersBranch->GetEntry(entry);
543 
544  return clusters;
545 }

◆ GetEntryFrames()

TObjArray * EdbRun::GetEntryFrames ( int  entry) const
562 {
563  TObjArray *frames = eView->GetFrames();
564  TBranch *framesBranch = eTree->GetBranch("frames");
565  if(!framesBranch) return 0;
566  framesBranch->SetAddress(&frames);
567  framesBranch->GetEntry(entry);
568 
569  return frames;
570 }

◆ GetEntryHeader()

EdbViewHeader * EdbRun::GetEntryHeader ( int  entry) const
549 {
550  EdbViewHeader *header = eView->GetHeader();
551  TBranch *headerBranch = eTree->GetBranch("headers");
552  if(!headerBranch) return 0;
553  headerBranch->SetAddress(&header);
554  headerBranch->GetEntry(entry);
555  // eTree->GetEntry(entry);
556 
557  return header;
558 }

◆ GetEntryNumberWithIndex()

int EdbRun::GetEntryNumberWithIndex ( int  event,
int  view 
) const
inline
151  { return eTree->GetEntryNumberWithIndex( event,view ); }
int event
Definition: shower_tr.C:25

◆ GetEntrySegments()

TClonesArray * EdbRun::GetEntrySegments ( int  entry) const
521 {
522  TClonesArray *segments = eView->GetSegments();
523  TBranchClones *segmentsBranch = (TBranchClones*)(eTree->GetBranch("segments"));
524  if(!segmentsBranch) return 0;
525 
526  segmentsBranch->ResetReadEntry();
527  segmentsBranch->SetAddress(&segments);
528  segmentsBranch->GetEntry(entry);
529 
530  return segments;
531 }

◆ GetEntryTracks()

TClonesArray * EdbRun::GetEntryTracks ( int  entry) const
507 {
508  TClonesArray *tracks=eView->GetTracks();
509  TBranchClones *tracksBranch = (TBranchClones*)(eTree->GetBranch("tracks"));
510  if(!tracksBranch) return 0;
511 
512  tracksBranch->ResetReadEntry();
513  tracksBranch->SetAddress(&tracks);
514  tracksBranch->GetEntry(entry);
515 
516  return tracks;
517 }
TTree * tracks
Definition: check_tr.C:19

◆ GetFile()

TFile* EdbRun::GetFile ( )
inline
148 { return eFile; }

◆ GetFinishTime()

TDatime* EdbRun::GetFinishTime ( ) const
inline
128 { return eHeader->GetFinishTime(); }

◆ GetHeader()

EdbRunHeader* EdbRun::GetHeader ( ) const
inline
137 { return eHeader; }

◆ GetMarks()

EdbMarksSet* EdbRun::GetMarks ( ) const
inline
119 { return eMarks; }

◆ GetPinViews()

TTree* EdbRun::GetPinViews ( ) const
inline
113 {return ePinViews;}

◆ GetPrediction()

EdbPredictionDC* EdbRun::GetPrediction ( int  ip)
inline
115 { return ePredictions->GetPrediction(ip); }
EdbPredictionDC * GetPrediction(int i) const
Definition: EdbPrediction.cxx:281

◆ GetPredictions()

EdbPredictionsBox* EdbRun::GetPredictions ( ) const
inline
118 { return ePredictions; }

◆ GetRunID()

int EdbRun::GetRunID ( ) const
inline
126 { return eHeader->GetRunID(); }
Int_t GetRunID() const
Definition: EdbRunHeader.h:141

◆ GetStartTime()

TDatime* EdbRun::GetStartTime ( ) const
inline
127 { return eHeader->GetStartTime(); }
TDatime * GetStartTime()
Definition: EdbRunHeader.h:143

◆ GetTree()

TTree* EdbRun::GetTree ( ) const
inline
112 {return eTree; }

◆ GetView()

EdbView* EdbRun::GetView ( ) const
inline
109 { return eView; }

◆ Init()

void EdbRun::Init ( void  )
146 {
147  eView = new EdbView(); //each run has his own view
148  eHeader = 0;
149  eTree = 0;
150  eFile = 0;
151  ePath = "";
152  ePredictions = 0;
153  eMarks = 0;
154  eViewMerge = 0;
155  eViewAlign = 0;
156  eFrameAlign = 0;
157  ePinViews = 0;
158  ePVH=new EdbViewHeader();
159  eVH1=new EdbViewHeader();
160  eVH2=new EdbViewHeader();
161 }
Definition: EdbView.h:134

◆ Npredictions()

int EdbRun::Npredictions ( ) const
inline
116 { return ePredictions->N(); }
Int_t N() const
Definition: EdbPrediction.h:92

◆ Open()

void EdbRun::Open ( const char *  fname)
179 {
180  Log(3,"EdbRun::Open","Open an existing file %s for reading", fname);
181  eFile = TFile::Open(fname,"READ");
182  if (!eFile || eFile->IsZombie()) {
183  Log(1, "EdbRun::OpenUpdate", "ERROR! Failed to open file: %s", fname);
184  SafeDelete(eFile);
185  return;
186  }
187 
188  eTree = dynamic_cast<TTree*>(eFile->Get("Views"));
189  if (!eTree) {
190  Log(1, "EdbRun::OpenUpdate", "ERROR! 'Views' tree not found in file: %s", fname);
191  SafeDelete(eFile);
192  return;
193  }
194  eViewMerge = dynamic_cast<TTree*>(eFile->Get("ViewMerge"));
195  eViewAlign = dynamic_cast<TTree*>(eFile->Get("ViewAlign"));
196  eFrameAlign = dynamic_cast<TTree*>(eFile->Get("FrameAlign"));
197  ePinViews = dynamic_cast<TTree*>(eFile->Get("PinViews"));
198 
199  SetView();
200  SafeDelete(eHeader);
201  eHeader = dynamic_cast<EdbRunHeader*>(eFile->Get("RunHeader"));
202  SafeDelete(ePredictions);
203  ePredictions = dynamic_cast<EdbPredictionsBox*>(eFile->Get("Predictions"));
204  SafeDelete(eMarks);
205  eMarks = dynamic_cast<EdbMarksSet*>(eFile->Get("Marks"));
206 
207  if(gEDBDEBUGLEVEL>2) Print();
208 }
void Print() const
Definition: EdbRun.cxx:607
gEDBDEBUGLEVEL
Definition: energy.C:7

◆ OpenUpdate()

void EdbRun::OpenUpdate ( const char *  fname)
212 {
213  Log(3,"EdbRun::OpenUpdate","Open an existing file for update %s", fname);
214  eFile = TFile::Open(fname,"UPDATE");
215  if (!eFile || eFile->IsZombie()) {
216  Log(1, "EdbRun::OpenUpdate", "ERROR! Failed to open file: %s", fname);
217  SafeDelete(eFile);
218  return;
219  }
220 
221  eTree = dynamic_cast<TTree*>(eFile->Get("Views"));
222  if (!eTree) {
223  Log(1, "EdbRun::OpenUpdate", "ERROR! 'Views' tree not found in file: %s", fname);
224  SafeDelete(eFile);
225  return;
226  }
227  SetView();
228 
229  eViewMerge = dynamic_cast<TTree*>(eFile->Get("ViewMerge"));
230  eViewAlign = dynamic_cast<TTree*>(eFile->Get("ViewAlign"));
231  eFrameAlign = dynamic_cast<TTree*>(eFile->Get("FrameAlign"));
232  ePinViews = dynamic_cast<TTree*>(eFile->Get("PinViews"));
233  eViewAlign->SetBranchAddress("alpar",&eVA);
234  eViewMerge->SetBranchAddress("alpar",&eVM);
235  eFrameAlign->SetBranchAddress("alpar",&eFA);
236  ePinViews->SetBranchAddress("pin",&ePVH);
237 
238  SafeDelete(eHeader);
239  eHeader = dynamic_cast<EdbRunHeader*>(eFile->Get("RunHeader"));
240  SafeDelete(ePredictions);
241  ePredictions = dynamic_cast<EdbPredictionsBox*>(eFile->Get("Predictions"));
242  SafeDelete(eMarks);
243  eMarks = dynamic_cast<EdbMarksSet*>(eFile->Get("Marks"));
244 
245  if(gEDBDEBUGLEVEL>2) Print();
246 }

◆ Print()

void EdbRun::Print ( ) const
608 {
609  if(eHeader) eHeader->Print();
610 
611  int nentr=0;
612  if(eTree) nentr = (Int_t)eTree->GetEntries();
613  printf("Number of entries: \t %d \n", nentr);
614  printf("--------------------------------------------------------------------\n\n");
615  //PrintBranchesStatus();
616 }
void Print()
Definition: EdbRunHeader.cxx:72

◆ PrintBranchesStatus()

void EdbRun::PrintBranchesStatus ( ) const
574 {
575  // not supported...
576 
577  EdbViewHeader *header = GetEntryHeader( 0 );
578  if(header) printf("header branch exists\n");
579  TClonesArray *clusters = GetEntryClusters( 0 );
580  if(clusters) printf("clusters branch exists\n");
581  TObjArray *frames = GetEntryFrames( 0 );
582  if(frames) printf("frames branch exists\n");
583 }

◆ PrintLog()

void EdbRun::PrintLog ( const char *  fname) const
587 {
588  char buf[256];
589 
590  sprintf( buf,"run%4.4d %s \t%s \t%s",
591  GetRunID(),
592  eHeader->GetName(),
593  eHeader->GetPlate()->GetName(),
594  eHeader->GetTitle() );
595 
596  printf("**************************************************************************\n");
597  printf("\n%s\n", buf);
598  printf("**************************************************************************\n");
599 
600  FILE *fp = fopen( fname,"a" );
601  fprintf(fp,"%s", buf);
602  fclose(fp);
603 
604 }
EdbPlate * GetPlate() const
Definition: EdbRunHeader.h:140
int GetRunID() const
Definition: EdbRun.h:126

◆ Save()

void EdbRun::Save ( )
452 {
453  if(eHeader) eHeader->Write("RunHeader");
454  if(ePredictions) ePredictions->Write("Predictions");
455  if(eMarks) eMarks->Write("Marks");
456 
457  //if(eViewMerge) eViewMerge->Write();
458  //if(eViewAlign) eViewAlign->Write();
459  //if(eFrameAlign) eViewMerge->Write();
460 
461  //SaveViews();
462  //eFile->Purge();
463 }

◆ SaveViews()

void EdbRun::SaveViews ( )
inline
167 { eTree->AutoSave(); }

◆ SelectOpenMode()

void EdbRun::SelectOpenMode ( const char *  fname,
const char *  status = "READ" 
)
165 {
166  if ( !strcmp(status,"RECREATE") ) Create(fname);
167  else if( !strcmp(status,"READ") ) Open(fname);
168  else if( !strcmp(status,"UPDATE") ) OpenUpdate(fname);
169  else{
170  if( !gSystem->AccessPathName(fname, kFileExists) ) Open(fname);
171  else Create(fname);
172  }
173 
174  Log(3,"EdbRun::SelectOpenMode","root file version: %d",eFile->GetVersion());
175 }
void Open(const char *fname)
Definition: EdbRun.cxx:178
void OpenUpdate(const char *fname)
Definition: EdbRun.cxx:211
void Create(const char *fname)
Definition: EdbRun.cxx:249

◆ SetComment()

void EdbRun::SetComment ( const char *  com)
inline
131 { eHeader->SetComment(com); }
void SetComment(const char *com)
Definition: EdbRunHeader.h:134

◆ SetMarks()

void EdbRun::SetMarks ( EdbMarksSet marks)
inline
120 { eMarks = marks; }

◆ SetRunID()

void EdbRun::SetRunID ( int  id)
inline
130 { eHeader->SetRunID(id); }
void SetRunID(int id)
Definition: EdbRunHeader.h:129

◆ SetTitle()

void EdbRun::SetTitle ( const char *  tit)
inline
132 { eHeader->SetTitle(tit); }

◆ SetView() [1/2]

void EdbRun::SetView ( )
313 {
314  if(!eView) {
315  Log(2,"EdbRun::SetView","WARNING: *eView=0");
316  eView = new EdbView();
317  }
318  else if( !eView->GetClusters() ) {
319  Log(1,"EdbRun::SetView","ERROR: eView was deleted!");
320  eView = new EdbView();
321  }
322 
323  Log(3,"EdbRun::SetView","Note: EdbRun::SetView");
324  if(eView->GetHeader()) eTree->SetBranchAddress("headers", eView->GetHeaderAddr() );
325  if(eView->GetClusters()) eTree->SetBranchAddress("clusters", eView->GetClustersAddr() );
326  if(eView->GetSegments()) eTree->SetBranchAddress("segments", eView->GetSegmentsAddr() );
327  if(eView->GetTracks()) eTree->SetBranchAddress("tracks", eView->GetTracksAddr() );
328  if(eView->GetFrames()) eTree->SetBranchAddress("frames", eView->GetFramesAddr() );
329 }
void * GetClustersAddr()
Definition: EdbView.h:170
void * GetSegmentsAddr()
Definition: EdbView.h:171
void * GetTracksAddr()
Definition: EdbView.h:172
void * GetFramesAddr()
Definition: EdbView.h:173

◆ SetView() [2/2]

void EdbRun::SetView ( EdbView view)
300 {
301  if(!view) { Log(1,"EdbRun::SetView","ERROR: EdbRun::SetView: *view=0"); return; }
302 
303  if(eView != view) {
304  if(eView) { eView->Clear(); SafeDelete(eView); }
305  eView = view;
306  }
307 
308  SetView();
309 }

◆ TransformDC()

void EdbRun::TransformDC ( )
653 {
654  if(ePredictions){
655  if(eMarks){
656  EdbAffine2D *aff = eMarks->Abs2Stage();
657  ePredictions->Transform(aff);
658  printf("transfrom predictions according to fiducial marks:\n");
659  aff->Print();
660  SafeDelete(aff);
661  }
662  }
663 }
Definition: EdbAffine.h:17
void Print(Option_t *opt="") const
Definition: EdbAffine.cxx:52
EdbAffine2D * Abs2Stage() const
Definition: EdbFiducial.cxx:271
virtual void Transform(const EdbAffine2D *a)
Definition: EdbVirtual.cxx:154

Member Data Documentation

◆ eFA

AlignmentParFrame EdbRun::eFA
private

◆ eFile

TFile* EdbRun::eFile
private

◆ eFrameAlign

TTree* EdbRun::eFrameAlign
private

◆ eHeader

EdbRunHeader* EdbRun::eHeader
private

◆ eMarks

EdbMarksSet* EdbRun::eMarks

◆ ePath

TString EdbRun::ePath
private

◆ ePinViews

TTree* EdbRun::ePinViews
private

◆ ePredictions

EdbPredictionsBox* EdbRun::ePredictions
private

◆ ePVH

EdbViewHeader* EdbRun::ePVH
private

◆ eTree

TTree* EdbRun::eTree
private

◆ eVA

AlignmentParView EdbRun::eVA
private

◆ eVH1

EdbViewHeader* EdbRun::eVH1
private

◆ eVH2

EdbViewHeader* EdbRun::eVH2
private

◆ eView

EdbView* EdbRun::eView
private

◆ eViewAlign

TTree* EdbRun::eViewAlign
private

◆ eViewMerge

TTree* EdbRun::eViewMerge
private

◆ eVM

AlignmentParView EdbRun::eVM
private

The documentation for this class was generated from the following files: