//2013.10.16 /******************************************************************************* * モジュール名称 :Application Header * * モジュールラベル :app_mppe_mea.h * * タスク区分 :ヘッダ * * 機能 :define/Struct/Variable/Prototype * * 使用上の注意 :特になし * * 作成日・作成者 :2011/10/08 Y.K. * * * * 参照 :Sampleとして、 app.def を参照のこと * * 注意 : EDIT権限は、MPPE/MEA組 * *******************************************************************************/ // //#define _GET_WORKING_TIME_MEA__03 <==================提出時はコメントアウト //#define _RUN_WITH_EMU_MEA__ <==================提出時はコメントアウト //E2PROM SIZE (indicating the address of MEA2) #define d_Lcl_MEA_E2P_SIZE 720 //Use 8CHs(0) or 16CHs(1) for calculating VM (>=4s) // 0: CH0-7 ([16sc][8ch]) are used: // VM-M(4s) derived from ([16sc][8ch]) // Et-M(4s) derived from ([16sc][16ch]) // 3D-H(4s) derived from ([16sc][8ch])) // 1: CH0-16(16sc][16ch]) are used: // VM-M(2s) derived from ([8sc][16ch] + [8sc][16ch]) // Et-M(2s) derived from ([8sc][16ch] + [8sc][16ch]) // 3D-H(2s) derived from ([8sc][16ch] + [8sc][16ch]) //VM, Et 3D-H #define d_Lcl_MEA1_2sM 0 //0 Make 4s-products due to some blind CHs #define d_Lcl_MEA2_2sM 1 //1 Make 2s-products //3D-M & 3D-LL #define d_Lcl_MEA1_3DM 1 //1 Included: derived from ([16sc][8ch]) #define d_Lcl_MEA2_3DM 0 //0 //Count Limit for Automatic g-factor control #define d_Lcl_MEA_GCNT_UL 100000 //(cnt/sec/ch) Upper limit for decreasing g #define d_Lcl_MEA_GCNT_LL 1000 //(cnt/spin/16ch)Lower limit for increasing g #define d_Lcl_MEA1_PHI0 (MATH_PI/16 + MATH_PI/2)//MEA1 SC0のphiノミナル値 MIAの座標系に準拠 -yからSC0が始まる #define d_Lcl_MEA2_PHI0 ( d_Lcl_MEA1_PHI0 ) // 取り付けは90度離れているがSC定義はMEA1と同じとした+ MATH_PI/2) // #define d_Lcl_MEA_TBL_RAD 0x7f //LOOKUP TABLE RAD. 規格化パラメータ ROMテーブルの作成、読出時に使用 #define d_Lcl_MEA_MAX_RAD (MATH_PI/16) //LOOKUP TABLE RAD. 規格化パラメータ (11.25 deg.) #define d_Lcl_MEA_TBL_RD1 0x1ff //RAD. 規格化パラメータ sin or cosテーブル作成時に使用 #define d_Lcl_MEA_TBL_GF 0xbf //0x27f //gf&gf2, 中央値で1に相当 #define d_Lcl_MEA_TBL_GF0 0x40 //0x200 //gf&gf2, 最低値、gf += uc_gf #define d_Lcl_MEA_TBL_VF 0x27f //vf, 中央値で1に相当 #define d_Lcl_MEA_TBL_VF0 0x200 //vf, 最低値、vf += uc_vf //S/C POTENTIAL & Velocity TABLE #define d_Lcl_MEA_TBL_POT 0x07ff //LOOKUP TABLE POTENTIAL 規格化パラメータ #define d_Lcl_MEA_MAX_POT 100 //LOOKUP TABLE POTENTIAL 規格化パラメータ (V) EWOと同じ VAL_A,Bの規格化にも使用 //0: V64 (not needed for VM cal) //1: 3-3k 0xffff //2: 3-25k 0xffff <-> 1.0273e5 km/s(30keV) //3: 2k-25k 0xffff <-> 1.0273e5 km/s(30keV) #define d_Lcl_MEA_2qm 5.931e2 //=sqrt(2*q/m)/1000 #define d_Lcl_MEA_MAX_V32 1.0273e5 //LOOKUP TABLE Velocity32 規格化パラメータ (km/s) 30keV //#define d_Lcl_MEA_MAX_V64 1000 //LOOKUP TABLE Velocity64 規格化パラメータ (km) //モーメント計算の規格パラメータ #define d_Lcl_MEA_N_NRM (1.0*d_Lcl_MEA_TBL_RD1*d_Lcl_MEA_TBL_POT*d_Lcl_MEA_TBL_GF/d_Lcl_MEA_TBL_VF) //Cnt/v*gf/vf*cos*pot = cos*pot*gf/vf #define d_Lcl_MEA_V2_NRM (d_Lcl_MEA_N_NRM*0xffff*d_Lcl_MEA_TBL_GF*d_Lcl_MEA_TBL_RD1*d_Lcl_MEA_TBL_POT) //Cnt*gf*cos*sin*pot^2 = N*C*gf*sin*pot #define d_Lcl_MEA_V3_NRM (d_Lcl_MEA_V2_NRM*d_Lcl_MEA_TBL_RD1) //V2*sin #define d_Lcl_MEA_P3_NRM (d_Lcl_MEA_V3_NRM*0xffff*d_Lcl_MEA_TBL_VF*d_Lcl_MEA_TBL_POT) //Cnt*gf*cos^3*v*vf*pot^3 = V3*v*vf*pot #define d_Lcl_MEA_P4_NRM (d_Lcl_MEA_P3_NRM*d_Lcl_MEA_TBL_RD1) //P3*cos #define d_Lcl_MEA_P5_NRM (d_Lcl_MEA_P4_NRM*d_Lcl_MEA_TBL_RD1) //P4*cos #define d_Lcl_MEA_H3_NRM (d_Lcl_MEA_P3_NRM*0xffff*d_Lcl_MEA_TBL_VF*d_Lcl_MEA_TBL_POT) //Cnt*gf*cos^3*(v*vf)^2*potf^4 = P3*v*vf*pot #define d_Lcl_MEA_H2_NRM (d_Lcl_MEA_H3_NRM/d_Lcl_MEA_TBL_RD1) //H3/cos //桁補正 #define d_Lcl_MEA_N_OR 0.1 #define d_Lcl_MEA_V_OR 10 #define d_Lcl_MEA_P_OR 10 #define d_Lcl_MEA_H_OR 100 //モーメント計算の規格パラメータ(単一 energy step) #define d_Lcl_MEA_N_NRM1 (1.0*0xffff*d_Lcl_MEA_TBL_RD1*d_Lcl_MEA_TBL_GF/d_Lcl_MEA_TBL_VF) //Cnt*gf/vf*cos = Cnt*cos #define d_Lcl_MEA_V2_NRM1 (d_Lcl_MEA_N_NRM1*d_Lcl_MEA_TBL_GF*d_Lcl_MEA_TBL_RD1) //Cnt*gf*cos*sin = N1*gf*sin #define d_Lcl_MEA_V3_NRM1 (d_Lcl_MEA_V2_NRM1*d_Lcl_MEA_TBL_RD1) //V2*sin #define d_Lcl_MEA_P3_NRM1 (d_Lcl_MEA_V3_NRM1*d_Lcl_MEA_TBL_VF) //Cnt*gf*cos^3*vf = V3*vf #define d_Lcl_MEA_P4_NRM1 (d_Lcl_MEA_P3_NRM1*d_Lcl_MEA_TBL_RD1) //P3*cos #define d_Lcl_MEA_P5_NRM1 (d_Lcl_MEA_P4_NRM1*d_Lcl_MEA_TBL_RD1) //P4*cos #define d_Lcl_MEA_H3_NRM1 (d_Lcl_MEA_P3_NRM1*d_Lcl_MEA_TBL_VF) //Cnt*gf*cos^3*(vf)^2 = P3*vf #define d_Lcl_MEA_H2_NRM1 (d_Lcl_MEA_H3_NRM1/d_Lcl_MEA_TBL_RD1) //H3/cos #define d_Lcl_MEA_3DLL 0x10 // Lmode 3D-LLの作成タイミング (最下位1bit = 0) // 3D-LL = 3D-M より3D-Mを3D-LLとしてTLM #define d_Lcl_MEA_HK2B 4 //HDR(8B) #define d_Lcl_MEA_IF2B 4 //INF(8B) //#define d_Lcl_MEA_MD2B (16 + 32 + 13*6) //M-mode(EtOMN, EtPAP, VM) //#define d_Lcl_MEA1_Ms2B (d_Lcl_MEA_HK2B + d_Lcl_MEA_IF2B + d_Lcl_MEA_MD2B*2) // //MEA1 M mode, 3D-Mのアドレス #define d_Lcl_MEA1_Ms2B64 (d_Lcl_MEA_HK2B + 64*2 + d_Lcl_MEA_IF2B + 8*16*2) #define d_Lcl_MEA_PACSZ (12 + 8 + 1024 + 4) //観測データPacketの有効部分の最大値 #define d_Lcl_MEA_HDRSZ (12 + 8) // //#define d_Lcl_MEA_SCISZ 1024 //Science data size // データ処理パラメータの規格化 // Please fill contents. //制御用のフラグ及びパラメータ、コマンドによる変更がある for MEA1&2 struct _s_MEA_CtrlParam { unsigned char uc_snap_ave; //1:Snapshot, 0:Average unsigned char uc_eng_sci; //1:Eng, 0:Sci unsigned char uc_mode; //Eng(0-4), Sci(0-8) //POTENTIAL unsigned char uc_pot_mode; //0: NOT USE; 1: us_pot_A*p + us_pot_B //unsigned short us_pot_val; // - 0x7fff )*100/0x7fff unsigned short us_pot_A; // - 0x7fff )*100/0x7fff unsigned short us_pot_B; // - 0x7fff )*100/0x7fff //MGF unsigned char uc_B_mode; unsigned char uc_B_sec; //HK monitor unsigned char uc_HKmon_ena;//1:ENA, 0:DIS (from Higher bit, MHV, SVS, SVG, MCPI, ASCT, IF-T, ASIC_SEL) unsigned short us_TMCP_lmt[2]; unsigned short us_MCP_lmt[2]; unsigned short us_IMCP_lmt[2]; unsigned short us_TFPG_lmt[2]; unsigned short us_IP5V_lmt[2]; unsigned char uc_HK_anmly; //HK anomaly detection [0-7]TMCP,MCP, IMCP, TFPG, IP5V //Product control unsigned char uc_stpe_ena; //FLAG of sending Stp En# unsigned char uc_stpe_no; unsigned char uc_gf_ena; //FLAG of Autmatic GF changing unsigned char uc_gf_spn; //Spin number for GF changing unsigned char uc_gf_spn_dec; // Counter for decreasing g unsigned char uc_gf_spn_inc; // Counter for increasing g unsigned char uc_gf_no; unsigned char uc_ep[9]; //en step for EtPAP, EtPAPe // 0: Width // 1-8: Starting points of energy step //unsigned char uc_evm[6]; //en step for VM unsigned int ui_eng_vmf; // 1/0 in 32 Estep for VM cal. unsigned char uc_en_tbl; //unsigned char uc_pac_add; //Address for asignment of count data at G3uc_data unsigned char uc_settbl_n; //初期化作業用カウンタ unsigned char uc_readrom; //E2PROM読み込みのフラグ, APP02で検出する。 unsigned char uc_got_e2p_prm; //E2PROMから読み込み後TRUEになる //MCP level before turning OFF unsigned char uc_MCP_V[2]; //SCNT1 unsigned char uc_swcal_prm[5]; //観測データをソフト内で上書きする //0: ENA/DIS //1: EnStep 0xff = all //2: CH //3: Sector //4: Count 0 = k(EnStep) unsigned char uc_vet_cmp_ena; //プロダクトの圧縮を行わない //unsigned char uc_tmp_get_pac; //unsigned char uc_pacs; //パケット番号の栞 unsigned short us_spinNo; unsigned short us_Ldata[0x800]; unsigned short us_Llen_ttl; }; //観測データ、解析用パラメータ(初期化時にE2PROMから値を取得する) struct _s_MEA_ProcParam { unsigned char uc_gf[5*16]; // /gf unsigned char uc_gf2[5*16]; // /gf*dE*sr //unsigned short us_dE[4*16]; //unsigned short us_sr[4*16]; char c_csp[5*16]; char c_snp[5*16]; char c_csa[5*16*16]; char c_sna[5*16*16]; short s_csp0[16]; short s_snp0[16]; short s_csa0[16]; short s_sna0[16]; unsigned short us_v32[32*3]; //32step x 4 independent of the mode of f-factor //unsigned short us_v64[64]; //64step unsigned char uc_vf[5*16]; }; //プロダクト struct _s_MEA_Product { unsigned int ui_LEtO[16]; //(4s) shared by MEA1&2 unsigned int ui_LEtP1[16*4]; //(16s) unsigned int ui_LEtP2[16*4]; //(16s) double f_LVM1[13*6]; //(16s) double f_LVM2[13*6]; //(16s) unsigned char uc_infoL; //comment[3] unsigned char uc_infoM; //comment[3] unsigned int ui_MEtO[64*2]; //(2s, 4s) shared by MEA1&2 unsigned int ui_MEtP[8*16*2]; //(2s, 4s) shared by MEA1&2 double f_MVM[13*6*2]; //(2s, 4s) shared by MEA1&2 unsigned short us_3DM[16*88 + 8]; //(4s or 8s) M-data container unsigned short us_3D_H[32*88 + 4]; //unsigned short us_MEA2_3D_H[32*88]; unsigned short us_Llen2; unsigned short us_Mlen; unsigned short us_Mlen2; // unsigned short us_Hlen; unsigned char uc_hdr[ d_Lcl_MEA_HK2B*2]; unsigned char uc_hdrH[d_Lcl_MEA_HK2B*2]; unsigned char uc_hdr2[d_Lcl_MEA_IF2B*2]; unsigned int ui_TIL; //unsigned int ui_TIH; }; struct _s_MEA_Command { unsigned char uc_cnt; unsigned char uc_err_cnt; unsigned char uc_ans[4]; unsigned char uc_mcp_off; //counter unsigned char uc_psu_off; //counter unsigned char uc_cnt_en; }; #ifdef _EXTERN_MPPE_MEA_VAL_ #define d_Lcl_MEA_EXTERN #else #define d_Lcl_MEA_EXTERN extern #endif d_Lcl_MEA_EXTERN struct _s_MEA_CtrlParam Gst_MEA1_ctrl; d_Lcl_MEA_EXTERN struct _s_MEA_CtrlParam Gst_MEA2_ctrl; d_Lcl_MEA_EXTERN struct _s_MEA_ProcParam Gst_MEA1_proc; d_Lcl_MEA_EXTERN struct _s_MEA_ProcParam Gst_MEA2_proc; d_Lcl_MEA_EXTERN struct _s_MEA_Product Gst_MEA_dat; d_Lcl_MEA_EXTERN struct _s_MEA_Command Gst_MEA1_cmd; d_Lcl_MEA_EXTERN struct _s_MEA_Command Gst_MEA2_cmd; unsigned char app01_Init_MEA(unsigned char); //char app03_MEA_tlmout(unsigned char, unsigned short*, unsigned short*, unsigned char); char app03_MEA_3D(unsigned short*, unsigned short*, unsigned char); void app03_MEA_makeSWcal(unsigned char, unsigned short*, unsigned char);