Fork me on GitHub

Ignore:
Timestamp:
Oct 15, 2014, 2:09:13 AM (10 years ago)
Author:
Christophe Delaere <christophe.delaere@…>
Branches:
ImprovedOutputFile, Timing, dual_readout, llp, master
Children:
b3c42d3
Parents:
5bb66c9
Message:

Working classes for automatic parsing of branches

Slightly less elegant, but it works.
The code in geometry.C is able to call the new methods and classes but
doesn't use it yet.

File:
1 edited

Legend:

Unmodified
Added
Removed
  • display/DelphesBranchElement.h

    r5bb66c9 r115298d  
    3131{
    3232  public:
    33     DelphesBranchBase(const char* name="", const char*type="", const enum EColor color=kBlack):name_(name),type_(type),color_(color) {}
     33    DelphesBranchBase():color_(kBlack) {}
     34    DelphesBranchBase(const char* name, const char*type, const enum EColor color):name_(name),type_(type),color_(color) {}
    3435    virtual ~DelphesBranchBase() {};
    3536    const char* GetName() const { return (const char*)name_; }
     
    5051  public:
    5152    // constructor
    52     DelphesBranchElement(const char* name="", const char*type="", const enum EColor color=kBlack):DelphesBranchBase(name, type, color) {
    53       throw std::exception();
    54     }
     53    DelphesBranchElement():DelphesBranchBase() {}
     54    DelphesBranchElement(const char* name, const char*type, const enum EColor color):DelphesBranchBase(name, type, color) {}
    5555
    5656    // destructor
     
    6161
    6262    // resets the collection (before moving to the next event)
    63     virtual void Reset() {};
     63    virtual void Reset() = 0;
    6464
    6565    // template class name
     
    7171
    7272// special case for calo towers
    73 template<> DelphesBranchElement<DelphesCaloData>::DelphesBranchElement(const char* name, const char*type, const enum EColor color);
    74 template<> void DelphesBranchElement<DelphesCaloData>::Reset();
     73template<> class DelphesBranchElement<DelphesCaloData>: public DelphesBranchBase
     74{
     75  public:
     76    // constructor
     77    DelphesBranchElement():DelphesBranchBase() {}
     78    DelphesBranchElement(const char* name, const char*type, const enum EColor color):DelphesBranchBase(name, type, color) {
     79      if(TString(type)=="tower") {
     80        data_ = new DelphesCaloData(2);
     81        data_->RefSliceInfo(0).Setup("ECAL", 0.1, kRed);
     82        data_->RefSliceInfo(1).Setup("HCAL", 0.1, kBlue);
     83        data_->IncDenyDestroy();
     84      } else {
     85        throw std::exception();
     86      }
     87    }
     88
     89    // destructor
     90    virtual ~DelphesBranchElement() { delete data_; }
     91
     92    // get the container (ElementList, TrackList, or CaloData)
     93    DelphesCaloData* GetContainer() { return data_; }
     94
     95    // resets the collection (before moving to the next event)
     96    virtual void Reset() { data_->ClearTowers(); }
     97
     98    // template class name
     99    virtual const char* GetClassName() { return data_->ClassName(); }
     100
     101  private:
     102    DelphesCaloData* data_;
     103};
     104//template<> DelphesBranchElement<DelphesCaloData>::DelphesBranchElement(const char* name, const char*type, const enum EColor color);
     105//template<> void DelphesBranchElement<DelphesCaloData>::Reset();
    75106
    76107// special case for element lists
    77 template<> DelphesBranchElement<TEveElementList>::DelphesBranchElement(const char* name, const char*type, const enum EColor color);
    78 template<> void DelphesBranchElement<TEveElementList>::Reset();
     108template<> class DelphesBranchElement<TEveElementList>: public DelphesBranchBase
     109{
     110  public:
     111    // constructor
     112    DelphesBranchElement():DelphesBranchBase() {}
     113    DelphesBranchElement(const char* name, const char*type, const enum EColor color):DelphesBranchBase(name, type, color) {
     114      if(TString(type)=="vector" || TString(type)=="jet") {
     115        data_ = new TEveElementList(name);
     116        data_->SetMainColor(color_);
     117      } else {
     118        throw std::exception();
     119      }
     120    }
     121
     122    // destructor
     123    virtual ~DelphesBranchElement() { delete data_; }
     124
     125    // get the container (ElementList, TrackList, or CaloData)
     126    TEveElementList* GetContainer() { return data_; }
     127
     128    // resets the collection (before moving to the next event)
     129    virtual void Reset() { data_->DestroyElements(); }
     130
     131    // template class name
     132    virtual const char* GetClassName() { return data_->ClassName(); }
     133
     134  private:
     135    TEveElementList* data_;
     136};
     137//template<> DelphesBranchElement<TEveElementList>::DelphesBranchElement(const char* name, const char*type, const enum EColor color);
     138//template<> void DelphesBranchElement<TEveElementList>::Reset();
    79139
    80140// special case for track lists
    81 template<> DelphesBranchElement<TEveTrackList>::DelphesBranchElement(const char* name, const char*type, const enum EColor color);
    82 template<> void DelphesBranchElement<TEveTrackList>::Reset();
     141template<> class DelphesBranchElement<TEveTrackList>: public DelphesBranchBase
     142{
     143  public:
     144    // constructor
     145    DelphesBranchElement():DelphesBranchBase() {}
     146    DelphesBranchElement(const char* name, const char*type, const enum EColor color):DelphesBranchBase(name, type, color) {
     147      if(TString(type)=="track") {
     148        data_ = new TEveTrackList(name);
     149        data_->SetMainColor(color_);
     150        data_->SetMarkerColor(color_);
     151        data_->SetMarkerStyle(kCircle);
     152        data_->SetMarkerSize(0.5);
     153      } else if(TString(type)=="photon") {
     154        data_ = new TEveTrackList(name);
     155        data_->SetMainColor(color_);
     156        data_->SetMarkerColor(color_);
     157        data_->SetMarkerStyle(kCircle);
     158        data_->SetMarkerSize(0.5);
     159      } else {
     160        throw std::exception();
     161      }
     162    }
     163
     164    // destructor
     165    virtual ~DelphesBranchElement() { delete data_; }
     166
     167    // get the container (ElementList, TrackList, or CaloData)
     168    TEveTrackList* GetContainer() { return data_; }
     169
     170    // resets the collection (before moving to the next event)
     171    virtual void Reset() { data_->DestroyElements(); }
     172
     173    // template class name
     174    virtual const char* GetClassName() { return data_->ClassName(); }
     175
     176  private:
     177    TEveTrackList* data_;
     178};
     179//template<> DelphesBranchElement<TEveTrackList>::DelphesBranchElement(const char* name, const char*type, const enum EColor color);
     180//template<> void DelphesBranchElement<TEveTrackList>::Reset();
    83181
    84182#endif //DelphesBranchElement_h
Note: See TracChangeset for help on using the changeset viewer.