#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