ROOT logo
//*-- Author : Anar Rustamov

#include "halignmentgnomag.h"
#include "TClonesArray.h"
#include "halignmentggeom.h"
#include "halignmentgrotations.h"
#include "hgeomtransform.h"
#include "TH2F.h"
#include "TH1F.h"
#include "TMinuit.h"
#include "iostream"
#include "TMath.h"
#include "TFile.h"
#include "TCanvas.h"

using namespace std;

ClassImp(HAlignmentGNoMag)
  
  
  HAlignmentGNoMag::HAlignmentGNoMag()
{
  alignTracks = new TClonesArray("HAlignmentGParticle",5000000);
  ResetCounts();
  isAligned=kFALSE;
  histoDiffYBeforeMod3=NULL;
  histoDiffYAfterMod3=NULL;
  histoDiffYBeforeVsPhiMod3=NULL;
  histoDiffYAfterVsPhiMod3=NULL;
  histoDiffYBeforeMod4=NULL;
  histoDiffYAfterMod4=NULL;
  histoDiffYBeforeVsPhiMod4=NULL;
  histoDiffYAfterVsPhiMod4=NULL;
  fitVersion = 0;
  
  AcceptRadius=0.;
  AcceptRadiusFour=0.;
  AcceptRadiusTarg=0.;
  AcceptDir=0.;
  AcceptDirFour=0.;
  
  isThirdChamber = kTRUE;
  isFouthChamber = kTRUE;

   
  
  for(Int_t ss=0; ss<6; ss++)
  for(Int_t mm=0; mm<4; mm++)
   mdcSetup[ss][mm]=-1;
}

void fcnMod(Int_t &npar, Double_t *gin, Double_t &f, Double_t *par, Int_t iflag)
{
  static int count = 1;
  count++;

  HAlignmentGNoMag *myObject=(HAlignmentGNoMag*)(gMinuit->GetObjectFit());
  HAlignmentGParticle *p;
  Float_t F=0;
  Float_t FF=0;
  
  HGeomTransform trans = myObject -> GetAlignRot() -> MakeTransMatrix(par[0], par[1], par[2], par[3], par[4], par[5]);
  HGeomVector inter;
  HGeomVector  diff;
  Int_t usedMod=myObject->GetUsedMod();
  Int_t usedSec=myObject->GetUsedSec();
  Int_t fitVersion = myObject->GetFitVersion();
  for(Int_t i=0;  i< myObject -> GetCloneSize(); i++)
    {
      p=(HAlignmentGParticle*)(myObject->GetAlignTracks())->At(i);
      //if(!p->GetIsGood()) continue;
      HGeomVector point1 = p->GetPoint(0); //in Mod
      HGeomVector point2 = p->GetPoint(1); //in Mod
      HGeomVector point3 = p->GetPoint(2); //in Mod
      HGeomVector point4 = p->GetPoint(3); //in Mod
      point1 = myObject -> GetAlignRot() -> TransMdc(point1,"FromModToSec",usedSec,0);
      point2 = myObject -> GetAlignRot() -> TransMdc(point2,"FromModToSec",usedSec,1);
      if(usedMod==2)
	point3= trans.transFrom(point3);
      if(usedMod == 3)
	point3= trans.transFrom(point4);
      inter=myObject -> GetAlignGeom() -> CalcIntersection(point1, point2, trans);
      diff=(inter-point3);
      F  +=  diff.getX()*diff.getX()/4. + diff.getY()*diff.getY() +  diff.getZ()*diff.getZ();
      FF += diff.getX()*diff.getX()     + diff.getY()*diff.getY() +  diff.getZ()*diff.getZ();
    }
    
      

  if(fitVersion == 0) 
  {     
  f = F;
  if( count%100 ==0 ) cout<<count<<"  the function value is  "<<f<<"  "<<par[0]<<"  "<<par[1]<<"  "<<par[2]<<endl;
  }
  else
  {
  f = sqrt(FF);
  if( count%100 ==0 ) cout<<count<<"  the function value is  "<<f<<"  "<<par[0]<<"  "<<par[1]<<"  "<<par[2]<<endl;
  }
}

void fcnMod11(Int_t &npar, Double_t *gin, Double_t &f, Double_t *par, Int_t iflag)
{
  static int count = 1;
  count++;
  
  
  HAlignmentGNoMag *myObject=(HAlignmentGNoMag*)(gMinuit->GetObjectFit());
  HAlignmentGParticle *p;
  Float_t errX = 0.450;
  Float_t errY = 0.140;
  Float_t F = 0;
  HGeomTransform trans = myObject -> GetAlignRot() -> MakeTransMatrix(par[0], par[1], par[2], par[3], par[4], par[5]);
  HGeomVector inter;
  HGeomVector  diff;
  Int_t usedMod=myObject->GetUsedMod();
  Int_t usedSec=myObject->GetUsedSec();
  HGeomTransform transDub = *myObject -> GetAlignRot()->GetTransMdc(usedSec, 1);
  transDub.transTo(*myObject -> GetAlignRot()->GetTransMdc(usedSec));
  for(Int_t i=0;  i< myObject -> GetCloneSize(); i++)
    {
      p = (HAlignmentGParticle*)(myObject->GetAlignTracks())->At(i);
      //if(!p->GetIsGood()) continue;
      HGeomVector point1 = p->GetPoint(0); //in Mod
      HGeomVector point2 = p->GetPoint(1); //in Mod
      HGeomVector point3 = p->GetPoint(2); //in Mod
      HGeomVector point4 = p->GetPoint(3); //in Mod
      point1= myObject -> GetAlignRot() -> TransMdc(point1,"FromModToSec",usedSec,0);
      //point2= myObject -> GetAlignRot() -> TransMdc(point2,"FromModToSec",usedSec,1);
      if(usedMod == 2)
	point3 = trans.transFrom(point3); // sector
      if(usedMod == 3)
	point3= trans.transFrom(point4); // sector
      //inter=myObject -> GetAlignGeom() -> CalcIntersection(point1, point2, trans);
      inter=myObject -> GetAlignGeom() -> CalcIntersection(point1, point3, transDub); //transDub---Sector syst
      inter=transDub.transTo(inter);
      //inter = myObject -> GetAlignRot() -> TransMdc(inter,"FromModToSec",usedSec,0);
      diff = (inter-point2);
      F += diff.getX()*diff.getX()/errX/errX+diff.getY()*diff.getY()/errY/errY;////+diff.getZ()*diff.getZ();
    }
  //f=sqrt(F);
  f=F;
  if( count%100 ==0 ) cout<<count<<"  the function value is  "<<f<<"  "<<par[0]<<"  "<<par[1]<<"  "<<par[2]<<endl;
  
}

HGeomTransform HAlignmentGNoMag::AlignMod()
{
  Int_t ierflg = 0;
  if(!gMinuit)
  fMinuit=new TMinuit(6);
  gMinuit->SetFCN(fcnMod11);
  gMinuit->SetObjectFit(this);
  Double_t arglist[6];
  Double_t vstart[6],low[6],up[6];
  Double_t step[13];
  Double_t out[6];
  Double_t errOut[6];
  HGeomTransform fromModToSec = transBefore[UsedMod];
  fromModToSec.transTo(*fAlignRot->GetTransMdc(UsedSec));
  fAlignRot -> GetEulerAngles (fromModToSec, vstart[0], vstart[1], vstart[2]);
  fAlignRot -> GetTransVector (fromModToSec, vstart[3], vstart[4], vstart[5]);
  for(Int_t i=0; i<6; i++)
    {
      //step[i] = vstart[i] / 1000.;
      step[i] = 0.01;
      low[i]  = vstart[i] - .9;
      up[i]   = vstart[i] + .9;
    }
   low[3]  = vstart[3] - 10.;
   low[4]  = vstart[4] - 10.;
   low[5]  = vstart[5] - 10.;
   up[3]   = vstart[3] + 10.;
   up[4]   = vstart[4] + 10.;
   up[5]   = vstart[5] + 10.;
  
   step[3] = 0.05;
   step[4] = 0.5;
   step[5] = 0.5;
  
  gMinuit->mnparm(0, "phi", vstart[0],step[0],low[0],up[0],ierflg);
  gMinuit->mnparm(1, "psi",vstart[1], step[1],low[1],up[1],ierflg);
  gMinuit->mnparm(2, "theta", vstart[2], step[2],low[2],up[2],ierflg);
  gMinuit->mnparm(3, "x", vstart[3], step[3], low[3],up[3],ierflg);
  gMinuit->mnparm(4, "y",vstart[4], step[4],low[4],up[4],ierflg);
  gMinuit->mnparm(5, "z", vstart[5], step[5], low[5],up[5],ierflg);
  
/*
    gMinuit->FixParameter(0);
    gMinuit->FixParameter(1);
    gMinuit->FixParameter(2);


    gMinuit->FixParameter(3);
    gMinuit->FixParameter(4);
    gMinuit->FixParameter(5);
*/
  
   gMinuit->SetPrintLevel(-1);
  //     arglist[0] =1;
  //     gMinuit->mnexcm("SET NOW", arglist,1,ierflg);
  gMinuit->SetErrorDef(0.5);
//  gMinuit->SetErrorDef(1);
  arglist[0]=2;
  gMinuit->mnexcm("SET STR", arglist,1,ierflg);
  arglist[0] = 1;
  gMinuit->mnexcm("SET ERR", arglist ,1,ierflg);
  arglist[1] = 0.001;
  arglist[0] = 100000;
  gMinuit->mnexcm("SIMPLEX",arglist,1,ierflg);
 // gMinuit->mnexcm("MINIMIZE",arglist,1,ierflg);
  ////////gMinuit->mnexcm("MINOS",arglist,1,ierflg);
  for (Int_t ii=0; ii<6; ii++)
    {
      gMinuit->GetParameter(ii,out[ii],errOut[ii]);
    }
  transAfter[UsedMod]=fAlignRot->MakeTransMatrix(out[0], out[1], out[2], out[3], out[4], out[5]);
  transAfter[UsedMod].transFrom(*fAlignRot->GetTransMdc(UsedSec));
  return transAfter[UsedMod];
}

HAlignmentGNoMag::~HAlignmentGNoMag()
{
  if(alignTracks)
    {
      alignTracks -> Delete();
      delete alignTracks;
    }
}

