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; }