languageName: Türkçe

loginUsername: Kullanıcı adı veya e-posta

loginPassword: Şifre

loginSignIn: Giriş yap

loginRememberMe: Beni hatırla

loginForgotPassword: Şifreni mi unuttun?

notices: İletiler

followers: Takipçi

following: Takip edilen

groups: Gruplar

compose: Yeni bir ileti oluştur...

queetVerb: Gönder

queetsNounPlural: Bildirimler

logout: Çıkış yap

languageSelected: Dil:

viewMyProfilePage: Profili görüntüle

expand: Genişlet

collapse: Daralt

details: Detaylar

expandFullConversation: Sohbeti genişlet

replyVerb: Yanıtla

requeetVerb: Tekrarla

requeetedVerb: Tekrarlanan

favoritedVerb: Favorilenen

replyTo: Adlı kişiyi yanıtla

requeetedBy: {requeeted-by} tarafından tekrarlanmış

favoritesNoun: Favoriler

requeetNoun: Tekrar

requeetsNoun: Tekrarlar

newQueet: {new-notice-count} yeni bildirim

newQueets: {new-notice-count} yeni bildirimler

longmonthsJanuary: Ocak

longmonthsFebruary: Şubat

longmonthsMars: Mart

longmonthsApril: Nisan

longmonthsMay: Mayıs

longmonthsJune: Haziran

longmonthsJuly: Temmuz

longmonthsAugust: Ağustos

longmonthsSeptember: Eylül

longmonthsOctober: Ekim

longmonthsNovember: Kasım

longmonthsDecember: Aralık

shortmonthsJanuary: oca

shortmonthsFebruary: şub

shortmonthsApril: nis

shortmonthsJune: haz

shortmonthsJuly: tem

shortmonthsAugust: ağu

shortmonthsSeptember: eyl

shortmonthsOctober: eki

shortmonthsNovember: kas

shortmonthsDecember: ara

time12am: {time} öö

time12pm: {time} ös

shortDateFormatSeconds: {seconds}sn

shortDateFormatMinutes: {minutes}dk

shortDateFormatHours: {hours}sa

now: şimdi

posting: gönderi

viewMoreInConvBefore: ← Daha fazla konuşma görüntüle

viewMoreInConvAfter: Daha fazla konuşma görüntüle →

mentions: Bahsedenler

timeline: Zaman akışı

publicTimeline: Herkese açık akış

publicAndExtTimeline: Tüm Ağlardaki Akışlar

searchVerb: Ara

deleteVerb: Sil

cancelVerb: İptal

deleteConfirmation: İletiyi silmek istediğinize emin misiniz?

userExternalFollow: Uzaktan takip

userExternalFollowHelp: Hesap ID (ör. kullanici@rainbowdash.net).

userFollow: Takip et

userFollowing: Takip edilen

userUnfollow: Takibi bırak

joinGroup: Katıl

joinExternalGroup: Uzaktan katıl

isMemberOfGroup: Üye

leaveGroup: Ayrıl

memberCount: Üyeler

adminCount: Yönetici

settings: Ayarlar

saveChanges: Değişiklikleri kaydet

linkColor: Link rengi

backgroundColor: Arka plan rengi

newToQuitter: {site-title}'da yeni misin?

signUp: Kayıt ol

signUpFullName: Ad ve soyad

signUpEmail: Eposta

signUpButtonText: {site-title}'a kaydol

welcomeHeading: {site-title} a hoşgeldin.

welcomeText:
We are a
"Federation" means that you don't need a {site-title} account to be able to follow, be followed by or interact with {site-title} users. You can register on any StatusNet or GNU social server or any service based on the the Ostatus protocol! You don't even have to join a service – try installing the lovely GNU social software on your own server! :)
federation of microbloggers who care about ethics and solidarity and want to quit the centralised capitalist services.

registerNickname: Kullanıcı adı

registerHomepage: İnternet Sitesi

registerBio: Kişisel Bilgiler

otherServers: Alternatif olarak GNU sosyal networkünde başka bir sunucu da hesap oluşturabilirsiniz. Karşılaştırın

accessibilityToggleLink: Daha iyi erişilebilirlik için klasik arayüze geçin.

ERRORmustBeLoggedIn: Bu akışı görmek için giriş yapmalısınız.

ERRORcouldNotFindUserWithNickname: Sunucuda böyle bir kullanıcı adına sahip "{nickname}" kullanıcı yok.

ERRORcouldNotFindGroupWithNickname: Sunucuda böyle bir kulanıcı adına sahip "{nickname}" grup yok.

ERRORnoContactWithServer: Sunucuyla bağlantı kurulamıyor. Sunucu aşırı yüklenmiş veya internet bağlantısıyla ilgili bir sorun olabilir. Lütfen daha sonra tekrar deneyin!

ERRORattachmentUploadFailed: Yükleme başarısız oldu. Biçimi desteklenmiyor veya boyutu çok büyük olabilir.

hideRepliesToPeopleIDoNotFollow: Takip etmediğim kullanıcıların cevaplarını gizle

markAllNotificationsAsSeen: Görüldüğü gibi tüm bildirimleri işaretleyin

thisIsANoticeFromABlockedUser: Uyarı: Bu bildirim engellenen bir kullanıcıdan. Görmek için tıklayınız.

onlyPartlyTranslated: {site-title} bir kısmı ({percent}%) {language-name} diline tercüme edildi. Qvitter'in depo anasayfasından tercümenin tamamlanmasına yardımcı olabilirsiniz

silencedStreamDescription: Silenced users can't login or post quips and the quips they've already posted are hidden. For local users it's like a delete that can be reversed, for remote users it's like a site wide block.

sandboxedStreamDescription: Quips from sandboxed users are excluded from the Public Timeline and The Whole Known Network. Apart from that, they can use the site like any other user.

onlyShowNotificationsFromUsersIFollow: Only show notifications from users I follow


directionality: ltr

languageName: Українська

loginUsername: Им’я або e-mail

loginPassword: Пароль

loginSignIn: Вхід

loginRememberMe: Пам’ятати мене

loginForgotPassword: Забули пароль?

notices: Повідомлення

followers: Спостерігачі

following: За чім спостерігаемо

groups: Групи

compose: Про що повідомляємо?

queetVerb: Відправити

queetsNounPlural: Повідомлення

logout: Вихід

languageSelected: Мова:

viewMyProfilePage: Переглянути сторінку моєго профіля

expand: Разгорнути

collapse: Приховати

details: Подробиці

expandFullConversation: Разгорнути розмову

replyVerb: Відповісти

requeetVerb: Відповісти

favoriteVerb: Улюблений

requeetedVerb: Відповів

favoritedVerb: У улюблене

replyTo: Відповісти на

requeetedBy: Повідомлення на {requeeted-by}

favoriteNoun: Улюблений

favoritesNoun: Улюблене

requeetNoun: Повідомлення у відповідь

requeetsNoun: Повідомлення у відповідь

newQueet: {new-notice-count} нове повідомлення

newQueets: {new-notice-count} нові повідомлення

longmonthsJanuary: Січень

longmonthsFebruary: Лютий

longmonthsMars: Березень

longmonthsApril: Квітень

longmonthsMay: Травень

longmonthsJune: Червень

longmonthsJuly: Липень

longmonthsAugust: Серпень

longmonthsSeptember: Вересень

longmonthsOctober: Жовтень

