#include "halignmentgcosmics.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"
#include "TNtuple.h"
using namespace std;
ClassImp(HAlignmentGCosmics)
  HAlignmentGCosmics::HAlignmentGCosmics()
{
  fAlignGeom  = new HAlignmentGGeom();
  fAlignRot   = new HAlignmentGRotations();
  fMinuit     = NULL;
  for(Int_t i = 0; i < 6; i++)
    {
      refTrans[i] = *(fAlignRot -> GetTransMdc(i,0)); 
      
      
      transGSIBefore[i] = refTrans[i];
      
      refTrans[i].transTo(transGSIBefore[0]); 
      transGSIAfter[i] =  refTrans[i];  
      transDubna[i] = *(fAlignRot -> GetTransMdc(i,1));
    }
    
  accRange = 10.;
  accRange3 = 10;    
  localAlign =0;    
    
  histoX0 = new TH1F("histoX0","histoX0",100,-20.,20.);
  histoY0 = new TH1F("histoY0","histoY0",100,-10.,10.);
  histoX0After = new TH1F("histoX0After","histoX0After",100,-20.,20.);
  histoY0After = new TH1F("histoY0After","histoY0After",100,-10.,10.);
  histoX1 = new TH1F("histoX1","histoX1",100,-20.,20.);
  histoY1 = new TH1F("histoY1","histoY1",100,-10.,10.);
  histoX1After = new TH1F("histoX1After","histoX1After",100,-20.,20.);
  histoY1After = new TH1F("histoY1After","histoY1After",100,-10.,10.);
  histoX2 = new TH1F("histoX2","histoX2",100,-20.,20.);
  histoY2 = new TH1F("histoY2","histoY2",100,-10.,10.);
  histoX2After = new TH1F("histoX2After","histoX2After",100,-20.,20.);
  histoY2After = new TH1F("histoY2After","histoY2After",100,-10.,10.);
  histoX03 = new TH1F("histoX03","histoX03",100,-20.,20.);
  histoY03 = new TH1F("histoY03","histoY03",100,-10.,10.);
  histoX0After3 = new TH1F("histoX0After3","histoX0After3",100,-20.,20.);
  histoY0After3 = new TH1F("histoY0After3","histoY0After3",100,-10.,10.);
  histoX13 = new TH1F("histoX13","histoX13",100,-20.,20.);
  histoY13 = new TH1F("histoY13","histoY13",100,-10.,10.);
  histoX1After3 = new TH1F("histoX1After3","histoX1After3",100,-20.,20.);
  histoY1After3 = new TH1F("histoY1After3","histoY1After3",100,-10.,10.);
  histoX23 = new TH1F("histoX23","histoX23",100,-20.,20.);
  histoY23 = new TH1F("histoY23","histoY23",100,-10.,10.);
  histoX2After3 = new TH1F("histoX2After3","histoX2After3",100,-20.,20.);
  histoY2After3 = new TH1F("histoY2After3","histoY2After3",100,-10.,10.);
}
void HAlignmentGCosmics::SetNtuple(TNtuple *_nt)
{
 nt = _nt;
 nt -> SetBranchAddress("x1",&x1); 
 nt -> SetBranchAddress("y1",&y1); 
 nt -> SetBranchAddress("x2",&x2); 
 nt -> SetBranchAddress("y2",&y2); 
 nt -> SetBranchAddress("x3",&x3); 
 nt -> SetBranchAddress("y3",&y3); 
 nt -> SetBranchAddress("x4",&x4); 
 nt -> SetBranchAddress("y4",&y4); 
 nt -> SetBranchAddress("sec1",&sec1);
 nt -> SetBranchAddress("sec2",&sec2);
 nt -> SetBranchAddress("missing",&missing);
}
HAlignmentGCosmics::~HAlignmentGCosmics()
{
  if(fAlignGeom)
    {
      delete fAlignGeom;
      fAlignGeom=NULL;
    }
  if(fAlignRot)
    {
      delete fAlignRot;
      fAlignRot=NULL;
    }
  
  if(fMinuit)
    {
      delete fMinuit;
      fMinuit=NULL;
    }
}
void fcnCosmicsLocal(Int_t &npar, Double_t *gin, Double_t &f, Double_t *par, Int_t iflag)
{
  
  static int count = 1;
  count++;
  HAlignmentGCosmics   *myObject   = (HAlignmentGCosmics*)(gMinuit -> GetObjectFit());
  HAlignmentGRotations *fAlignRot  = myObject -> GetAlignRot();
  HGeomTransform trans =  fAlignRot -> MakeTransMatrix(par[0], par[1], par[2], par[3], par[4], par[5]);
  HGeomTransform transMod[6];
  
  Int_t fixedSector = myObject -> GetFixedSector();
  
  for(Int_t i = 0; i < 6; ++i)
    {
      transMod[i] = myObject -> GetTransGSI("Old",i);
      if(i==fixedSector || i==(fixedSector+3))
      {
       transMod[i].transTo(trans);
      }
      if(fixedSector == -1) transMod[i].transTo(trans);
    }
  f =  myObject -> GetMinFunction(transMod);
  if(count%10 == 0) 
    cout<<"iter:  "<<count<<"  function  "<<f<<" "<<par[0]<<"  "<<par[1]<<"  "<<par[2]<<"  "<<par[3]<<"  "
                      <<par[4]<<"  "<<par[5]<<endl;
}
void fcnCosmics(Int_t &npar, Double_t *gin, Double_t &f, Double_t *par, Int_t iflag)
{
  static int count = 1;
  count++;
  HAlignmentGCosmics   *myObject   = (HAlignmentGCosmics*)(gMinuit -> GetObjectFit());
  HAlignmentGRotations *fAlignRot  = myObject -> GetAlignRot();
  HGeomTransform trans =  fAlignRot -> MakeTransMatrix(par[0], par[1], par[2], par[3], par[4], par[5]);
  HGeomTransform transMod[6];
  for(Int_t i = 0; i < 6; ++i)
    {
      transMod[i] = myObject -> GetRefTrans(i);
      transMod[i].transFrom(trans);
    }
  f =  myObject -> GetMinFunction(transMod);
  if(count%10 == 0) 
    cout<<"iter:  "<<count<<"  function  "<<f<<" "<<par[0]<<"  "<<par[1]<<"  "<<par[2]<<"  "<<par[3]<<"  "
                      <<par[4]<<"  "<<par[5]<<endl;
}
void HAlignmentGCosmics::Align()
{
  Int_t ierflg = 0;
  if(!gMinuit) fMinuit=new TMinuit(6);
  gMinuit->SetFCN(fcnCosmics);
  gMinuit->SetObjectFit(this);
  Double_t arglist[6];
  Double_t vstart[6];
  Double_t step[13];
  Double_t out[6];
  Double_t errOut[6];
 
  fAlignRot -> GetEulerAngles (transGSIBefore[0], vstart[0], vstart[1], vstart[2]);
  fAlignRot -> GetTransVector (transGSIBefore[0], vstart[3], vstart[4], vstart[5]);
  for(Int_t i=0; i<6; i++)
    {
      step[i] = 0.001;
      
      
    }
  
  step[3] = 0.05;
  step[4] = 0.5;
  step[5] = 0.5;
  
  gMinuit->mnparm(0,"phi", vstart[0],step[0],0,0,ierflg);
  gMinuit->mnparm(1,"psi",vstart[1], step[1],0,0,ierflg);
  gMinuit->mnparm(2,"theta", vstart[2], step[2],0,0,ierflg);
  gMinuit->mnparm(3,"x", vstart[3], step[3], 0,0,ierflg);
  gMinuit->mnparm(4,"y",vstart[4], step[4],0,0,ierflg);
  gMinuit->mnparm(5,"z", vstart[5], step[5], 0,0,ierflg);
  gMinuit->SetPrintLevel(-1);
  
  
  
  gMinuit->SetErrorDef(1);
  arglist[0]=2;
  gMinuit->mnexcm("SET STR",arglist,1,ierflg);
  
  
  arglist[1] = 0.01;
  arglist[0] = 10000;
  
    gMinuit->mnexcm("SIMPLEX",arglist,1,ierflg);
    
  
  for (Int_t ii = 0; ii < 6; ii++)
    {
      gMinuit->GetParameter(ii,out[ii],errOut[ii]);
    }
  
  HGeomTransform transT = fAlignRot->MakeTransMatrix(out[0], out[1], out[2], out[3], out[4], out[5]);
  
  for (Int_t ii = 0; ii < 6; ii++)
    {
      transGSIAfter[ii].transFrom(transT);
    }
}
void HAlignmentGCosmics::AlignLocal()
{
  localAlign = 1;
  Int_t ierflg = 0;
  if(!gMinuit) fMinuit=new TMinuit(6);
  gMinuit->SetFCN(fcnCosmicsLocal);
  gMinuit->SetObjectFit(this);
  Double_t arglist[6];
  Double_t vstart[6] = {0.};
  
  vstart[0] = acos(-1.)/2.;
  vstart[2] = -1.*vstart[0];
  
  
  Double_t step[13];
  Double_t out[6];
  Double_t errOut[6];
  for(Int_t i=0; i<6; i++)
    {
      step[i] = 0.001;
      
      
    }
  
  step[3] = 0.005;
  step[4] = 0.005;
  step[5] = 0.005;
  
  gMinuit->mnparm(0,"phi", vstart[0],step[0],0,0,ierflg);
  gMinuit->mnparm(1,"psi",vstart[1], step[1],0,0,ierflg);
  gMinuit->mnparm(2,"theta", vstart[2], step[2],0,0,ierflg);
  gMinuit->mnparm(3,"x", vstart[3], step[3], 0,0,ierflg);
  gMinuit->mnparm(4,"y",vstart[4], step[4],0,0,ierflg);
  gMinuit->mnparm(5,"z", vstart[5], step[5], 0,0,ierflg);
  gMinuit->SetPrintLevel(-1);
  
  
  
  gMinuit->SetErrorDef(1);
  arglist[0]=2;
  gMinuit->mnexcm("SET STR",arglist,1,ierflg);
  
  
  arglist[1] = 0.01;
  arglist[0] = 10000;
  
    gMinuit->mnexcm("SIMPLEX",arglist,1,ierflg);
    
  
  for (Int_t ii = 0; ii < 6; ii++)
    {
      gMinuit->GetParameter(ii,out[ii],errOut[ii]);
    }
  
  HGeomTransform transT = fAlignRot->MakeTransMatrix(out[0], out[1], out[2], out[3], out[4], out[5]);
  
  for (Int_t ii = 0; ii < 6; ii++)
    {
      transGSIAfter[ii] = transGSIBefore[ii];
      if(ii == fixedSector || ii == (fixedSector+3))
      transGSIAfter[ii].transTo(transT);
      if(fixedSector == -1 ) transGSIAfter[ii].transTo(transT);
    }
}
 
