Commit 0e00f40fc6981bc83e27f8547f0882a4348f29a3

Authored by Jürgen Knödlseder
1 parent a53748b6

Add GFilename::fullname() method that returns the full filename, including any extension.

ChangeLog
1 -2016-02-22 Juergen Knoedlseder <jurgen.knodlseder@irap.omp.eu> 1 +2016-02-12 Juergen Knoedlseder <jurgen.knodlseder@irap.omp.eu>
2 2
3 * Version 1.1.0 released 3 * Version 1.1.0 released
4 ========================= 4 =========================
5 5
6 - Add GCTAEventList::remove method 6 + Add GFilename::fullname() method
  7 + Add GCTAEventList::remove() method
7 Handle also additional columns in GCTAEventList::append method 8 Handle also additional columns in GCTAEventList::append method
8 - Correct GFitsTableCol::insert method for empty columns  
9 - Correct GCTAEdisp2D::compute_ebounds methods (#1662) 9 + Correct GFitsTableCol::insert() method for empty columns
  10 + Correct GCTAEdisp2D::compute_ebounds_xxx() methods (#1662)
10 Use GFilename in GFits to store filename (#1649) 11 Use GFilename in GFits to store filename (#1649)
11 Load CTA GTI extension from the HDU name provided by the DSS keyword (#1598) 12 Load CTA GTI extension from the HDU name provided by the DSS keyword (#1598)
12 13
@@ -2,7 +2,7 @@ New Features and Important Changes in GammaLib 1.1.0 @@ -2,7 +2,7 @@ New Features and Important Changes in GammaLib 1.1.0
2 2
3 Author(s) : Juergen Knoedlseder 3 Author(s) : Juergen Knoedlseder
4 4
5 -11 February 2016 5 +12 February 2016
6 6
7 7
8 1. Introduction 8 1. Introduction
@@ -74,7 +74,8 @@ None @@ -74,7 +74,8 @@ None
74 74
75 13. Support module 75 13. Support module
76 ------------------ 76 ------------------
77 -None 77 +Add GFilename::fullname() method that returns the full filename including
  78 +any FITS extension.
78 79
79 80
80 14. XML module 81 14. XML module
include/GFilename.hpp
1 /*************************************************************************** 1 /***************************************************************************
2 * GFilename.hpp - Filename class * 2 * GFilename.hpp - Filename class *
3 * ----------------------------------------------------------------------- * 3 * ----------------------------------------------------------------------- *
4 - * copyright (C) 2015 by Juergen Knoedlseder * 4 + * copyright (C) 2015-2016 by Juergen Knoedlseder *
5 * ----------------------------------------------------------------------- * 5 * ----------------------------------------------------------------------- *
6 * * 6 * *
7 * This program is free software: you can redistribute it and/or modify * 7 * This program is free software: you can redistribute it and/or modify *
@@ -59,6 +59,7 @@ public: @@ -59,6 +59,7 @@ public:
59 bool empty(void) const; 59 bool empty(void) const;
60 int size(void) const; 60 int size(void) const;
61 int length(void) const; 61 int length(void) const;
  62 + const std::string& fullname(void) const;
62 const std::string& filename(void) const; 63 const std::string& filename(void) const;
63 std::string extname(const std::string& defaultname = "") const; 64 std::string extname(const std::string& defaultname = "") const;
64 const std::string& expression(void) const; 65 const std::string& expression(void) const;
@@ -78,10 +79,11 @@ protected: @@ -78,10 +79,11 @@ protected:
78 void set_filename(const std::string& filename); 79 void set_filename(const std::string& filename);
79 80
80 // Protected members 81 // Protected members
81 - std::string m_filename; //!< Filename (with stripped extension info)  
82 - std::string m_extname; //!< Extension name ("": not set)  
83 - int m_extno; //!< Extension number (-1: not set)  
84 - int m_extver; //!< Extension version (0: not set) 82 + std::string m_fullname; //!< Full file name
  83 + std::string m_filename; //!< File name (with stripped extension info)
  84 + std::string m_extname; //!< Extension name ("": not set)
  85 + int m_extno; //!< Extension number (-1: not set)
  86 + int m_extver; //!< Extension version (0: not set)
85 std::string m_expression; //!< Selection expression ("": not set) 87 std::string m_expression; //!< Selection expression ("": not set)
86 }; 88 };
87 89
@@ -137,9 +139,25 @@ int GFilename::length(void) const @@ -137,9 +139,25 @@ int GFilename::length(void) const
137 139
138 140
139 /***********************************************************************//** 141 /***********************************************************************//**
140 - * @brief Return file name 142 + * @brief Return full filename
141 * 143 *
142 - * @return String containing file name. 144 + * @return String containing filename with extension.
  145 + *
  146 + * Returns the full filename, including any extension.
  147 + ***************************************************************************/
  148 +inline
  149 +const std::string& GFilename::fullname(void) const
  150 +{
  151 + return (m_fullname);
  152 +}
  153 +
  154 +
  155 +/***********************************************************************//**
  156 + * @brief Return filename
  157 + *
  158 + * @return String containing filename without extension.
  159 + *
  160 + * Returns the file name without any extension.
143 ***************************************************************************/ 161 ***************************************************************************/
144 inline 162 inline
145 const std::string& GFilename::filename(void) const 163 const std::string& GFilename::filename(void) const
pyext/GFilename.i
1 /*************************************************************************** 1 /***************************************************************************
2 * GFilename.i - Filename class * 2 * GFilename.i - Filename class *
3 * ----------------------------------------------------------------------- * 3 * ----------------------------------------------------------------------- *
4 - * copyright (C) 2015 by Juergen Knoedlseder * 4 + * copyright (C) 2015-2016 by Juergen Knoedlseder *
5 * ----------------------------------------------------------------------- * 5 * ----------------------------------------------------------------------- *
6 * * 6 * *
7 * This program is free software: you can redistribute it and/or modify * 7 * This program is free software: you can redistribute it and/or modify *
@@ -51,6 +51,7 @@ public: @@ -51,6 +51,7 @@ public:
51 bool empty(void) const; 51 bool empty(void) const;
52 int size(void) const; 52 int size(void) const;
53 int length(void) const; 53 int length(void) const;
  54 + const std::string& fullname(void) const;
54 const std::string& filename(void) const; 55 const std::string& filename(void) const;
55 std::string extname(const std::string& defaultname = "") const; 56 std::string extname(const std::string& defaultname = "") const;
56 const std::string& expression(void) const; 57 const std::string& expression(void) const;
src/support/GFilename.cpp
@@ -350,6 +350,7 @@ std::string GFilename::print(const GChatter&amp; chatter) const @@ -350,6 +350,7 @@ std::string GFilename::print(const GChatter&amp; chatter) const
350 void GFilename::init_members(void) 350 void GFilename::init_members(void)
351 { 351 {
352 // Initialise members 352 // Initialise members
  353 + m_fullname.clear();
353 m_filename.clear(); 354 m_filename.clear();
354 m_extname.clear(); 355 m_extname.clear();
355 m_extno = -1; 356 m_extno = -1;
@@ -369,10 +370,11 @@ void GFilename::init_members(void) @@ -369,10 +370,11 @@ void GFilename::init_members(void)
369 void GFilename::copy_members(const GFilename& filename) 370 void GFilename::copy_members(const GFilename& filename)
370 { 371 {
371 // Copy members 372 // Copy members
372 - m_filename = filename.m_filename;  
373 - m_extname = filename.m_extname;  
374 - m_extno = filename.m_extno;  
375 - m_extver = filename.m_extver; 373 + m_fullname = filename.m_fullname;
  374 + m_filename = filename.m_filename;
  375 + m_extname = filename.m_extname;
  376 + m_extno = filename.m_extno;
  377 + m_extver = filename.m_extver;
376 m_expression = filename.m_expression; 378 m_expression = filename.m_expression;
377 379
378 // Return 380 // Return
@@ -411,45 +413,48 @@ void GFilename::set_filename(const std::string&amp; filename) @@ -411,45 +413,48 @@ void GFilename::set_filename(const std::string&amp; filename)
411 // Clear file name 413 // Clear file name
412 clear(); 414 clear();
413 415
414 - // Strip any whitespace  
415 - std::string fname = gammalib::strip_whitespace(filename); 416 + // Strip any whitespace and store the full name
  417 + m_fullname = gammalib::strip_whitespace(filename);
416 418
417 // Continue only if filename is not empty 419 // Continue only if filename is not empty
418 - if (!fname.empty()) { 420 + if (!m_fullname.empty()) {
419 421
420 // Check for [ symbol in filename 422 // Check for [ symbol in filename
421 - size_t start = fname.find_first_of("["); 423 + size_t start = m_fullname.find_first_of("[");
422 424
423 // If we have an extension then separate filename into filename 425 // If we have an extension then separate filename into filename
424 // part and extension part and fill the information of th object 426 // part and extension part and fill the information of th object
425 if (start != std::string::npos) { 427 if (start != std::string::npos) {
426 428
427 // Check for ] symbol in filename 429 // Check for ] symbol in filename
428 - size_t stop = fname.find_first_of("]", start); 430 + size_t stop = m_fullname.find_first_of("]", start);
429 431
430 // If there is no ] symbol then throw an exception 432 // If there is no ] symbol then throw an exception
431 if (stop == std::string::npos) { 433 if (stop == std::string::npos) {
432 - std::string msg = "Missing ] symbol in filename \""+  
433 - fname+"\" extension. Please correct the "  
434 - "filename."; 434 + std::string msg = "Missing ] symbol in file name \""+
  435 + m_fullname+"\" extension. Please correct "
  436 + "the file name.";
435 throw GException::invalid_argument(G_SET_FILENAME, msg); 437 throw GException::invalid_argument(G_SET_FILENAME, msg);
436 } 438 }
437 439
438 // If ] is not the last character then check if an opening bracket is next 440 // If ] is not the last character then check if an opening bracket is next
439 - if (stop < fname.length()-1) { 441 + if (stop < m_fullname.length()-1) {
440 442
441 - std::string character = gammalib::strip_whitespace(fname.substr(stop+1,1)); 443 + // Get character
  444 + std::string character = gammalib::strip_whitespace(m_fullname.substr(stop+1,1));
442 445
443 // If no bracket is coming, throw an exception 446 // If no bracket is coming, throw an exception
444 if (character != "[") { 447 if (character != "[") {
445 - std::string msg = "Non-bracket character \""+character+"\" beyond ] symbol in filename \""+  
446 - fname+"\" expression. Please correct the filename."; 448 + std::string msg = "Non-bracket character \""+character+
  449 + "\" beyond ] symbol in file name \""+
  450 + m_fullname+"\" expression. Please "
  451 + "correct the file name.";
447 throw GException::invalid_argument(G_SET_FILENAME, msg); 452 throw GException::invalid_argument(G_SET_FILENAME, msg);
448 } 453 }
449 } 454 }
450 455
451 // Extract extension name 456 // Extract extension name
452 - std::string extname = gammalib::strip_whitespace(fname.substr(start+1, stop-start-1)); 457 + std::string extname = gammalib::strip_whitespace(m_fullname.substr(start+1, stop-start-1));
453 458
454 // Check if there is a , symbol that separates extension name 459 // Check if there is a , symbol that separates extension name
455 // and extension version 460 // and extension version
@@ -464,8 +469,8 @@ void GFilename::set_filename(const std::string&amp; filename) @@ -464,8 +469,8 @@ void GFilename::set_filename(const std::string&amp; filename)
464 // If string is empty then throw an exception 469 // If string is empty then throw an exception
465 if (extver.empty()) { 470 if (extver.empty()) {
466 std::string msg = "No extension version found after , " 471 std::string msg = "No extension version found after , "
467 - "symbol in filename \""+fname+  
468 - "\". Please correct the filename."; 472 + "symbol in file name \""+m_fullname+
  473 + "\". Please correct the file name.";
469 throw GException::invalid_argument(G_SET_FILENAME, msg); 474 throw GException::invalid_argument(G_SET_FILENAME, msg);
470 } 475 }
471 476
@@ -476,8 +481,9 @@ void GFilename::set_filename(const std::string&amp; filename) @@ -476,8 +481,9 @@ void GFilename::set_filename(const std::string&amp; filename)
476 // positive 481 // positive
477 if (m_extver <= 0) { 482 if (m_extver <= 0) {
478 std::string msg = "Non-positive extension version " 483 std::string msg = "Non-positive extension version "
479 - "encountered in filename \""+fname+  
480 - "\". Please correct the filename."; 484 + "encountered in file name \""+
  485 + m_fullname+ "\". Please correct the "
  486 + "file name.";
481 throw GException::invalid_argument(G_SET_FILENAME, msg); 487 throw GException::invalid_argument(G_SET_FILENAME, msg);
482 } 488 }
483 489
@@ -489,8 +495,8 @@ void GFilename::set_filename(const std::string&amp; filename) @@ -489,8 +495,8 @@ void GFilename::set_filename(const std::string&amp; filename)
489 // If we have an empty extension name then throw an exception 495 // If we have an empty extension name then throw an exception
490 if (extname.empty()) { 496 if (extname.empty()) {
491 std::string msg = "An empty extension has been specified in " 497 std::string msg = "An empty extension has been specified in "
492 - "filename \""+fname+"\". Please correct the"  
493 - " filename."; 498 + "file name \""+m_fullname+"\". Please "
  499 + "correct the file name.";
494 throw GException::invalid_argument(G_SET_FILENAME, msg); 500 throw GException::invalid_argument(G_SET_FILENAME, msg);
495 } 501 }
496 502
@@ -505,8 +511,8 @@ void GFilename::set_filename(const std::string&amp; filename) @@ -505,8 +511,8 @@ void GFilename::set_filename(const std::string&amp; filename)
505 // positive 511 // positive
506 if (m_extno < 0) { 512 if (m_extno < 0) {
507 std::string msg = "Negative extension number encountered " 513 std::string msg = "Negative extension number encountered "
508 - "in filename \""+fname+"\". Please "  
509 - "correct the filename."; 514 + "in file name \""+m_fullname+"\". "
  515 + "Please correct the file name.";
510 throw GException::invalid_argument(G_SET_FILENAME, msg); 516 throw GException::invalid_argument(G_SET_FILENAME, msg);
511 } 517 }
512 518
@@ -521,48 +527,49 @@ void GFilename::set_filename(const std::string&amp; filename) @@ -521,48 +527,49 @@ void GFilename::set_filename(const std::string&amp; filename)
521 // Throw an exception if extension name is empty 527 // Throw an exception if extension name is empty
522 if (m_extname.empty()) { 528 if (m_extname.empty()) {
523 std::string msg = "Empty extension name encountered " 529 std::string msg = "Empty extension name encountered "
524 - "in filename \""+fname+"\". Please "  
525 - "correct the filename."; 530 + "in file name \""+m_fullname+"\". "
  531 + "Please correct the file name.";
526 throw GException::invalid_argument(G_SET_FILENAME, msg); 532 throw GException::invalid_argument(G_SET_FILENAME, msg);
527 } 533 }
528 534
529 } // endelse: extension name provided 535 } // endelse: extension name provided
530 536
531 // Store the file name 537 // Store the file name
532 - m_filename = gammalib::strip_whitespace(fname.substr(0,start)); 538 + m_filename = gammalib::strip_whitespace(m_fullname.substr(0,start));
533 539
534 // Check if there is an expression behind the extension name 540 // Check if there is an expression behind the extension name
535 - size_t expr_start = fname.find_first_of("[", stop+1); 541 + size_t expr_start = m_fullname.find_first_of("[", stop+1);
536 542
537 if (expr_start != std::string::npos) { 543 if (expr_start != std::string::npos) {
538 544
539 // Check for ] symbol in expression 545 // Check for ] symbol in expression
540 - size_t expr_stop = fname.find_first_of("]", expr_start); 546 + size_t expr_stop = m_fullname.find_first_of("]", expr_start);
541 547
542 // If there is no ] symbol then throw an exception 548 // If there is no ] symbol then throw an exception
543 if (expr_stop == std::string::npos) { 549 if (expr_stop == std::string::npos) {
544 - std::string msg = "Missing ] symbol in filename \""+  
545 - fname+"\" expression. Please correct the "  
546 - "filename."; 550 + std::string msg = "Missing ] symbol in file name \""+
  551 + m_fullname+"\" expression. Please "
  552 + "correct the file name.";
547 throw GException::invalid_argument(G_SET_FILENAME, msg); 553 throw GException::invalid_argument(G_SET_FILENAME, msg);
548 } 554 }
549 555
550 // If ] is not the last character then throw an exception 556 // If ] is not the last character then throw an exception
551 - if (expr_stop < fname.length()-1) {  
552 - std::string msg = "Characters beyond ] symbol in filename \""+  
553 - fname+"\" expression. Please correct the filename."; 557 + if (expr_stop < m_fullname.length()-1) {
  558 + std::string msg = "Characters beyond ] symbol in file "
  559 + "name \""+m_fullname+"\" expression. "
  560 + "Please correct the file name.";
554 throw GException::invalid_argument(G_SET_FILENAME, msg); 561 throw GException::invalid_argument(G_SET_FILENAME, msg);
555 } 562 }
556 563
557 // Store expression 564 // Store expression
558 - m_expression = gammalib::strip_whitespace(fname.substr(expr_start+1, expr_stop - expr_start-1)); 565 + m_expression = gammalib::strip_whitespace(m_fullname.substr(expr_start+1, expr_stop - expr_start-1));
559 } 566 }
560 567
561 } // endif: had extension 568 } // endif: had extension
562 569
563 // ... otherwise simply set the filename 570 // ... otherwise simply set the filename
564 else { 571 else {
565 - m_filename = fname; 572 + m_filename = m_fullname;
566 } 573 }
567 574
568 } // endif: filename was not empty 575 } // endif: filename was not empty