/* $Id: CbmEcalSCurveLib.cxx,v 1.1 2006/09/18 07:58:04 prokudin Exp $ */ /* * $Log: CbmEcalSCurveLib.cxx,v $ * Revision 1.1 2006/09/18 07:58:04 prokudin * First implementation of SCurve library * */ #include "CbmEcalInf.h" #include "CbmEcalCell.h" #include "CbmEcalSCurveLibRecord.h" #include "CbmEcalSCurveLib.h" #include #include "TMath.h" using namespace std; CbmEcalSCurveLib::CbmEcalSCurveLib(Int_t verbose) : fVerbose(verbose) { Int_t i; fModuleSize=0; fSize=10; fRec=new CbmEcalSCurveLibRecord*[fSize]; for(i=0;iGetModuleSize(); } void CbmEcalSCurveLib::AddFile(const char* file) { Int_t num; CbmEcalSCurveLibRecord* rec=new CbmEcalSCurveLibRecord(file); if (rec->GetCellSize()==0) { delete rec; return; } GetModuleSize(); if (fVerbose>9) cout << "Initing for cellsize " << rec->GetCellSize() << endl; num=(Int_t)((fModuleSize+0.0001)/rec->GetCellSize()); fRec[num]=rec; if (fVerbose>0) cout << "-I-: CbmEcalSCurveLib: Inited for cell type " << num << endl; } Float_t CbmEcalSCurveLib::GetY(Float_t a, Float_t e, CbmEcalCell* cell) const { if (!cell) return -1111; CbmEcalInf* inf=CbmEcalInf::GetInstance(NULL); if (inf==NULL) return -1111; Int_t type=cell->GetType(); if (type>=fSize||type<=0) return -1111; if (!fRec[type]) return -1111; Float_t z=inf->GetZPos(); Float_t y=cell->GetCenterY(); Float_t theta=TMath::ATan(y/z)*TMath::RadToDeg(); return GetX(a, e, theta, type); } Float_t CbmEcalSCurveLib::GetX(Float_t a, Float_t e, CbmEcalCell* cell) const { if (!cell) return -1111; CbmEcalInf* inf=CbmEcalInf::GetInstance(NULL); if (inf==NULL) return -1111; Int_t type=cell->GetType(); if (type>=fSize||type<=0) return -1111; if (!fRec[type]) return -1111; Float_t z=inf->GetZPos(); Float_t x=cell->GetCenterX(); Float_t theta=TMath::ATan(x/z)*TMath::RadToDeg(); return GetX(a, e, theta, type); } Float_t CbmEcalSCurveLib::GetX(Float_t a, Float_t e, Float_t theta, Int_t type) const { if (type>=fSize||type<=0) return -1111; if (!fRec[type]) return -1111; if (theta<0) { Float_t res=fRec[type]->GetX(-a,e,-theta); if (res==-1111) return res; return -res; } return fRec[type]->GetX(a,e,theta); } CbmEcalSCurveLib::~CbmEcalSCurveLib() { for(Int_t i=0;i