void HAlignmentGNoMag::Init(TString _inName, TString _outName, Int_t _numberOfTracks, Bool_t _isAligned)
{
  numberOfTracks=_numberOfTracks;
  isAligned=_isAligned;
  isAligned=kFALSE;
  histoVertex = new TH1F("histoVertex","histoVertex",100,-100,10);
  if(histoDiffYBeforeMod3)
    delete histoDiffYBeforeMod3;
  histoDiffYBeforeMod3 = new TH1F("histoDiffYBeforeMod3","histoDiffYBeforeMod3",100,-10,10);
  if(histoDiffYAfterMod3)
    delete histoDiffYAfterMod3;
  histoDiffYAfterMod3  = new TH1F("histoDiffYAfterMod3", "histoDiffYAfterMod3",100,-10,10);
  if(histoDiffYBeforeMod4)
    delete histoDiffYBeforeMod4;
  histoDiffYBeforeMod4 = new TH1F("histoDiffYBeforeMod4","histoDiffYBeforeMod4",100,-10,10);
  if(histoDiffYAfterMod4)
    delete histoDiffYAfterMod4;
  histoDiffYAfterMod4  = new TH1F("histoDiffYAfterMod4", "histoDiffYAfterMod4",100,-10,10);
  if(histoDiffYBeforeVsPhiMod3)
    delete histoDiffYBeforeVsPhiMod3;
  histoDiffYBeforeVsPhiMod3 = new TH2F("histoDiffYBeforeVsPhiMod3","histoDiffYBeforeVsPhiMod3",100,60,120,100,-10,10);
  if(histoDiffYAfterVsPhiMod3)
    delete histoDiffYAfterVsPhiMod3;
  histoDiffYAfterVsPhiMod3  = new TH2F("histoDiffYAfterVsPhiMod3", "histoDiffYAfterVsPhiMod3",100,60,120,100,-10,10);
  if(histoDiffYBeforeVsThetaMod3)
    delete histoDiffYBeforeVsThetaMod3;
  histoDiffYBeforeVsThetaMod3 = new TH2F("histoDiffYBeforeVsThetaMod3","histoDiffYBeforeVsThetaMod3",100,10,90,100,-10,10);
  if(histoDiffYAfterVsThetaMod3)
    delete histoDiffYAfterVsThetaMod3;
  histoDiffYAfterVsThetaMod3  = new TH2F("histoDiffYAfterVsThetaMod3", "histoDiffYAfterVsThetaMod3",100,10,90,100,-10,10);
  if(histoDiffYBeforeVsPhiMod4)
    delete histoDiffYBeforeVsPhiMod4;
  histoDiffYBeforeVsPhiMod4 = new TH2F("histoDiffYBeforeVsPhiMod4","histoDiffYBeforeVsPhiMod4",100,60,120,100,-10,10);
  if(histoDiffYAfterVsPhiMod4)
    delete histoDiffYAfterVsPhiMod4;
  histoDiffYAfterVsPhiMod4  = new TH2F("histoDiffYAfterVsPhiMod4", "histoDiffYAfterVsPhiMod4",100,60,120,100,-10,10);
  if(histoDiffYBeforeVsThetaMod4)
    delete histoDiffYBeforeVsThetaMod4;
  histoDiffYBeforeVsThetaMod4 = new TH2F("histoDiffYBeforeVsThetaMod4","histoDiffYBeforeVsThetaMod4",100,10,90,100,-10,10);
  if(histoDiffYAfterVsThetaMod4)
    delete histoDiffYAfterVsThetaMod4;
    histoDiffYAfterVsThetaMod4  = new TH2F("histoDiffYAfterVsThetaMod4", "histoDiffYAfterVsThetaMod4",100,10,90,100,-10,10);
    histoTheta=new TH1F("histoTheta", "histoTheta", 80,10,90);
    histoTheta->GetXaxis()->SetTitle("#theta [^{o}]");
    
    //RasterPlotBefore= new TH2F("RasterPlotBefore", "RasterPlotBefore",100,-500,500,100,100,1000);
    //RasterPlotAfter= new TH2F("RasterPlotAfter", "RasterPlotAfter",100,-500,500,100,100,1000);
    
    if(RasterPlotBefore3) delete RasterPlotBefore3;
      RasterPlotBefore3= new TH2F("RasterPlotBefore3", "RasterPlotBefore3",200,-420,420,200,220,900);
    if(RasterPlotBefore4) delete RasterPlotBefore4;
      RasterPlotBefore4 = new TH2F("RasterPlotBefore4", "RasterPlotBefore4",200,-420,420,200,220,900);

    if(RasterPlotAfter3) delete RasterPlotAfter3;
      RasterPlotAfter3= new TH2F("RasterPlotAfter3", "RasterPlotAfter3",200,-420,420,200,220,900);
    if(RasterPlotAfter4) delete RasterPlotAfter4;
      RasterPlotAfter4 = new TH2F("RasterPlotAfter4", "RasterPlotAfter4",200,-420,420,200,220,900);


    //histoVertex = new TH1F("histoVertex","histoVertex",100,-100,20);
    
    //declare histograms and so on
    SetIname(_inName);
    outName=_outName;
    cout<<"We are reading the file  "<<_inName<<endl;
    ////in.open(inName);
}

void HAlignmentGNoMag::CollectTracks()
{
    cout<<"numEvents==  "<<numberOfTracks<<endl;
    Int_t counter, counter1;
    counter=0;
    cout<<"Start hist distribution"<<endl;
    /////while(!in.eof())
    //for(Int_t f=0; f<936634; f++)
    for(Int_t f=0; f<numberOfTracks; f++)
      {
        if(counter%10000==0)
	{
	  cout<<"the Event Number is  "<<counter<<" sector ===  "<<sector<<"  module==  "<<UsedMod<<"  evt==  "<<FirstEvent<<endl;
	  if(counter!=0 && FirstEvent == 0) {cout<<"end is reached stop everything "<<endl;break;}
	}

	if(counter==0)
	  {
            in>>nEvent>>sector>>mod>>X>>Y>>Xdir>>Ydir;
            FirstEvent=nEvent;
            FirstMod=mod;
            FirstX=X;
            FirstXdir=Xdir;
            FirstY=Y;
            FirstYdir=Ydir;
	  }
        counter1=0;
        for(Int_t m=0; m<50; m++)
	  {
            in>>nEvent>>sector>>mod>>X>>Y>>Xdir>>Ydir;
            if(nEvent==FirstEvent)
	      {
                if(counter1==0)
		  {
                    AddData(FirstX,FirstXdir,FirstY, FirstYdir, FirstMod);
		  }
                AddData(X,Xdir,Y,Ydir,mod);
                counter1++;
	      }
            else
            {
	      FirstEvent=nEvent;
	      FirstMod=mod;
	      FirstX=X;
	      FirstXdir=Xdir;
	      FirstY=Y;
	      FirstYdir=Ydir;
	      break;
            }
	  }
        AddToClones();
	
        counter++;
      }
    in.close();
    in.clear();
}

void HAlignmentGNoMag::AddData(Float_t x,Float_t xd,Float_t y,Float_t yd,Int_t m)
{
  XValue[m][nCount[m]]=x;
  XdirValue[m][nCount[m]]=xd;
  YValue[m][nCount[m]]=y;
  YdirValue[m][nCount[m]]=yd;
  nCount[m]++;
}


/*
Bool_t HAlignmentGNoMag::AddToClones()
{
  for(Int_t m=0; m<4; m++)
    {
      if(nCount[m]==0)
        {
	    ResetCounts();
            return kFALSE;
        }
    }
*/    
Bool_t HAlignmentGNoMag::AddToClones()
{


 if(nCount[0] == 0 || nCount[1] == 0 )
 {
            ResetCounts();
            return kFALSE;
 } 
 
 if(nCount[2] == 0 && nCount[3] == 0 )
 {
            ResetCounts();
            return kFALSE;
 } 
 
 

  if(nCount[2] == 0 && nCount[3]!= 0)
  {
    setDefault(XValue[2][0], XdirValue[2][0], YValue[2][0], YdirValue[2][0]);
    //setDefault(XValue[2][1], XdirValue[2][1], YValue[2][1], YdirValue[2][1]);
    
    nCount[2] = 1;
    //cout<<"No Modele 2"<<endl;
  }
  
  if(nCount[3] == 0 && nCount[2] != 0 )
  {
    setDefault(XValue[3][0], XdirValue[3][0], YValue[3][0], YdirValue[3][0]);
    nCount[3] = 1;
  }

//   cout<<nCount[0]<<"  "<<nCount[1]<<"  "<<nCount[2]<<"  "<<nCount[3]<<endl;

  for(Int_t i=0; i<nCount[0]; i++)
    for(Int_t j=0; j<nCount[1]; j++)
      for(Int_t k=0; k<nCount[2];k++)
	for(Int_t l=0; l<nCount[3]; l++)
	  {
	    
	    
	    fAlignParticle.SetX(       XValue[0][i],    XValue[1][j],    XValue[2][k],    XValue[3][l] );
	    fAlignParticle.SetXdir( XdirValue[0][i], XdirValue[1][j], XdirValue[2][k], XdirValue[3][l] );
	    fAlignParticle.SetY(       YValue[0][i],    YValue[1][j],    YValue[2][k],    YValue[3][l] );
	    fAlignParticle.SetYdir( YdirValue[0][i], YdirValue[1][j], YdirValue[2][k], YdirValue[3][l] );
	    fAlignParticle.SetPoints();
	    
	    if(Selected(fAlignParticle))
	      {
		if(cloneSize>=2000000)
		  {
		    cout<<"Increase clone size"<<endl;
		    ResetCounts();
		    return kFALSE;
		  }
		testP = new ((*alignTracks)[cloneSize++]) HAlignmentGParticle(fAlignParticle);
		
	      }
	    
	  }
  ResetCounts();
  return kTRUE;
}

void HAlignmentGNoMag::ResetCounts()
{
  
  for(Int_t i=0; i<4; i++)
    {
      nCount[i]=0;
    }
  
}

