ROBAST logo
// Author: Akira Okumura <mailto:oxon@mac.com>
/******************************************************************************
 * Copyright (C) 2006-, Akira Okumura                                         *
 * All rights reserved.                                                       *
 *****************************************************************************/

#ifndef A_CORSIKA_IACT_FILE_H
#define A_CORSIKA_IACT_FILE_H

#ifdef __CINT__
#define _SYS_TYPES_H_
#define _STDINT_H_
#endif

#include "bernlohr/fileopen.h"
#include "bernlohr/io_basic.h"
#include "bernlohr/mc_tel.h"

#include "TTree.h"

#include "ACorsikaIACTEventHeader.h"
#include "ACorsikaIACTRunHeader.h"
#include "ARayArray.h"

////////////////////////////////////////////////////////////////////////////////
//
// ACorsikaIACTFile
//
// Wrapper class for I/O functions of CORSIKA IACT files.
//
////////////////////////////////////////////////////////////////////////////////

class ACorsikaIACTFile : public TObject {
 private:
  static const Int_t kMaxArrays;
  static const Int_t kMaxTelescopes;

  IO_ITEM_HEADER fBlockHeader;
  TTree* fBunches;
  struct linked_string fCorsikaInputs;
  ACorsikaIACTEventHeader* fEventHeader;
  TString fFileName;
  IO_BUFFER* fIOBuffer;
  Int_t fMaxPhotonBunches;
  Int_t fNumberOfTelescopes;
  ACorsikaIACTRunHeader* fRunHeader;
  Double_t* fTelescopePosition[4];  //
  Double_t fMaxWavelength;
  Double_t fMinWavelength;

  Int_t ReadNextBlock();

 public:
  ACorsikaIACTFile(Int_t bufferLenght = 20000000);
  virtual ~ACorsikaIACTFile();

  void Close();
  TTree* GetBunches() const { return fBunches; }
  const Char_t* GetFileName() const { return fFileName.Data(); }
  Int_t GetNumberOfTelescopes() const { return fNumberOfTelescopes; }
  ARayArray* GetRayArray(Int_t telNo, Int_t arrayNo, Double_t zoffset,
                         Double_t refractiveIndex);
  Double_t GetTelescopeR(Int_t i) const;
  Double_t GetTelescopeX(Int_t i) const;
  Double_t GetTelescopeY(Int_t i) const;
  Double_t GetTelescopeZ(Int_t i) const;
  Bool_t IsAllocated();
  Bool_t IsOpen();
  void Open(const Char_t* fname);
  void PrintInputCard() const;
  Int_t ReadEvent(Int_t num);
  void SetMaxPhotonBunches(UInt_t max) { fMaxPhotonBunches = max; }

  ACorsikaIACTEventHeader* GetEventHeader() const { return fEventHeader; }
  ACorsikaIACTRunHeader* GetRunHeader() const { return fRunHeader; }

  ClassDef(ACorsikaIACTFile, 0)
};

#endif  // A_CORSIKA_IACT_FILE_H
 ACorsikaIACTFile.h:1
 ACorsikaIACTFile.h:2
 ACorsikaIACTFile.h:3
 ACorsikaIACTFile.h:4
 ACorsikaIACTFile.h:5
 ACorsikaIACTFile.h:6
 ACorsikaIACTFile.h:7
 ACorsikaIACTFile.h:8
 ACorsikaIACTFile.h:9
 ACorsikaIACTFile.h:10
 ACorsikaIACTFile.h:11
 ACorsikaIACTFile.h:12
 ACorsikaIACTFile.h:13
 ACorsikaIACTFile.h:14
 ACorsikaIACTFile.h:15
 ACorsikaIACTFile.h:16
 ACorsikaIACTFile.h:17
 ACorsikaIACTFile.h:18
 ACorsikaIACTFile.h:19
 ACorsikaIACTFile.h:20
 ACorsikaIACTFile.h:21
 ACorsikaIACTFile.h:22
 ACorsikaIACTFile.h:23
 ACorsikaIACTFile.h:24
 ACorsikaIACTFile.h:25
 ACorsikaIACTFile.h:26
 ACorsikaIACTFile.h:27
 ACorsikaIACTFile.h:28
 ACorsikaIACTFile.h:29
 ACorsikaIACTFile.h:30
 ACorsikaIACTFile.h:31
 ACorsikaIACTFile.h:32
 ACorsikaIACTFile.h:33
 ACorsikaIACTFile.h:34
 ACorsikaIACTFile.h:35
 ACorsikaIACTFile.h:36
 ACorsikaIACTFile.h:37
 ACorsikaIACTFile.h:38
 ACorsikaIACTFile.h:39
 ACorsikaIACTFile.h:40
 ACorsikaIACTFile.h:41
 ACorsikaIACTFile.h:42
 ACorsikaIACTFile.h:43
 ACorsikaIACTFile.h:44
 ACorsikaIACTFile.h:45
 ACorsikaIACTFile.h:46
 ACorsikaIACTFile.h:47
 ACorsikaIACTFile.h:48
 ACorsikaIACTFile.h:49
 ACorsikaIACTFile.h:50
 ACorsikaIACTFile.h:51
 ACorsikaIACTFile.h:52
 ACorsikaIACTFile.h:53
 ACorsikaIACTFile.h:54
 ACorsikaIACTFile.h:55
 ACorsikaIACTFile.h:56
 ACorsikaIACTFile.h:57
 ACorsikaIACTFile.h:58
 ACorsikaIACTFile.h:59
 ACorsikaIACTFile.h:60
 ACorsikaIACTFile.h:61
 ACorsikaIACTFile.h:62
 ACorsikaIACTFile.h:63
 ACorsikaIACTFile.h:64
 ACorsikaIACTFile.h:65
 ACorsikaIACTFile.h:66
 ACorsikaIACTFile.h:67
 ACorsikaIACTFile.h:68
 ACorsikaIACTFile.h:69
 ACorsikaIACTFile.h:70
 ACorsikaIACTFile.h:71
 ACorsikaIACTFile.h:72
 ACorsikaIACTFile.h:73
 ACorsikaIACTFile.h:74
 ACorsikaIACTFile.h:75
 ACorsikaIACTFile.h:76
 ACorsikaIACTFile.h:77
 ACorsikaIACTFile.h:78
 ACorsikaIACTFile.h:79
 ACorsikaIACTFile.h:80