longmonthsNovember: Лістопад

longmonthsDecember: Грудень

shortmonthsJanuary: січ

shortmonthsFebruary: лют

shortmonthsMars: бер

shortmonthsApril: кві

shortmonthsMay: тра

shortmonthsJune: чер

shortmonthsJuly: лип

shortmonthsAugust: сер

shortmonthsSeptember: вер

shortmonthsOctober: жов

shortmonthsNovember: ліс

shortmonthsDecember: гру

time12am: {time} AM

time12pm: {time} PM

longDateFormat: {time12} - {day} {month} {year}

shortDateFormatSeconds: {seconds}с

shortDateFormatMinutes: {minutes}хвил

shortDateFormatHours: {hours}год

shortDateFormatDate: {day} {month}

shortDateFormatDateAndY: {day} {month} {year}

now: зараз

posting: повідомляти

viewMoreInConvBefore: ← Переглянути більше в розмове

viewMoreInConvAfter: Переглянути більше в розмове →

mentions: Згадування

timeline: Стрічка

publicTimeline: Публічна стрічка

publicAndExtTimeline: Вся Відома Мережа

searchVerb: Пошук

deleteVerb: Видалити

cancelVerb: Скасувати

deleteConfirmation: Ви упевнени, шо бажаете видалити це повідомлення?

userExternalFollow: Дістанційно спостерігати

userExternalFollowHelp: Ваш обліковий запис (наприклад user@rainbowdash.net).

userFollow: Спостерігати

userFollowing: За чім спостерігаю

userUnfollow: Скасування

joinGroup: Приєднатися

joinExternalGroup: Приєднатися дистанційно

isMemberOfGroup: Учасник

leaveGroup: Покинути групу

memberCount: Учасникі

adminCount: Адміністратори

settings: Налаштування

saveChanges: Зберегти зміни

linkColor: Колір посилання

backgroundColor: Колір тла

newToQuitter: Нове на {site-title}?

signUp: Реєстрація

signUpFullName: Повне им’я

signUpEmail: E-mail

signUpButtonText: Реєстрація на {site-title}

welcomeHeading: Ласкаво просимо в {site-title}.

welcomeText:
Ми є
"Федерацією" и це означає що Вам не потрібно створювати обліковий запис на {site-title} для того шоб спостерігати, бути под спостереженнем або взаємодіяти с користувачамі {site-title}. Ви можіте зареєструватися на будь-яким StatusNet або GNU social server або іншім сервере, котрий базуется на протоколі Ostatus! Також ви маєте змогу зовсім не приєднуватися к сервісу – спробуйти встановити це файне ПЗ GNU social на своєму сервері! :)
Федерація мікроблогеров, котри піклуются об соціальний справедливісті та солідарності и хочут звільнитися від централізованних капіталістичних послуг.

registerNickname: Прізвисько

registerHomepage: Домашня сторінка

registerBio: Про себе

registerLocation: Місцезнаходження

registerRepeatPassword: Повторити пароль

moreSettings: Більше налаштуваннь

otherServers: Також ви можете створити обліковий запис на іншому сервере мережи GNU social. Порівняння

editMyProfile: Редагувати профіль

notifications: Оголошення

xFavedYourQueet: улюблене Ваше повідомлення

xRepeatedYourQueet: Вам відповіли

xStartedFollowingYou: спостерігают за Вами зараз

followsYou: спостерігают за Вами

FAQ: ЧАП

inviteAFriend: Запросі друз’ів!

goToExternalProfile: Перейти до повного профіля

cropAndSave: Відрізати та зберегти

showTerms: Читати наші Умови користування

ellipsisMore: Більше

blockUser: Заблокувати {username}

goToOriginalNotice: Перейти до початкового повідомлення

goToTheUsersRemoteProfile: Перейти до дістанційного профіля корістувача

clickToDrag: Клацніть для перетягнення

keyboardShortcuts: Клавіатурні скорочення

classicInterface: Класичний {site-title}

accessibilityToggleLink: Для кращей сприйнятливості клацніть це посилання шоб переключитись на класичний інтерфейс

tooltipBookmarkStream: Додати цей потік до ваших закладок

tooltipTopMenu: Меню та налаштування

tooltipAttachImage: Приєднати зображення

tooltipShortenUrls: Скоротити усі URL у повідомленні

tooltipReloadStream: Оновіти цей потік

tooltipRemoveBookmark: Видалити цю закладку

clearHistory: Очистити історію перегляда

ERRORsomethingWentWrong: Щось пішло не так.

ERRORmustBeLoggedIn: Ви повинни бути зареєстрованним для перегляду цього потіка.

ERRORcouldNotFindUserWithNickname: Не можу знайти користувача з таким прізвиськом "{nickname}" на цьому сервері

ERRORcouldNotFindGroupWithNickname: Не можу знайти групу з цією назвой "{nickname}" на цьому сервері

ERRORcouldNotFindPage: Не можу знайти цю сторінку.

ERRORnoticeRemoved: Це повідомлення буде вилучіне.

ERRORnoContactWithServer: Не можу з’еднатися з сервером. Сервер мабуть перевантажен або ви маете проблеми зі з’еднанням до Інтернета. Будь ласка, спробуйти пізніше!

ERRORattachmentUploadFailed: Невдача при завантаженні. Формат мабуть не підтримуются або розмір дуже великий.

hideRepliesToPeopleIDoNotFollow: Сховати відповіді людей за котрими я не слідкую

markAllNotificationsAsSeen: Відмітити все оголошення як прочитані

notifyRepliesAndMentions: Згадування та відповіді

notifyFavs: Улюблені

notifyRepeats: Повідомлення у відповідь

notifyFollows: Нові спостерегачі

timelineOptions: Параметри стрічки

ERRORfailedSavingYourSetting: Невдача у збережженні Ваших налаштувань

ERRORfailedMarkingAllNotificationsAsRead: Невдача при відміткі всіх оголошень як прочитаних.

newNotification: {new-notice-count} нове оголошення

newNotifications: {new-notice-count} нові оголошення

thisIsANoticeFromABlockedUser: Увага: Це повідомлення від заблокованого користувача. Клацніть щоб побачити його.

nicknamesListWithListName: Список {nickname}: {list-name}

myListWithListName: Мій список: {list-name}

listMembers: Учасникі

listSubscribers: Передплатникі

ERRORcouldNotFindList: Нажаль, нема такого списка.

emailAlreadyInUse: Вже використовувается

addEditLanguageLink: Допоможіть перекласти {site-title} на іншу мову

onlyPartlyTranslated: {site-title} тількі частково перекладен на {language-name} ({percent}%). Ви можете допомогти у перекладі на Qvitter's repository homepage

startRant: Почати декламацію

continueRant: Продовжити декламацію

hideEmbeddedInTimeline: Сховати вставлений зміст на цей стрічці

hideQuotesInTimeline: Сховати цитати на цей стрічці

userBlocks: Облікови записи котри Ви заблокували

buttonBlocked: Заблокувати

buttonUnblock: Разблокувати

failedBlockingUser: Невдача при блокуванні користувача.

failedUnblockingUser: Невдача при разблокуванні користувача.

unblockUser: Разблокувати {username}

tooltipBlocksYou: Ви заблоковани користувачем {username}.

silenced: Заборонені

silencedPlural: Профілі заборонених

