// Author: Andrew M. Rogers, NSCL 07/01/2006
//* Copyright (C) 2006-2010 Andrew M. Rogers

#ifndef __TEXPERIMENT_H
#define __TEXPERIMENT_H

#ifndef __ROOTDEFINE_H
#define __ROOTDEFINE_H
#include "rootDefine.h"
#endif
//#ifndef  __TTARGET_H
//#define  __TTARGET_H
#include "TTarget.h"
//#endif


#include "TBufferHeader.h"
#ifdef HIRACLASS_FLAG
#include "THiRA.h"
#endif
#ifdef S800CLASS_FLAG
#include "TS800.h"
#endif
#ifdef FOURPICLASS_FLAG
#include "TFourPi.h"
#endif
#ifdef MCPCLASS_FLAG
#include "TMcp.h"
#endif
#ifdef EPICSCLASS_FLAG
#include "TEpics.h"
#endif
#ifdef SCALERCLASS_FLAG
#include  "TScaler.h"
#endif


#include <string>


#include <TChain.h>
#include <TFile.h>
#include <TBranch.h>
#include <TEventList.h>
#include <TFolder.h>
#include <TGeoElement.h>
#include <TGeoManager.h>
#include <TH2S.h>
#include <TROOT.h>
#include <TTree.h>


using namespace std;


class TExperiment : public TNamed {

 private:
  UShort_t *p;                                      //! Pointer to event buffers.
  TGeoManager *fGManager;                           //!

/*  protected: */
/*   TString      fName;                               //! Object identifer. */
/*   TString      fTitle;                              //! Object title. */

 public:
  TNamed *analysisState;                            //! Number indicating current TTree analysis state. 0=RAW 1=CAL etc.

  TNamed *expNumber;                                //! Experiment ID number.
  TNamed *runTitle;                                 //! Run title.
  TNamed *runNumber;                                //! Run number.
  TNamed *elapsedTime;                              //! Elapsed runtime (seconds).
  TNamed *dateCreated;                              //! Run creation date.
  TNamed *dateEnded;                                //! Run end date.
  TNamed *timeCreated;                              //! Run creation time.
  TNamed *timeEnded;                                //! Run end time.
  TNamed *nPauses;                                  //! Number of times run was paused.
  TNamed *nResumes;                                 //! Number of times run was resumed.
  TNamed *nBuffers;                                 //! Total number of Buffers.
  TNamed *nTotalEntities;                           //! Total number of entities.
  TNamed *nTotalType1Entities;                      //! Total number of data entities.
  TNamed *nTotalWords;                              //! Total number of used words.
  TNamed *nTotalType1Words;                         //! Total number of used data words.
  TNamed *avgEventRate;                             //! Average number of events/s.
  TNamed *avgType1EventRate;                        //! Average number of data events/s.
  TNamed *avgWordRate;                              //! Average number of words/s.
  TNamed *avgType1WordRate;                         //! Average number of data words/s.
  TNamed *evtSize;                                  //! Event file size.
  TNamed *rootSize;                                 //! Root file size.
  TNamed *runType;                                  //! Run type.
  TNamed *runComments;                              //! Run Comments.
  TNamed *primaryBeam;                              //! Primary beam.
  TNamed *secondaryBeam;                            //! Secondary beam.
  TNamed *primaryEnergy;                            //! Primary beam energy.
  TNamed *secondaryEnergy;                          //! Secondary beam energy.
  TNamed *note;                                     //! Run note.
  TObjArray notesArray;                             //! Array to hold run notes.

  TFolder f_constants;                              //!
  TFolder f_scaler;                                 //!
  
  Bool_t  kHiraFill;                                //! HiRA fill flag.
  Bool_t  kHiraCsIFill;                             //! HiRA CsI fill flag.
  Bool_t  kMcpFill;                                 //! MCP fill flag.
  Bool_t  kS800Fill;                                //! S800 fill flag.
  Bool_t  kFourPiFill;                              //! 4Pi fill flag.
  Bool_t  kEpicsFill;                               //! Epics fill flag.
  Bool_t  kScalerFill;                              //! Scaler fill flag.
  Bool_t  kElogFill;                                //! Elog fill flag.

 public:
  Char_t *evtFilePath;                              //! Source of event files.
  Char_t *rootFilePath;                             //! Destination of ROOT files.

  TBufferHeader *header;                            //  Buffer header class.

