void TAnalysisOfAlignment::DoEtaCorrection(UInt_t correctionStep){
	cout<<"****************************************"<<endl;
	cout<<"Do Eta correction for all silicon planes "<<correctionStep<< endl;
	cout<<"****************************************"<<endl;
	vector<TH1F*> histoStripDistribution,histoStripDistributionFlattned;
	vector<TH1F *>vecHEta;
	//	stringstream fileName;
	//	fileName<<	"etaIntegral_Step"<<correctionStep<<"."<<settings->getRunNumber()<<".root";
	TFile* correctedEtaFile = new TFile(settings->getEtaDistributionPath(correctionStep).c_str(),"RECREATE");
	cout<<"create Histos..."<<endl;
	for(UInt_t det=0; det<TPlaneProperties::getNSiliconDetectors();det++){
		stringstream histoTitle;
		histoTitle<<"hPredictedStripPosition"<<"_step"<<correctionStep<<"_"<<TPlaneProperties::getStringForDetector(det);
		histoStripDistribution.push_back(new TH1F(histoTitle.str().c_str(),histoTitle.str().c_str(),128,-0.501,0.501));
		histoTitle<<"_flattend";
		histoStripDistributionFlattned.push_back(new TH1F(histoTitle.str().c_str(),histoTitle.str().c_str(),128,-0.501,0.501));
		histoTitle.str("");
		histoTitle.clear();
		histoTitle<<"hCorrectedEtaDistribution"<<"_step"<<correctionStep<<"_"<<TPlaneProperties::getStringForDetector(det);
		vecHEta.push_back(new TH1F(histoTitle.str().c_str(),histoTitle.str().c_str(),128,0,1));
	}

	cout<<"fill first strip hit histo"<<eventReader->GetEntries()<<endl;

	for( nEvent=0;nEvent<eventReader->GetEntries();nEvent++){
		TRawEventSaver::showStatusBar(nEvent,eventReader->GetEntries());
		eventReader->LoadEvent(nEvent);
		if(!eventReader->useForAnalysis()&&!eventReader->useForAlignment())
			continue;
		for(UInt_t subjectPlane =0; subjectPlane<TPlaneProperties::getNSiliconPlanes();subjectPlane++){
			//			if(!eventReader->useForAlignment()&&!eventReader->useForAnalysis())
			//				continue;
			vector<UInt_t>vecRefPlanes;
			for(UInt_t refPlane=0;refPlane<TPlaneProperties::getNSiliconPlanes();refPlane++)
				if(subjectPlane!=refPlane)vecRefPlanes.push_back(refPlane);
			TPositionPrediction* pred = eventReader->predictPosition(subjectPlane,vecRefPlanes,false);
			Float_t predictedStripPositionX = eventReader->getPositionInDetSystem(subjectPlane*2,pred->getPositionX(),pred->getPositionY());
			Float_t predictedStripPositionY = eventReader->getPositionInDetSystem(subjectPlane*2+1,pred->getPositionX(),pred->getPositionY());
			UInt_t stripMiddleX=(UInt_t) (predictedStripPositionX+0.5);
			Float_t deltaX = predictedStripPositionX-stripMiddleX;
			UInt_t stripMiddleY=(UInt_t) (predictedStripPositionY+0.5);
			Float_t deltaY = predictedStripPositionY-stripMiddleY;
			//			cout<<nEvent<<": "<<subjectPlane<<"Fill "<<deltaX<<" "<<deltaY<<endl;
			histoStripDistribution.at(subjectPlane*2)->Fill(deltaX);
			histoStripDistribution.at(subjectPlane*2+1)->Fill(deltaY);
			chi2Distribution();
		}
	}
	saveHistos();
	vector<UInt_t> vecMinEntries;
	cout<<"Minimal Entries in a bin of historgram:"<<endl;
	for(UInt_t det=0;det<TPlaneProperties::getNSiliconDetectors();det++){
		TH1F* histo=histoStripDistribution.at(det);
		Int_t minBin =      histo->GetMinimumBin();
		Int_t nMinEntries = histo->GetBinContent(minBin);
		cout<<endl<< det<< ": "<<minBin<<" "<<nMinEntries<<"\t";
		vecMinEntries.push_back(nMinEntries);
	}
	cout<<"\n\n"<<endl;

	vector<UInt_t>vecEventNo[9];
	cout<<"create flattened strip hit histo "<<eventReader->GetEntries()<<endl;
	for( nEvent=0;nEvent<eventReader->GetEntries();nEvent++){
		TRawEventSaver::showStatusBar(nEvent,eventReader->GetEntries());
		eventReader->LoadEvent(nEvent);
		if(!eventReader->useForAnalysis()&&!eventReader->useForAlignment())
			continue;

		for(UInt_t subjectPlane=0; subjectPlane<TPlaneProperties::getNSiliconPlanes();subjectPlane++){
			//			if(!eventReader->useForAlignment()&&!eventReader->useForAnalysis())
			//				continue;
			vector<UInt_t>refPlanes;
			for(UInt_t refPlane=0;refPlane<TPlaneProperties::getNSiliconPlanes();refPlane++)
				if(subjectPlane!=refPlane)refPlanes.push_back(refPlane);
			TPositionPrediction* pred = eventReader->predictPosition(subjectPlane,refPlanes,false);

			Float_t predictedStripPositionX = eventReader->getPositionInDetSystem(subjectPlane*2,pred->getPositionX(),pred->getPositionY());
			Float_t predictedStripPositionY = eventReader->getPositionInDetSystem(subjectPlane*2+1,pred->getPositionX(),pred->getPositionY());
			UInt_t stripMiddleX=(UInt_t) (predictedStripPositionX+0.5);
			Float_t deltaX = predictedStripPositionX-stripMiddleX;
			//			histoStripDistribution.at(subjectPlane*2)->Fill(deltaX);
			UInt_t stripMiddleY=(UInt_t) (predictedStripPositionY+0.5);
			Float_t deltaY = predictedStripPositionY-stripMiddleY;
			//			histoStripDistribution.at(subjectPlane*2)->Fill(deltaY);

			Int_t binX=histoStripDistributionFlattned.at(subjectPlane)->FindBin(deltaX);
			Int_t binY=histoStripDistributionFlattned.at(subjectPlane)->FindBin(deltaY);
			if(histoStripDistributionFlattned.at(subjectPlane*2)->GetBinContent(binX)<vecMinEntries.at(subjectPlane*2)){
				vecEventNo[subjectPlane*2].push_back(nEvent);
				histoStripDistributionFlattned.at(subjectPlane*2)->Fill(deltaX);
			}
			if(histoStripDistributionFlattned.at(subjectPlane*2+1)->GetBinContent(binY)<vecMinEntries.at(subjectPlane*2+1)){
				vecEventNo[subjectPlane*2+1].push_back(nEvent);
				histoStripDistributionFlattned.at(subjectPlane*2+1)->Fill(deltaY);
			}
		}
	}
	for(UInt_t det =0; det<TPlaneProperties::getNSiliconDetectors();det++){
		cout<<"save histogram: "<<det<<"  "<<histoStripDistributionFlattned.at(det)->GetTitle()<<"  "<<histoStripDistribution.at(det)->GetTitle()<<endl;
		histSaver->SaveHistogram(histoStripDistributionFlattned.at(det));
		correctedEtaFile->Add(histoStripDistributionFlattned.at(det));
		histSaver->SaveHistogram(histoStripDistribution.at(det));
		correctedEtaFile->Add(histoStripDistribution.at(det));
	}

	cout<<"\n\ncreate eta correction histo"<<endl;
	for(UInt_t det =0; det<TPlaneProperties::getNSiliconDetectors();det++){
		for(UInt_t i=0;i<vecEventNo[det].size();i++){
			nEvent= vecEventNo[det].at(i);
			eventReader->LoadEvent(nEvent);

			if(!eventReader->useForAlignment()&&!eventReader->useForAnalysis())
				continue;
			Float_t eta = eventReader->getCluster(det,0).getEta();
			vecHEta.at(det)->Fill(eta);

		}

		stringstream histName;
		histName<<"hEtaIntegral"<<"_step"<<correctionStep<<"_"<<TPlaneProperties::getStringForDetector(det);;
		//			UInt_t nBins = vecHEta.at(det)->GetNbinsX();
		TH1F *histo= TClustering::createEtaIntegral(vecHEta.at(det),histName.str());
		cout<<"save "<<vecHEta.at(det)->GetTitle()<<" "<<vecHEta.at(det)->GetEntries()<<endl;
		histSaver->SaveHistogram(vecHEta.at(det));
		correctedEtaFile->Add(vecHEta.at(det));
		cout<<"save "<<histo->GetTitle()<<" "<<histo->GetEntries()<<endl;
		histSaver->SaveHistogram(histo);
		correctedEtaFile->Add((TH1F*)histo->Clone());
	}
	correctedEtaFile->Write();
	cout<<"Closing "<<correctedEtaFile->GetName()<<endl;
	for(UInt_t i=0;i<histoStripDistribution.size();i++)
		cout<<histoStripDistribution.at(i)<<" "<<flush;
	cout<<endl;
	for(UInt_t i =0;i<histoStripDistribution.size();i++)
		cout<<histoStripDistributionFlattned.at(i)<<" "<<flush;
	cout<<endl;
	for(UInt_t i =0;i<histoStripDistribution.size();i++)
		cout<<vecHEta.at(i)<<" "<<flush;

}