silencedUsersOnThisInstance: Профілі заборонених на {site-title}

sandboxed: У "пісочниці"

sandboxedPlural: Профілі у "пісочниці"

sandboxedUsersOnThisInstance: Профілі у "пісочниці" на {site-title}

silencedStreamDescription: Заборонені користувачі не можуть увійти або розмістити повідомлення, іх вже розміщенні повідомлення будут заховани. Для місцевих користувачей це будє подібно видалинню з подальшою відміной, а для дістанційних - на блокування всього сайта.

sandboxedStreamDescription: Повідомлення від користувача, котрий у "пісочниці", будут виключіни з Публічной стрічці та Всій Відомой Мережи. У всьому іншому ці користувачі можут користуватися сайтом як і усі.

onlyShowNotificationsFromUsersIFollow: Показувати оголошення тількі тіх користувачей, за котрими я спостерегаю

userOptions: Більше дій для користувача

silenceThisUser: Заборонити {nickname}

sandboxThisUser: У "пісочницю" {nickname}

unSilenceThisUser: Дозволити {nickname}

unSandboxThisUser: Видалити з "пісочниці" {nickname}

ERRORfailedSandboxingUser: Невдача при розміщенні у "пісочниці" або вилученні з неї користувача

ERRORfailedSilencingUser: Невдача при забороні або дозволи користувача

muteUser: Ігнорувати

unmuteUser: Зняти ігнорування

thisIsANoticeFromAMutedUser: Ви ігноруюти автора цього повідомлення. Клацніть щоб побачити його.

userMutes: Облікови записи котри ви ігноруюти

userBlocked: Заблоковани облікови записи

userMuted: Облікови записи котри Ви ігноруюти зараз

mutedStreamDescription: Ви сховали ці облікови записи з вашей стрічкі. Ви будете одержувати оголошення від цих облікових записів, доки Ви не виберіте "Сховати оголошення від корістувачей котрих я ігнорую" в меню з шестернею на сторінкі оголошень.

profileAndSettings: Профіль та налаштування

profileSettings: Налаштування профіля

thisIsABookmark: This is a bookmark created in the Classic interface

license: mit


languageName: 简体中文

loginUsername: 用户名或邮件地址

loginPassword: 密码

loginSignIn: 登录

loginRememberMe: 记住我

loginForgotPassword: 忘记密码?

notices: 推文

followers: 关注者

following: 正在关注

groups: 团体

compose: 撰写新推文...

queetVerb: 发推

queetsNounPlural: 推文

logout: 退出

languageSelected: 语言:

viewMyProfilePage: 查看我的个人资料页

expand: 展开

collapse: 收起

details: 详情

expandFullConversation: 显示完整对话

replyVerb: 回复

requeetVerb: 转推

favoriteVerb: 收藏

requeetedVerb: 已转推

favoritedVerb: 已收藏

replyTo: 回复

requeetedBy: 由 {requeeted-by} 转推

favoriteNoun: 收藏

favoritesNoun: 收藏

requeetNoun: 转推

requeetsNoun: 转推

newQueet: {new-notice-count} 条新推文

newQueets: {new-notice-count} 条新推文

time12am: 上午{time}

time12pm: 下午{time}

longDateFormat: {time12} - {year}年{month}月{day}日

shortDateFormatSeconds: {seconds}秒

shortDateFormatMinutes: {minutes}分

shortDateFormatHours: {hours}小时

shortDateFormatDate: {month}月{day}日

shortDateFormatDateAndY: {year}年{month}月{day}日

now: 此时

posting: 发行

viewMoreInConvBefore: ← 显示更多对话

viewMoreInConvAfter: 显示更多对话 →

mentions: 提到

timeline: 时间轴

publicTimeline: 公共时间轴

publicAndExtTimeline: 外部公共时间轴

searchVerb: 搜索

deleteVerb: 删除

cancelVerb: 取消

deleteConfirmation: 确定要删除这条推文吗?

userExternalFollow: 外界关注

userFollow: 关注

userFollowing: 正在关注

userUnfollow: 取消关注

joinGroup: 加入

joinExternalGroup: 外界加入

isMemberOfGroup: 成员

leaveGroup: 离开

memberCount: 组成员

adminCount: 管理员

settings: 设置

saveChanges: 保存更改

linkColor: 主题颜色

backgroundColor: 背景颜色

newToQuitter: 新来 {site-title}?

signUp: 注册

signUpFullName: 名称

signUpEmail: 邮件地址

signUpButtonText: 注册 {site-title}

welcomeHeading: 欢迎来到 {site-title}。

registerNickname: 选择你的用户名

registerHomepage: 首页

registerBio: 个人简历

registerLocation: 地点

registerRepeatPassword: 重复密码

moreSettings: 更多的设置

otherServers: 其他服务器: 对照

editMyProfile: 编辑个人资料

notifications: 通知

xFavedYourQueet: 收藏了你的推文

xRepeatedYourQueet: 转推了你的推文

xStartedFollowingYou: 关注了你

followsYou: 关注了你

FAQ: 常见问题

inviteAFriend: 邀请好友

goToExternalProfile: 前往完整的个人档案

cropAndSave: 裁剪并保存

showTerms: 查看我们的使用条例

ellipsisMore: 更多

blockUser: 屏蔽 {username}

goToOriginalNotice: 查看原推文

goToTheUsersRemoteProfile: 查看用户的外部档案

clickToDrag: 点击拖拽

keyboardShortcuts: 键盘快捷键

classicInterface: 旧版 {site-title}

accessibilityToggleLink: 点击此链接可切换为旧版，提升兼容性。

tooltipBookmarkStream: 将此时间线加入书签

ERRORmustBeLoggedIn: 要查看该时间线，请先登录。

ERRORnoContactWithServer: 无法建立与服务器的连接。这可能是由于服务器过载，或你的网络连接出现了问题，请稍后重试。

ERRORattachmentUploadFailed: 上传失败。这可能是由于格式不支持，或者文件过大。

hideRepliesToPeopleIDoNotFollow: 隐藏发往我不关注的用户的回复

ERRORfailedMarkingAllNotificationsAsRead: 无法将所有通知标为已读。

thisIsANoticeFromABlockedUser: 注意：这是一条来自你屏蔽的用户的推文。点击以查看。

onlyPartlyTranslated: {site-title} 的 {language-name} 翻译并不完整（{percent}%）。 你可以前往 Qvitter 的 repository 主页 帮助翻译。

hideEmbeddedInTimeline: 隐藏该时间线中嵌入的内容

hideQuotesInTimeline: 隐藏该时间线中引用的内容

silencedStreamDescription: 被禁言的用户无法登录，也无法发新推文；他们已发送的推文将被隐藏。对本站用户而言，这像是可撤回的删除账户；对外部用户而言，这更像是全站屏蔽。

sandboxedStreamDescription: 被隔离的用户会被从公共时间线和整个已知网络中排除。 除此之外，他们与其他用户并无不同。

thisIsANoticeFromAMutedUser: 你已忽略了这条推文的作者。要查看该推文，请点击此处。

mutedStreamDescription: 你已从你的时间线中隐藏了这些用户。但你仍将收到这些用户的通知，除非你在设置页的齿轮菜单中选择“隐藏被忽略用户的通知”。

thisIsABookmark: 该书签系在旧版视图下创建。


languageName: 繁體中文

loginUsername: 使用者名稱或電子郵件