Bool_t HAlignmentGNoMag::Selected(HAlignmentGParticle &p)
{
  //return kTRUE;

  //if(isThirdChamber==kFALSE) {cout<<"track is added to clonde"<<endl;return kTRUE;}
 

  HGeomVector point1=p.GetPoint(0);
  HGeomVector dir1=  p.GetDir(0);
  HGeomVector point2=p.GetPoint(1);
  HGeomVector dir2=  p.GetDir(1);
  HGeomVector point3=p.GetPoint(2);
  HGeomVector dir3=  p.GetDir(2);
  HGeomVector point4=p.GetPoint(3);
  HGeomVector dir4=  p.GetDir(3);
  
  // cout<<"before "<<point1.getZ()<<endl;
  point1=fAlignRot->TransMdc(point1,"FromModToLab",UsedSec,0);
  point2=fAlignRot->TransMdc(point2,"FromModToLab",UsedSec,1);
  // point3=fAlignRot->TransMdc(point3,"FromModToLab",0,2);
  // point4=fAlignRot->TransMdc(point4,"FromModToLab",0,3);
  dir1=fAlignRot->TransMdc(dir1,"FromModToLab",UsedSec,0)-(fAlignRot->GetTransMdc(UsedSec,0)->getTransVector());
  dir2=fAlignRot->TransMdc(dir2,"FromModToLab",UsedSec,1)-(fAlignRot->GetTransMdc(UsedSec,1)->getTransVector());
  // dir3=fAlignRot->TransMdc(dir3,"FromModToLab",0,2)-(fAlignRot->GetTransMdc(0,2)->getTransVector());
    // dir4=fAlignRot->TransMdc(dir4,"FromModToLab",0,3)-(fAlignRot->GetTransMdc(0,3)->getTransVector());
  
    //if(UsedMod==2)
    // {

     

    if(isThirdChamber)
    {
    point3 = transBefore[2].transFrom(point3);
    dir3   =   transBefore[2].transFrom(dir3)-transBefore[2].getTransVector();
    }
    //}

    //if(UsedMod==3)
    // {
    if(isFouthChamber)
    {
    point4 = transBefore[3].transFrom(point4);
    dir4   = transBefore[3].transFrom(dir4)-transBefore[3].getTransVector();
    }
    //}

    //cout<<point1.getZ()<<endl;

    HGeomVector NullPoint(0.,0.,0);
    HGeomVector NullPointDir(0.,0.,1.);

    if(isThirdChamber){
    if(fAlignGeom->CalcDistanceToLine(point2,point1,point3)    > AcceptRadius    )
        return kFALSE;
	}
    
    if(isFouthChamber){
    if(fAlignGeom->CalcDistanceToLine(point2,point1,point4)    > AcceptRadiusFour)
        return kFALSE;
	}
    
    if(isThirdChamber){
    if(fAlignGeom->CalcDistanceToLine(NullPoint,point1,point3) > AcceptRadiusTarg)
        return kFALSE;
	}
    
    if(isThirdChamber){
    if(fAlignGeom->CalcVectorDistance(dir1,point1,point3)      > AcceptDir       )
        return kFALSE;
	}
    
    if(isThirdChamber){
    if(fAlignGeom->CalcVectorDistance(dir2,point1,point3)      > AcceptDir       )
        return kFALSE;
	}
    
    if(fAlignGeom->CalcVectorDistance(dir2,point1,point2)      > AcceptDir       )
        return kFALSE;
    
    if(isFouthChamber){
    if(fAlignGeom->CalcVectorDistance(dir4,point1,point2)      > AcceptDirFour   )
        return kFALSE;
	}

    HGeomVector zCoord = fAlignGeom->CalcVertex(point1,point2-point1,NullPoint,NullPointDir);


    Float_t theta = acos((point2.getZ()-point1.getZ())/(point2-point1).length())*180./acos(-1.);

    
    

    //if(zCoord.getZ()<-60) return kFALSE;
    //if(theta < 20) return kFALSE;
    
    if(zCoord.getZ()<-65 || zCoord.getZ()>-10 ) return kFALSE;
    if(theta < 18) return kFALSE;
    
    
    histoTheta->Fill(theta);
    histoVertex->Fill(zCoord.getZ());

    return kTRUE;
}

void HAlignmentGNoMag::FillHistograms()
{
    cout<<"Number of tracks in clone"<<endl;
    cout<<cloneSize<<endl;

    HAlignmentGParticle *p=NULL;
    for(Int_t i=0;  i<cloneSize; i++)
    {

        p=(HAlignmentGParticle*)alignTracks->At(i);
        HGeomVector point1=p->GetPoint(0);
        HGeomVector point2=p->GetPoint(1);
        HGeomVector point3=p->GetPoint(2);



        point1=fAlignRot->TransMdc(point1,"FromModToLab",0,0);
	
        //point3=fAlignRot->TransMdc(point3,"FromModToLab",0,2);


        HGeomVector inter=fAlignGeom->CalcIntersection(point1, point3, *fAlignRot->GetTransMdc(0,1));
        inter=fAlignRot->TransMdc(inter,"FromLabToMod",0,1);

        HGeomVector NullPoint(0.,0.,0);
        HGeomVector NullPointDir(0.,0.,1.);


        HGeomVector Vertex=fAlignGeom->CalcVertex(point1,point2,NullPoint,NullPointDir);

        //histoVertex->Fill(Vertex.getZ());
        //histoDiffYBefore->Fill((point2-inter).getY());

    }
}


void HAlignmentGNoMag::JustPlot(Int_t sec, Int_t mod)
{
    ResetCounts();

    UsedMod=mod;
    UsedSec=sec;
    
    if(!isAligned)
    {
     if(isThirdChamber)
    transBefore[2] = *fAlignRot->GetTransMdc(UsedSec,2);
    }
    if(isFouthChamber)
    transBefore[3] = *fAlignRot->GetTransMdc(UsedSec,3);
    
    alignTracks->Clear();
    in.clear();
    in.open(inName);
    cloneSize=0;
    CollectTracks();

    cout<<"clone size == "<<cloneSize<<endl;

    HAlignmentGParticle *p=NULL;
    for(Int_t i=0;  i<cloneSize; i++)
    {
        p=(HAlignmentGParticle*)alignTracks->At(i);
        HGeomVector point1=p->GetPoint(0);
        HGeomVector point2=p->GetPoint(1);
        point1=fAlignRot->TransMdc(point1,"FromModToLab",UsedSec,0);
        point2=fAlignRot->TransMdc(point2,"FromModToLab",UsedSec,1);
        //Float_t theta=acos((point2.getZ()-point1.getZ())/(point2-point1).length())*180./acos(-1.);
        //histoTheta->Fill(theta);
    }
    alignTracks->Clear();
    ff=new TFile(outName+".root","recreate");
    histoTheta->Write();
}

HGeomTransform HAlignmentGNoMag::Align(const Int_t &sec,const Int_t &mod )
{
   if(fMinuit) delete fMinuit;
   fMinuit=new TMinuit(6);
      


    UsedMod = mod;
    UsedSec = sec;

    isThirdChamber = kTRUE;
    isFouthChamber = kTRUE;
    
    cout<<"M D C    S E T U P !!!!!"<<endl;
    for(Int_t ss = 0; ss < 6; ss++)
    {
      for(Int_t mm = 0; mm < 4; mm++)
      {
       cout<< mdcSetup[ss][mm] <<" ";
      }
      cout<<endl;
    }
    
    //for(Int_t ss = 0; ss < 6; ss++)
    //{
        if(!isMdc(sec,2)) 
	{
	cout<<"in this sector 3rd chamber does not exist"<<endl;
	isThirdChamber = kFALSE;
	}
	else {isThirdChamber = kTRUE;}
        
	if(!isMdc(sec,3))
	{ 
	cout<<"in this sector 4th chamber does not exist"<<endl;
	isFouthChamber = kFALSE;
	}
	else {isFouthChamber = kTRUE;}
//    }  
    
    //if(UsedSec ==2){isThirdChamber = kFALSE;}
    ////if(UsedSec == 5) {isFouthChamber = kFALSE;}

    AcceptRadius = 4.;
    AcceptRadiusFour = 4.;
    AcceptRadiusTarg = 35000000.;
    AcceptDir = 0.3;
    AcceptDirFour = 0.3;
    fitVersion = 0;


    ResetCounts();
    cout<<"THE ALINMENT OF SECTOR   "<< sec <<"  MODULE  "<<mod<<"  STARTED"<<endl;
    cout<<"The fit version is "<<fitVersion<<"  radius is == "<<AcceptRadius<<endl;
    
    if(!isAligned)
    {
     cout<<"get trans"<<endl;
    
     if(isThirdChamber)
     transBefore[2] = *fAlignRot->GetTransMdc(UsedSec,2);
    }
    cout<<"got trans"<<endl;
    
    if(isFouthChamber)
    transBefore[3] = *fAlignRot->GetTransMdc(UsedSec,3);
    
    
    
    alignTracks->Clear();
    in.clear();
//    in.close();
    in.open(inName);
    cloneSize=0;
    CollectTracks();
    cout<<"clone size= "<<cloneSize<<endl;
    ResetRaster();    
    transStarting[UsedMod]=transBefore[UsedMod];
    transAfter[UsedMod]=AlignMod();
    transBefore[UsedMod]=transAfter[UsedMod];
    isAligned=kTRUE;
    in.close();
/*    
    /////////////////////////////////////////////////////////
    cout<<"Second iteration"<<endl;
    if(fMinuit) delete fMinuit;
    fMinuit=new TMinuit(6);
    AcceptRadius = 4.;
    AcceptRadiusFour = 4.;
    AcceptRadiusTarg = 3500000.;
    AcceptDir = 0.3;
    AcceptDirFour = 0.3;
    fitVersion = 0;
    cout<<"The fit version is "<<fitVersion<<"  radius is == "<<AcceptRadius<<endl;
    alignTracks->Clear();
    in.clear();
    in.open(inName);
    cloneSize = 0;
    CollectTracks();
    cout<<"clone size= "<<cloneSize<<endl;
    transAfter[UsedMod]=AlignMod();
    transBefore[UsedMod]=transAfter[UsedMod];
*/
    /////////////////////////////////////////////////////////
    /*
      cout<<"Third iteration"<<endl;
      alignTracks->Clear();
      in.clear();
      in.open(inName);
     
      cloneSize=0;
      CollectTracks();
      cout<<"clone size= "<<cloneSize<<endl;
      ///////Raster();
      transAfter[UsedMod]=AlignMod();
    /////////////////////////////////////////////////////////  
    */

    cout<<"before"<<endl;
    transStarting[mod].print();
    cout<<"after"<<endl;
    transAfter[mod].print();

    return transAfter[UsedMod];
}

