SDTMIG-finding domain _PC&PP

1、介绍

        PC是用来记录药代动力学浓度的数据集,不仅用于药物和代谢物的测量还可用于样品性质。而PP数据集是用来记录药代动力学参数,如达峰浓度(Cmax),药时曲线下面积(AUC)、清除率(CL)等。本质上药代动力学依旧是化验检测,通过血检、尿检等研究药物在体内的情况。

下图是文言一心给出的一些药代动力学参数解释,可以帮助理解。

b918e855c97049fc96a9e0412b282914.png

     在创建药代动力学标准域时,由于药代动力学的检测数据一般是来自外部实验室文件,而非CRF所收集的数据,创建时,需要将CRF收集的数据和外部数据(如XLSX数据)合并到一起创建。

2、PC数据集结构

5c7c7cc1bfe14254bb25c1e1b4393f3f.png

PCULOQ/PCLLOQ:分别为检测的上下限,如果结果在检测范围内,则能得到具体的检测值,如果超出检测范围,便无法获得准确的检测值。

如某检测的检测范围是在0.1~20之间,而检测的结果却非常的低,低于了检测下限,则用PCORRES<0.1表示结果。

cea41f05a09944728af346797f96e9ae.png

 

PCTEST/PCTESTCD :对于样品性质(如ph值,样品体积)的检测,PCCAT 的值为 "SPECIMEN PROPERTY".

ef14472a31df4175bd311ae7ea6c4523.png

 

PCTPTREF :为PCTPT、PCTPTNUM和PCELTM基础的固定参考点。

PCELTM:PCTPTREF(PCRFTDTC)与PCDTC之间的相对时间点(PCRFTDTC-PCDTC),如果PCDTC在PCTPTREF前,那么PCELTM为负时间点,如-PT15M。

PCRFTDTC:为PCTPTREF的时间。

14c45f3d978b4e9b9de0fc4525ad34d6.png

 

PCEVLINT :为评估的区间,实际中可以通过PCENDTC减去PCDTC来确定,类似于–DUR变量。

712ce9f981be44b1ac528e275e358ee4.png

 

3、PP数据集结构

ff842f4a0fc649279aa020377c22072a.png

PPSPEC:为检测的样本类型,如血浆、尿液。如果参数需要多种样本类型计算得到,那么PPSPEC的值应该为空。

如总清除率,是通过多种样本类型(尿液和血浆等)计算得到,那么PPSPEC应该为空。

ffee92a79f6c467986608ecead56e86a.png

PPANMETH :为分析的方法,描述了对复杂观测结果进行二次处理的方法。可以是术语表中的方法,也可以是申办方自己定义的方法。

术语表:

b292fc8532f94dc39d6298cc1b924346.png

自定义图例:

c1037bf4d41744c391f77f62a5004109.png

可以发现,第4条和第5条观测,都是计算AUC比参数,计算的方法便是申办方自己定义的两个AUC的比值,并把算法记录在PPANMETH 中。

第五条记录的结果0.52按IG原文的算法,用代谢物2/代谢物1计算不出来,我觉得应该是原药/代谢物2的比值,计算的结果正好是0.52。

 

PPDTC:为参数计算的日期。

 

PPRFTDTC:等于PC.PCRFTDTC。

 

PPSTINT/PPENINT :相当于相对于参照时间PPRFTDTC的开始和结束时间点,构成参数计算的一个时间区间。

如图例:

8dd3f2e309874925aa2c8b7a3e80cff4.png

