string ChatLink::getDisplayText() { if (type == TYPE_SPOTIFY) { boost::regex regSpotify; regSpotify.assign("(spotify:(artist|track|album):[A-Z0-9]{22})", boost::regex_constants::icase); if (boost::regex_match(url, regSpotify)) { string sType, displayText; size_t found = url.find_first_of(":"); string tmp = url.substr(found+1,url.length()); found = tmp.find_first_of(":"); if (found != string::npos) { sType = tmp.substr(0,found); } if (Util::stricmp(sType.c_str(), "track") == 0) { displayText = STRING(SPOTIFY_TRACK); } else if (Util::stricmp(sType.c_str(), "artist") == 0) { displayText = STRING(SPOTIFY_ARTIST); } else if (Util::stricmp(sType.c_str(), "album") == 0) { displayText = STRING(SPOTIFY_ALBUM); } return displayText; } //some other spotify link, just show the original url } else if (type == TYPE_MAGNET) { Magnet m = Magnet(url); if(!m.fname.empty()) { return m.fname + " (" + Util::formatBytes(m.fsize) + ")"; } } return url; }
DupeType ChatLink::updateDupeType(const UserPtr& aUser) { if (type == TYPE_RELEASE) { if (ShareManager::getInstance()->isDirShared(url)) { dupe = DUPE_SHARE; } else { auto qd = QueueManager::getInstance()->isDirQueued(url); if (qd == 1) { dupe = DUPE_QUEUE; } else if (qd == 2) { dupe = DUPE_FINISHED; } } } else if (type == TYPE_MAGNET) { Magnet m = Magnet(url); dupe = m.getDupeType(); if (dupe == DUPE_NONE && ShareManager::getInstance()->isTempShared(aUser ? aUser->getCID().toBase32() : Util::emptyString, m.getTTH())) { dupe = DUPE_SHARE; } } return dupe; }
int G4Setup(const int absorberactive = 0, const string &field ="1.5", const EDecayType decayType = TPythia6Decayer::kAll, const bool do_svtx = true, const bool do_preshower = false, const bool do_cemc = true, const bool do_hcalin = true, const bool do_magnet = true, const bool do_hcalout = true, const bool do_pipe = true, const bool do_bbc = true, const bool do_FEMC = false, const bool do_FHCAL = false, const float magfield_rescale = 1.0) { //--------------- // Load libraries //--------------- gSystem->Load("libg4detectors.so"); gSystem->Load("libg4testbench.so"); //--------------- // Fun4All server //--------------- Fun4AllServer *se = Fun4AllServer::instance(); PHG4Reco* g4Reco = new PHG4Reco(); g4Reco->set_rapidity_coverage(1.1); // according to drawings if (decayType != TPythia6Decayer::kAll) { g4Reco->set_force_decay(decayType); } double fieldstrength; istringstream stringline(field); stringline >> fieldstrength; if (stringline.fail()) { // conversion to double fails -> we have a string if (field.find("sPHENIX.root") != string::npos) { g4Reco->set_field_map(field, 1); } else { g4Reco->set_field_map(field, 2); } } else { g4Reco->set_field(fieldstrength); // use const soleniodal field } g4Reco->set_field_rescale(magfield_rescale); double radius = 0.; //---------------------------------------- // PIPE if (do_pipe) radius = Pipe(g4Reco, radius, absorberactive); //---------------------------------------- // SVTX if (do_svtx) radius = Svtx(g4Reco, radius, absorberactive); //---------------------------------------- // PRESHOWER if (do_preshower) radius = PreShower(g4Reco, radius, absorberactive); //---------------------------------------- // CEMC // if (do_cemc) radius = CEmc(g4Reco, radius, 8, absorberactive); // if (do_cemc) radius = CEmc_Vis(g4Reco, radius, 8, absorberactive);// for visualization substructure of SPACAL, slow to render //---------------------------------------- // HCALIN if (do_hcalin) radius = HCalInner(g4Reco, radius, 4, absorberactive); //---------------------------------------- // MAGNET if (do_magnet) radius = Magnet(g4Reco, radius, 0, absorberactive); //---------------------------------------- // HCALOUT if (do_hcalout) radius = HCalOuter(g4Reco, radius, 4, absorberactive); //---------------------------------------- // FEMC if ( do_FEMC ) FEMCSetup(g4Reco, absorberactive); //---------------------------------------- // FHCAL if ( do_FHCAL ) FHCALSetup(g4Reco, absorberactive); // sPHENIX forward flux return(s) PHG4CylinderSubsystem *flux_return_plus = new PHG4CylinderSubsystem("FWDFLUXRET", 0); flux_return_plus->SetLength(10.2); flux_return_plus->SetPosition(0,0,335.9); flux_return_plus->SetRadius(5.0); flux_return_plus->SetLengthViaRapidityCoverage(false); flux_return_plus->SetThickness(263.5-5.0); flux_return_plus->SetMaterial("G4_Fe"); flux_return_plus->SetActive(false); flux_return_plus->SuperDetector("FLUXRET_ETA_PLUS"); flux_return_plus->OverlapCheck(overlapcheck); g4Reco->registerSubsystem(flux_return_plus); PHG4CylinderSubsystem *flux_return_minus = new PHG4CylinderSubsystem("FWDFLUXRET", 0); flux_return_minus->SetLength(10.2); flux_return_minus->SetPosition(0,0,-335.9); flux_return_minus->SetRadius(5.0); flux_return_minus->SetLengthViaRapidityCoverage(false); flux_return_minus->SetThickness(263.5-5.0); flux_return_minus->SetMaterial("G4_Fe"); flux_return_minus->SetActive(false); flux_return_minus->SuperDetector("FLUXRET_ETA_MINUS"); flux_return_minus->OverlapCheck(overlapcheck); g4Reco->registerSubsystem(flux_return_minus); //---------------------------------------- // BLACKHOLE // swallow all particles coming out of the backend of sPHENIX PHG4CylinderSubsystem *blackhole = new PHG4CylinderSubsystem("BH", 1); blackhole->SetRadius(radius + 10); // add 10 cm blackhole->SetLengthViaRapidityCoverage(false); blackhole->SetLength(g4Reco->GetWorldSizeZ() - no_overlapp); // make it cover the world in length blackhole->BlackHole(); blackhole->SetThickness(0.1); // it needs some thickness blackhole->SetActive(); // always see what leaks out blackhole->OverlapCheck(overlapcheck); g4Reco->registerSubsystem(blackhole); //---------------------------------------- // FORWARD BLACKHOLEs // +Z blackhole = new PHG4CylinderSubsystem("BH_FORWARD_PLUS", 1); blackhole->SuperDetector("BH_FORWARD_PLUS"); blackhole->SetRadius(0); // add 10 cm blackhole->SetLengthViaRapidityCoverage(false); blackhole->SetLength(0.1); // make it cover the world in length blackhole->SetPosition(0,0, g4Reco->GetWorldSizeZ()/2. - 0.1 - no_overlapp); blackhole->BlackHole(); blackhole->SetThickness(radius - no_overlapp); // it needs some thickness blackhole->SetActive(); // always see what leaks out blackhole->OverlapCheck(overlapcheck); g4Reco->registerSubsystem(blackhole); blackhole = new PHG4CylinderSubsystem("BH_FORWARD_NEG", 1); blackhole->SuperDetector("BH_FORWARD_NEG"); blackhole->SetRadius(0); // add 10 cm blackhole->SetLengthViaRapidityCoverage(false); blackhole->SetLength(0.1); // make it cover the world in length blackhole->SetPosition(0,0, - g4Reco->GetWorldSizeZ()/2. +0.1 + no_overlapp); blackhole->BlackHole(); blackhole->SetThickness(radius - no_overlapp); // it needs some thickness blackhole->SetActive(); // always see what leaks out blackhole->OverlapCheck(overlapcheck); g4Reco->registerSubsystem(blackhole); PHG4TruthSubsystem *truth = new PHG4TruthSubsystem(); g4Reco->registerSubsystem(truth); se->registerSubsystem( g4Reco ); }
void AOCS(double AOCS_Xupdata[19],double AOCS_Xinitial[14],int N,double AOCS_Y0[100],unsigned char AOCS_Flag0[6],double AOCS_Y[],unsigned char AOCS_Flag[9]) { int i; double Worbity_CHK,nine_CHK[9]; all2Xupdate(AOCS_Xupdata,&Time,Wwheel,ThTime); //输出飞轮转速[4]和推力器开启时间[14] all2Xinitial(AOCS_Xinitial,Y,Wib,Quatib,&Msat); // 输出卫星位置速度[6],本体相对惯性系在本体系下的姿态角速度[3],本体系相对惯性系的四元数[4],卫星质量[1] /*质量更新模型*/ MsatUPDATE(&Msat,ACS_DMsat,ThTime); //返回质量 /*环境力矩*/ //输入为卫星时间,太阳黄经,黄赤交角; 输出为格林尼治视恒星时角,太阳矢量[3],测量系相对惯性系的姿态四元数[4] SunVectori(Time,&Yousun,&Aisun,&Jingdu_GreenWitch_inertia, SunInertia, Quatis);/*太阳矢量*/ //输入为太阳矢量,本体系相对惯性系的四元数[3],太阳帆板安装矩阵[3][3],太阳帆板表面反射系数=0.5,太阳光照射面积=5, //太阳光压=9e-6,太阳光压压心到卫星质心的矢径[3],输出本体系下太阳光压力[3]和光压力矩[3] SunTorque(SunInertia,Quatib,ACS_Psunb,ACS_niu,ACS_Ssun,ACS_Psun,ACS_Cps,F_Sun,Td_Sun); /*太阳光压力矩模型*/ /*执行机构*/ //输入为推力器开启时间[14],推力器推力系数[14],推力器组喷嘴中心的方向余弦角[14][3],推力器组偏心矢量[14][3] //输出本体系下推力器推力[3]和力矩[3] Fthrust(ThTime,ACS_KFthurst,ACS_cosattis,ACS_Cattis, F_Th, T_Th); //输入为飞轮转速[4],飞轮转动惯量[4]为什么是一维矩阵? 飞轮安装矩阵[4][3], 输出本体系下飞轮组产生的力矩[3] Wheel(Wwheel,ACS_Jwheel,ACS_Pwheelb, Twheelb); Magnetic(Bci,Quatib,Mags,ACS_PMagb, Tmag); /*轨道递推*/ for(i=0;i<3;i++) Fb[i]=F_Th[i]+F_aero[i]+F_Sun[i];/*计算本体系下卫星合外力*/ orbJ2_rk4(Y,H,Fb,Quatib,Msat); /*轨道动力学模型,利用龙格库塔法递推,得到下一时刻的位置和速度,需要给出初始位置和速度*/ PV2Six(Y,nine,&Worbity); /*位置速度转换六根数模型,由位置和速度计算轨道六要素*/ PV2Six_OLD(Y,nine_CHK,&Worbity_CHK); /*nine[9]:0A,1E,2SI,3DW,4SW,5DM,6SU,7theta,8n*/ Iner2orbitquat(nine[3],nine[2],nine[6],Quatio); /*姿态递推*/ QuatTatti_rk4(H,Wib,Quatib);/*姿态运动学,递推下一时刻的姿态四元素Qib */ for(i=0;i<3;i++) Tb[i]=Twheelb[i]+T_Th[i]+Td_geomagnetic[i]+Td_gravity[i]+Td_aero[i]+Td_Sun[i]+Tmag[i]; /*计算卫星合力矩*/ //输入飞轮转动惯量[4],飞轮转速[4]; 输出飞轮角动量[4] WheelMomentum(ACS_Jwheel,Wwheel,MomentumWheel); /*飞轮角动量计算*/ //输入飞轮角动量NMS[4](不知道是啥?),飞轮安装矩阵[4][3]; 输出飞轮系统角动量[4] WheelSysToThree(MomentumWheel,ACS_Pwheelb,Hwheel); /*飞轮系统角动量计算 */ //输入飞轮系统角动量,本体相对惯性系的角速度[3],卫星转动惯量[3][3]; 输出卫星角动量[3] formHB(Hwheel,Wib,ACS_IBf,Hbody); /*卫星角动量计算*/ //输入积分步长[1],卫星角动量[3],卫星合力矩[3],卫星转动惯量[3][3]; 输出本体系相对惯性系的角速度[3] BiasattiDynamic_rk4(H,Hbody,Tb,ACS_IBf,Wib); /*姿态动力学,带轮控系统的刚体动力学,递推下一时刻的角速度Wib*/ /*天体矢量*/ //输入为卫星时间+积分步长,太阳黄经,黄赤交角, 输出惯性系下的太阳矢量[3],太阳系相对惯性系的四元数[4],格林尼治视恒星时角[1]*/ SunVectori(Time+H,&Yousun,&Aisun,&Jingdu_GreenWitch_inertia,SunInertia,Quatis); /*太阳矢量模型*/ //输入卫星时间+积分步长, 卫星位置速度[6]; 输出惯性系下月球矢量[3] MoonVectori(Time+H,Y,Mooni); /*月球矢量模型*/ //输入卫星位置速度[6]; 输出惯性系下地球矢量[3] EarthVectori(Y,Earthi); /*地心矢量模型*/ //输入卫星位置速度[6],惯性系下太阳矢量[3], 输出地影标志位:EshadowFlag=1时进入地影; EarthShadow(Y,SunInertia,&EshadowFlag);/*地影计算*/ /*敏感器*/ //输入太阳矢量[3],本体系相对惯性系的四元数[4],数字太敏1的安装矩阵[3][3],数字太敏1的视场测量极值[1],数字太敏1的噪声系数[1],地影标志位,数字太敏1测量有效标志位 //输出理论值和带噪声值:太阳矢量在测量系yz和xz平面上的投影分别与z轴的夹角 Fsun(SunInertia,Quatib,ACS_PFsunb1,ACS_Fsun1Limit,ACS_Fsun1R,EshadowFlag,&Fsun1Flag,&Fsun1out0,&Fsun1out); /*数字太阳敏感器1测量模型*/ Fsun(SunInertia,Quatib,ACS_PFsunb2,ACS_Fsun2Limit,ACS_Fsun2R,EshadowFlag,&Fsun2Flag,&Fsun2out0,&Fsun2out); /*数字太阳敏感器2测量模型*/ //输入太阳矢量,地球矢量,月球矢量,星敏A光轴指向分别与太阳、地球、月球矢量夹角的临界值[3](单位是度°),星敏A到星体的旋转四元数[4] //本体系相对惯性系的四元数[4],星敏A噪声系数[3],星敏A测量有效标志位[1]; 输出星敏A/B安装 quatstar(SunInertia,Earthi,Mooni,ACS_StarALimit,ACS_StarsbA,Quatib,ACS_quatstarRA,&StarAFlag,QuatsiA0,QuatsiA); /*星敏感器A测量模型,输出测量四元素*/ quatstar(SunInertia,Earthi,Mooni,ACS_StarBLimit,ACS_StarsbB,Quatib,ACS_quatstarRB,&StarBFlag,QuatsiB0,QuatsiB); /*星敏感器B测量模型,输出测量四元素*/ Gyro(Wib,ACS_Pgyrob1,ACS_NoGyro1,ACS_GyroR1,ACS_GyroRC1,Wgyro10,Wgyro1); /*平台陀螺测量模型,输出测量角速度*/ Gyro(Wib,ACS_Pgyrob2,ACS_NoGyro2,ACS_GyroR2,ACS_GyroRC2,Wgyro20,Wgyro2); /*光纤陀螺测量模型,输出测量角速度*/ Acceler(F_Th,F_aero,F_Sun,Msat,ACS_Psb,ACS_AccelerR,ACS_AccelerRC,as0,as); /*加速度计测量模型,输出测量角加速度*/ Magnet(Bci,Quatib,ACS_PbBB,ACS_MagoutR,Magout0,Magout); /*磁强计模型,输出测量磁场强度*/ Distance_in_Radar(r1,r2, &Distance); Angel_in_Camera(r1,r2,ACS_StarsbA,Quatib, &Theta_yz, &Theta_yx); /*系统输出*/ Output(AOCS_Y0,AOCS_Flag0,AOCS_Y,AOCS_Flag); }
int G4Setup(const int absorberactive = 0, const string &field ="1.5", #if ROOT_VERSION_CODE >= ROOT_VERSION(6,00,0) const EDecayType decayType = EDecayType::kAll, #else const EDecayType decayType = TPythia6Decayer::kAll, #endif const bool do_tracking = true, const bool do_pstof = true, const bool do_cemc = true, const bool do_hcalin = true, const bool do_magnet = true, const bool do_hcalout = true, const bool do_pipe = true, const bool do_plugdoor = false, // const bool do_plugdoor = true, const float magfield_rescale = 1.0) { //--------------- // Load libraries //--------------- gSystem->Load("libg4detectors.so"); gSystem->Load("libg4testbench.so"); //--------------- // Fun4All server //--------------- Fun4AllServer *se = Fun4AllServer::instance(); // read-in HepMC events to Geant4 if there is any HepMCNodeReader *hr = new HepMCNodeReader(); se->registerSubsystem(hr); PHG4Reco* g4Reco = new PHG4Reco(); g4Reco->set_rapidity_coverage(1.1); // according to drawings // uncomment to set QGSP_BERT_HP physics list for productions // (default is QGSP_BERT for speed) // g4Reco->SetPhysicsList("QGSP_BERT_HP"); #if ROOT_VERSION_CODE >= ROOT_VERSION(6,00,0) if (decayType != EDecayType::kAll) #else if (decayType != TPythia6Decayer::kAll) #endif { g4Reco->set_force_decay(decayType); } double fieldstrength; istringstream stringline(field); stringline >> fieldstrength; if (stringline.fail()) { // conversion to double fails -> we have a string if (field.find("sPHENIX.root") != string::npos) { g4Reco->set_field_map(field, PHFieldConfig::Field3DCartesian); } else { g4Reco->set_field_map(field, PHFieldConfig::kField2D); } } else { g4Reco->set_field(fieldstrength); // use const soleniodal field } g4Reco->set_field_rescale(magfield_rescale); double radius = 0.; //---------------------------------------- // PIPE if (do_pipe) radius = Pipe(g4Reco, radius, absorberactive); //---------------------------------------- // TRACKING if (do_tracking) radius = Tracking(g4Reco, radius, absorberactive); //---------------------------------------- // PSTOF if (do_pstof) radius = PSTOF(g4Reco, radius, absorberactive); //---------------------------------------- // CEMC // if (do_cemc) radius = CEmc(g4Reco, radius, 8, absorberactive); // if (do_cemc) radius = CEmc_Vis(g4Reco, radius, 8, absorberactive);// for visualization substructure of SPACAL, slow to render //---------------------------------------- // HCALIN if (do_hcalin) radius = HCalInner(g4Reco, radius, 4, absorberactive); //---------------------------------------- // MAGNET if (do_magnet) radius = Magnet(g4Reco, radius, 0, absorberactive); //---------------------------------------- // HCALOUT if (do_hcalout) radius = HCalOuter(g4Reco, radius, 4, absorberactive); //---------------------------------------- // sPHENIX forward flux return door if (do_plugdoor) PlugDoor(g4Reco, absorberactive); //---------------------------------------- // BLACKHOLE // swallow all particles coming out of the backend of sPHENIX PHG4CylinderSubsystem *blackhole = new PHG4CylinderSubsystem("BH", 1); blackhole->set_double_param("radius",radius + 10); // add 10 cm blackhole->set_int_param("lengthviarapidity",0); blackhole->set_double_param("length",g4Reco->GetWorldSizeZ() - no_overlapp); // make it cover the world in length blackhole->BlackHole(); blackhole->set_double_param("thickness",0.1); // it needs some thickness blackhole->SetActive(); // always see what leaks out blackhole->OverlapCheck(overlapcheck); g4Reco->registerSubsystem(blackhole); //---------------------------------------- // FORWARD BLACKHOLEs // +Z blackhole = new PHG4CylinderSubsystem("BH_FORWARD_PLUS", 1); blackhole->SuperDetector("BH_FORWARD_PLUS"); blackhole->set_double_param("radius",0); // add 10 cm blackhole->set_int_param("lengthviarapidity",0); blackhole->set_double_param("length",0.1); // make it cover the world in length blackhole->set_double_param("place_z",g4Reco->GetWorldSizeZ()/2. - 0.1 - no_overlapp); blackhole->BlackHole(); blackhole->set_double_param("thickness",radius - no_overlapp); // it needs some thickness blackhole->SetActive(); // always see what leaks out blackhole->OverlapCheck(overlapcheck); g4Reco->registerSubsystem(blackhole); blackhole = new PHG4CylinderSubsystem("BH_FORWARD_NEG", 1); blackhole->SuperDetector("BH_FORWARD_NEG"); blackhole->set_double_param("radius",0); // add 10 cm blackhole->set_int_param("lengthviarapidity",0); blackhole->set_double_param("length",0.1); // make it cover the world in length blackhole->set_double_param("place_z", - g4Reco->GetWorldSizeZ()/2. +0.1 + no_overlapp); blackhole->BlackHole(); blackhole->set_double_param("thickness",radius - no_overlapp); // it needs some thickness blackhole->SetActive(); // always see what leaks out blackhole->OverlapCheck(overlapcheck); g4Reco->registerSubsystem(blackhole); PHG4TruthSubsystem *truth = new PHG4TruthSubsystem(); g4Reco->registerSubsystem(truth); se->registerSubsystem( g4Reco ); return 0; }
vec2f Camera2D::clickMagnet(const vec2i &now) const { vec2f cpos = click(now); Magnet(cpos); return cpos; }