loginPassword: 密碼

loginSignIn: 登入

loginRememberMe: 記住我

loginForgotPassword: 忘記了密碼?

followers: 正在關注

following: 跟隨者

groups: 團體

compose: 撰寫新推文...

queetVerb: 推文

logout: 登出

languageSelected: 語言:

viewMyProfilePage: 查看我的個人檔案頁面

expand: 展開

collapse: 折疊

details: 詳細資訊

expandFullConversation: 顯示完整對話

replyVerb: 回覆

requeetVerb: 轉推

requeetedVerb: 已轉推

replyTo: 回覆給

requeetedBy: 通過轉推 {requeeted-by}

requeetNoun: 轉推

requeetsNoun: 轉推

shortDateFormatHours: {hours}小時

now: 此時

posting: 發行

viewMoreInConvBefore: ← 顯示更多對話

viewMoreInConvAfter: 顯示更多對話 →

timeline: 時間表

publicTimeline: 公共時間表

publicAndExtTimeline: 外部公共時間軸

searchVerb: 搜尋

deleteVerb: 刪除

deleteConfirmation: 你確認要刪除該推文嗎?

userExternalFollow: 外界關注

userFollow: 關注

userFollowing: 正在關注

userUnfollow: 取消關注

isMemberOfGroup: 成員

leaveGroup: 離開

memberCount: 組成員

adminCount: 管理員

settings: 設定

saveChanges: 儲存變更

linkColor: 佈景主題顏色

backgroundColor: 背景顏色

newToQuitter: 初次來到 {site-title}?

signUp: 註冊

signUpFullName: 全名

signUpEmail: 電子郵件

signUpButtonText: 註冊 {site-title}

welcomeHeading: 歡迎來到 {site-title}。

registerNickname: 選擇你的帳戶名稱

registerHomepage: 主頁

registerBio: 個人簡歷

registerLocation: 地點

registerRepeatPassword: 重複密碼

moreSettings: 更多的設置

otherServers: 其他服務器: 對照

editMyProfile: 編輯個人檔案

xFavedYourQueet: 已收藏你的推文

xRepeatedYourQueet: 已轉推你

xStartedFollowingYou: 已跟隨你

followsYou: 跟隨你

FAQ: FAQ

inviteAFriend: 邀請你的朋友

goToExternalProfile: 前往詳細個人檔案

cropAndSave: Crop and save

showTerms: Read our Terms of Use

ellipsisMore: More

blockUser: Block {username}

goToOriginalNotice: Go to original notice

goToTheUsersRemoteProfile: Go to the user's remote profile

clickToDrag: Click to drag

keyboardShortcuts: Keyboard shortcuts

classicInterface: Classic {site-title}

accessibilityToggleLink: For better accessibility, click this link to switch to the classic interface

tooltipBookmarkStream: Add this stream to your bookmarks

ERRORmustBeLoggedIn: You must be logged in to view this stream.

ERRORcouldNotFindUserWithNickname: Could not find a user with nickname "{nickname}" on this server

ERRORcouldNotFindGroupWithNickname: Could not find a group with nickname "{nickname}" on this server

ERRORnoContactWithServer: Can not establish a connection to the server. The server could be overloaded, or there might be a problem with your internet connecton. Please try again later!

ERRORattachmentUploadFailed: The upload failed. The format might be unsupported or the size too large.

ERRORfailedMarkingAllNotificationsAsRead: Failed marking all notifications as seen.

thisIsANoticeFromABlockedUser: Warning: This is a notice from a user you have blocked. Click to show it.

addEditLanguageLink: Help translate {site-title} to another language

onlyPartlyTranslated: {site-title} is only partly translated to {language-name} ({percent}%). You can help complete the translation at Qvitter's repository homepage

tooltipBlocksYou: You are blocked from following {username}.

thisIsANoticeFromAMutedUser: You have muted the author of this quip. Click here to show it anyway.

mutedStreamDescription: You've hidden these accounts from your timeline. You will still recieve notifications from these accounts, unless you select "Hide notifications from muted users" from the cog wheel menu on the notifications page.


code:
<?php
/*

This is an example file of how you can utilise http://qttr.at/yourls-api.php URL shortener service from a GNUSocial instance, which is using https.
If you run the qvitter code «as is» the browser will stop you from communicate to qttr.at which is currently running http protocol.

This «proxy» return the result from http://qttr.at/yourls-api.php

1) Install this file on your website eg. : https://myinstance.net/shortener.php
2) Change the following in QvitterPlugin.php - settings() function
	$settings['urlshortenerapiurl'] = 'https://yoursite.net/shortener.php';
3) Test it

Contact Knut Erik if you have any questions related to this .php file.
Quitter.no => knuthollund@quitter.no
GitHub: => https://github.com/fxdwg

*/

	$query = $_SERVER['QUERY_STRING'];
	if(strlen($query)>0) {
		$shortenerUrl = 'http://qttr.at/yourls-api.php?' . $query;
		print file_get_contents($shortenerUrl);
		}

?>


code:
# /usr/bin/env python
# -*- coding: utf-8 -*-
"""
@author: Eduardo
22 de Maio de 2017
HyperRayleigh Scattering Analysis
"""

import matplotlib.pyplot as plt
from matplotlib.backends.backend_gtk3agg import FigureCanvasGTK3Agg as FigureCanvas
# from matplotlib.backends.backend_gtk3cairo import FigureCanvasGTK3Cairo as FigureCanvas
from matplotlib.widgets import SpanSelector, Cursor
import numpy as np
import sys
import os
from scipy.optimize import curve_fit
import string
# import subprocess

import gi
gi.require_version('Gtk', '3.0')
from gi.repository import Gtk

