#include #include #include # include "tsim_l2stt/CFTaddress.hpp" CFTaddress::CFTaddress(){} CFTaddress::~CFTaddress(){} CFTaddress::CFTaddress(int trksign, int trkpt, int trksect, int trkphi_h){ _trksign = trksign; _trkpt = trkpt; _trksect = trksect; _trkphi_h = trkphi_h; int lowest_off = 7; int medium_off = 3; int Alayer_offset; float high_pt_avg[4] = {8.88889, 7.27273, 6.15385, 5.33333}; float highest_pt_avg[4] = {80.0, 26.66667, 16.0, 11.42857}; float pi=acos(-1.0); int hi2, low3; bool a_layer_offset = false; hi2 = (_trkpt & 0x0018)>>3; low3 = (_trkpt & 0x0007); if(hi2 > 1)a_layer_offset = true; if(a_layer_offset){ if(hi2 == 3)Alayer_offset = lowest_off+low3; if(hi2 == 2)Alayer_offset = medium_off+low3; } _Hstrip = _trksect*44+_trkphi_h; _Hphi = _Hstrip*2*pi/3520; //3520 is number of doublets in H layer _A0phi = _Hphi; _A0strip = _A0phi*1280/(2*pi); float Hrad = 51.6335; float Arad = 20.0786; if (a_layer_offset){ _Astrip = _A0strip-_trksign*Alayer_offset; if(_Astrip <= 0)_Astrip = _Astrip+1280; if(_Astrip > 1280)_Astrip = _Astrip - 1280; _Aphi = _Astrip*2*pi/1280; _track_avg_pt = _trksign*( 0.003*(Arad - Hrad)/(_Aphi-_Hphi) ); } else{ if(hi2 == 0)_track_avg_pt = highest_pt_avg[low3]; if(hi2 == 1)_track_avg_pt = high_pt_avg[low3]; float phi0 = _Hphi - _trksign*0.003*Hrad/_track_avg_pt; _Aphi = phi0+_trksign*0.003*Arad/_track_avg_pt; if(_Aphi < 0)_Aphi = _Aphi+2*pi; if(_Aphi > 2*pi)_Aphi = _Aphi-2*pi; _Astrip = _Aphi*1280/(2*pi); if(_Astrip <= 0)_Astrip = _Astrip+1280; if(_Astrip > 1280)_Astrip = _Astrip - 1280; } } int CFTaddress::get_Hstrip() const { return _Hstrip; } int CFTaddress::get_Astrip() const { return _Astrip; } float CFTaddress::get_Hphi() const { return _Hphi; } float CFTaddress::get_Aphi() const { return _Aphi; } float CFTaddress::get_A0phi() const { return _A0phi; } int CFTaddress::get_A0strip() const { return _A0strip; } float CFTaddress::get_trkpt() const { return _track_avg_pt; } bool CFTaddress::operator<(const CFTaddress& address) const { int aHstrip, bHstrip; bHstrip = address.get_Hstrip(); aHstrip = this->get_Hstrip(); return aHstrip_trkpt<<" "<_trksign<<" "<_trksect << " " <_trkphi_h<<" "; return ; }