计算T1-T2下的AUC,分别计算从参照时间开始的0小时-24小时下的AUC,0-48小时下的AUC,24小时-48小时下的AUC。可以看出,PPSTINT/PPENINT就是参数计算的时间区间。

 

 

 

 

  • 12
    点赞
  • 13
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
代码每句话多啥意思// if ( num_iter < 10000 ) // cout << "current=" << current->index.transpose() << endl; if (current->index(0) == endPtr->index(0) && current->index(1) == endPtr->index(1) && current->index(2) == endPtr->index(2))判断当前节点是否为终点。 { // ros::Time time_2 = ros::Time::now(); // printf("\033[34mA star iter:%d, time:%.3f\033[0m\n",num_iter, (time_2 - time_1).toSec()*1000); // if((time_2 - time_1).toSec() > 0.1) // ROS_WARN("Time consume in A star path finding is %f", (time_2 - time_1).toSec() ); gridPath_ = retrievePath(current); return true; } current->state = GridNode::CLOSEDSET; //move current node from open set to closed set. for (int dx = -1; dx <= 1; dx++) for (int dy = -1; dy <= 1; dy++) for (int dz = -1; dz <= 1; dz++) { if (dx == 0 && dy == 0 && dz == 0) continue; Vector3i neighborIdx; neighborIdx(0) = (current->index)(0) + dx; neighborIdx(1) = (current->index)(1) + dy; neighborIdx(2) = (current->index)(2) + dz; if (neighborIdx(0) < 1 || neighborIdx(0) >= POOL_SIZE_(0) - 1 || neighborIdx(1) < 1 || neighborIdx(1) >= POOL_SIZE_(1) - 1 || neighborIdx(2) < 1 || neighborIdx(2) >= POOL_SIZE_(2) - 1) { continue; } neighborPtr = GridNodeMap_[neighborIdx(0)][neighborIdx(1)][neighborIdx(2)]; neighborPtr->index = neighborIdx; bool flag_explored = neighborPtr->rounds == rounds_; if (flag_explored && neighborPtr->state == GridNode::CLOSEDSET) { continue; //in closed set. } neighborPtr->rounds = rounds_; if (checkOccupancy(Index2Coord(neighborPtr->index))) { continue; } double static_cost = sqrt(dx * dx + dy * dy + dz * dz); tentative_gScore = current->gScore + static_cost;
06-06
好的,我来解释一下每个语句的作用: 1. `if ( num_iter < 10000 ) cout << "current=" << current->index.transpose() << endl;`:这个语句用于在前10000次迭代中输出当前节点的索引,以便调试。 2. `if (current->index(0) == endPtr->index(0) && current->index(1) == endPtr->index(1) && current->index(2) == endPtr->index(2))`:这个语句用于判断当前节点是否为终点。 3. `gridPath_ = retrievePath(current);`:这个语句用于从起点到终点的路径,通过调用`retrievePath`函数来实现。 4. `current->state = GridNode::CLOSEDSET;`:这个语句用于将当前节点从开放集合移动到关闭集合。 5. `for (int dx = -1; dx <= 1; dx++) for (int dy = -1; dy <= 1; dy++) for (int dz = -1; dz <= 1; dz++)`:这个语句用于遍历当前节点周围的所有相邻节点。 6. `if (dx == 0 && dy == 0 && dz == 0) continue;`:这个语句用于跳过当前节点本身。 7. `Vector3i neighborIdx; neighborIdx(0) = (current->index)(0) + dx; neighborIdx(1) = (current->index)(1) + dy; neighborIdx(2) = (current->index)(2) + dz;`:这个语句用于获取当前相邻节点的索引。 8. `if (neighborIdx(0) < 1 || neighborIdx(0) >= POOL_SIZE_(0) - 1 || neighborIdx(1) < 1 || neighborIdx(1) >= POOL_SIZE_(1) - 1 || neighborIdx(2) < 1 || neighborIdx(2) >= POOL_SIZE_(2) - 1) { continue; }`:这个语句用于判断当前相邻节点是否在地图范围内。 9. `neighborPtr = GridNodeMap_[neighborIdx(0)][neighborIdx(1)][neighborIdx(2)];`:这个语句用于获取当前相邻节点的指针。 10. `bool flag_explored = neighborPtr->rounds == rounds_;`:这个语句用于判断当前相邻节点是否已经被探索。 11. `if (flag_explored && neighborPtr->state == GridNode::CLOSEDSET) { continue; }`:这个语句用于跳过已经在关闭集合中的相邻节点。 12. `neighborPtr->rounds = rounds_;`:这个语句用于标记当前相邻节点已经被探索。 13. `if (checkOccupancy(Index2Coord(neighborPtr->index))) { continue; }`:这个语句用于跳过障碍物。 14. `double static_cost = sqrt(dx * dx + dy * dy + dz * dz);`:这个语句用于计算从当前节点到当前相邻节点的代价。 15. `tentative_gScore = current->gScore + static_cost;`:这个语句用于计算从起点到当前相邻节点的代价。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值