  TObjArray *fTargets;                              //! Array of fixed targets.
  TTarget   *fTarget;                               //! Currently selected target.
  #ifdef MCPCLASS_FLAG
  TMcp    *mcp;                                     //! 
  #endif
  #ifdef HIRACLASS_FLAG
  THiRA   *hira;                                    //!
  TBranch *b_hira;                                  //!
  #endif
  #ifdef S800CLASS_FLAG
  TS800   *s800;                                    //!
  #endif
  #ifdef FOURPICLASS_FLAG
  TFourPi *fourpi;                                  //!
  #endif
  #ifdef EPICSCLASS_FLAG
  TEpics  *epics;                                   //!
  #endif
  #ifdef SCALERCLASS_FLAG
  TScaler *scalers;                                 //!
  #endif

  TTree          *fChain;                //! Pointer to the analyzed TTree or TChain.
  Int_t           fCurrent;              //! Current Tree number in a TChain.
  
 private:
  //  Bool_t       ParseELOG();

 public:
  TExperiment() { }
  TExperiment(const char *name);
  ~TExperiment();

/*   const Char_t *GetName() const {return fName;} */
/*   const Char_t *GetTitle() const {return fTitle;} */
/*   void          SetName(const Char_t *name); */
/*   void          SetNameTitle(const Char_t *name, const Char_t *title); */
/*   void          SetTitle(const Char_t *title="");  */

  void         AddTarget(const char *name, const char *title, 
			 Int_t ladder, Int_t ladderPos, Double_t thickness,
			 Int_t Z, Int_t A);                                // Add a target.
  void         Calculate();                                       // Calculate all members.
  void         Calibrate();                                       // Calibrate all members.
  void         Clear(Option_t *option="");
  Bool_t       ConvertEvtFile(Char_t *evtFile,Char_t *rootFile,  
			      Option_t *nBufs="0");               // Converts an event file to root.
  Bool_t       ConvertEvtFile(Char_t *evtFileList);               // Converts a list of event files.
  void         CreateFolders();                                   // Create all folders.
  void         DumpInfo();                                        // Dump event info.
  void         DumpClassInfo();                                   // Dump class build and fill info.
  void         InitClass();                                       // Calls all InitClass methods.
  void         InitTree(TTree *itree);
  Long64_t     LoadTree(Long64_t entry);                          //
  void         SetTarget(const char *targetName);                 // Set the current target.
  Bool_t       SetEventFilePath(Char_t *path);                    // Sets the event file path.
  Bool_t       SetExperimentNumber(Char_t *number);               // Sets the experiment number.
  Bool_t       SetRootFilePath(Char_t *path);                     // Sets the root file path.

  // Define any templates here.
  template <class T> TH2F* DrawSummary(TH2F* h,TBranch* b,T *d,   // Draw summary spectrum.
			   Int_t c,Float_t range, 
			   Option_t *eventList = "");

  
  ClassDef(TExperiment,7)     // NSCL experiment designed for HiRA.

};



//______________________________________________________________________________
template<class T> 
TH2F* TExperiment::DrawSummary(TH2F* h, TBranch* b, T *d, Int_t c, 
			       Float_t range, Option_t *eventList) 
{
  // -- Draw summary spectrum of selected branch.
  // h: 2D histogram to be filled
  // b: TBranch* pointer from which the data comes from
  // d: Float_t* pointer to the array filled by the branch
  // c: Number of slots to fill (dimension of d[] array and x-dimension of histogram)

  // Check that a TTree has been initialized.
  if(!fChain){ printf("TTree or TChain has not been initialized!!!\n"); return 0;}
  
   Long64_t nEntries = fChain->GetEntries();
   h->SetBins(c, 0, c, h->GetNbinsY(), 0, range);
   h->Reset();
   if(eventList == ""){
     for (Long64_t jentry=0; jentry<nEntries; jentry++) {
       Long64_t ientry = LoadTree(jentry);
       if (ientry < 0) break;
       b->GetEntry(ientry);
       for(Int_t i=0; i<c; i++) {
 	if (d[i]>0) h->Fill(i, d[i]);
       }
     }
   }else {
     TEventList *list = (TEventList*)gDirectory->Get(eventList);
     for (Long64_t jentry=0; jentry<list->GetN(); jentry++) {
      Long64_t ientry = LoadTree(jentry);
       if (ientry < 0) break;
       b->GetEntry(list->GetEntry(jentry));
       for(Int_t i=0; i<c; i++) {
 	if (d[i]>0) h->Fill(i, d[i]);
       }
     }
   }
   h->Draw("COLZ");

  return h;
}

#endif

Last change: Tue Dec 16 22:01:06 2008
Last generated: 2008-12-16 22:01

This page has been automatically generated. If you have any comments or suggestions about the page layout send a mail to ROOT support, or contact the developers with any questions or problems regarding ROOT.