ROOT logo
//Given a list of gassiplex (manas) channel ranges, defines
//a motif.dat file (starting from bottom left)

#include <fstream>
#include <vector>
#include <string>
#include <sstream>
#include <cstdlib>
#include <iostream>
#include <algorithm>

void readGCToBerg(std::vector<int>& gc2berg)
{
  gc2berg.clear();

  std::ifstream in("GCToBerg.dat");
  
  int gc, berg;

  while ( in >> gc >> berg )
    {
      gc2berg.push_back(berg);
    }

  in.close();
}

void defineMotif(const char* motifName)
{
  std::vector<int> gc2berg;

  readGCToBerg(gc2berg);

  char line[80];

  std::ostringstream ofile;

  ofile << "motif" << motifName << ".dat";

  std::ofstream out(ofile.str().c_str());

  out << "# Motif " << motifName << std::endl
      << "#" << std::endl
      << "#connecteur_berg kapton padname not_used" << std::endl
      << "#for slats there's no kapton connector, so it's always 1 (zero make the reader" << std::endl
      << "#abort, so it's not a valid value here)." << std::endl
      << "#" << std::endl;

  int n = 1;
  while ( std::cin.getline(line,80) )
    {
      std::string sline(line);

      std::string::size_type pos = sline.find_first_of('-');
      int i1 = atoi(sline.c_str());
      int i2 = i1;
      if ( pos != std::string::npos )
	{
	  i2 = atoi(sline.substr(pos+1).c_str());
	}
      // assume the first 2 characters only are the gc number,
      // so replace them with berg number.
      if ( i1 < i2 ) 
	{
	  for ( int i = i1; i <= i2; ++i )
	    {
	      int berg = gc2berg[i];
	      out << berg << "\t1\t" << n << "\t-" << std::endl;
	      ++n;
	    }
	}
      else
	{
	  for ( int i = i1; i >= i2; --i )
	    {
	      int berg = gc2berg[i];
	      out << berg << "\t1\t" << n << "\t-" << std::endl;
	      ++n;
	    }
	}
    }
  
  out.close();
}

int main(int argc, char** argv)
{
  defineMotif(argv[1]);
  return 0;
}
 defineMotif.C:1
 defineMotif.C:2
 defineMotif.C:3
 defineMotif.C:4
 defineMotif.C:5
 defineMotif.C:6
 defineMotif.C:7
 defineMotif.C:8
 defineMotif.C:9
 defineMotif.C:10
 defineMotif.C:11
 defineMotif.C:12
 defineMotif.C:13
 defineMotif.C:14
 defineMotif.C:15
 defineMotif.C:16
 defineMotif.C:17
 defineMotif.C:18
 defineMotif.C:19
 defineMotif.C:20
 defineMotif.C:21
 defineMotif.C:22
 defineMotif.C:23
 defineMotif.C:24
 defineMotif.C:25
 defineMotif.C:26
 defineMotif.C:27
 defineMotif.C:28
 defineMotif.C:29
 defineMotif.C:30
 defineMotif.C:31
 defineMotif.C:32
 defineMotif.C:33
 defineMotif.C:34
 defineMotif.C:35
 defineMotif.C:36
 defineMotif.C:37
 defineMotif.C:38
 defineMotif.C:39
 defineMotif.C:40
 defineMotif.C:41
 defineMotif.C:42
 defineMotif.C:43
 defineMotif.C:44
 defineMotif.C:45
 defineMotif.C:46
 defineMotif.C:47
 defineMotif.C:48
 defineMotif.C:49
 defineMotif.C:50
 defineMotif.C:51
 defineMotif.C:52
 defineMotif.C:53
 defineMotif.C:54
 defineMotif.C:55
 defineMotif.C:56
 defineMotif.C:57
 defineMotif.C:58
 defineMotif.C:59
 defineMotif.C:60
 defineMotif.C:61
 defineMotif.C:62
 defineMotif.C:63
 defineMotif.C:64
 defineMotif.C:65
 defineMotif.C:66
 defineMotif.C:67
 defineMotif.C:68
 defineMotif.C:69
 defineMotif.C:70
 defineMotif.C:71
 defineMotif.C:72
 defineMotif.C:73
 defineMotif.C:74
 defineMotif.C:75
 defineMotif.C:76
 defineMotif.C:77
 defineMotif.C:78
 defineMotif.C:79
 defineMotif.C:80
 defineMotif.C:81
 defineMotif.C:82
 defineMotif.C:83
 defineMotif.C:84
 defineMotif.C:85
 defineMotif.C:86
 defineMotif.C:87
 defineMotif.C:88
 defineMotif.C:89
 defineMotif.C:90
 defineMotif.C:91