void EventListHelper::addFileToList  ( const char * file_name ) { 
  std::string line;
  if(std::string(file_name).find(".gz") != std::string::npos) {
    std::cout << "INFO: Adding gzipped file " << file_name << " to event list...";
    std::ifstream myfile(file_name, std::ios_base::in | std::ios_base::binary);
    try {
      boost::iostreams::filtering_istream in;
      in.push(boost::iostreams::gzip_decompressor());
      in.push(myfile);
      for(std::string str; std::getline(in, str); )
      {
        std::vector<std::string> fields = split ( str, std::string(":") );
        if ( fields.size() != 3 ) continue;
        addEventToList ( atoi ( fields[0].c_str() ),
            atoi ( fields[1].c_str() ),
            atoi ( fields[2].c_str() ) );
      }
    }
    catch(const boost::iostreams::gzip_error& e) {
      std::cout << "ERROR: problem with event list file " << file_name << " Cowardly exiting." << std::endl;
      std::cout << e.what() << '\n';
      exit(-1);
    }
  }
  else if(std::string(file_name).find(".txt") != std::string::npos) {
    std::cout << "INFO: Adding txt file " << file_name << " to event list...";
    std::ifstream myfile (file_name);
    if (myfile.is_open()) {

      while ( myfile.good() ) { 
        getline (myfile,line);
        std::vector<std::string> fields = split ( line, std::string(":") );
        if ( fields.size() != 3 ) continue;
        addEventToList ( atoi ( fields[0].c_str() ),
            atoi ( fields[1].c_str() ),
            atoi ( fields[2].c_str() ) );

      }
      myfile.close();
    }
    else {
      std::cout << "ERROR: could not open event list file " << file_name << " Cowardly exiting." << std::endl;
      exit(-1);
    }
  }
  else {
    std::cout << "ERROR: event list file " << file_name << " does not end with .gz or .txt. We don't know how to handle this.  Cowardly exiting." << std::endl;
    exit(-1);
  }
  if(m_set.size() < 1) {
    std::cout << "ERROR: event list has size < 1.  Did something go wrong when reading it?  Cowardly exiting." << std::endl;
    exit(-1);
  }
  std::cout << "INFO: added " << m_set.size() << " events." << std::endl;
}
void EventListHelper::addFileToList  ( const char * file_name, const char * tree_name ) { 
  if(std::string(file_name).find(".root") != std::string::npos) {
    std::cout << "INFO: Adding root file " << file_name << " containing tree named " << tree_name << " to event list...";

    TFile* file = TFile::Open(file_name);
    if(file->IsOpen()) {
      TTreeReader reader(tree_name,file);
      TTreeReaderValue<UInt_t> run(reader,"run"); // aka unsigned int
      TTreeReaderValue<UInt_t> lumi(reader,"lumi"); // aka unsigned int
      TTreeReaderValue<ULong64_t> event(reader,"event"); // aka unsigned long long
      while(reader.Next()) {
        addEventToList (*run, *lumi, *event);
      }
      file->Close();
    }
    else {
      std::cout << "ERROR: could not open event list file " << file_name << " Cowardly exiting." << std::endl;
      exit(-1);
    }
  }
  else {
    std::cout << "ERROR: event list file " << file_name << " does not end with .root. We don't know how to handle this.  Cowardly exiting." << std::endl;
    exit(-1);
  }
  if(m_set.size() < 1) {
    std::cout << "ERROR: event list has size < 1.  Did something go wrong when reading it?  Cowardly exiting." << std::endl;
    exit(-1);
  }
  std::cout << "INFO: added " << m_set.size() << " events." << std::endl;
}
Exemple #3
0
int main( ) {
	FILE* inFile = fopen(	"file.in", "r" );
	if ( inFile == NULL ) {
		printf( "Error opening input file" );
		return 1;
	}
	int emmissionsNumber;
	scanDecimal( inFile, &emmissionsNumber );

	TVNodeType TVNodeListHead = NULL;
	int i;

	//Iterate for each emmission
	for( i = 0; i < emmissionsNumber; i++ ) {

		//Create the current emmission
		EmmissionType *emmission = ( EmmissionType* ) malloc( sizeof( EmmissionType ) );
		emmission->title = ( char* ) malloc( MAX_STRING_LENGTH * sizeof( char ));
		emmission->description = ( char* ) malloc( MAX_STRING_LENGTH * sizeof( char ));
		emmission->tvProducer = ( char* ) malloc( MAX_STRING_LENGTH * sizeof( char ));

		//Read emmission details
		scanDecimal( inFile, &( emmission->idNumber ) );
		scanString( inFile, emmission->title	 );
		scanString( inFile, emmission->description );
		scanString( inFile, emmission->tvProducer );
		scanDateTime( inFile, &( emmission->startTime ) );
		scanDateTime( inFile, &( emmission->endTime ) );

		int eventsNumber;
		scanDecimal( inFile, &eventsNumber );
		EventType eventListHead = NULL;
		EventType eventListTail = NULL;

		//Iterate for each event
		int j;
		for ( j = 0; j < eventsNumber; j++ ) {

			EventType currentEvent = ( EventType ) malloc( sizeof( struct Event ) );
			currentEvent->eventTitle = ( char* ) malloc( MAX_STRING_LENGTH * sizeof( char ));
			currentEvent->organizer = ( char* ) malloc( MAX_STRING_LENGTH * sizeof( char ));
			currentEvent->eventPlace = ( char* ) malloc( MAX_STRING_LENGTH * sizeof( char ));

			//Read event details
			scanString( inFile, currentEvent->eventTitle );
			scanString( inFile, currentEvent->organizer );
			scanDateTime( inFile, &( currentEvent->dt ) );
			scanString( inFile, currentEvent->eventPlace );
			scanDecimal( inFile, &( currentEvent->official ) );

			//Read sport details
			SportType *currentSport = ( SportType* ) malloc( sizeof( SportType ) );
			currentSport->name = ( char* ) malloc( MAX_STRING_LENGTH * sizeof( char ));
			currentSport->participant1 = ( char* ) malloc( MAX_STRING_LENGTH * sizeof( char ));
			currentSport->participant2 = ( char* ) malloc( MAX_STRING_LENGTH * sizeof( char ));
			scanString( inFile, currentSport->name );
			scanDecimal( inFile, &( currentSport->classical ) );
			scanDecimal( inFile, &( currentSport->individual ) );
			scanString( inFile, currentSport->participant1 );
			scanString( inFile, currentSport->participant2 );

			//Link the sport with the corresponding event
			currentEvent->sport = currentSport;
			addEventToList( &eventListHead, &eventListTail, currentEvent );

		}
		emmission->subjects = eventListHead;
		TVNodeType currentTVNode = ( TVNodeType ) malloc( sizeof( struct TVNodeStruct ) );
		currentTVNode->anEmmission = emmission;
		addTVNodeToList( &( TVNodeListHead ), currentTVNode );
	}

	TVNodeType resultListHead = NULL;
	printf( "Enter subject - keyword: ");
	char answer[ 100 ];
	scanf( "%s", answer );
	findEmmissionsByKwd( TVNodeListHead, &resultListHead, answer );
	printEmmissionsList( resultListHead );

	return 0;
}