δημιουργια Manhattan plot απο αρχειο .txt

Συζητήσεις για την Java

Συντονιστές: WebDev Moderators, Super-Moderators

Απάντηση
MamRa
Δημοσιεύσεις: 29
Εγγραφή: 06 Δεκ 2009 21:07

δημιουργια Manhattan plot απο αρχειο .txt

Δημοσίευση από MamRa » 04 Απρ 2012 15:05

καλησπέρα σας !!!
Εχω ένα αρχείο το οποίο το χω ανεβάσει το οποίο εχει πολλές στήλες .Εμένα με ενδιαφέρει η στήλη με τα chr ID οι οποίες τιμές θα αποτελλούν τον άξονα χ και οι τιμές p-value που θα αποτελουν τις τιμές του άξονα ψ ώστε να κάνω το διάγραμμα .

Καταρχάς θα πρέπει να διαβάσω το αρχείο μου αυτο τοχω κάνει με τον παρακάτω κώδικα

Κώδικας: Επιλογή όλων

import java.io.*;
class FileRead 
{
   public static void main(String args[])
	{
      try{
		// Open the file that is the first 
		// command line parameter
		FileInputStream fstream = new FileInputStream("phs000223.pha003543.txt");
		// Get the object of DataInputStream
		DataInputStream in = new DataInputStream(fstream);
        BufferedReader br = new BufferedReader(new InputStreamReader(in));
		String strLine;
		//Read File Line By Line
		while ((strLine = br.readLine()) != null) 	{
			// Print the content on the console
			System.out.println (strLine);
		}
		//Close the input stream
		in.close();
		}catch (Exception e){//Catch exception if any
			System.err.println("Error: " + e.getMessage());
		}
	}
}

Το προβλημά μου είναι πως θα απομονώσω τις στήλες που θέλω και πως θα κάνω το διάγραμμα !!!!
Πρέπει να κάνω instal package όπως το ggplot2 για το γραφικό μέρος μιλάω!

Εχω και κάποιο κώδικα για το Manhattan plot αλλα δεν μου δουλέυει δε ξέρω γιατί!!!θα ήμουν υπόχρεη αν μπορούσε κάποιος να με βοηθήσει!!!!!!!


Κώδικας: Επιλογή όλων



# manhattan plot using ggplot2