void HAlignmentGCosmics::checkAlignment()
{
  cout<<"checking the alignment results "<<endl;
  cout<<"checking the alignment results "<<endl;
  cout<<"checking the alignment results "<<endl;
  cout<<"checking the alignment results "<<endl;
  cout<<"checking the alignment results "<<endl;
  GetMinFunction(transGSIBefore, kTRUE);
  GetMinFunction(transGSIAfter,  kTRUE,"After");
    TFile f("checkalignment.root","recreate");
    histoX0 -> Write();
    histoY0 -> Write();
    histoX0After -> Write();
    histoY0After -> Write();
    
    histoX1 -> Write();
    histoY1 -> Write();
    histoX1After -> Write();
    histoY1After -> Write();
    
    histoX2 -> Write();
    histoY2 -> Write();
    histoX2After -> Write();
    histoY2After -> Write();
    
    histoX0After -> SetLineColor(2);
    histoY0After -> SetLineColor(2);
    histoX1After -> SetLineColor(2);
    histoY1After -> SetLineColor(2);
    histoX2After -> SetLineColor(2);
    histoY2After -> SetLineColor(2);
    
    
    TCanvas *c1 = new TCanvas();
    c1 -> Divide(2,3);
    c1->cd(1);
    histoX0 -> Draw();
    histoX0After -> Draw("sames");
    c1->cd(2);
    histoY0 -> Draw();
    histoY0After -> Draw("sames");
    
    c1->cd(3);
    histoX1 -> Draw();
    histoX1After -> Draw("sames");
    c1->cd(4);
    histoY1 -> Draw();
    histoY1After -> Draw("sames");
    
    c1->cd(5);
    histoX2 -> Draw();
    histoX2After -> Draw("sames");
    c1->cd(6);
    histoY2 -> Draw();
    histoY2After -> Draw("sames");
    
     TCanvas *c2 = new TCanvas();
    c2 -> Divide(2,3);
    c2->cd(1);
    histoX0After -> Draw();
    c2->cd(2);
    histoY0After -> Draw();
    
    c2->cd(3);
    histoX1After -> Draw();
    c2->cd(4);
    histoY1After -> Draw();
    
    c2->cd(5);
    histoX2After -> Draw();
    c2->cd(6);
    histoY2After -> Draw();
    c1 -> Write();
    c2 -> Write(); 
    
    histoX03 -> Write();
    histoY03 -> Write();
    histoX0After3 -> Write();
    histoY0After3 -> Write();
    
    histoX13 -> Write();
    histoY13 -> Write();
    histoX1After3 -> Write();
    histoY1After3 -> Write();
    
    histoX23 -> Write();
    histoY23 -> Write();
    histoX2After3 -> Write();
    histoY2After3 -> Write();
    
    histoX0After3 -> SetLineColor(2);
    histoY0After3 -> SetLineColor(2);
    histoX1After3 -> SetLineColor(2);
    histoY1After3 -> SetLineColor(2);
    histoX2After3 -> SetLineColor(2);
    histoY2After3 -> SetLineColor(2);
    
    
    TCanvas *c3 = new TCanvas();
    c3 -> Divide(2,3);
    c3->cd(1);
    histoX03 -> Draw();
    histoX0After3 -> Draw("sames");
    c3->cd(2);
    histoY03 -> Draw();
    histoY0After3 -> Draw("sames");
    
    c3->cd(3);
    histoX13 -> Draw();
    histoX1After3 -> Draw("sames");
    c3->cd(4);
    histoY13 -> Draw();
    histoY1After3 -> Draw("sames");
    
    c3->cd(5);
    histoX23 -> Draw();
    histoX2After3 -> Draw("sames");
    c3->cd(6);
    histoY23 -> Draw();
    histoY2After3 -> Draw("sames");
    
    c3 -> Write();
   
 }