void HAlignmentGNoMag::CheckAlignment()
{
    HAlignmentGParticle *p=NULL;
    HGeomVector point3Before, point3After;
    HGeomVector point4Before, point4After;

    HGeomVector interBefore3, interAfter3;
    HGeomVector interBefore4, interAfter4;

    HGeomVector point2Lab;
    HGeomVector point2Sec;
    for(Int_t i=0;  i<cloneSize; i++)
    {

        p=(HAlignmentGParticle*)alignTracks->At(i);
        HGeomVector point1=p->GetPoint(0);
        HGeomVector point2=p->GetPoint(1);
        HGeomVector point3=p->GetPoint(2);
        HGeomVector point4=p->GetPoint(3);
	
	if(p -> GetXdir(2) == -1000 && UsedMod == 2 )
	{ 
	cout<<"Something is Wrong from module 2"<<endl;
	cout<<"Something is Wrong!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!"<<endl;
	cout<<"Something is Wrong from module 2"<<endl;
	cout<<"Something is Wrong from module 2!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!"<<endl;
	}
	
	
	if(p -> GetXdir(3) == -1000 && UsedMod == 3 )
	{ 
	cout<<"Something is Wrong from module 3"<<endl;
	cout<<"Something is Wrong from module 3   !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!"<<endl;
	cout<<"Something is Wrong from module 3"<<endl;
	cout<<"Something is Wrong from module 3!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!"<<endl;
	}
	
	
	

        point1=fAlignRot->TransMdc(point1,"FromModToLab",UsedSec,0);
        point2Lab=fAlignRot->TransMdc(point2,"FromModToLab",UsedSec,1);

        point2Sec=fAlignRot->TransMdc(point2,"FromModToSec",UsedSec,1);

        if(isThirdChamber){
        point3Before = transStarting[2].transFrom(point3);
        point3After  = transAfter[2].transFrom(point3);
           }
	else {point3Before.setXYZ(-100,-1000,-1000);
	      point3After.setXYZ(-100,-1000,-1000);}   
	 
	 if(isFouthChamber){ 
        point4Before = transStarting[3].transFrom(point4);
        point4After  = transAfter[3].transFrom(point4);
          }
	  else
	  {
	  point4Before.setXYZ(-100,-1000,-1000);
	  point4After.setXYZ(-100,-1000,-1000);
	  }

        interBefore3=fAlignGeom->CalcIntersection(point1, point3Before, *fAlignRot->GetTransMdc(UsedSec,1));
        interAfter3=fAlignGeom->CalcIntersection(point1, point3After, *fAlignRot->GetTransMdc(UsedSec,1));
           
        interBefore4=fAlignGeom->CalcIntersection(point1, point4Before, *fAlignRot->GetTransMdc(UsedSec,1));
        interAfter4=fAlignGeom->CalcIntersection(point1, point4After, *fAlignRot->GetTransMdc(UsedSec,1));

        interBefore3=fAlignRot->TransMdc(interBefore3,"FromLabToMod",UsedSec,1);
        interAfter3=fAlignRot->TransMdc(interAfter3,"FromLabToMod",UsedSec,1);

        interBefore4=fAlignRot->TransMdc(interBefore4,"FromLabToMod",UsedSec,1);
        interAfter4=fAlignRot->TransMdc(interAfter4,"FromLabToMod",UsedSec,1);

        histoDiffYBeforeMod3->Fill(point2.getY()-interBefore3.getY());
        histoDiffYAfterMod3->Fill(point2.getY()-interAfter3.getY());

         
        histoDiffYBeforeMod4->Fill(point2.getY()-interBefore4.getY());
        histoDiffYAfterMod4->Fill(point2.getY()-interAfter4.getY());


        Float_t phi=atan2(point2Lab.getY()-point1.getY(), point2Lab.getX()-point1.getX())*180./acos(-1.);

        Float_t theta=acos((point2Lab.getZ()-point1.getZ())/(point2Lab-point1).length())*180./acos(-1.);

        //////histoTheta->Fill(theta);


        if(UsedSec!=5)
        {
            if(phi<0)
                phi+=360;
            histoDiffYBeforeVsPhiMod3->Fill(phi-60.*UsedSec, point2.getY()-interBefore3.getY());
            histoDiffYAfterVsPhiMod3->Fill( phi-60.*UsedSec, point2.getY()-interAfter3.getY());

            histoDiffYBeforeVsPhiMod4->Fill(phi-60.*UsedSec, point2.getY()-interBefore4.getY());
            histoDiffYAfterVsPhiMod4->Fill( phi-60.*UsedSec,  point2.getY()-interAfter4.getY());


        }
        if(UsedSec==5)
        {
            histoDiffYBeforeVsPhiMod3->Fill(phi+60., point2.getY()-interBefore3.getY());
            histoDiffYAfterVsPhiMod3->Fill( phi+60., point2.getY()-interAfter3.getY());

            histoDiffYBeforeVsPhiMod4->Fill(phi+60.,  point2.getY()-interBefore4.getY());
            histoDiffYAfterVsPhiMod4->Fill( phi+60.,  point2.getY()-interAfter4.getY());

        }


        histoDiffYBeforeVsThetaMod3->Fill(theta, point2.getY()-interBefore3.getY());
        histoDiffYAfterVsThetaMod3-> Fill(theta,  point2.getY()-interAfter3.getY());



        histoDiffYBeforeVsThetaMod4->Fill(theta, point2.getY()-interBefore4.getY());
        histoDiffYAfterVsThetaMod4->Fill( theta,  point2.getY()-interAfter4.getY());



        //if(p->GetIsGood())
        //{
        //////    RasterPlotAfter->Fill( point2Sec.getX(), point2Sec.getY() );
    //    }

    }

    ff=new TFile(outName+".root","recreate");
    //TCanvas *diffYMod3=new TCanvas("diffYMod3","diffYMod3",500,500);
    //diffYMod3->Divide(1,2);
    //diffYMod3->cd(1);
    histoTheta->Write();

    histoDiffYBeforeMod3->Write();
    //diffYMod3->cd(2);
    histoDiffYAfterMod3->Write();

    RasterPlotAfter3->Write();
    RasterPlotAfter4->Write();
    RasterPlotBefore3->Write();
    RasterPlotBefore4->Write();


    //TCanvas *diffYMod4=new TCanvas("diffYMod4","diffYMod4",500,500);
    //diffYMod4->Divide(1,2);
    //diffYMod4->cd(1);
    histoDiffYBeforeMod4->Write();
    //    diffYMod4->cd(2);
    histoDiffYAfterMod4->Write();

    //    TCanvas *diffYVsPhiMod3=new TCanvas("diffYVsPhiMod3","diffYVsPhiMod3",500,500);
    //    diffYVsPhiMod3->Divide(1,2);
    //    diffYVsPhiMod3->cd(1);
    histoDiffYBeforeVsPhiMod3->Write();
    histoDiffYAfterVsPhiMod3->Write();
    histoDiffYBeforeVsThetaMod3->Write();
    histoDiffYAfterVsThetaMod3->Write();

    //    TCanvas *diffYVsPhiMod4=new TCanvas("diffYVsPhiMod3","diffYVsPhiMod3",500,500);
    //    diffYVsPhiMod4->Divide(1,2);
    //    diffYVsPhiMod4->cd(1);
    histoDiffYBeforeVsPhiMod4->Write();
    histoDiffYAfterVsPhiMod4->Write();
    histoDiffYBeforeVsThetaMod4->Write();
    histoDiffYAfterVsThetaMod4->Write();

    histoVertex->Write();

    //
    //    diffYVsPhiMod3->Write();
    //    diffYVsPhiMod4->Write();
    //    diffYMod3->Write();
    //    diffYMod4->Write();
    //ff->Close();


}


void HAlignmentGNoMag::Raster(TH2F* RasterBefore, TH2F* RasterAfter)
{
    Int_t countRaster=0;
    cout<<"Startting the Raster"<<endl;
    HAlignmentGParticle *p=NULL;
    Float_t binWidthX = RasterBefore->GetXaxis()->GetBinWidth(1);
    Float_t binWidthY = RasterBefore->GetYaxis()->GetBinWidth(1);
    Int_t binX;
    Int_t binY;
    Int_t checkBin[201][201];
    for(Int_t m=1; m < 201; m++)
        for(Int_t n=1; n < 201; n++)
            checkBin[m][n]=0;
    for(Int_t i=0;  i<cloneSize; i++)
    {
        if(i%10000==0)
            cout<<"raster finished "<<i<<"  of "<<cloneSize<<endl;
        p=(HAlignmentGParticle*)alignTracks->At(i);
        HGeomVector point2=p->GetPoint(1);
        point2=fAlignRot->TransMdc(point2,"FromModToSec",UsedSec,1);
        RasterBefore->Fill(point2.getX(), point2.getY());
        binX=(Int_t)((point2.getX() + 420.)/binWidthX)+1;
        binY=(Int_t)((point2.getY() - 220.)/binWidthY)+1;
        if(binX > 201 || binY > 201)
        {
            continue;
        }
        if(checkBin[binX][binY]==1)
        {
            p->SetIsGood(kFALSE);
            continue;
        }
        RasterAfter->Fill(point2.getX(), point2.getY());
        checkBin[binX][binY]=1;
        countRaster++;

    }
    cout<<"Raster selected  "<<countRaster<<"  tracks"<<endl;
}

/*
void HAlignmentGNoMag::Raster()
{
    Int_t countRaster=0;
    cout<<"Startting the Raster"<<endl;
    HAlignmentGParticle *p=NULL;
    Float_t binWidthX=RasterPlotBefore->GetXaxis()->GetBinWidth(1);
    Float_t binWidthY=RasterPlotBefore->GetYaxis()->GetBinWidth(1);
    Int_t binX;
    Int_t binY;
    Int_t checkBin[101][101];
    for(Int_t m=1; m<101; m++)
        for(Int_t n=1; n<101; n++)
            checkBin[m][n]=0;
    for(Int_t i=0;  i<cloneSize; i++)
    {
        if(i%10000==0)
            cout<<"raster finished "<<i<<"  of "<<cloneSize<<endl;
        p=(HAlignmentGParticle*)alignTracks->At(i);
        HGeomVector point2=p->GetPoint(1);
        point2=fAlignRot->TransMdc(point2,"FromModToSec",UsedSec,1);
        RasterPlotBefore->Fill(point2.getX(), point2.getY());
        binX=(Int_t)((point2.getX()+500)/binWidthX)+1;
        binY=(Int_t)(point2.getY()/binWidthY)+1;
        if(binX>1001 || binY>1001)
        {
            continue;
        }
        if(checkBin[binX][binY]==1)
        {
            p->SetIsGood(kFALSE);
            continue;
        }
        //RasterPlotAfter->Fill(point2.getX(), point2.getY());
        checkBin[binX][binY]=1;
        countRaster++;

    }
    cout<<"Raster selected  "<<countRaster<<"  tracks"<<endl;
}
*/
void HAlignmentGNoMag::setDefault(Float_t& a, Float_t& b, Float_t& c, Float_t& d)
{
  a=b=c=d=-1000.;
}