class MyWindow(Gtk.Window):

    def __init__(self):
        Gtk.Window.__init__(self)

        # self.hb = Gtk.HeaderBar()
        # self.hb.set_show_close_button(True)
        # self.hb.props.title = "Linear Absorption Analysis"
        # self.set_titlebar(self.hb)

        self.set_title("Linear Absorption Analysis")
        self.set_wmclass("Linear Absorption Analysis",
                         "Linear Absorption Analysis")

        self.set_border_width(10)
        self.set_default_size(2000, 1000)
        self.set_position(Gtk.WindowPosition.CENTER)

        self.lbEsc = Gtk.Label(label="Select file:")

        self.filepath = Gtk.Entry()

        self.btBrowse = Gtk.Button(label="Browse")
        self.btBrowse.connect("clicked", self.EscolheAqv)

        self.btFile = Gtk.Button(label="Analyse Files")
        self.btFile.set_sensitive(False)
        self.btFile.connect("clicked", self.seleciona)

        self.buttonOK = Gtk.Button(label="     Next    ")
        self.buttonOK.connect("clicked", self.proximo)

        self.btSkip = Gtk.Button(label="     Skip    ")
        self.btSkip.connect("clicked", self.skip)

        self.buttonQuit = Gtk.Button(label="Remove Last")
        self.buttonQuit.connect("clicked", self.removelast)

        self.btConcentra = Gtk.Button(label="Select Concentration File")
        self.btConcentra.connect("clicked", self.EscolheConc)

        self.btSalva = Gtk.Button(label="Save")
        self.btSalva.connect("clicked", self.Salva)

        self.liststore = Gtk.ListStore(str, str, float)
        self.treeview = Gtk.TreeView(model=self.liststore)

        self.sel = self.treeview.get_selection()
        self.sel.set_mode(Gtk.SelectionMode.NONE)

        self.amostra_text = Gtk.CellRendererText()
        self.column_amostra = Gtk.TreeViewColumn("Sample",
                                                 self.amostra_text, text=0)
        self.treeview.append_column(self.column_amostra)

        self.concentra_text = Gtk.CellRendererText()
        self.column_concentra = Gtk.TreeViewColumn("Concentration",
                                                   self.concentra_text, text=1)
        self.treeview.append_column(self.column_concentra)

        self.abs_text = Gtk.CellRendererText()
        self.column_abs = Gtk.TreeViewColumn("Abs (532)",
                                             self.abs_text, text=2)
        self.treeview.append_column(self.column_abs)

        self.bxchose = Gtk.HBox(spacing=6)
        self.boxgraph = Gtk.HBox(spacing=6)
        self.boxsubgraph = Gtk.VBox(spacing=6)
        self.boxV = Gtk.VBox(spacing=6)
        self.bxbutton = Gtk.HBox(spacing=6)
        self.bxTodos = Gtk.HBox(spacing=6)
        self.bxlist = Gtk.VBox(spacing=6)

        self.fg = plt.figure()
        self.ax = self.fg.add_subplot(111)

        self.ax.set_title('Absorption Spectrum')
        self.ax.set_xlabel('$\lambda$ (nm)')
        self.ax.set_ylabel('A (O.D)')

        self.cv1 = FigureCanvas(self.fg)
        # self.cursor = Cursor(self.ax, useblit=True, horizOn=True,
        #                      color='#ff9896', lw=1.5, alpha=0.9)

        self.fg2 = plt.figure()
        self.ax2 = self.fg2.add_subplot(111)
        self.ax2.set_title('Absorption Todas')
        self.ax2.set_xlabel('$\lambda$ (nm)')
        self.ax2.set_ylabel('A (O.D)')

        self.line2, = self.ax2.plot([], [])
        # self.ax2.ticklabel_format(style='sci', scilimits=(-2, 2), axis='both')

        self.cv2 = FigureCanvas(self.fg2)

        self.fg4 = plt.figure()
        self.ax4 = self.fg4.add_subplot(111)
        self.ax4.set_title('Beer-Lambert Law')

        self.line4, = self.ax4.plot([], [], 'ok')
        self.cv4 = FigureCanvas(self.fg4)

        self.bxbutton.pack_end(self.buttonOK, True, True, 0)
        self.bxbutton.pack_end(self.btSkip, True, True, 0)
        self.bxbutton.pack_end(self.buttonQuit, True, True, 0)

        self.bxchose.pack_start(self.lbEsc, False, True, 0)
        self.bxchose.pack_start(self.filepath, True, True, 0)
        self.bxchose.pack_start(self.btBrowse, False, True, 0)
        self.bxchose.pack_start(self.btFile, False, True, 0)

        self.boxsubgraph.pack_start(self.cv2, True, True, 0)
        self.boxsubgraph.pack_start(self.cv4, True, True, 0)

        self.boxgraph.pack_start(self.cv1, True, True, 0)
        self.boxgraph.pack_start(self.boxsubgraph, True, True, 0)

        self.boxV.pack_start(self.bxchose, False, True, 0)
        self.boxV.pack_start(self.boxgraph, True, True, 0)

        self.bxlist.pack_start(self.btConcentra, False, True, 0)
        self.bxlist.pack_start(self.treeview, True, True, 0)
        self.bxlist.pack_start(self.bxbutton, False, False, 0)
        self.bxlist.pack_end(self.btSalva, False, True, 0)

        self.bxTodos.pack_start(self.boxV, True, True, 0)
        self.bxTodos.pack_start(self.bxlist, False, True, 5)
        self.add(self.bxTodos)

    def proximo(self, event):

        self.ax2.plot(self.spect[:, 0], self.corrspect)
        self.fg2.canvas.draw()

        self.filepath.set_sensitive(True)
        self.lbEsc.set_sensitive(True)
        self.btBrowse.set_sensitive(True)
        self.btFile.set_sensitive(True)

        self.liststore[self.listline][2] = self.a532
        self.quad.append((
            float(self.liststore[self.listline][1]),
            self.liststore[self.listline][2],
            np.sqrt(self.pcov[0, 0])))

        self.listline += 1

    def quit(self, event):
        print('Exit')
        sys.exit()

    def removelast(self, event):
        self.quad.pop()
        self.listline -= 1
        self.liststore[self.listline][2] = 0.0

        self.filepath.set_sensitive(True)
        self.lbEsc.set_sensitive(True)
        self.btBrowse.set_sensitive(True)
        self.btFile.set_sensitive(True)

    def seleciona(self, event):
        if self.filepath.get_text() == "":
            self.alertempty()
        else:
            self.set_title(self.filepath.get_text())
            self.filepath.set_sensitive(False)
            self.lbEsc.set_sensitive(False)
            self.btBrowse.set_sensitive(False)
            self.btFile.set_sensitive(False)
            self.direc = self.filepath.get_text()
            self.ax.cla()
            self.plota()

    def EscolheAqv(self, event):
        dialog = Gtk.FileChooserDialog(
            "Selecione o arquivo", None, Gtk.FileChooserAction.OPEN, (
                Gtk.STOCK_CANCEL, Gtk.ResponseType.CANCEL,
                Gtk.STOCK_OPEN, Gtk.ResponseType.OK))
        dialog.set_transient_for(self)

        response = dialog.run()
        if response == Gtk.ResponseType.OK:
            self.filepath.set_text(dialog.get_filename())
        elif response == Gtk.ResponseType.CANCEL:
            print("Cancel clicked")

        dialog.destroy()

    def EscolheConc(self, event):
        dialog = Gtk.FileChooserDialog(
            "Select Concentration File", None, Gtk.FileChooserAction.OPEN, (
                Gtk.STOCK_CANCEL, Gtk.ResponseType.CANCEL,
                Gtk.STOCK_OPEN, Gtk.ResponseType.OK))

        dialog.set_transient_for(self)
        response = dialog.run()

        if response == Gtk.ResponseType.OK:
            self.liststore.clear()
            self.btFile.set_sensitive(True)
            self.quad = []
            self.listline = 0

            self.conc = open(dialog.get_filename(), 'r')

            try:
                for line in self.conc:
                    (self.smp, self.phi) = line.split()
                    # self.phi = float(self.phi)
                    self.liststore.append([self.smp, self.phi, 0.0])
                    # self.liststore.append([
                    #     self.smp, format(self.phi, '.2e'), 0.0])
            except:
                self.alertconc()

        elif response == Gtk.ResponseType.CANCEL:
            print("Cancel clicked")

        dialog.destroy()

    def onselect(self, xmin, xmax):
        self.imin = np.searchsorted(self.spect[:, 0], xmin)
        self.imax = np.searchsorted(self.spect[:, 0], xmax)

        self.i532 = np.searchsorted(self.spect[:, 0], 532)
        self.tempdata = []

        try:
            self.param_bounds=(0, np.inf)
            self.p, self.pcov = curve_fit(
                self.Baseline,
                self.spect[self.imin:self.imax, 0],
                self.spect[self.imin:self.imax, 1])

            self.x = np.arange(300, 1100, 10)
            self.y = self.Baseline(self.x, *self.p)

            self.line.set_data(self.x, self.y)
            self.fg.canvas.draw()

            self.corrspect = self.spect[:, 1] - self.Baseline(self.spect[:, 0],
                                                          *self.p)
            self.a532 = self.corrspect[self.i532]

            self.plotaax2()

            self.line4.set_data([], [])
            self.fg4.canvas.draw()

            for linha in self.quad:
                self.tempdata.append(linha)

            self.tempdata.append((
                float(self.liststore[self.listline][1]),
                self.a532, np.sqrt(self.pcov[0, 0])))

            self.tempdata = np.array(self.tempdata)

            print(self.tempdata)

            self.line4.set_data(self.tempdata[:, 0], self.tempdata[:, 1])

            # recompute the ax.dataLim
            self.ax4.relim()
            # update ax.viewLim using the new dataLim
            self.ax4.autoscale_view()

            self.fg4.canvas.draw()

        except:
            print('intervalo')

    def plota(self):
        print('Analising sample: %s' % self.filepath.get_text())

        self.ax.set_title('Absorption Spectrum')
        self.ax.set_xlabel('$\lambda$ (nm)')
        self.ax.set_ylabel('A (O.D)')
        self.ax.set_xlim(350, 950)
        self.ax.set_ylim(-0.1, 3)

        self.ax.ticklabel_format(style='sci', scilimits=(-2, 2), axis='both')

        self.span = SpanSelector(self.ax, self.onselect, 'horizontal',
                                 useblit=False, rectprops=dict(
                                     alpha=0.7, facecolor='#aec7e8'))

        self.spect = np.genfromtxt(self.filepath.get_text(), skip_header=2)

        self.ax.plot(self.spect[:, 0], self.spect[:, 1], '-', alpha=0.85)

        self.line, = self.ax.plot(self.spect[:, 0], self.spect[:, 0],
                                  lw=2, zorder=9)

        self.line.set_data([], [])
        # recompute the ax.dataLim
        self.ax.relim()
        # update ax.viewLim using the new dataLim
        self.ax.autoscale_view()

        self.fg.canvas.draw()

    def plotaax2(self):
        self.line2.set_data(self.spect[:, 0], self.corrspect)
        self.ax2.set_xlim(350, 950)
        self.ax2.set_ylim(-0.1, 3)
        # # recompute the ax.dataLim
        # self.ax2.relim()
        # # update ax.viewLim using the new dataLim
        # self.ax2.autoscale_view()
        self.fg2.canvas.draw()

    def plotavarios(self):
        self.files = [file for file in sorted(os.listdir(
            self.filepath.get_text())) if file.endswith('s.dat')]

        for aqv in self.files:
            print(aqv)
            dados = np.genfromtxt(self.filepath.get_text() +
                                  '/' + aqv)

            self.line, = self.ax.plot(dados)
            self.ax.draw()
            # print(self.files)

    def alertempty(self):
        dialog = Gtk.MessageDialog(self, 0, Gtk.MessageType.INFO,
                                   Gtk.ButtonsType.OK, "Empy filepath")
        dialog.format_secondary_text(
            "Please select a file to analyse")
        dialog.run()

        dialog.destroy()

    def alertconc(self):
        dialog = Gtk.MessageDialog(self, 0, Gtk.MessageType.INFO,
                                   Gtk.ButtonsType.OK, "Unable to import file")
        dialog.format_secondary_text(
            "Please check if the file has two columns: sample, concentration")
        dialog.run()

        dialog.destroy()

    def Salva(self, event):

        self.filename = string.split(self.filepath.get_text(), '/')[-1]
        self.samplename = string.split(self.filename, '_')[0]

        dialog = Gtk.FileChooserDialog(
            "Save file", None, Gtk.FileChooserAction.SAVE, (
                Gtk.STOCK_CANCEL, Gtk.ResponseType.CANCEL,
                Gtk.STOCK_SAVE, Gtk.ResponseType.OK))

        dialog.set_transient_for(self)
        dialog.set_current_name(self.samplename + '.blb')
        dialog.set_do_overwrite_confirmation(True)

        response = dialog.run()
        if response == Gtk.ResponseType.OK:
            self.path = dialog.get_filename()
            print('Saving file: ' + self.path)
            self.salva = np.array(self.quad)
            np.savetxt(self.path, self.salva, delimiter='\t')
            print('Done')
        elif response == Gtk.ResponseType.CANCEL:
            print("Cancel clicked")

        dialog.destroy()

    def skip(self, event):
        self.listline += 1

    def Scat(self, x, a):
        return a/(x**4)

    def Baseline(self, x, a):
        return a

    def Parabola(self, x, a, b):
        return a*x**2 + b

    def Afin(self, x, a, b):
        return a*x + b