HGeomTransform HAlignmentGCosmics::GetTransGSI(TString option,Int_t mod)
{
  if (option=="Old")
     return transGSIBefore[mod];
     else if(option=="New")
       return transGSIAfter[mod]; 
      else 
        { 
	  HGeomTransform test;
	  return test;
	}
}
Float_t HAlignmentGCosmics::GetMinFunction(HGeomTransform *trans, Bool_t isFill, TString option)
{
  HGeomVector point1, Point1;
  HGeomVector point2;
  HGeomVector point3;
  HGeomVector point4, Point4;
  HGeomVector diff1, diff2;
  HGeomVector POINTS[4];  
  Float_t diff = 0;
    
  Int_t nentries = nt -> GetEntries();
  
  for(Int_t i = 0; i < nentries; i++)  
    {
      
      
      nt->GetEntry(i);
      point1.setXYZ(x1, y1, 0.); 
      point2.setXYZ(x2, y2, 0.); 
      point3.setXYZ(x3, y3, 0.); 
      point4.setXYZ(x4, y4, 0.); 
      POINTS[0] = point1;
      POINTS[1] = point2;
      POINTS[2] = point3;
      POINTS[3] = point4;
      if(localAlign && fixedSector!= -1 && ((Int_t)sec1 != fixedSector && (Int_t)sec2 != fixedSector)) continue; 
      
      if(missing !=0 ) 
      {
      diff += GetMinFunction3(POINTS,trans,isFill,option); continue;
      }
     
      point2 = trans[(Int_t)sec1].transFrom(point2); 
      point3 = trans[(Int_t)sec2].transFrom(point3); 
      Point1 = fAlignGeom ->  CalcIntersection(point3,point2,transDubna[(Int_t)sec1]); 
      Point4 = fAlignGeom ->  CalcIntersection(point2,point3,transDubna[(Int_t)sec2]); 
      
      HGeomVector point1Lab = transDubna[(Int_t)sec1].transFrom(point1); 
      HGeomVector point4Lab = transDubna[(Int_t)sec2].transFrom(point4); 
      
      
      
      if(!isFill)
      {   
      if(fAlignGeom ->  CalcDistanceToLine(point2,point1Lab,point4Lab) > accRange ) continue;
      if(fAlignGeom ->  CalcDistanceToLine(point3,point1Lab,point4Lab) > accRange ) continue;
      }
       
      if(isFill)
	{
	  Point1 = transDubna[(Int_t)sec1].transTo(Point1); 
	  Point4 = transDubna[(Int_t)sec2].transTo(Point4); 
	}
      
      else
	{ 
	  
	  Point1 = transDubna[(Int_t)sec1].transTo(Point1); 
	  Point4 = transDubna[(Int_t)sec2].transTo(Point4); 
	}
       	
      
      diff1  = point1 - Point1;
      diff2  = point4 - Point4;
      if(isFill) fillHistograms(diff1, diff2, (Int_t)sec1, option);
      diff += diff1.getX()*diff1.getX()/6. + diff1.getY()*diff1.getY();
      diff += diff2.getX()*diff2.getX()/6. + diff2.getY()*diff2.getY();
 
    }
  return diff;
}
Float_t HAlignmentGCosmics::GetMinFunction3(HGeomVector *POINTS,HGeomTransform *trans, Bool_t isFill,
 TString option)
{
  HGeomVector point1, point2, point3, point4;
  HGeomVector Point1, Point4;
  point1 = POINTS[0];
  point2 = POINTS[1];
  point3 = POINTS[2];
  point4 = POINTS[3];
  HGeomVector DIFF;
  if(missing == 1)
    {
      
      point2 = trans[(Int_t)sec1].transFrom(point2); 
      point3 = trans[(Int_t)sec2].transFrom(point3); 
      Point4 = fAlignGeom ->  CalcIntersection(point2,point3,transDubna[(Int_t)sec2]); 
      HGeomVector point4Lab = transDubna[(Int_t)sec2].transFrom(point4); 
      if(!isFill)
	{   
	  if(fAlignGeom ->  CalcDistanceToLine(point2,point3,point4Lab) > accRange3 ) return 0;
	}
      Point4 = transDubna[(Int_t)sec2].transTo(Point4); 
      
      DIFF  = point4 - Point4;
      if(isFill) fillHistograms3(DIFF,(Int_t)sec1, option);
      return (DIFF.getX()*DIFF.getX()/6. + DIFF.getY()*DIFF.getY());
    }
  else 
    if(missing == 4)
      {
	
	point2 = trans[(Int_t)sec1].transFrom(point2); 
	point3 = trans[(Int_t)sec2].transFrom(point3); 
	Point1 = fAlignGeom ->  CalcIntersection(point3,point2,transDubna[(Int_t)sec1]); 
	HGeomVector point1Lab = transDubna[(Int_t)sec1].transFrom(point1); 
	if(!isFill)
	  {   
	    if(fAlignGeom ->  CalcDistanceToLine(point3,point2,point1Lab) > accRange3 ) return 0;
	  }
	Point1 = transDubna[(Int_t)sec1].transTo(Point1); 
	DIFF  = point1 - Point1;
        if(isFill) fillHistograms3(DIFF,(Int_t)sec1, option);
	return (DIFF.getX()*DIFF.getX()/6. + DIFF.getY()*DIFF.getY());
      }
    else if(missing == 2)
      {
	
	 point3 = trans[(Int_t)sec2].transFrom(point3); 
	 HGeomVector point1Lab = transDubna[(Int_t)sec1].transFrom(point1); 
         HGeomVector point4Lab = transDubna[(Int_t)sec2].transFrom(point4); 
	 Point1 = fAlignGeom ->  CalcIntersection(point4Lab,point3,transDubna[(Int_t)sec1]); 
	 if(!isFill)
	   {   
	     if(fAlignGeom ->  CalcDistanceToLine(point4Lab,point3,point1Lab) > accRange3 ) return 0;
	   }	
        Point1 = transDubna[(Int_t)sec1].transTo(Point1); 
        DIFF  = point1 - Point1;
        if(isFill) fillHistograms3(DIFF,(Int_t)sec1, option);
        return (DIFF.getX()*DIFF.getX()/6. + DIFF.getY()*DIFF.getY());
      }
    else if(missing ==3)
      {
	
        point2 = trans[(Int_t)sec1].transFrom(point2); 
	HGeomVector point1Lab = transDubna[(Int_t)sec1].transFrom(point1); 
	HGeomVector point4Lab = transDubna[(Int_t)sec2].transFrom(point4); 
	Point4 = fAlignGeom ->  CalcIntersection(point1Lab,point2,transDubna[(Int_t)sec2]); 
        if(!isFill)
	  {   
	     if(fAlignGeom ->  CalcDistanceToLine(point1Lab,point2,point4Lab) > accRange3 ) return 0;
	  }	     
        
	Point4 = transDubna[(Int_t)sec2].transTo(Point4); 
	DIFF  = point4 - Point4;
        if(isFill) fillHistograms3(DIFF,(Int_t)sec1, option);
	return (DIFF.getX()*DIFF.getX()/6. + DIFF.getY()*DIFF.getY());
  }
    else 
      { 
        cout<<"missing === "<<missing<<endl;
	return 0;
      }
  
}
void HAlignmentGCosmics::changename(TH1F *histo, TString option)
{
  TString name(histo->GetName());
  name.Append(option.Data());
  histo -> SetName(name.Data());
}
void HAlignmentGCosmics::Yoxlama()
{
  for(Int_t i=0; i<6; i++)
    {
      cout<<"gsi bir basha"<<endl;
      transGSIBefore[i].print();
      cout<<"gsi chevirmeden sonra "<<endl;
      HGeomTransform  transMod = refTrans[i];
      transMod.transFrom(transGSIBefore[0]);
      transMod.print();
    }
}
void HAlignmentGCosmics::fillHistograms(HGeomVector &diff1, HGeomVector &diff2,Int_t sec1, TString option)
{
  if(sec1 == 0)
    {
      if(option == "After")
	{
	  histoX0After -> Fill(diff1.getX());
          histoX0After -> Fill(diff2.getX());
	  histoY0After -> Fill(diff1.getY());
	  histoY0After -> Fill(diff2.getY());
	}
      else
	{
	  histoX0 -> Fill(diff1.getX());
          histoX0 -> Fill(diff2.getX());
	  histoY0 -> Fill(diff1.getY());
	  histoY0 -> Fill(diff2.getY());
	}
    }
  else  
    if(sec1 == 1)
      {
      if(option == "After")
	{
	  histoX1After -> Fill(diff1.getX());
          histoX1After -> Fill(diff2.getX());
	  histoY1After -> Fill(diff1.getY());
	  histoY1After -> Fill(diff2.getY());
	}
      else
	{
	  histoX1 -> Fill(diff1.getX());
          histoX1 -> Fill(diff2.getX());
	  histoY1 -> Fill(diff1.getY());
	  histoY1 -> Fill(diff2.getY());
	  
	  
	  
	}
      }
    else
      if(sec1 != 2) {cout<<"this can not be"<<endl;}
      else
        {
	  if(option == "After")
	    {
	      histoX2After -> Fill(diff1.getX());
	      histoX2After -> Fill(diff2.getX());
	      histoY2After -> Fill(diff1.getY());
	      histoY2After -> Fill(diff2.getY());
	    }
	  else
	    {
	      histoX2 -> Fill(diff1.getX());
	      histoX2 -> Fill(diff2.getX());
	      histoY2 -> Fill(diff1.getY());
	      histoY2 -> Fill(diff2.getY());
	    }
	}
  
} 
void HAlignmentGCosmics::fillHistograms3(HGeomVector &diff, Int_t sec1, TString option)
{
  if(sec1 == 0)
    {
      if(option == "After")
	{
	  histoX0After3 -> Fill(diff.getX());
          histoY0After3 -> Fill(diff.getY());
	}
      else
	{
	  histoX03 -> Fill(diff.getX());
	  histoY03 -> Fill(diff.getY());
	}
    }
  else  
    if(sec1 == 1)
      {
      if(option == "After")
	{
	  histoX1After3 -> Fill(diff.getX());
	  histoY1After3 -> Fill(diff.getY());
	}
      else
	{
	  histoX13 -> Fill(diff.getX());
	  histoY13 -> Fill(diff.getY());
	}
      }
    else
      if(sec1 != 2) {cout<<"this can not be"<<endl;}
      else
        {
	  if(option == "After")
	    {
	      histoX2After3 -> Fill(diff.getX());
	      histoY2After3 -> Fill(diff.getY());
	    }
	  else
	    {
	      histoX23 -> Fill(diff.getX());
	      histoY23 -> Fill(diff.getY());
	    }
	}
} 
 halignmentgcosmics.cc:100  halignmentgcosmics.cc:101  halignmentgcosmics.cc:102  halignmentgcosmics.cc:103  halignmentgcosmics.cc:104  halignmentgcosmics.cc:105  halignmentgcosmics.cc:106  halignmentgcosmics.cc:107  halignmentgcosmics.cc:108  halignmentgcosmics.cc:109  halignmentgcosmics.cc:110  halignmentgcosmics.cc:111  halignmentgcosmics.cc:112  halignmentgcosmics.cc:113  halignmentgcosmics.cc:114  halignmentgcosmics.cc:115  halignmentgcosmics.cc:116  halignmentgcosmics.cc:117  halignmentgcosmics.cc:118  halignmentgcosmics.cc:119  halignmentgcosmics.cc:120  halignmentgcosmics.cc:121  halignmentgcosmics.cc:122  halignmentgcosmics.cc:123  halignmentgcosmics.cc:124  halignmentgcosmics.cc:125  halignmentgcosmics.cc:126  halignmentgcosmics.cc:127  halignmentgcosmics.cc:128  halignmentgcosmics.cc:129  halignmentgcosmics.cc:130  halignmentgcosmics.cc:131  halignmentgcosmics.cc:132  halignmentgcosmics.cc:133  halignmentgcosmics.cc:134  halignmentgcosmics.cc:135  halignmentgcosmics.cc:136  halignmentgcosmics.cc:137  halignmentgcosmics.cc:138  halignmentgcosmics.cc:139  halignmentgcosmics.cc:140  halignmentgcosmics.cc:141  halignmentgcosmics.cc:142  halignmentgcosmics.cc:143  halignmentgcosmics.cc:144  halignmentgcosmics.cc:145  halignmentgcosmics.cc:146  halignmentgcosmics.cc:147  halignmentgcosmics.cc:148  halignmentgcosmics.cc:149  halignmentgcosmics.cc:150  halignmentgcosmics.cc:151  halignmentgcosmics.cc:152  halignmentgcosmics.cc:153  halignmentgcosmics.cc:154  halignmentgcosmics.cc:155  halignmentgcosmics.cc:156  halignmentgcosmics.cc:157  halignmentgcosmics.cc:158  halignmentgcosmics.cc:159  halignmentgcosmics.cc:160  halignmentgcosmics.cc:161  halignmentgcosmics.cc:162  halignmentgcosmics.cc:163  halignmentgcosmics.cc:164  halignmentgcosmics.cc:165  halignmentgcosmics.cc:166  halignmentgcosmics.cc:167  halignmentgcosmics.cc:168  halignmentgcosmics.cc:169  halignmentgcosmics.cc:170  halignmentgcosmics.cc:171  halignmentgcosmics.cc:172  halignmentgcosmics.cc:173  halignmentgcosmics.cc:174  halignmentgcosmics.cc:175  halignmentgcosmics.cc:176  halignmentgcosmics.cc:177  halignmentgcosmics.cc:178  halignmentgcosmics.cc:179  halignmentgcosmics.cc:180  halignmentgcosmics.cc:181  halignmentgcosmics.cc:182  halignmentgcosmics.cc:183  halignmentgcosmics.cc:184  halignmentgcosmics.cc:185  halignmentgcosmics.cc:186  halignmentgcosmics.cc:187  halignmentgcosmics.cc:188  halignmentgcosmics.cc:189  halignmentgcosmics.cc:190  halignmentgcosmics.cc:191  halignmentgcosmics.cc:192  halignmentgcosmics.cc:193  halignmentgcosmics.cc:194  halignmentgcosmics.cc:195  halignmentgcosmics.cc:196  halignmentgcosmics.cc:197  halignmentgcosmics.cc:198  halignmentgcosmics.cc:199  halignmentgcosmics.cc:200  halignmentgcosmics.cc:201  halignmentgcosmics.cc:202  halignmentgcosmics.cc:203  halignmentgcosmics.cc:204  halignmentgcosmics.cc:205  halignmentgcosmics.cc:206  halignmentgcosmics.cc:207  halignmentgcosmics.cc:208  halignmentgcosmics.cc:209  halignmentgcosmics.cc:210  halignmentgcosmics.cc:211  halignmentgcosmics.cc:212  halignmentgcosmics.cc:213  halignmentgcosmics.cc:214  halignmentgcosmics.cc:215  halignmentgcosmics.cc:216  halignmentgcosmics.cc:217  halignmentgcosmics.cc:218  halignmentgcosmics.cc:219  halignmentgcosmics.cc:220  halignmentgcosmics.cc:221  halignmentgcosmics.cc:222  halignmentgcosmics.cc:223  halignmentgcosmics.cc:224  halignmentgcosmics.cc:225  halignmentgcosmics.cc:226  halignmentgcosmics.cc:227  halignmentgcosmics.cc:228  halignmentgcosmics.cc:229  halignmentgcosmics.cc:230  halignmentgcosmics.cc:231  halignmentgcosmics.cc:232  halignmentgcosmics.cc:233  halignmentgcosmics.cc:234  halignmentgcosmics.cc:235  halignmentgcosmics.cc:236  halignmentgcosmics.cc:237  halignmentgcosmics.cc:238  halignmentgcosmics.cc:239  halignmentgcosmics.cc:240  halignmentgcosmics.cc:241  halignmentgcosmics.cc:242  halignmentgcosmics.cc:243  halignmentgcosmics.cc:244  halignmentgcosmics.cc:245  halignmentgcosmics.cc:246  halignmentgcosmics.cc:247  halignmentgcosmics.cc:248  halignmentgcosmics.cc:249  halignmentgcosmics.cc:250  halignmentgcosmics.cc:251  halignmentgcosmics.cc:252  halignmentgcosmics.cc:253  halignmentgcosmics.cc:254  halignmentgcosmics.cc:255  halignmentgcosmics.cc:256  halignmentgcosmics.cc:257  halignmentgcosmics.cc:258  halignmentgcosmics.cc:259  halignmentgcosmics.cc:260  halignmentgcosmics.cc:261  halignmentgcosmics.cc:262  halignmentgcosmics.cc:263  halignmentgcosmics.cc:264  halignmentgcosmics.cc:265  halignmentgcosmics.cc:266  halignmentgcosmics.cc:267  halignmentgcosmics.cc:268  halignmentgcosmics.cc:269  halignmentgcosmics.cc:270  halignmentgcosmics.cc:271  halignmentgcosmics.cc:272  halignmentgcosmics.cc:273  halignmentgcosmics.cc:274  halignmentgcosmics.cc:275  halignmentgcosmics.cc:276  halignmentgcosmics.cc:277  halignmentgcosmics.cc:278  halignmentgcosmics.cc:279  halignmentgcosmics.cc:280  halignmentgcosmics.cc:281  halignmentgcosmics.cc:282  halignmentgcosmics.cc:283  halignmentgcosmics.cc:284  halignmentgcosmics.cc:285  halignmentgcosmics.cc:286  halignmentgcosmics.cc:287  halignmentgcosmics.cc:288  halignmentgcosmics.cc:289  halignmentgcosmics.cc:290  halignmentgcosmics.cc:291  halignmentgcosmics.cc:292  halignmentgcosmics.cc:293  halignmentgcosmics.cc:294  halignmentgcosmics.cc:295  halignmentgcosmics.cc:296  halignmentgcosmics.cc:297  halignmentgcosmics.cc:298  halignmentgcosmics.cc:299  halignmentgcosmics.cc:300  halignmentgcosmics.cc:301  halignmentgcosmics.cc:302  halignmentgcosmics.cc:303  halignmentgcosmics.cc:304  halignmentgcosmics.cc:305  halignmentgcosmics.cc:306  halignmentgcosmics.cc:307  halignmentgcosmics.cc:308  halignmentgcosmics.cc:309  halignmentgcosmics.cc:310  halignmentgcosmics.cc:311  halignmentgcosmics.cc:312  halignmentgcosmics.cc:313  halignmentgcosmics.cc:314  halignmentgcosmics.cc:315  halignmentgcosmics.cc:316  halignmentgcosmics.cc:317  halignmentgcosmics.cc:318  halignmentgcosmics.cc:319  halignmentgcosmics.cc:320  halignmentgcosmics.cc:321  halignmentgcosmics.cc:322  halignmentgcosmics.cc:323  halignmentgcosmics.cc:324  halignmentgcosmics.cc:325  halignmentgcosmics.cc:326  halignmentgcosmics.cc:327  halignmentgcosmics.cc:328  halignmentgcosmics.cc:329  halignmentgcosmics.cc:330  halignmentgcosmics.cc:331  halignmentgcosmics.cc:332  halignmentgcosmics.cc:333  halignmentgcosmics.cc:334  halignmentgcosmics.cc:335  halignmentgcosmics.cc:336  halignmentgcosmics.cc:337  halignmentgcosmics.cc:338  halignmentgcosmics.cc:339  halignmentgcosmics.cc:340  halignmentgcosmics.cc:341  halignmentgcosmics.cc:342  halignmentgcosmics.cc:343  halignmentgcosmics.cc:344  halignmentgcosmics.cc:345  halignmentgcosmics.cc:346  halignmentgcosmics.cc:347  halignmentgcosmics.cc:348  halignmentgcosmics.cc:349  halignmentgcosmics.cc:350  halignmentgcosmics.cc:351  halignmentgcosmics.cc:352  halignmentgcosmics.cc:353  halignmentgcosmics.cc:354  halignmentgcosmics.cc:355  halignmentgcosmics.cc:356  halignmentgcosmics.cc:357  halignmentgcosmics.cc:358  halignmentgcosmics.cc:359  halignmentgcosmics.cc:360  halignmentgcosmics.cc:361  halignmentgcosmics.cc:362  halignmentgcosmics.cc:363  halignmentgcosmics.cc:364  halignmentgcosmics.cc:365  halignmentgcosmics.cc:366  halignmentgcosmics.cc:367  halignmentgcosmics.cc:368  halignmentgcosmics.cc:369  halignmentgcosmics.cc:370  halignmentgcosmics.cc:371  halignmentgcosmics.cc:372  halignmentgcosmics.cc:373  halignmentgcosmics.cc:374  halignmentgcosmics.cc:375  halignmentgcosmics.cc:376  halignmentgcosmics.cc:377  halignmentgcosmics.cc:378  halignmentgcosmics.cc:379  halignmentgcosmics.cc:380  halignmentgcosmics.cc:381  halignmentgcosmics.cc:382  halignmentgcosmics.cc:383  halignmentgcosmics.cc:384  halignmentgcosmics.cc:385  halignmentgcosmics.cc:386  halignmentgcosmics.cc:387  halignmentgcosmics.cc:388  halignmentgcosmics.cc:389  halignmentgcosmics.cc:390  halignmentgcosmics.cc:391  halignmentgcosmics.cc:392  halignmentgcosmics.cc:393  halignmentgcosmics.cc:394  halignmentgcosmics.cc:395  halignmentgcosmics.cc:396  halignmentgcosmics.cc:397  halignmentgcosmics.cc:398  halignmentgcosmics.cc:399  halignmentgcosmics.cc:400  halignmentgcosmics.cc:401  halignmentgcosmics.cc:402  halignmentgcosmics.cc:403  halignmentgcosmics.cc:404  halignmentgcosmics.cc:405  halignmentgcosmics.cc:406  halignmentgcosmics.cc:407  halignmentgcosmics.cc:408  halignmentgcosmics.cc:409  halignmentgcosmics.cc:410  halignmentgcosmics.cc:411  halignmentgcosmics.cc:412  halignmentgcosmics.cc:413  halignmentgcosmics.cc:414  halignmentgcosmics.cc:415  halignmentgcosmics.cc:416  halignmentgcosmics.cc:417  halignmentgcosmics.cc:418  halignmentgcosmics.cc:419  halignmentgcosmics.cc:420  halignmentgcosmics.cc:421  halignmentgcosmics.cc:422  halignmentgcosmics.cc:423  halignmentgcosmics.cc:424  halignmentgcosmics.cc:425  halignmentgcosmics.cc:426  halignmentgcosmics.cc:427  halignmentgcosmics.cc:428  halignmentgcosmics.cc:429  halignmentgcosmics.cc:430  halignmentgcosmics.cc:431  halignmentgcosmics.cc:432  halignmentgcosmics.cc:433  halignmentgcosmics.cc:434  halignmentgcosmics.cc:435  halignmentgcosmics.cc:436  halignmentgcosmics.cc:437  halignmentgcosmics.cc:438  halignmentgcosmics.cc:439  halignmentgcosmics.cc:440  halignmentgcosmics.cc:441  halignmentgcosmics.cc:442  halignmentgcosmics.cc:443  halignmentgcosmics.cc:444  halignmentgcosmics.cc:445  halignmentgcosmics.cc:446  halignmentgcosmics.cc:447  halignmentgcosmics.cc:448  halignmentgcosmics.cc:449  halignmentgcosmics.cc:450  halignmentgcosmics.cc:451  halignmentgcosmics.cc:452  halignmentgcosmics.cc:453  halignmentgcosmics.cc:454  halignmentgcosmics.cc:455  halignmentgcosmics.cc:456  halignmentgcosmics.cc:457  halignmentgcosmics.cc:458  halignmentgcosmics.cc:459  halignmentgcosmics.cc:460  halignmentgcosmics.cc:461  halignmentgcosmics.cc:462  halignmentgcosmics.cc:463  halignmentgcosmics.cc:464  halignmentgcosmics.cc:465  halignmentgcosmics.cc:466  halignmentgcosmics.cc:467  halignmentgcosmics.cc:468  halignmentgcosmics.cc:469  halignmentgcosmics.cc:470  halignmentgcosmics.cc:471  halignmentgcosmics.cc:472  halignmentgcosmics.cc:473  halignmentgcosmics.cc:474  halignmentgcosmics.cc:475  halignmentgcosmics.cc:476  halignmentgcosmics.cc:477  halignmentgcosmics.cc:478  halignmentgcosmics.cc:479  halignmentgcosmics.cc:480  halignmentgcosmics.cc:481  halignmentgcosmics.cc:482  halignmentgcosmics.cc:483  halignmentgcosmics.cc:484  halignmentgcosmics.cc:485  halignmentgcosmics.cc:486  halignmentgcosmics.cc:487  halignmentgcosmics.cc:488  halignmentgcosmics.cc:489  halignmentgcosmics.cc:490  halignmentgcosmics.cc:491  halignmentgcosmics.cc:492  halignmentgcosmics.cc:493  halignmentgcosmics.cc:494  halignmentgcosmics.cc:495  halignmentgcosmics.cc:496  halignmentgcosmics.cc:497  halignmentgcosmics.cc:498  halignmentgcosmics.cc:499  halignmentgcosmics.cc:500  halignmentgcosmics.cc:501  halignmentgcosmics.cc:502  halignmentgcosmics.cc:503  halignmentgcosmics.cc:504  halignmentgcosmics.cc:505  halignmentgcosmics.cc:506  halignmentgcosmics.cc:507  halignmentgcosmics.cc:508  halignmentgcosmics.cc:509  halignmentgcosmics.cc:510  halignmentgcosmics.cc:511  halignmentgcosmics.cc:512  halignmentgcosmics.cc:513  halignmentgcosmics.cc:514  halignmentgcosmics.cc:515  halignmentgcosmics.cc:516  halignmentgcosmics.cc:517  halignmentgcosmics.cc:518  halignmentgcosmics.cc:519  halignmentgcosmics.cc:520  halignmentgcosmics.cc:521  halignmentgcosmics.cc:522  halignmentgcosmics.cc:523  halignmentgcosmics.cc:524  halignmentgcosmics.cc:525  halignmentgcosmics.cc:526  halignmentgcosmics.cc:527  halignmentgcosmics.cc:528  halignmentgcosmics.cc:529  halignmentgcosmics.cc:530  halignmentgcosmics.cc:531  halignmentgcosmics.cc:532  halignmentgcosmics.cc:533  halignmentgcosmics.cc:534  halignmentgcosmics.cc:535  halignmentgcosmics.cc:536  halignmentgcosmics.cc:537  halignmentgcosmics.cc:538  halignmentgcosmics.cc:539  halignmentgcosmics.cc:540  halignmentgcosmics.cc:541  halignmentgcosmics.cc:542  halignmentgcosmics.cc:543  halignmentgcosmics.cc:544  halignmentgcosmics.cc:545  halignmentgcosmics.cc:546  halignmentgcosmics.cc:547  halignmentgcosmics.cc:548  halignmentgcosmics.cc:549  halignmentgcosmics.cc:550  halignmentgcosmics.cc:551  halignmentgcosmics.cc:552  halignmentgcosmics.cc:553  halignmentgcosmics.cc:554  halignmentgcosmics.cc:555  halignmentgcosmics.cc:556  halignmentgcosmics.cc:557  halignmentgcosmics.cc:558  halignmentgcosmics.cc:559  halignmentgcosmics.cc:560  halignmentgcosmics.cc:561  halignmentgcosmics.cc:562  halignmentgcosmics.cc:563  halignmentgcosmics.cc:564  halignmentgcosmics.cc:565  halignmentgcosmics.cc:566  halignmentgcosmics.cc:567  halignmentgcosmics.cc:568  halignmentgcosmics.cc:569  halignmentgcosmics.cc:570  halignmentgcosmics.cc:571  halignmentgcosmics.cc:572  halignmentgcosmics.cc:573  halignmentgcosmics.cc:574  halignmentgcosmics.cc:575  halignmentgcosmics.cc:576  halignmentgcosmics.cc:577  halignmentgcosmics.cc:578  halignmentgcosmics.cc:579  halignmentgcosmics.cc:580  halignmentgcosmics.cc:581  halignmentgcosmics.cc:582  halignmentgcosmics.cc:583  halignmentgcosmics.cc:584  halignmentgcosmics.cc:585  halignmentgcosmics.cc:586  halignmentgcosmics.cc:587  halignmentgcosmics.cc:588  halignmentgcosmics.cc:589  halignmentgcosmics.cc:590  halignmentgcosmics.cc:591  halignmentgcosmics.cc:592  halignmentgcosmics.cc:593  halignmentgcosmics.cc:594  halignmentgcosmics.cc:595  halignmentgcosmics.cc:596  halignmentgcosmics.cc:597  halignmentgcosmics.cc:598  halignmentgcosmics.cc:599  halignmentgcosmics.cc:600  halignmentgcosmics.cc:601  halignmentgcosmics.cc:602  halignmentgcosmics.cc:603  halignmentgcosmics.cc:604  halignmentgcosmics.cc:605  halignmentgcosmics.cc:606  halignmentgcosmics.cc:607  halignmentgcosmics.cc:608  halignmentgcosmics.cc:609  halignmentgcosmics.cc:610  halignmentgcosmics.cc:611  halignmentgcosmics.cc:612  halignmentgcosmics.cc:613  halignmentgcosmics.cc:614  halignmentgcosmics.cc:615  halignmentgcosmics.cc:616  halignmentgcosmics.cc:617  halignmentgcosmics.cc:618  halignmentgcosmics.cc:619  halignmentgcosmics.cc:620  halignmentgcosmics.cc:621  halignmentgcosmics.cc:622  halignmentgcosmics.cc:623  halignmentgcosmics.cc:624  halignmentgcosmics.cc:625  halignmentgcosmics.cc:626  halignmentgcosmics.cc:627  halignmentgcosmics.cc:628  halignmentgcosmics.cc:629  halignmentgcosmics.cc:630  halignmentgcosmics.cc:631  halignmentgcosmics.cc:632  halignmentgcosmics.cc:633  halignmentgcosmics.cc:634  halignmentgcosmics.cc:635  halignmentgcosmics.cc:636  halignmentgcosmics.cc:637  halignmentgcosmics.cc:638  halignmentgcosmics.cc:639  halignmentgcosmics.cc:640  halignmentgcosmics.cc:641  halignmentgcosmics.cc:642  halignmentgcosmics.cc:643  halignmentgcosmics.cc:644  halignmentgcosmics.cc:645  halignmentgcosmics.cc:646  halignmentgcosmics.cc:647  halignmentgcosmics.cc:648  halignmentgcosmics.cc:649  halignmentgcosmics.cc:650  halignmentgcosmics.cc:651  halignmentgcosmics.cc:652  halignmentgcosmics.cc:653  halignmentgcosmics.cc:654  halignmentgcosmics.cc:655  halignmentgcosmics.cc:656  halignmentgcosmics.cc:657  halignmentgcosmics.cc:658  halignmentgcosmics.cc:659  halignmentgcosmics.cc:660  halignmentgcosmics.cc:661  halignmentgcosmics.cc:662  halignmentgcosmics.cc:663  halignmentgcosmics.cc:664  halignmentgcosmics.cc:665  halignmentgcosmics.cc:666  halignmentgcosmics.cc:667  halignmentgcosmics.cc:668  halignmentgcosmics.cc:669  halignmentgcosmics.cc:670  halignmentgcosmics.cc:671  halignmentgcosmics.cc:672  halignmentgcosmics.cc:673  halignmentgcosmics.cc:674  halignmentgcosmics.cc:675  halignmentgcosmics.cc:676  halignmentgcosmics.cc:677  halignmentgcosmics.cc:678  halignmentgcosmics.cc:679  halignmentgcosmics.cc:680  halignmentgcosmics.cc:681  halignmentgcosmics.cc:682  halignmentgcosmics.cc:683  halignmentgcosmics.cc:684  halignmentgcosmics.cc:685  halignmentgcosmics.cc:686  halignmentgcosmics.cc:687  halignmentgcosmics.cc:688  halignmentgcosmics.cc:689  halignmentgcosmics.cc:690  halignmentgcosmics.cc:691  halignmentgcosmics.cc:692  halignmentgcosmics.cc:693  halignmentgcosmics.cc:694  halignmentgcosmics.cc:695  halignmentgcosmics.cc:696  halignmentgcosmics.cc:697  halignmentgcosmics.cc:698  halignmentgcosmics.cc:699  halignmentgcosmics.cc:700  halignmentgcosmics.cc:701  halignmentgcosmics.cc:702  halignmentgcosmics.cc:703  halignmentgcosmics.cc:704  halignmentgcosmics.cc:705  halignmentgcosmics.cc:706  halignmentgcosmics.cc:707  halignmentgcosmics.cc:708  halignmentgcosmics.cc:709  halignmentgcosmics.cc:710  halignmentgcosmics.cc:711  halignmentgcosmics.cc:712  halignmentgcosmics.cc:713  halignmentgcosmics.cc:714  halignmentgcosmics.cc:715  halignmentgcosmics.cc:716  halignmentgcosmics.cc:717  halignmentgcosmics.cc:718  halignmentgcosmics.cc:719  halignmentgcosmics.cc:720  halignmentgcosmics.cc:721  halignmentgcosmics.cc:722  halignmentgcosmics.cc:723  halignmentgcosmics.cc:724  halignmentgcosmics.cc:725  halignmentgcosmics.cc:726  halignmentgcosmics.cc:727  halignmentgcosmics.cc:728  halignmentgcosmics.cc:729  halignmentgcosmics.cc:730  halignmentgcosmics.cc:731  halignmentgcosmics.cc:732  halignmentgcosmics.cc:733  halignmentgcosmics.cc:734  halignmentgcosmics.cc:735  halignmentgcosmics.cc:736  halignmentgcosmics.cc:737  halignmentgcosmics.cc:738  halignmentgcosmics.cc:739  halignmentgcosmics.cc:740  halignmentgcosmics.cc:741  halignmentgcosmics.cc:742  halignmentgcosmics.cc:743  halignmentgcosmics.cc:744  halignmentgcosmics.cc:745  halignmentgcosmics.cc:746  halignmentgcosmics.cc:747  halignmentgcosmics.cc:748  halignmentgcosmics.cc:749  halignmentgcosmics.cc:750  halignmentgcosmics.cc:751  halignmentgcosmics.cc:752  halignmentgcosmics.cc:753  halignmentgcosmics.cc:754  halignmentgcosmics.cc:755  halignmentgcosmics.cc:756  halignmentgcosmics.cc:757  halignmentgcosmics.cc:758  halignmentgcosmics.cc:759  halignmentgcosmics.cc:760  halignmentgcosmics.cc:761  halignmentgcosmics.cc:762  halignmentgcosmics.cc:763  halignmentgcosmics.cc:764  halignmentgcosmics.cc:765  halignmentgcosmics.cc:766  halignmentgcosmics.cc:767  halignmentgcosmics.cc:768  halignmentgcosmics.cc:769  halignmentgcosmics.cc:770  halignmentgcosmics.cc:771  halignmentgcosmics.cc:772  halignmentgcosmics.cc:773  halignmentgcosmics.cc:774  halignmentgcosmics.cc:775  halignmentgcosmics.cc:776  halignmentgcosmics.cc:777  halignmentgcosmics.cc:778  halignmentgcosmics.cc:779  halignmentgcosmics.cc:780  halignmentgcosmics.cc:781