gg.manhattan = function(dataframe, title=NULL, max.y="max", suggestiveline=0, genomewideline=-log10(5e-8), size.x.labels=9, size.y.labels=10, annotate=F, SNPlist=NULL) {

library(ggplot2)

    if (annotate & is.null(SNPlist)) stop("You requested annotation but provided no SNPlist!")
d=dataframe
#limit to only chrs 1-23?
d=d[d$CHR %in% 1:23, ]
if ("CHR" %in% names(d) & "BP" %in% names(d) & "P" %in% names(d) ) {
d=na.omit(d)
d=d&#91;d$P>0 & d$P<=1, &#93;
d$logp = -log10&#40;d$P&#41;
d$pos=NA
ticks=NULL
lastbase=0
numchroms=length&#40;unique&#40;d$CHR&#41;&#41;
if &#40;numchroms==1&#41; &#123;
d$pos=d$BP
&#125; else &#123;

for &#40;i in unique&#40;d$CHR&#41;&#41; &#123;
if &#40;i==1&#41; &#123;
d&#91;d$CHR==i, &#93;$pos=d&#91;d$CHR==i, &#93;$BP
&#125; else &#123;
lastbase=lastbase+tail&#40;subset&#40;d,CHR==i-1&#41;$BP, 1&#41;
d&#91;d$CHR==i, &#93;$pos=d&#91;d$CHR==i, &#93;$BP+lastbase
&#125;
ticks=c&#40;ticks, d&#91;d$CHR==i, &#93;$pos&#91;floor&#40;length&#40;d&#91;d$CHR==i, &#93;$pos&#41;/2&#41;+1&#93;&#41;
&#125;
ticklim=c&#40;min&#40;d$pos&#41;,max&#40;d$pos&#41;&#41;

&#125;
mycols=rep&#40;c&#40;"gray10","gray60"&#41;,max&#40;d$CHR&#41;&#41;
if &#40;max.y=="max"&#41; maxy=ceiling&#40;max&#40;d$logp&#41;&#41; else maxy=max.y
if &#40;maxy<8&#41; maxy=8
if &#40;annotate&#41; d.annotate=d&#91;as.numeric&#40;substr&#40;d$SNP,3,100&#41;&#41; %in% SNPlist, &#93;
if &#40;numchroms==1&#41; &#123;
plot=qplot&#40;pos,logp,data=d,ylab=expression&#40;-log&#91;10&#93;&#40;italic&#40;p&#41;&#41;&#41;, xlab=paste&#40;"Chromosome",unique&#40;d$CHR&#41;,"position"&#41;&#41;
&#125; else &#123;
plot=qplot&#40;pos,logp,data=d, ylab=expression&#40;-log&#91;10&#93;&#40;italic&#40;p&#41;&#41;&#41; , colour=factor&#40;CHR&#41;&#41;
plot=plot+scale_x_continuous&#40;name="Chromosome", breaks=ticks, labels=&#40;unique&#40;d$CHR&#41;&#41;&#41;
plot=plot+scale_y_continuous&#40;limits=c&#40;0,maxy&#41;, breaks=1&#58;maxy, labels=1&#58;maxy&#41;
plot=plot+scale_colour_manual&#40;value=mycols&#41;
&#125;
if &#40;annotate&#41; plot=plot + geom_point&#40;data=d.annotate, colour=I&#40;"green3"&#41;&#41;
plot=plot + opts&#40;legend.position = "none"&#41;
plot=plot + opts&#40;title=title&#41;
plot=plot+opts&#40;
panel.background=theme_blank&#40;&#41;,
panel.grid.minor=theme_blank&#40;&#41;,
axis.text.x=theme_text&#40;size=size.x.labels, colour="grey50"&#41;,
axis.text.y=theme_text&#40;size=size.y.labels, colour="grey50"&#41;,
axis.ticks=theme_segment&#40;colour=NA&#41;
&#41;
if &#40;suggestiveline&#41; plot=plot+geom_hline&#40;yintercept=suggestiveline,colour="blue", alpha=I&#40;1/3&#41;&#41;
if &#40;genomewideline&#41; plot=plot+geom_hline&#40;yintercept=genomewideline,colour="red"&#41;
plot
&#125; else &#123;
stop&#40;"Make sure your data frame contains columns CHR, BP, and P"&#41;
&#125;
&#125;

gg.qq = function&#40;pvector, title=NULL, spartan=F&#41; &#123;
library&#40;ggplot2&#41;
o = -log10&#40;sort&#40;pvector,decreasing=F&#41;&#41;
#e = -log10&#40; 1&#58;length&#40;o&#41;/length&#40;o&#41; &#41;
e = -log10&#40; ppoints&#40;length&#40;pvector&#41; &#41;&#41;
plot=qplot&#40;e,o, xlim=c&#40;0,max&#40;e&#41;&#41;, ylim=c&#40;0,max&#40;o&#41;&#41;&#41; + stat_abline&#40;intercept=0,slope=1, col="red"&#41;
plot=plot+opts&#40;title=title&#41;
plot=plot+scale_x_continuous&#40;name=expression&#40;Expected~~-log&#91;10&#93;&#40;italic&#40;p&#41;&#41;&#41;&#41;
plot=plot+scale_y_continuous&#40;name=expression&#40;Observed~~-log&#91;10&#93;&#40;italic&#40;p&#41;&#41;&#41;&#41;
if &#40;spartan&#41; plot=plot+opts&#40;panel.background=theme_rect&#40;col="grey50"&#41;, panel.grid.minor=theme_blank&#40;&#41;&#41;
plot
&#125;

gg.qqman = function&#40;data="plinkresults"&#41; &#123;
myqqplot = ggqq&#40;data$P&#41;
mymanplot = ggmanhattan&#40;data&#41;
ggsave&#40;file="qqplot.png",myqqplot,w=5,h=5,dpi=100&#41;
ggsave&#40;file="manhattan.png",mymanplot,width=12,height=9,dpi=100&#41;
&#125;

gg.qqmanall= function&#40;command="ls *assoc"&#41; &#123;
filelist=system&#40;command,intern=T&#41;
datalist=NULL
for &#40;i in filelist&#41; &#123;datalist&#91;&#91;i&#93;&#93;=read.table&#40;i,T&#41;&#125;
highestneglogp=ceiling&#40;max&#40;sapply&#40;datalist, function&#40;df&#41; max&#40;na.omit&#40;-log10&#40;df$P&#41;&#41;&#41;&#41;&#41;&#41;
print&#40;paste&#40;"Highest -log10&#40;P&#41; = ",highestneglogp&#41;,quote=F&#41;
start=Sys.time&#40;&#41;
for &#40;i in names&#40;datalist&#41;&#41; &#123;
myqqplot=ggqq&#40;datalist&#91;&#91;i&#93;&#93;$P, title=i&#41;
ggsave&#40;file=paste&#40;"qqplot-", i, ".png", sep=""&#41;,myqqplot, width=5, height=5,dpi=100&#41;
mymanplot=ggmanhattan&#40;datalist&#91;&#91;i&#93;&#93;, title=i, max.y=highestneglogp&#41;
ggsave&#40;file=paste&#40;"manhattan-", i, ".png", sep=""&#41;,mymanplot,width=12,height=9,dpi=100&#41;
&#125;
end=Sys.time&#40;&#41;
print&#40;elapsed<-end-start&#41;
&#125;




ευχαριστώ!
Τελευταία επεξεργασία από το μέλος MamRa την 04 Απρ 2012 18:59, έχει επεξεργασθεί 1 φορά συνολικά.

MamRa
Δημοσιεύσεις: 29
Εγγραφή: 06 Δεκ 2009 21:07

δημιουργια Manhattan plot απο αρχειο .txt

Δημοσίευση από MamRa » 04 Απρ 2012 15:16

παιδια δε μπορω να κάνω attach το αρχείο σας το βάζω με copy -paste να το δείτε

Κώδικας: Επιλογή όλων




SNP ID     Chr ID Chr Position	P-value	Rank	pHWE &#40;case&#41;	pHWE &#40;control&#41;	Call rate &#40;case&#41;	Call rate &#40;control&#41;	Odds ratio	Trait	Covariate	Sample population
rs599839	1	109822165	1.1649663e-07	1	0.94627735727128	0.127632439553852	0.795404002965	0.823374542124	1.2573420390098	HOM10B	NULL	PAGE&#58;CALiCo-ARIC-WHITES
rs2815752	1	72812439	9.32644e-05	2	0.0267867466942289	0.957837425556053	0.818181818181	0.817282665278	1.4327561974456	HOM26E	NULL	PAGE&#58;CALiCo-ARIC-WHITES
rs10923931	1	120517958	0.0006832995	3	0.891259682477748	0.718830858509388	0.678062678062	0.748062015503	0.59690936173813	RPAA05	NULL	PAGE&#58;CALiCo-ARIC-BLACKS
rs599839	1	109822165	0.0011231828	4	0.74377848304389	0.198745904350001	0.858870967741	0.845975948196	0.70176267634414	MHQA9A	NULL	PAGE&#58;CALiCo-ARIC-WHITES
rs2144300	1	230294915	0.0016053269	5	0.739541333502212	1	0.78947368421	0.799654576856	0.6807501003618	HOM39	NULL	PAGE&#58;CALiCo-ARIC-WHITES
rs2144300	1	230294915	0.0016149646	6	1	0.916408784578266	0.733130169786	0.746926229508	1.2672890339664	HOM10A	NULL	PAGE&#58;CALiCo-ARIC-BLACKS
rs646776	1	109818529	0.0020948003	7	0.315418419822347	0.843768425532328	1	0.937290715372	2.8806616288413	TIARC01	NULL	PAGE&#58;CALiCo-ARIC-BLACKS
rs2228145	1	154426969	0.0022425752	8	0.0016720052208807	0.300428775846469	0.943962115232	0.916582576522	0.81163869073054	ELEVEL02__3	NULL	PAGE&#58;CALiCo-ARIC-BLACKS
rs599839	1	109822165	0.0025734764	9	0.353248508844788	0.495254901195184	0.7	0.794625719769	1.724642874889	MHXA14	NULL	PAGE&#58;CALiCo-ARIC-WHITES
rs646776	1	109818529	0.0027112681	10	0.230473169099222	0.910350200221714	0.905444126074	0.933408260747	0.7621438207219	INTPLQ01	NULL	PAGE&#58;CALiCo-ARIC-BLACKS
rs10923931	1	120517958	0.0035145432	11	0.252458673777851	0.784810649722245	0.80195599022	0.822354279934	0.85957259141514	BIFPLQ01	NULL	PAGE&#58;CALiCo-ARIC-WHITES
rs2228145	1	154426969	0.0036338946	12	0.419879341845543	0.00550394519988422	0.91943127962	0.967741935483	1.5890399041768	PHEA07A	NULL	PAGE&#58;CALiCo-ARIC-WHITES
rs10923931	1	120517958	0.0038707907	13	0.301365619474963	1	0.818013856812	0.816151456885	0.83869346235208	HOM23A	NULL	PAGE&#58;CALiCo-ARIC-WHITES
rs2815752	1	72812439	0.004491001	14	0.416185567645158	0.257595206182138	0.664688427299	0.673913043478	1.5359974890637	RPAA11	NULL	PAGE&#58;CALiCo-ARIC-BLACKS
rs2144300	1	230294915	0.0045134287	15	0.750073672965418	0.577514496145996	0.686192468619	0.729857819905	1.5314882882191	RPAA15	NULL	PAGE&#58;CALiCo-ARIC-BLACKS
rs11206510	1	55496038	0.0045951691	16	0.812396023435213	0.478816097413895	0.854224698235	0.845504540222	0.82780306259043	MHQA2A	NULL	PAGE&#58;CALiCo-ARIC-WHITES
rs11206510	1	55496038	0.0047002831	17	0.501242410518775	0.454657036508633	0.821317953647	0.797172111165	0.87316564401619	EVRDRK01	NULL	PAGE&#58;CALiCo-ARIC-WHITES
rs599839	1	109822165	0.0048462993	18	0.569662906234208	0.175693295782413	0.807980049875	0.823841059602	1.2591790991143	RPAA05	NULL	PAGE&#58;CALiCo-ARIC-WHITES
rs599839	1	109822165	0.0049709215	19	0.353196257570179	0.42361004888918	0.795580110497	0.727211570803	1.1858383585336	ELEVEL02__3	NULL	PAGE&#58;CALiCo-ARIC-BLACKS
rs11206510	1	55496038	0.0061828905	20	0.516262771619515	0.27996299441037	0.754473161033	0.74613959234	0.79044436841156	FORSMK01	NULL	PAGE&#58;CALiCo-ARIC-BLACKS
rs11206510	1	55496038	0.0064918468	21	0.551230296010982	0.131375965070762	0.682134570765	0.756514872334	0.69161903667164	RPAA09	NULL	PAGE&#58;CALiCo-ARIC-BLACKS
rs11206510	1	55496038	0.0065884085	22	0.0347021971568566	1	0.732249322493	0.761187787536	0.82327910876226	MHXA04	NULL	PAGE&#58;CALiCo-ARIC-BLACKS
rs11591147	1	55505646	0.0074141914	23	0	0.00542228784243652	0.946929039952	0.948844178082	1.6190345260361	INTPLQ01	NULL	PAGE&#58;CALiCo-ARIC-WHITES
rs2815752	1	72812439	0.0075726752	24	0.931929684962137	0.784038626286432	0.815261627906	0.819240061497	1.0854666644419	EVRSMK01	NULL	PAGE&#58;CALiCo-ARIC-WHITES
rs2815752	1	72812439	0.0079034108	25	0.931929684962137	0.784111467905323	0.815261627906	0.819279754062	1.0849783143299	HOM28	NULL	PAGE&#58;CALiCo-ARIC-WHITES
rs2144300	1	230294915	0.0081260255	26	1	0.934181707182692	0.694690265486	0.748735244519	1.3529941155606	MHXA43	NULL	PAGE&#58;CALiCo-ARIC-BLACKS
rs646776	1	109818529	0.0084515093	27	0.88244128949293	0.504583560305063	0.920477137176	0.931130327362	0.86194828872164	FORSMK01	NULL	PAGE&#58;CALiCo-ARIC-BLACKS
rs2228145	1	154426969	0.0090420613	28	0.661236355893271	0.180319530692339	0.934984520123	0.953558374543	1.1787210561897	HOM18B	NULL	PAGE&#58;CALiCo-ARIC-WHITES
rs2815752	1	72812439	0.0091059381	29	0.314113865465307	0.401690003922769	0.816967598318	0.816754635268	1.0859335154734	FORSMK01	NULL	PAGE&#58;CALiCo-ARIC-WHITES
rs599839	1	109822165	0.0094769763	30	0.0649049069626767	0.025841507970128	0.804027504911	0.819761244937	1.1299009793604	DTIA81	NULL	PAGE&#58;CALiCo-ARIC-WHITES
rs599839	1	109822165	0.0097192145	31	0.693515604940726	0.140806318619823	0.816074653822	0.816479400749	1.1130789453371	HOM23E	NULL	PAGE&#58;CALiCo-ARIC-WHITES
rs2228145	1	154426969	0.0099366124	32	0.226476192907877	0.0823508757704571	0.938213301849	0.954478541501	1.0896319732414	HYPERT04	NULL	PAGE&#58;CALiCo-ARIC-WHITES
rs10923931	1	120517958	0.0106690136	33	0.114192454804573	0.129757358098924	0.789343246592	0.819192014313	1.3024016719361	RPOSMI01	NULL	PAGE&#58;CALiCo-ARIC-WHITES
rs599839	1	109822165	0.0109562631	34	0.442126988584474	0.249864189816917	0.855670103092	0.816895139754	0.64933273818569	PHEA13	NULL	PAGE&#58;CALiCo-ARIC-WHITES
rs2815752	1	72812439	0.0119623726	35	0.0636706282492469	1	0.863636363636	0.850082372322	0.68813516471708	MHQA15A	NULL	PAGE&#58;CALiCo-ARIC-BLACKS
rs2144300	1	230294915	0.0119856501	36	0.376220606983552	0.0365737204853337	0.822869168712	0.825746206436	1.0951594838341	MHQA23A	NULL	PAGE&#58;CALiCo-ARIC-WHITES
rs599839	1	109822165	0.0121408633	37	0.908391133858233	0.102942983843328	0.803405572755	0.835519243173	0.82369085124368	HOM18B	NULL	PAGE&#58;CALiCo-ARIC-WHITES
rs10923931	1	120517958	0.0126855926	38	0.840531183638718	0.326648822091759	0.664556962025	0.732874569909	0.70135577200552	TIAB10	NULL	PAGE&#58;CALiCo-ARIC-BLACKS
rs11591147	1	55505646	0.0136863113	39	0	0.00769390961070144	0.930397727272	0.949990456193	2.2004238480223	BIFSHD01	NULL	PAGE&#58;CALiCo-ARIC-WHITES
rs10923931	1	120517958	0.0139935358	40	1	0.63872750386017	0.738493723849	0.740853658536	1.2554699943913	HOM15E	NULL	PAGE&#58;CALiCo-ARIC-BLACKS
rs646776	1	109818529	0.0144337093	41	0.0838756631984241	0.206090071842794	0.92156862745	0.929887269727	0.84520168468833	HOM10B	NULL	PAGE&#58;CALiCo-ARIC-BLACKS
rs2228145	1	154426969	0.0147990137	42	0.706263424747816	0.031600982657188	0.918660287081	0.933365292425	0.82562880094314	PLQSHD01	NULL	PAGE&#58;CALiCo-ARIC-BLACKS
rs2815752	1	72812439	0.0155033047	43	0.840012374079958	0.83839637697232	0.820116591098	0.763843648208	0.84320936057961	RANGNA01	NULL	PAGE&#58;CALiCo-ARIC-WHITES
rs2228145	1	154426969	0.0161115909	44	0.70193339551622	0.00588904908513138	0.913843175217	0.931459904043	0.83583838831328	BIFPLQ01	NULL	PAGE&#58;CALiCo-ARIC-BLACKS
rs2144300	1	230294915	0.0162456665	45	1	0.92291887237511	0.728861330326	0.748172217709	1.2043379537702	MHXA45	NULL	PAGE&#58;CALiCo-ARIC-BLACKS
rs10923931	1	120517958	0.0162763253	46	0.0924186115018936	0.723500555698898	0.83161605206	0.790163124073	1.1258293904646	DTIA90	NULL	PAGE&#58;CALiCo-ARIC-WHITES
rs2228145	1	154426969	0.0163894231	47	0.156317792668637	0.104601604123887	0.938217122683	0.953881629515	1.0869656424958	HYPTMD01	NULL	PAGE&#58;CALiCo-ARIC-WHITES
rs2815752	1	72812439	0.0164835637	48	0.761344814957382	0.878334185037815	0.724077328646	0.752523874488	1.1990145367097	RPAA17	NULL	PAGE&#58;CALiCo-ARIC-BLACKS





κάντε copy - past Στο σημειωματάριο για να το δείτε καλά

εμένα το p-value και το chr ID με ενδειαφέρει!!!
ευχαριστώ

Άβαταρ μέλους
virxen75
Δημοσιεύσεις: 493
Εγγραφή: 18 Φεβ 2009 00:17
Τοποθεσία: ΗΡΑΚΛΕΙΟ ΚΡΗΤΗΣ

δημιουργια Manhattan plot απο αρχειο .txt

Δημοσίευση από virxen75 » 12 Απρ 2012 17:39

μπορείς να δοκιμάσεις κάτι σαν αυτό

Κώδικας: Επιλογή όλων

import java.io.*;
public class FileRead
&#123;
   public static void main&#40;String args&#91;&#93;&#41;
   &#123;
      try&#123;
      // Open the file that is the first
      // command line parameter
      FileInputStream fstream = new FileInputStream&#40;"phs000223.pha003543.txt"&#41;;
      // Get the object of DataInputStream
      DataInputStream in = new DataInputStream&#40;fstream&#41;;
        BufferedReader br = new BufferedReader&#40;new InputStreamReader&#40;in&#41;&#41;;
      String strLine;
      //Read File Line By Line
      int i=0;
      while &#40;&#40;strLine = br.readLine&#40;&#41;&#41; != null&#41;    &#123;
      	i++;
      	if &#40;i>1&#41;&#123;
      		String values&#91;&#93;=strLine.split&#40;" "&#41;;
      		int pos=0;
      		String chr_id="";
      		String p_value="";
      		for &#40;int j=0;j<values.length;j++&#41;&#123;
      			if &#40;!values&#91;j&#93;.trim&#40;&#41;.equals&#40;""&#41;&#41;
      				pos++;
      			if &#40;pos==2 && chr_id.equals&#40;""&#41;&#41;&#123;
      				chr_id=values&#91;j&#93;;
      			&#125;
      			if &#40;pos==4 && p_value.equals&#40;""&#41;&#41;&#123;
      				p_value=values&#91;j&#93;;
      				break;
      			&#125;
      		&#125;
      		System.out.println&#40;"chr_id="+chr_id+" p_value="+p_value&#41;;
      	&#125;
      &#125;
      //Close the input stream
      in.close&#40;&#41;;
      &#125;catch &#40;Exception e&#41;&#123;//Catch exception if any
         System.err.println&#40;"Error&#58; " + e.getMessage&#40;&#41;&#41;;
      &#125;
   &#125;
&#125;

p.s. pos==2---->2η στήλη του αρχείου (οι στήλες χωρίζονται με βάση τα κενά)

MamRa
Δημοσιεύσεις: 29
Εγγραφή: 06 Δεκ 2009 21:07

δημιουργια Manhattan plot απο αρχειο .txt

Δημοσίευση από MamRa » 24 Απρ 2012 10:01

Σε ευχαριστω για την απαντηση ο κωδικασ δουλευει μου εμφανιζει τις τιμες chr και p-value.Δεν μπορω να κανω ομως την γραφικη παρασταση δηλαδη να βαλω τισ τιμες του chr στον αξονα χ και τις τιμες p-value στον αξονα ψ ωστε να μου σχημτιστει η γραφικη παρασταση των σημειων ,που τεμνονται τα σημεία.Εχεις καμιά ιδεα !!!!

Άβαταρ μέλους
virxen75
Δημοσιεύσεις: 493
Εγγραφή: 18 Φεβ 2009 00:17
Τοποθεσία: ΗΡΑΚΛΕΙΟ ΚΡΗΤΗΣ

δημιουργια Manhattan plot απο αρχειο .txt

Δημοσίευση από virxen75 » 24 Απρ 2012 17:41


Απάντηση

Επιστροφή στο “Java”

Μέλη σε σύνδεση

Μέλη σε αυτήν τη Δ. Συζήτηση: Δεν υπάρχουν εγγεγραμμένα μέλη και 0 επισκέπτες