win = MyWindow()
win.connect("delete-event", Gtk.main_quit)
win.show_all()
Gtk.main()

repo_name: selleduardo/HRS

license: unknown


code:
#/usr/bin/env python
# -*- coding: utf-8 -*-
"""
@author: Eduardo
22 de Maio de 2017
HyperRayleigh Scattering Analysis
"""

import matplotlib.pyplot as plt
from matplotlib.backends.backend_gtk3cairo import FigureCanvasGTK3Cairo as FigureCanvas
from matplotlib.widgets import SpanSelector
from matplotlib.lines import Line2D
import numpy as np
import os
from scipy.optimize import curve_fit
import string

import gi
gi.require_version('Gtk', '3.0')
from gi.repository import Gtk

class MyWindow(Gtk.Window):

    def __init__(self):
        Gtk.Window.__init__(self)

        self.set_title("HRS Analysis")
        self.set_wmclass("HRS Analysis", "HRS Analysis")

        self.set_border_width(10)
        self.set_default_size(2000, 1000)
        # self.set_position(Gtk.WindowPosition.CENTER)

        self.lbEsc = Gtk.Label(label="Select file:")

        self.filepath = Gtk.Entry()

        self.btBrowse = Gtk.Button(label="Browse")
        self.btBrowse.connect("clicked", self.EscolheAqv)

        self.btFile = Gtk.Button(label="Analyse Files")
        self.btFile.set_sensitive(False)
        self.btFile.connect("clicked", self.seleciona)

        self.buttonOK = Gtk.Button(label="     Next    ")
        self.buttonOK.connect("clicked", self.proximo)

        self.buttonQuit = Gtk.Button(label="Remove Last")
        self.buttonQuit.connect("clicked", self.removelast)

        self.btConcentra = Gtk.Button(label="Select Concentration/Absorption File")
        self.btConcentra.connect("clicked", self.EscolheConc)

        self.btSalva = Gtk.Button(label="Save")
        self.btSalva.connect("clicked", self.Salva)

        self.liststore = Gtk.ListStore(str, str, float, float)
        self.treeview = Gtk.TreeView(model=self.liststore)

        # self.sel = self.treeview.get_selection()
        # self.sel.set_mode(Gtk.SelectionMode.NONE)

        self.amostra_text = Gtk.CellRendererText()
        self.column_amostra = Gtk.TreeViewColumn("Sample",
                                                 self.amostra_text, text=0)
        self.treeview.append_column(self.column_amostra)

        self.concentra_text = Gtk.CellRendererText()
        self.column_concentra = Gtk.TreeViewColumn("Concentration",
                                                   self.concentra_text, text=1)
        self.treeview.append_column(self.column_concentra)

        self.coef_text = Gtk.CellRendererText()
        self.column_coef = Gtk.TreeViewColumn("Quadratic Coef.",
                                              self.coef_text, text=2)
        self.treeview.append_column(self.column_coef)

        self.abs_text = Gtk.CellRendererText()
        self.column_abs = Gtk.TreeViewColumn("A (532)",
                                             self.abs_text, text=3)
        self.treeview.append_column(self.column_abs)

        self.bxchose = Gtk.HBox(spacing=6)
        self.boxgraph = Gtk.HBox(spacing=6)
        self.boxsubgraph = Gtk.VBox(spacing=6)
        self.boxV = Gtk.VBox(spacing=6)
        self.bxbutton = Gtk.HBox(spacing=6)
        self.bxTodos = Gtk.HBox(spacing=6)
        self.bxlist = Gtk.VBox(spacing=6)

        self.fg = plt.figure()
        self.ax = self.fg.add_subplot(111)

        self.ax.set_title('HRS Signal')
        self.ax.set_xlabel('$I(\omega)$')
        self.ax.set_ylabel('$I(2\omega)$')

        self.ax.ticklabel_format(style='sci', scilimits=(-2, 2), axis='both')

        self.cv1 = FigureCanvas(self.fg)
        # self.cursor = Cursor(self.ax, useblit=True, horizOn=True,
        #                      color='#ff9896', lw=1.5, alpha=0.9)

        self.fg2 = plt.figure()
        self.ax2 = self.fg2.add_subplot(111)
        self.ax2.set_xlabel('$I(\omega)$')
        self.ax2.set_ylabel('$I(2\omega)$')
        self.line2, = self.ax2.plot([], [], 'o')
        self.ax2.ticklabel_format(style='sci', scilimits=(-2, 2), axis='both')

        self.cv2 = FigureCanvas(self.fg2)

        self.fg4 = plt.figure()
        self.ax4 = self.fg4.add_subplot(111)
        self.ax4.set_xlabel('Concentration')
        self.ax4.set_ylabel('$I(2\omega)/I^2(\omega)$')
        self.line4, = self.ax4.plot([], [], 'ok')
        self.l4 = Line2D([], [], color='red', linewidth=1.5)
        self.ax4.add_line(self.l4)

        self.cv4 = FigureCanvas(self.fg4)

        self.bxbutton.pack_end(self.buttonOK, True, True, 0)
        self.bxbutton.pack_end(self.buttonQuit, True, True, 0)

        self.bxchose.pack_start(self.lbEsc, False, True, 0)
        self.bxchose.pack_start(self.filepath, True, True, 0)
        self.bxchose.pack_start(self.btBrowse, False, True, 0)
        self.bxchose.pack_start(self.btFile, False, True, 0)

        self.boxsubgraph.pack_start(self.cv2, True, True, 0)
        self.boxsubgraph.pack_start(self.cv4, True, True, 0)

        self.boxgraph.pack_start(self.cv1, True, True, 0)
        self.boxgraph.pack_start(self.boxsubgraph, True, True, 0)

        self.boxV.pack_start(self.bxchose, False, True, 0)
        self.boxV.pack_start(self.boxgraph, True, True, 0)

        self.bxlist.pack_start(self.btConcentra, False, True, 0)
        self.bxlist.pack_start(self.treeview, True, True, 0)
        self.bxlist.pack_start(self.bxbutton, False, False, 0)
        self.bxlist.pack_end(self.btSalva, False, True, 0)

        self.bxTodos.pack_start(self.boxV, True, True, 0)
        self.bxTodos.pack_start(self.bxlist, False, True, 5)
        self.add(self.bxTodos)

    def Parabola(self, x, a, b):
        return a*x**2 + b

    def Slope(self, x, a):
        return a*x

    def proximo(self, event):
        self.ax2.errorbar(self.ref[:self.IM], self.sgn[:self.IM, 0],
                          yerr=self.sgn[:self.IM, 1], fmt='o')
        self.ax2.plot(self.x, self.y, 'r-', lw=2)
        self.fg2.canvas.draw()

        self.dados = np.column_stack((self.ref, self.sgn[:, 0], self.sgn[:, 1]))
        np.savetxt('%s/Params/%s.quadratic' % (self.foldername, self.filename[:-6]), self.dados, delimiter='\t')

        file = open('%s/Params/%s.fit' % (self.foldername, self.filename[:-6]), 'w')
        file.write('%f\t%f\n' % (self.p[0], np.sqrt(self.pcov[0, 0])))
        file.write('%f\t%f\n' % (self.p[1], np.sqrt(self.pcov[1, 1])))
        file.close()

        self.filepath.set_sensitive(True)
        self.lbEsc.set_sensitive(True)
        self.btBrowse.set_sensitive(True)
        self.btFile.set_sensitive(True)

        self.liststore[self.listline][2] = self.p[0]
        self.quad.append((
            float(self.liststore[self.listline][1]),
            self.liststore[self.listline][2],
            np.sqrt(self.pcov[0, 0])))

        self.listline += 1
        # self.treeview.set_cursor(self.listline)

    def removelast(self, event):
        self.quad.pop()
        self.listline -= 1
        self.liststore[self.listline][2] = 0.0

        self.filepath.set_sensitive(True)
        self.lbEsc.set_sensitive(True)
        self.btBrowse.set_sensitive(True)
        self.btFile.set_sensitive(True)

    def seleciona(self, event):
        self.direc = self.filepath.get_text()

        if self.direc == "":
            self.alertempty()

        else:
            self.set_title(self.direc)

            self.filename = string.split(self.filepath.get_text(), '/')[-1]
            self.foldername = self.direc.replace(self.filename, "")

            self.filepath.set_sensitive(False)
            self.lbEsc.set_sensitive(False)
            self.btBrowse.set_sensitive(False)
            self.btFile.set_sensitive(False)

            try:
                os.mkdir('%s/Params' % self.foldername)
            except:
                pass

            self.ax.cla()
            self.plota()

    def EscolheAqv(self, event):
        dialog = Gtk.FileChooserDialog(
            "Selecione o arquivo", None, Gtk.FileChooserAction.OPEN, (
                Gtk.STOCK_CANCEL, Gtk.ResponseType.CANCEL,
                Gtk.STOCK_OPEN, Gtk.ResponseType.OK))
        dialog.set_transient_for(self)

        filter_any = Gtk.FileFilter()
        filter_any.set_name("Signal files")
        filter_any.add_pattern("*s.dat")
        dialog.add_filter(filter_any)

        response = dialog.run()
        if response == Gtk.ResponseType.OK:
            self.filepath.set_text(dialog.get_filename())
        elif response == Gtk.ResponseType.CANCEL:
            print("Cancel clicked")

        dialog.destroy()

    def EscolheConc(self, event):
        dialog = Gtk.FileChooserDialog(
            "Select Concentration File", None, Gtk.FileChooserAction.OPEN, (
                Gtk.STOCK_CANCEL, Gtk.ResponseType.CANCEL,
                Gtk.STOCK_OPEN, Gtk.ResponseType.OK))

        dialog.set_transient_for(self)
        response = dialog.run()

        if response == Gtk.ResponseType.OK:
            self.liststore.clear()
            self.btFile.set_sensitive(True)
            self.quad = []
            self.listline = 0

            self.conc = np.genfromtxt(dialog.get_filename(), dtype=None)
            # self.conc = self.conc[::-1]

        elif response == Gtk.ResponseType.CANCEL:
            print("Cancel clicked")

        # self.treeview.set_cursor(self.listline)
        self.concpath = dialog.get_current_folder()

        dialog.destroy()

        dialog2 = Gtk.FileChooserDialog(
            "Select Absorption File", None, Gtk.FileChooserAction.OPEN, (
                Gtk.STOCK_CANCEL, Gtk.ResponseType.CANCEL,
                Gtk.STOCK_OPEN, Gtk.ResponseType.OK))

        dialog2.set_transient_for(self)
        dialog2.set_current_folder(self.concpath)
        response2 = dialog2.run()

        if response2 == Gtk.ResponseType.OK:
            self.Abs = np.genfromtxt(dialog2.get_filename(), dtype=float)
            # self.Abs = self.Abs[::-1]

        elif response2 == Gtk.ResponseType.CANCEL:
            print("Cancel clicked")

        dialog2.destroy()

        if len(self.conc) == len(self.Abs):
            for i in range(0, len(self.conc)):
                (self.smp, self.phi) = self.conc[i]
                self.A532 = self.Abs[i][1]

                self.liststore.append([str(self.smp),
                                       str(self.phi),
                                       0.0,
                                       self.A532])

        else:
            self.alertconcabs()

    def onselect(self, xmin, xmax):
        self.imin = np.searchsorted(self.ref[:self.IM], xmin)
        self.imax = np.searchsorted(self.ref[:self.IM], xmax)

        self.tempdata = []

        # try:
        self.p, self.pcov = curve_fit(
            self.Parabola,
            self.ref[self.imin:self.imax],
            self.sgn[self.imin:self.imax, 0]) #,
            # sigma=self.sgn[self.imin:self.imax, 1],
            # absolute_sigma=True)

        self.x = np.arange(0, 1.05*max(self.ref), max(self.ref)/11.0)
        self.y = self.Parabola(self.x, *self.p)

        self.line.set_data(self.x, self.y)
        self.fg.canvas.draw()

        self.line4.set_data([], [])
        self.l4.set_data([], [])

        self.fg4.canvas.draw()

        for linha in self.quad:
            self.tempdata.append(linha)

        self.tempdata.append((
            float(self.liststore[self.listline][1]),
            self.p[0],
            np.sqrt(self.pcov[0, 0])))
        self.tempdata = np.array(self.tempdata)

        print(self.tempdata)

        self.lim4 = max(self.tempdata[:, 0])*1.1
        self.x4 = np.arange(0, self.lim4, self.lim4/15)
        self.p4, self.pcov4 = curve_fit(
            self.Slope,
            self.tempdata[:, 0],
            self.tempdata[:, 1])

        self.y4 = self.Slope(self.x4, *self.p4)

        self.l4.set_data(self.x4, self.y4)
        self.line4.set_data(self.tempdata[:, 0], self.tempdata[:, 1])

        self.ax4.relim()  # recompute the ax.dataLim
        self.ax4.autoscale_view()  # update ax4 lim

        self.fg4.canvas.draw()

        # except:
        #     print('intervalo')

    def plota(self):
        print('Analising sample: %s' % self.filepath.get_text())

        self.ax.cla()
        self.ax.set_title('HRS Signal')
        self.ax.set_xlabel('$I(\omega)$')
        self.ax.set_ylabel('$I(2\omega)$')

        self.ax.ticklabel_format(style='sci', scilimits=(-2, 2), axis='both')

        self.span = SpanSelector(self.ax, self.onselect, 'horizontal',
                                 useblit=False, rectprops=dict(
                                     alpha=0.7, facecolor='#aec7e8'))

        self.Imps = np.genfromtxt(self.filepath.get_text(), skip_footer=21)
        self.Impr = np.genfromtxt(self.filepath.get_text()[:-5] + 'r.dat',
                                  skip_footer=22)

        self.ref_temp = np.average(self.Impr, axis=1)
        self.sgn_temp = np.column_stack((
            np.average(self.Imps, axis=1),
            np.std(self.Imps, axis=1, ddof=1)))

        self.medref = np.average(self.ref_temp[2:8])
        self.medsgn = np.average(self.sgn_temp[2:8, 0])

        self.IM = np.where(self.ref_temp == max(self.ref_temp))[0][0]

        # self.sgn = self.sgn_temp[:self.IM, :] - self.medsgn
        # self.ref = self.ref_temp[:self.IM] - self.medref

        self.sgn = self.sgn_temp[self.IM:, :][::-1]
        self.sgn[:, 0] -= self.medsgn
        self.sgn[:, 1] = np.sqrt(self.sgn[:, 1]**2 + 1.0e-12)

        self.ref = self.ref_temp[self.IM:][::-1] - self.medref

        self.sgn[:, 0] = (2*self.sgn[:, 0])/(10**(-self.A532*0.5) + 10**(-self.A532*1.5))
        self.IM = -1

        self.ax.errorbar(self.ref[:self.IM], self.sgn[:self.IM, 0],
                         yerr=self.sgn[:self.IM, 1], fmt='ok-')

        self.line, = self.ax.plot(self.ref[:self.IM],
                                  self.sgn[:self.IM, 0], 'r-', lw=2,
                                  zorder=9)
        self.line.set_data([], [])

        self.fg.canvas.draw()

    def alertempty(self):
        dialog = Gtk.MessageDialog(self, 0, Gtk.MessageType.INFO,
                                   Gtk.ButtonsType.OK, "Empy filepath")
        dialog.format_secondary_text(
            "Please select a file to analyse")
        dialog.run()

        dialog.destroy()

    def alertconc(self):
        dialog = Gtk.MessageDialog(self, 0, Gtk.MessageType.INFO,
                                   Gtk.ButtonsType.OK,
                                   "Unable to import file")
        dialog.format_secondary_text(
            "Please check if the concentration file has columns: (sample, concentration) and absorbption file (sample, A532nm)")
        dialog.run()

        dialog.destroy()

    def alertconcabs(self):
        dialog = Gtk.MessageDialog(self, 0, Gtk.MessageType.INFO,
                                   Gtk.ButtonsType.OK,
                                   "Unable to import files")
        dialog.format_secondary_text(
            "Please check if concentration and absorption files have the same number of rows")
        dialog.run()

        dialog.destroy()

    def Salva(self, event):

        self.samplename = string.split(self.filename, '_')[0]

        dialog = Gtk.FileChooserDialog(
            "Save file", None, Gtk.FileChooserAction.SAVE, (
                Gtk.STOCK_CANCEL, Gtk.ResponseType.CANCEL,
                Gtk.STOCK_SAVE, Gtk.ResponseType.OK))

        dialog.set_transient_for(self)
        dialog.set_current_name(self.samplename + '.HRS')
        dialog.set_do_overwrite_confirmation(True)

        response = dialog.run()
        if response == Gtk.ResponseType.OK:
            self.path = dialog.get_filename()
            print('Saving file: ' + self.path)
            self.salva = np.array(self.quad)
            np.savetxt(self.path, self.salva, delimiter='\t')
            print('Done')
        elif response == Gtk.ResponseType.CANCEL:
            print("Cancel clicked")

        dialog.destroy()

win = MyWindow()
win.connect("delete-event", Gtk.main_quit)
win.show_all()
Gtk.main()