Bool_t HAlignmentGNoMag::isMdc(Int_t sec, Int_t mod)
{
   if(mdcSetup[sec][mod]==0) return kFALSE;
   return kTRUE;
}

void HAlignmentGNoMag::setMdcSetup(Int_t a[6][4])
{
  for(Int_t i=0; i<6; i++)
   for(Int_t j=0; j<4; j++)
   {
    mdcSetup[i][j] = a[i][j];
   }
}

void HAlignmentGNoMag::ResetRaster()
{
/* 
    if(RasterPlotBefore3) delete RasterPlotBefore3;
      RasterPlotBefore3= new TH2F("RasterPlotBefore3", "RasterPlotBefore3",100,-420,420,100,220,900);
    if(RasterPlotBefore4) delete RasterPlotBefore4;
      RasterPlotBefore4 = new TH2F("RasterPlotBefore4", "RasterPlotBefore4",100,-420,420,100,220,900);

    if(RasterPlotAfter3) delete RasterPlotAfter3;
      RasterPlotAfter3= new TH2F("RasterPlotAfter3", "RasterPlotAfter3",100,-420,420,100,220,900);
    if(RasterPlotAfter4) delete RasterPlotAfter4;
      RasterPlotAfter4 = new TH2F("RasterPlotAfter4", "RasterPlotAfter4",100,-420,420,100,220,900);
 */ 
   
    if(UsedMod == 2)
    { 
    Raster(RasterPlotBefore3, RasterPlotAfter3);
    }
    if(UsedMod == 3)
    {
    Raster(RasterPlotBefore4, RasterPlotAfter4);
    }
 
}
 halignmentgnomag.cc:1
 halignmentgnomag.cc:2
 halignmentgnomag.cc:3
 halignmentgnomag.cc:4
 halignmentgnomag.cc:5
 halignmentgnomag.cc:6
 halignmentgnomag.cc:7
 halignmentgnomag.cc:8
 halignmentgnomag.cc:9
 halignmentgnomag.cc:10
 halignmentgnomag.cc:11
 halignmentgnomag.cc:12
 halignmentgnomag.cc:13
 halignmentgnomag.cc:14
 halignmentgnomag.cc:15
 halignmentgnomag.cc:16
 halignmentgnomag.cc:17
 halignmentgnomag.cc:18
 halignmentgnomag.cc:19
 halignmentgnomag.cc:20
 halignmentgnomag.cc:21
 halignmentgnomag.cc:22
 halignmentgnomag.cc:23
 halignmentgnomag.cc:24
 halignmentgnomag.cc:25
 halignmentgnomag.cc:26
 halignmentgnomag.cc:27
 halignmentgnomag.cc:28
 halignmentgnomag.cc:29
 halignmentgnomag.cc:30
 halignmentgnomag.cc:31
 halignmentgnomag.cc:32
 halignmentgnomag.cc:33
 halignmentgnomag.cc:34
 halignmentgnomag.cc:35
 halignmentgnomag.cc:36
 halignmentgnomag.cc:37
 halignmentgnomag.cc:38
 halignmentgnomag.cc:39
 halignmentgnomag.cc:40
 halignmentgnomag.cc:41
 halignmentgnomag.cc:42
 halignmentgnomag.cc:43
 halignmentgnomag.cc:44
 halignmentgnomag.cc:45
 halignmentgnomag.cc:46
 halignmentgnomag.cc:47
 halignmentgnomag.cc:48
 halignmentgnomag.cc:49
 halignmentgnomag.cc:50
 halignmentgnomag.cc:51
 halignmentgnomag.cc:52
 halignmentgnomag.cc:53
 halignmentgnomag.cc:54
 halignmentgnomag.cc:55
 halignmentgnomag.cc:56
 halignmentgnomag.cc:57
 halignmentgnomag.cc:58
 halignmentgnomag.cc:59
 halignmentgnomag.cc:60
 halignmentgnomag.cc:61
 halignmentgnomag.cc:62
 halignmentgnomag.cc:63
 halignmentgnomag.cc:64
 halignmentgnomag.cc:65
 halignmentgnomag.cc:66
 halignmentgnomag.cc:67
 halignmentgnomag.cc:68
 halignmentgnomag.cc:69
 halignmentgnomag.cc:70
 halignmentgnomag.cc:71
 halignmentgnomag.cc:72
 halignmentgnomag.cc:73
 halignmentgnomag.cc:74
 halignmentgnomag.cc:75
 halignmentgnomag.cc:76
 halignmentgnomag.cc:77
 halignmentgnomag.cc:78
 halignmentgnomag.cc:79
 halignmentgnomag.cc:80
 halignmentgnomag.cc:81
 halignmentgnomag.cc:82
 halignmentgnomag.cc:83
 halignmentgnomag.cc:84
 halignmentgnomag.cc:85
 halignmentgnomag.cc:86
 halignmentgnomag.cc:87
 halignmentgnomag.cc:88
 halignmentgnomag.cc:89
 halignmentgnomag.cc:90
 halignmentgnomag.cc:91
 halignmentgnomag.cc:92
 halignmentgnomag.cc:93
 halignmentgnomag.cc:94
 halignmentgnomag.cc:95
 halignmentgnomag.cc:96
 halignmentgnomag.cc:97
 halignmentgnomag.cc:98
 halignmentgnomag.cc:99
 halignmentgnomag.cc:100
 halignmentgnomag.cc:101
 halignmentgnomag.cc:102
 halignmentgnomag.cc:103
 halignmentgnomag.cc:104
 halignmentgnomag.cc:105
 halignmentgnomag.cc:106
 halignmentgnomag.cc:107
 halignmentgnomag.cc:108
 halignmentgnomag.cc:109
 halignmentgnomag.cc:110
 halignmentgnomag.cc:111
 halignmentgnomag.cc:112
 halignmentgnomag.cc:113
 halignmentgnomag.cc:114
 halignmentgnomag.cc:115
 halignmentgnomag.cc:116
 halignmentgnomag.cc:117
 halignmentgnomag.cc:118
 halignmentgnomag.cc:119
 halignmentgnomag.cc:120
 halignmentgnomag.cc:121
 halignmentgnomag.cc:122
 halignmentgnomag.cc:123
 halignmentgnomag.cc:124
 halignmentgnomag.cc:125
 halignmentgnomag.cc:126
 halignmentgnomag.cc:127
 halignmentgnomag.cc:128
 halignmentgnomag.cc:129
 halignmentgnomag.cc:130
 halignmentgnomag.cc:131
 halignmentgnomag.cc:132
 halignmentgnomag.cc:133
 halignmentgnomag.cc:134
 halignmentgnomag.cc:135
 halignmentgnomag.cc:136
 halignmentgnomag.cc:137
 halignmentgnomag.cc:138
 halignmentgnomag.cc:139
 halignmentgnomag.cc:140
 halignmentgnomag.cc:141
 halignmentgnomag.cc:142
 halignmentgnomag.cc:143
 halignmentgnomag.cc:144
 halignmentgnomag.cc:145
 halignmentgnomag.cc:146
 halignmentgnomag.cc:147
 halignmentgnomag.cc:148
 halignmentgnomag.cc:149
 halignmentgnomag.cc:150
 halignmentgnomag.cc:151
 halignmentgnomag.cc:152
 halignmentgnomag.cc:153
 halignmentgnomag.cc:154
 halignmentgnomag.cc:155
 halignmentgnomag.cc:156
 halignmentgnomag.cc:157
 halignmentgnomag.cc:158
 halignmentgnomag.cc:159
 halignmentgnomag.cc:160
 halignmentgnomag.cc:161
 halignmentgnomag.cc:162
 halignmentgnomag.cc:163
 halignmentgnomag.cc:164
 halignmentgnomag.cc:165
 halignmentgnomag.cc:166
 halignmentgnomag.cc:167
 halignmentgnomag.cc:168
 halignmentgnomag.cc:169
 halignmentgnomag.cc:170
 halignmentgnomag.cc:171
 halignmentgnomag.cc:172
 halignmentgnomag.cc:173
 halignmentgnomag.cc:174
 halignmentgnomag.cc:175
 halignmentgnomag.cc:176
 halignmentgnomag.cc:177
 halignmentgnomag.cc:178
 halignmentgnomag.cc:179
 halignmentgnomag.cc:180
 halignmentgnomag.cc:181
 halignmentgnomag.cc:182
 halignmentgnomag.cc:183
 halignmentgnomag.cc:184
 halignmentgnomag.cc:185
 halignmentgnomag.cc:186
 halignmentgnomag.cc:187
 halignmentgnomag.cc:188
 halignmentgnomag.cc:189
 halignmentgnomag.cc:190
 halignmentgnomag.cc:191
 halignmentgnomag.cc:192
 halignmentgnomag.cc:193
 halignmentgnomag.cc:194
 halignmentgnomag.cc:195
 halignmentgnomag.cc:196
 halignmentgnomag.cc:197
 halignmentgnomag.cc:198
 halignmentgnomag.cc:199
 halignmentgnomag.cc:200
 halignmentgnomag.cc:201
 halignmentgnomag.cc:202
 halignmentgnomag.cc:203
 halignmentgnomag.cc:204
 halignmentgnomag.cc:205
 halignmentgnomag.cc:206
 halignmentgnomag.cc:207
 halignmentgnomag.cc:208
 halignmentgnomag.cc:209
 halignmentgnomag.cc:210
 halignmentgnomag.cc:211
 halignmentgnomag.cc:212
 halignmentgnomag.cc:213
 halignmentgnomag.cc:214
 halignmentgnomag.cc:215
 halignmentgnomag.cc:216
 halignmentgnomag.cc:217
 halignmentgnomag.cc:218
 halignmentgnomag.cc:219
 halignmentgnomag.cc:220
 halignmentgnomag.cc:221
 halignmentgnomag.cc:222
 halignmentgnomag.cc:223
 halignmentgnomag.cc:224
 halignmentgnomag.cc:225
 halignmentgnomag.cc:226
 halignmentgnomag.cc:227
 halignmentgnomag.cc:228
 halignmentgnomag.cc:229
 halignmentgnomag.cc:230
 halignmentgnomag.cc:231
 halignmentgnomag.cc:232
 halignmentgnomag.cc:233
 halignmentgnomag.cc:234
 halignmentgnomag.cc:235
 halignmentgnomag.cc:236
 halignmentgnomag.cc:237
 halignmentgnomag.cc:238
 halignmentgnomag.cc:239
 halignmentgnomag.cc:240
 halignmentgnomag.cc:241
 halignmentgnomag.cc:242
 halignmentgnomag.cc:243
 halignmentgnomag.cc:244
 halignmentgnomag.cc:245
 halignmentgnomag.cc:246
 halignmentgnomag.cc:247
 halignmentgnomag.cc:248
 halignmentgnomag.cc:249
 halignmentgnomag.cc:250
 halignmentgnomag.cc:251
 halignmentgnomag.cc:252
 halignmentgnomag.cc:253
 halignmentgnomag.cc:254
 halignmentgnomag.cc:255
 halignmentgnomag.cc:256
 halignmentgnomag.cc:257
 halignmentgnomag.cc:258
 halignmentgnomag.cc:259
 halignmentgnomag.cc:260
 halignmentgnomag.cc:261
 halignmentgnomag.cc:262
 halignmentgnomag.cc:263
 halignmentgnomag.cc:264
 halignmentgnomag.cc:265
 halignmentgnomag.cc:266
 halignmentgnomag.cc:267
 halignmentgnomag.cc:268
 halignmentgnomag.cc:269
 halignmentgnomag.cc:270
 halignmentgnomag.cc:271
 halignmentgnomag.cc:272
 halignmentgnomag.cc:273
 halignmentgnomag.cc:274
 halignmentgnomag.cc:275
 halignmentgnomag.cc:276
 halignmentgnomag.cc:277
 halignmentgnomag.cc:278
 halignmentgnomag.cc:279
 halignmentgnomag.cc:280
 halignmentgnomag.cc:281
 halignmentgnomag.cc:282
 halignmentgnomag.cc:283
 halignmentgnomag.cc:284
 halignmentgnomag.cc:285
 halignmentgnomag.cc:286
 halignmentgnomag.cc:287
 halignmentgnomag.cc:288
 halignmentgnomag.cc:289
 halignmentgnomag.cc:290
 halignmentgnomag.cc:291
 halignmentgnomag.cc:292
 halignmentgnomag.cc:293
 halignmentgnomag.cc:294
 halignmentgnomag.cc:295
 halignmentgnomag.cc:296
 halignmentgnomag.cc:297
 halignmentgnomag.cc:298
 halignmentgnomag.cc:299
 halignmentgnomag.cc:300
 halignmentgnomag.cc:301
 halignmentgnomag.cc:302
 halignmentgnomag.cc:303
 halignmentgnomag.cc:304
 halignmentgnomag.cc:305
 halignmentgnomag.cc:306
 halignmentgnomag.cc:307
 halignmentgnomag.cc:308
 halignmentgnomag.cc:309
 halignmentgnomag.cc:310
 halignmentgnomag.cc:311
 halignmentgnomag.cc:312
 halignmentgnomag.cc:313
 halignmentgnomag.cc:314
 halignmentgnomag.cc:315
 halignmentgnomag.cc:316
 halignmentgnomag.cc:317
 halignmentgnomag.cc:318
 halignmentgnomag.cc:319
 halignmentgnomag.cc:320
 halignmentgnomag.cc:321
 halignmentgnomag.cc:322
 halignmentgnomag.cc:323
 halignmentgnomag.cc:324
 halignmentgnomag.cc:325
 halignmentgnomag.cc:326
 halignmentgnomag.cc:327
 halignmentgnomag.cc:328
 halignmentgnomag.cc:329
 halignmentgnomag.cc:330
 halignmentgnomag.cc:331
 halignmentgnomag.cc:332
 halignmentgnomag.cc:333
 halignmentgnomag.cc:334
 halignmentgnomag.cc:335
 halignmentgnomag.cc:336
 halignmentgnomag.cc:337
 halignmentgnomag.cc:338
 halignmentgnomag.cc:339
 halignmentgnomag.cc:340
 halignmentgnomag.cc:341
 halignmentgnomag.cc:342
 halignmentgnomag.cc:343
 halignmentgnomag.cc:344
 halignmentgnomag.cc:345
 halignmentgnomag.cc:346
 halignmentgnomag.cc:347
 halignmentgnomag.cc:348
 halignmentgnomag.cc:349
 halignmentgnomag.cc:350
 halignmentgnomag.cc:351
 halignmentgnomag.cc:352
 halignmentgnomag.cc:353
 halignmentgnomag.cc:354
 halignmentgnomag.cc:355
 halignmentgnomag.cc:356
 halignmentgnomag.cc:357
 halignmentgnomag.cc:358
 halignmentgnomag.cc:359
 halignmentgnomag.cc:360
 halignmentgnomag.cc:361
 halignmentgnomag.cc:362
 halignmentgnomag.cc:363
 halignmentgnomag.cc:364
 halignmentgnomag.cc:365
 halignmentgnomag.cc:366
 halignmentgnomag.cc:367
 halignmentgnomag.cc:368
 halignmentgnomag.cc:369
 halignmentgnomag.cc:370
 halignmentgnomag.cc:371
 halignmentgnomag.cc:372
 halignmentgnomag.cc:373
 halignmentgnomag.cc:374
 halignmentgnomag.cc:375
 halignmentgnomag.cc:376
 halignmentgnomag.cc:377
 halignmentgnomag.cc:378
 halignmentgnomag.cc:379
 halignmentgnomag.cc:380
 halignmentgnomag.cc:381
 halignmentgnomag.cc:382
 halignmentgnomag.cc:383
 halignmentgnomag.cc:384
 halignmentgnomag.cc:385
 halignmentgnomag.cc:386
 halignmentgnomag.cc:387
 halignmentgnomag.cc:388
 halignmentgnomag.cc:389
 halignmentgnomag.cc:390
 halignmentgnomag.cc:391
 halignmentgnomag.cc:392
 halignmentgnomag.cc:393
 halignmentgnomag.cc:394
 halignmentgnomag.cc:395
 halignmentgnomag.cc:396
 halignmentgnomag.cc:397
 halignmentgnomag.cc:398
 halignmentgnomag.cc:399
 halignmentgnomag.cc:400
 halignmentgnomag.cc:401
 halignmentgnomag.cc:402
 halignmentgnomag.cc:403
 halignmentgnomag.cc:404
 halignmentgnomag.cc:405
 halignmentgnomag.cc:406
 halignmentgnomag.cc:407
 halignmentgnomag.cc:408
 halignmentgnomag.cc:409
 halignmentgnomag.cc:410
 halignmentgnomag.cc:411
 halignmentgnomag.cc:412
 halignmentgnomag.cc:413
 halignmentgnomag.cc:414
 halignmentgnomag.cc:415
 halignmentgnomag.cc:416
 halignmentgnomag.cc:417
 halignmentgnomag.cc:418
 halignmentgnomag.cc:419
 halignmentgnomag.cc:420
 halignmentgnomag.cc:421
 halignmentgnomag.cc:422
 halignmentgnomag.cc:423
 halignmentgnomag.cc:424
 halignmentgnomag.cc:425
 halignmentgnomag.cc:426
 halignmentgnomag.cc:427
 halignmentgnomag.cc:428
 halignmentgnomag.cc:429
 halignmentgnomag.cc:430
 halignmentgnomag.cc:431
 halignmentgnomag.cc:432
 halignmentgnomag.cc:433
 halignmentgnomag.cc:434
 halignmentgnomag.cc:435
 halignmentgnomag.cc:436
 halignmentgnomag.cc:437
 halignmentgnomag.cc:438
 halignmentgnomag.cc:439
 halignmentgnomag.cc:440
 halignmentgnomag.cc:441
 halignmentgnomag.cc:442
 halignmentgnomag.cc:443
 halignmentgnomag.cc:444
 halignmentgnomag.cc:445
 halignmentgnomag.cc:446
 halignmentgnomag.cc:447
 halignmentgnomag.cc:448
 halignmentgnomag.cc:449
 halignmentgnomag.cc:450
 halignmentgnomag.cc:451
 halignmentgnomag.cc:452
 halignmentgnomag.cc:453
 halignmentgnomag.cc:454
 halignmentgnomag.cc:455
 halignmentgnomag.cc:456
 halignmentgnomag.cc:457
 halignmentgnomag.cc:458
 halignmentgnomag.cc:459
 halignmentgnomag.cc:460
 halignmentgnomag.cc:461
 halignmentgnomag.cc:462
 halignmentgnomag.cc:463
 halignmentgnomag.cc:464
 halignmentgnomag.cc:465
 halignmentgnomag.cc:466
 halignmentgnomag.cc:467
 halignmentgnomag.cc:468
 halignmentgnomag.cc:469
 halignmentgnomag.cc:470
 halignmentgnomag.cc:471
 halignmentgnomag.cc:472
 halignmentgnomag.cc:473
 halignmentgnomag.cc:474
 halignmentgnomag.cc:475
 halignmentgnomag.cc:476
 halignmentgnomag.cc:477
 halignmentgnomag.cc:478
 halignmentgnomag.cc:479
 halignmentgnomag.cc:480
 halignmentgnomag.cc:481
 halignmentgnomag.cc:482
 halignmentgnomag.cc:483
 halignmentgnomag.cc:484
 halignmentgnomag.cc:485
 halignmentgnomag.cc:486
 halignmentgnomag.cc:487
 halignmentgnomag.cc:488
 halignmentgnomag.cc:489
 halignmentgnomag.cc:490
 halignmentgnomag.cc:491
 halignmentgnomag.cc:492
 halignmentgnomag.cc:493
 halignmentgnomag.cc:494
 halignmentgnomag.cc:495
 halignmentgnomag.cc:496
 halignmentgnomag.cc:497
 halignmentgnomag.cc:498
 halignmentgnomag.cc:499
 halignmentgnomag.cc:500
 halignmentgnomag.cc:501
 halignmentgnomag.cc:502
 halignmentgnomag.cc:503
 halignmentgnomag.cc:504
 halignmentgnomag.cc:505
 halignmentgnomag.cc:506
 halignmentgnomag.cc:507
 halignmentgnomag.cc:508
 halignmentgnomag.cc:509
 halignmentgnomag.cc:510
 halignmentgnomag.cc:511
 halignmentgnomag.cc:512
 halignmentgnomag.cc:513
 halignmentgnomag.cc:514
 halignmentgnomag.cc:515
 halignmentgnomag.cc:516
 halignmentgnomag.cc:517
 halignmentgnomag.cc:518
 halignmentgnomag.cc:519
 halignmentgnomag.cc:520
 halignmentgnomag.cc:521
 halignmentgnomag.cc:522
 halignmentgnomag.cc:523
 halignmentgnomag.cc:524
 halignmentgnomag.cc:525
 halignmentgnomag.cc:526
 halignmentgnomag.cc:527
 halignmentgnomag.cc:528
 halignmentgnomag.cc:529
 halignmentgnomag.cc:530
 halignmentgnomag.cc:531
 halignmentgnomag.cc:532
 halignmentgnomag.cc:533
 halignmentgnomag.cc:534
 halignmentgnomag.cc:535
 halignmentgnomag.cc:536
 halignmentgnomag.cc:537
 halignmentgnomag.cc:538
 halignmentgnomag.cc:539
 halignmentgnomag.cc:540
 halignmentgnomag.cc:541
 halignmentgnomag.cc:542
 halignmentgnomag.cc:543
 halignmentgnomag.cc:544
 halignmentgnomag.cc:545
 halignmentgnomag.cc:546
 halignmentgnomag.cc:547
 halignmentgnomag.cc:548
 halignmentgnomag.cc:549
 halignmentgnomag.cc:550
 halignmentgnomag.cc:551
 halignmentgnomag.cc:552
 halignmentgnomag.cc:553
 halignmentgnomag.cc:554
 halignmentgnomag.cc:555
 halignmentgnomag.cc:556
 halignmentgnomag.cc:557
 halignmentgnomag.cc:558
 halignmentgnomag.cc:559
 halignmentgnomag.cc:560
 halignmentgnomag.cc:561
 halignmentgnomag.cc:562
 halignmentgnomag.cc:563
 halignmentgnomag.cc:564
 halignmentgnomag.cc:565
 halignmentgnomag.cc:566
 halignmentgnomag.cc:567
 halignmentgnomag.cc:568
 halignmentgnomag.cc:569
 halignmentgnomag.cc:570
 halignmentgnomag.cc:571
 halignmentgnomag.cc:572
 halignmentgnomag.cc:573
 halignmentgnomag.cc:574
 halignmentgnomag.cc:575
 halignmentgnomag.cc:576
 halignmentgnomag.cc:577
 halignmentgnomag.cc:578
 halignmentgnomag.cc:579
 halignmentgnomag.cc:580
 halignmentgnomag.cc:581
 halignmentgnomag.cc:582
 halignmentgnomag.cc:583
 halignmentgnomag.cc:584
 halignmentgnomag.cc:585
 halignmentgnomag.cc:586
 halignmentgnomag.cc:587
 halignmentgnomag.cc:588
 halignmentgnomag.cc:589
 halignmentgnomag.cc:590
 halignmentgnomag.cc:591
 halignmentgnomag.cc:592
 halignmentgnomag.cc:593
 halignmentgnomag.cc:594
 halignmentgnomag.cc:595
 halignmentgnomag.cc:596
 halignmentgnomag.cc:597
 halignmentgnomag.cc:598
 halignmentgnomag.cc:599
 halignmentgnomag.cc:600
 halignmentgnomag.cc:601
 halignmentgnomag.cc:602
 halignmentgnomag.cc:603
 halignmentgnomag.cc:604
 halignmentgnomag.cc:605
 halignmentgnomag.cc:606
 halignmentgnomag.cc:607
 halignmentgnomag.cc:608
 halignmentgnomag.cc:609
 halignmentgnomag.cc:610
 halignmentgnomag.cc:611
 halignmentgnomag.cc:612
 halignmentgnomag.cc:613
 halignmentgnomag.cc:614
 halignmentgnomag.cc:615
 halignmentgnomag.cc:616
 halignmentgnomag.cc:617
 halignmentgnomag.cc:618
 halignmentgnomag.cc:619
 halignmentgnomag.cc:620
 halignmentgnomag.cc:621
 halignmentgnomag.cc:622
 halignmentgnomag.cc:623
 halignmentgnomag.cc:624
 halignmentgnomag.cc:625
 halignmentgnomag.cc:626
 halignmentgnomag.cc:627
 halignmentgnomag.cc:628
 halignmentgnomag.cc:629
 halignmentgnomag.cc:630
 halignmentgnomag.cc:631
 halignmentgnomag.cc:632
 halignmentgnomag.cc:633
 halignmentgnomag.cc:634
 halignmentgnomag.cc:635
 halignmentgnomag.cc:636
 halignmentgnomag.cc:637
 halignmentgnomag.cc:638
 halignmentgnomag.cc:639
 halignmentgnomag.cc:640
 halignmentgnomag.cc:641
 halignmentgnomag.cc:642
 halignmentgnomag.cc:643
 halignmentgnomag.cc:644
 halignmentgnomag.cc:645
 halignmentgnomag.cc:646
 halignmentgnomag.cc:647
 halignmentgnomag.cc:648
 halignmentgnomag.cc:649
 halignmentgnomag.cc:650
 halignmentgnomag.cc:651
 halignmentgnomag.cc:652
 halignmentgnomag.cc:653
 halignmentgnomag.cc:654
 halignmentgnomag.cc:655
 halignmentgnomag.cc:656
 halignmentgnomag.cc:657
 halignmentgnomag.cc:658
 halignmentgnomag.cc:659
 halignmentgnomag.cc:660
 halignmentgnomag.cc:661
 halignmentgnomag.cc:662
 halignmentgnomag.cc:663
 halignmentgnomag.cc:664
 halignmentgnomag.cc:665
 halignmentgnomag.cc:666
 halignmentgnomag.cc:667
 halignmentgnomag.cc:668
 halignmentgnomag.cc:669
 halignmentgnomag.cc:670
 halignmentgnomag.cc:671
 halignmentgnomag.cc:672
 halignmentgnomag.cc:673
 halignmentgnomag.cc:674
 halignmentgnomag.cc:675
 halignmentgnomag.cc:676
 halignmentgnomag.cc:677
 halignmentgnomag.cc:678
 halignmentgnomag.cc:679
 halignmentgnomag.cc:680
 halignmentgnomag.cc:681
 halignmentgnomag.cc:682
 halignmentgnomag.cc:683
 halignmentgnomag.cc:684
 halignmentgnomag.cc:685
 halignmentgnomag.cc:686
 halignmentgnomag.cc:687
 halignmentgnomag.cc:688
 halignmentgnomag.cc:689
 halignmentgnomag.cc:690
 halignmentgnomag.cc:691
 halignmentgnomag.cc:692
 halignmentgnomag.cc:693
 halignmentgnomag.cc:694
 halignmentgnomag.cc:695
 halignmentgnomag.cc:696
 halignmentgnomag.cc:697
 halignmentgnomag.cc:698
 halignmentgnomag.cc:699
 halignmentgnomag.cc:700
 halignmentgnomag.cc:701
 halignmentgnomag.cc:702
 halignmentgnomag.cc:703
 halignmentgnomag.cc:704
 halignmentgnomag.cc:705
 halignmentgnomag.cc:706
 halignmentgnomag.cc:707
 halignmentgnomag.cc:708
 halignmentgnomag.cc:709
 halignmentgnomag.cc:710
 halignmentgnomag.cc:711
 halignmentgnomag.cc:712
 halignmentgnomag.cc:713
 halignmentgnomag.cc:714
 halignmentgnomag.cc:715
 halignmentgnomag.cc:716
 halignmentgnomag.cc:717
 halignmentgnomag.cc:718
 halignmentgnomag.cc:719
 halignmentgnomag.cc:720
 halignmentgnomag.cc:721
 halignmentgnomag.cc:722
 halignmentgnomag.cc:723
 halignmentgnomag.cc:724
 halignmentgnomag.cc:725
 halignmentgnomag.cc:726
 halignmentgnomag.cc:727
 halignmentgnomag.cc:728
 halignmentgnomag.cc:729
 halignmentgnomag.cc:730
 halignmentgnomag.cc:731
 halignmentgnomag.cc:732
 halignmentgnomag.cc:733
 halignmentgnomag.cc:734
 halignmentgnomag.cc:735
 halignmentgnomag.cc:736
 halignmentgnomag.cc:737
 halignmentgnomag.cc:738
 halignmentgnomag.cc:739
 halignmentgnomag.cc:740
 halignmentgnomag.cc:741
 halignmentgnomag.cc:742
 halignmentgnomag.cc:743
 halignmentgnomag.cc:744
 halignmentgnomag.cc:745
 halignmentgnomag.cc:746
 halignmentgnomag.cc:747
 halignmentgnomag.cc:748
 halignmentgnomag.cc:749
 halignmentgnomag.cc:750
 halignmentgnomag.cc:751
 halignmentgnomag.cc:752
 halignmentgnomag.cc:753
 halignmentgnomag.cc:754
 halignmentgnomag.cc:755
 halignmentgnomag.cc:756
 halignmentgnomag.cc:757
 halignmentgnomag.cc:758
 halignmentgnomag.cc:759
 halignmentgnomag.cc:760
 halignmentgnomag.cc:761
 halignmentgnomag.cc:762
 halignmentgnomag.cc:763
 halignmentgnomag.cc:764
 halignmentgnomag.cc:765
 halignmentgnomag.cc:766
 halignmentgnomag.cc:767
 halignmentgnomag.cc:768
 halignmentgnomag.cc:769
 halignmentgnomag.cc:770
 halignmentgnomag.cc:771
 halignmentgnomag.cc:772
 halignmentgnomag.cc:773
 halignmentgnomag.cc:774
 halignmentgnomag.cc:775
 halignmentgnomag.cc:776
 halignmentgnomag.cc:777
 halignmentgnomag.cc:778
 halignmentgnomag.cc:779
 halignmentgnomag.cc:780
 halignmentgnomag.cc:781
 halignmentgnomag.cc:782
 halignmentgnomag.cc:783
 halignmentgnomag.cc:784
 halignmentgnomag.cc:785
 halignmentgnomag.cc:786
 halignmentgnomag.cc:787
 halignmentgnomag.cc:788
 halignmentgnomag.cc:789
 halignmentgnomag.cc:790
 halignmentgnomag.cc:791
 halignmentgnomag.cc:792
 halignmentgnomag.cc:793
 halignmentgnomag.cc:794
 halignmentgnomag.cc:795
 halignmentgnomag.cc:796
 halignmentgnomag.cc:797
 halignmentgnomag.cc:798
 halignmentgnomag.cc:799
 halignmentgnomag.cc:800
 halignmentgnomag.cc:801
 halignmentgnomag.cc:802
 halignmentgnomag.cc:803
 halignmentgnomag.cc:804
 halignmentgnomag.cc:805
 halignmentgnomag.cc:806
 halignmentgnomag.cc:807
 halignmentgnomag.cc:808
 halignmentgnomag.cc:809
 halignmentgnomag.cc:810
 halignmentgnomag.cc:811
 halignmentgnomag.cc:812
 halignmentgnomag.cc:813
 halignmentgnomag.cc:814
 halignmentgnomag.cc:815
 halignmentgnomag.cc:816
 halignmentgnomag.cc:817
 halignmentgnomag.cc:818
 halignmentgnomag.cc:819
 halignmentgnomag.cc:820
 halignmentgnomag.cc:821
 halignmentgnomag.cc:822
 halignmentgnomag.cc:823
 halignmentgnomag.cc:824
 halignmentgnomag.cc:825
 halignmentgnomag.cc:826
 halignmentgnomag.cc:827
 halignmentgnomag.cc:828
 halignmentgnomag.cc:829
 halignmentgnomag.cc:830
 halignmentgnomag.cc:831
 halignmentgnomag.cc:832
 halignmentgnomag.cc:833
 halignmentgnomag.cc:834
 halignmentgnomag.cc:835
 halignmentgnomag.cc:836
 halignmentgnomag.cc:837
 halignmentgnomag.cc:838
 halignmentgnomag.cc:839
 halignmentgnomag.cc:840
 halignmentgnomag.cc:841
 halignmentgnomag.cc:842
 halignmentgnomag.cc:843
 halignmentgnomag.cc:844
 halignmentgnomag.cc:845
 halignmentgnomag.cc:846
 halignmentgnomag.cc:847
 halignmentgnomag.cc:848
 halignmentgnomag.cc:849
 halignmentgnomag.cc:850
 halignmentgnomag.cc:851
 halignmentgnomag.cc:852
 halignmentgnomag.cc:853
 halignmentgnomag.cc:854
 halignmentgnomag.cc:855
 halignmentgnomag.cc:856
 halignmentgnomag.cc:857
 halignmentgnomag.cc:858
 halignmentgnomag.cc:859
 halignmentgnomag.cc:860
 halignmentgnomag.cc:861
 halignmentgnomag.cc:862
 halignmentgnomag.cc:863
 halignmentgnomag.cc:864
 halignmentgnomag.cc:865
 halignmentgnomag.cc:866
 halignmentgnomag.cc:867
 halignmentgnomag.cc:868
 halignmentgnomag.cc:869
 halignmentgnomag.cc:870
 halignmentgnomag.cc:871
 halignmentgnomag.cc:872
 halignmentgnomag.cc:873
 halignmentgnomag.cc:874
 halignmentgnomag.cc:875
 halignmentgnomag.cc:876
 halignmentgnomag.cc:877
 halignmentgnomag.cc:878
 halignmentgnomag.cc:879
 halignmentgnomag.cc:880
 halignmentgnomag.cc:881
 halignmentgnomag.cc:882
 halignmentgnomag.cc:883
 halignmentgnomag.cc:884
 halignmentgnomag.cc:885
 halignmentgnomag.cc:886
 halignmentgnomag.cc:887
 halignmentgnomag.cc:888
 halignmentgnomag.cc:889
 halignmentgnomag.cc:890
 halignmentgnomag.cc:891
 halignmentgnomag.cc:892
 halignmentgnomag.cc:893
 halignmentgnomag.cc:894
 halignmentgnomag.cc:895
 halignmentgnomag.cc:896
 halignmentgnomag.cc:897
 halignmentgnomag.cc:898
 halignmentgnomag.cc:899
 halignmentgnomag.cc:900
 halignmentgnomag.cc:901
 halignmentgnomag.cc:902
 halignmentgnomag.cc:903
 halignmentgnomag.cc:904
 halignmentgnomag.cc:905
 halignmentgnomag.cc:906
 halignmentgnomag.cc:907
 halignmentgnomag.cc:908
 halignmentgnomag.cc:909
 halignmentgnomag.cc:910
 halignmentgnomag.cc:911
 halignmentgnomag.cc:912
 halignmentgnomag.cc:913
 halignmentgnomag.cc:914
 halignmentgnomag.cc:915
 halignmentgnomag.cc:916
 halignmentgnomag.cc:917
 halignmentgnomag.cc:918
 halignmentgnomag.cc:919
 halignmentgnomag.cc:920
 halignmentgnomag.cc:921
 halignmentgnomag.cc:922
 halignmentgnomag.cc:923
 halignmentgnomag.cc:924
 halignmentgnomag.cc:925
 halignmentgnomag.cc:926
 halignmentgnomag.cc:927
 halignmentgnomag.cc:928
 halignmentgnomag.cc:929
 halignmentgnomag.cc:930
 halignmentgnomag.cc:931
 halignmentgnomag.cc:932
 halignmentgnomag.cc:933
 halignmentgnomag.cc:934
 halignmentgnomag.cc:935
 halignmentgnomag.cc:936
 halignmentgnomag.cc:937
 halignmentgnomag.cc:938
 halignmentgnomag.cc:939
 halignmentgnomag.cc:940
 halignmentgnomag.cc:941
 halignmentgnomag.cc:942
 halignmentgnomag.cc:943
 halignmentgnomag.cc:944
 halignmentgnomag.cc:945
 halignmentgnomag.cc:946
 halignmentgnomag.cc:947
 halignmentgnomag.cc:948
 halignmentgnomag.cc:949
 halignmentgnomag.cc:950
 halignmentgnomag.cc:951
 halignmentgnomag.cc:952
 halignmentgnomag.cc:953
 halignmentgnomag.cc:954
 halignmentgnomag.cc:955
 halignmentgnomag.cc:956
 halignmentgnomag.cc:957
 halignmentgnomag.cc:958
 halignmentgnomag.cc:959
 halignmentgnomag.cc:960
 halignmentgnomag.cc:961
 halignmentgnomag.cc:962
 halignmentgnomag.cc:963
 halignmentgnomag.cc:964
 halignmentgnomag.cc:965
 halignmentgnomag.cc:966
 halignmentgnomag.cc:967
 halignmentgnomag.cc:968
 halignmentgnomag.cc:969
 halignmentgnomag.cc:970
 halignmentgnomag.cc:971
 halignmentgnomag.cc:972
 halignmentgnomag.cc:973
 halignmentgnomag.cc:974
 halignmentgnomag.cc:975
 halignmentgnomag.cc:976
 halignmentgnomag.cc:977
 halignmentgnomag.cc:978
 halignmentgnomag.cc:979
 halignmentgnomag.cc:980
 halignmentgnomag.cc:981
 halignmentgnomag.cc:982
 halignmentgnomag.cc:983
 halignmentgnomag.cc:984
 halignmentgnomag.cc:985
 halignmentgnomag.cc:986
 halignmentgnomag.cc:987
 halignmentgnomag.cc:988
 halignmentgnomag.cc:989
 halignmentgnomag.cc:990
 halignmentgnomag.cc:991
 halignmentgnomag.cc:992
 halignmentgnomag.cc:993
 halignmentgnomag.cc:994
 halignmentgnomag.cc:995
 halignmentgnomag.cc:996
 halignmentgnomag.cc:997
 halignmentgnomag.cc:998
 halignmentgnomag.cc:999
 halignmentgnomag.cc:1000
 halignmentgnomag.cc:1001
 halignmentgnomag.cc:1002
 halignmentgnomag.cc:1003
 halignmentgnomag.cc:1004
 halignmentgnomag.cc:1005
 halignmentgnomag.cc:1006
 halignmentgnomag.cc:1007
 halignmentgnomag.cc:1008
 halignmentgnomag.cc:1009
 halignmentgnomag.cc:1010
 halignmentgnomag.cc:1011
 halignmentgnomag.cc:1012
 halignmentgnomag.cc:1013
 halignmentgnomag.cc:1014
 halignmentgnomag.cc:1015
 halignmentgnomag.cc:1016
 halignmentgnomag.cc:1017
 halignmentgnomag.cc:1018
 halignmentgnomag.cc:1019
 halignmentgnomag.cc:1020
 halignmentgnomag.cc:1021
 halignmentgnomag.cc:1022
 halignmentgnomag.cc:1023
 halignmentgnomag.cc:1024
 halignmentgnomag.cc:1025
 halignmentgnomag.cc:1026
 halignmentgnomag.cc:1027
 halignmentgnomag.cc:1028
 halignmentgnomag.cc:1029
 halignmentgnomag.cc:1030
 halignmentgnomag.cc:1031
 halignmentgnomag.cc:1032
 halignmentgnomag.cc:1033
 halignmentgnomag.cc:1034
 halignmentgnomag.cc:1035
 halignmentgnomag.cc:1036
 halignmentgnomag.cc:1037
 halignmentgnomag.cc:1038
 halignmentgnomag.cc:1039
 halignmentgnomag.cc:1040
 halignmentgnomag.cc:1041
 halignmentgnomag.cc:1042
 halignmentgnomag.cc:1043
 halignmentgnomag.cc:1044
 halignmentgnomag.cc:1045
 halignmentgnomag.cc:1046
 halignmentgnomag.cc:1047
 halignmentgnomag.cc:1048
 halignmentgnomag.cc:1049
 halignmentgnomag.cc:1050
 halignmentgnomag.cc:1051
 halignmentgnomag.cc:1052
 halignmentgnomag.cc:1053
 halignmentgnomag.cc:1054
 halignmentgnomag.cc:1055
 halignmentgnomag.cc:1056
 halignmentgnomag.cc:1057
 halignmentgnomag.cc:1058
 halignmentgnomag.cc:1059
 halignmentgnomag.cc:1060
 halignmentgnomag.cc:1061
 halignmentgnomag.cc:1062
 halignmentgnomag.cc:1063
 halignmentgnomag.cc:1064
 halignmentgnomag.cc:1065
 halignmentgnomag.cc:1066
 halignmentgnomag.cc:1067