예제 #1
0
void H_ET_Subtraction() {
	//Connect to all existing histograms
	RootFileFT = new TFile(Str_RootFilesHResultsFT);
	double SumFT = ((TH1D*)(gROOT->FindObject("PhotonFluxLTCorrected")))->Integral();
	RootFileET = new TFile(Str_RootFilesHResultsET);
	double SumET = ((TH1D*)(gROOT->FindObject("PhotonFluxLTCorrected")))->Integral();
	RootFile2 = new TFile(Str_RootFilesResultsSignal, "RECREATE");

	printf("Total Photonflux: %f\t%f\n", SumFT, SumET);
	ScaleFactor = SumFT / SumET;
	printf("Scale by: %f\n", ScaleFactor);


	Scale1D("MesonInvariantMass");
	Scale2D("MissingMassCombinedSignal", ScaleFactor);
	Scale1D("CountNumberOfHistos");
	Scale1D("hDroppedEvents");
	Scale1D("TaggerScalerAccum");
	Scale2D("hTaggerTime");
	Scale1D("LiveTimeAccum");
	Scale2D("MissingMassCombinedSignalLTCorrected", ScaleFactor);
	Scale1D("TaggerScalerAccumLTCorrected");
	Scale1D("PhotonFluxLTCorrectedWOTaggEff");
	Scale1D("PhotonFluxLTCorrected");
	Scale2D("TaggEffAbsAll");

	RootFileFT->Close();
	RootFileET->Close();

	RootFile2->Write();
	RootFile2->Close();

	printf("Finished.\n");
}
예제 #2
0
void Scale2D(char *fTempStr) {
	Scale2D(fTempStr, 0);
}
예제 #3
0
int  CombineButPMScaled() {
	//Connect to all existing histograms
	RootFileP = new TFile(Str_RootFilesButResultsP);
	TH1D *hP = (TH1D*)gROOT->FindObject("PhotonFluxLTCorrected");
	double SumP = hP->Integral();
	RootFileM = new TFile(Str_RootFilesButResultsM);
	TH1D *hM = (TH1D*)gROOT->FindObject("PhotonFluxLTCorrected");
	double SumM = hM->Integral();
	ScaleFactor = SumM/SumP;

	printf("Scale by: %f\n", ScaleFactor);

//	gROOT->cd();
	RootFile2 = new TFile(Str_RootFilesResultsSignal, "RECREATE");

	TH1D *hDiff = hM->Clone("PhotonFluxRatioT");
	hDiff->Divide(hP);

	if (DebugOptionScaleTargetMinusBeamtime) {
		printf("WARNING: Debug Option active: Scale Target Minus Beamtime.\n");
		ScaleFactor = ScaleFactor * ScaleTargetMinusBeamtime;
		hDiff->Scale(ScaleTargetMinusBeamtime);
		printf("Now: Scale by: %f\n", ScaleFactor);
	}

	if (DebugOptionAllChannelsRatioEqual) {
		printf("WARNING: Debug Option active: Flux Ratio is set to 1 for channels.\n");
		for (int i=1;i<=(hDiff->GetNbinsX());i++) {
			hDiff->SetBinContent(i,ScaleFactor);
			hDiff->SetBinError(i,0);
		}
	}
	//hDiff->Draw();


	Scale2D("MissingMassCombinedSignal", hDiff);
	CopyElement("CountNumberOfHistos");
	Scale1DSimple("hDroppedEvents", ScaleFactor);
	Scale1D("TaggerScalerAccum", hDiff);
	Scale2D("hTaggerTime", hDiff);
	Scale1DSimple("LiveTimeAccum", ScaleFactor);
	Scale2D("MissingMassCombinedSignalLTCorrected", hDiff);
	Scale2D("MissingMassCombinedSignalLTCorrectedFPrimeP", hDiff);
	Scale2D("MissingMassCombinedSignalLTCorrectedFPrimeM", hDiff);
	Scale2D("MissingMassCombinedSignalLTCorrectedTPrimeP", hDiff);
	Scale2D("MissingMassCombinedSignalLTCorrectedTPrimeM", hDiff);
	Scale1D("TaggerScalerAccumLTCorrectedInclDroppedEvents", hDiff);
	Scale1D("TaggerScalerAccumLTCorrected", hDiff);
	Scale1D("PhotonFluxLTCorrectedWOTaggEff", hDiff);
	Scale1D("PhotonFluxLTCorrected", hDiff);
	Scale2D("BeamPol", hDiff);
	Scale2D("TargetPolFPrime", hDiff);
	Scale2D("TargetPolTPrime", hDiff);
	Scale2D("TaggEffAbsTPrime", hDiff);
	Scale2D("TaggEffAbsFPrime", hDiff);
	Scale2D("TaggEffAbsAll", hDiff);

	//gROOT->cd();
	TH1D *hDiffAfter = hP->Clone("PhotonFluxRatioTAfter");
	hDiffAfter->Divide(hM);
	hDiffAfter->SetLineColor(kRed);
	//hDiffAfter->Draw("same");


	RootFileP->Close();
	RootFileM->Close();

	RootFile2->Write();
	RootFile2->Close();

	printf("Finished.\n");
}
예제 #4
0
void RescaleH() {
	Char_t Name[256];
	Char_t *VarName;

	TH1D *h1PhotonFluxBut, *h1PhotonFluxH;
	TH1D *h1PhotonFluxCorrection;

	//Connect to all existing histograms
	RootFileButHistograms = new TFile(Str_RootFilesButResults);
	h1PhotonFluxBut = (TH1D*)gROOT->FindObject("PhotonFluxLTCorrected");

	RootFileHHistograms = new TFile(Str_RootFilesHResults);
	h2TempH = (TH2D*)gROOT->FindObject("MissingMassCombinedSignalLTCorrected");
	h1PhotonFluxH = (TH1D*)gROOT->FindObject("PhotonFluxLTCorrected");

	//Calculate
	RootFileHHistograms_Rescaled = new TFile(Str_RootFilesHResults_Rescaled,"RECREATE");

	//Ratio of Photon Flux betwen Combined But and H
	TH1D *hFluxRatio = (TH1D*)h1PhotonFluxBut->Clone("PhotonFluxRatio");
	hFluxRatio->Divide(h1PhotonFluxH);
	for (int i=1;i<=(hFluxRatio->GetNbinsX());i++) {
		if (hFluxRatio->GetBinContent(i) > 1E3) {
			hFluxRatio->SetBinContent(i,0);
			hFluxRatio->SetBinError(i,0);
		}
	}
	TF1 *AverageRatioFit = new TF1("AvgRatioFit","[0]",0,351);
	TFitResultPtr MyFitResult = hFluxRatio->Fit("AvgRatioFit", "0qFUW"); //0 = do not draw, q=quiet, R = respect range, f = special min finder, W=Set all weights to 1 for non empty bins; ignore error bars
	Int_t MyFitStatus = MyFitResult; //0 = alles okay, 4 fehler beim Fit, -1 = no data, 
					     //see: http://root.cern.ch/root/html/TH1.html#TH1:Fit%1
	double AverageRatio = 0;
	if (MyFitStatus == 0) {
		AverageRatio = AverageRatioFit->GetParameter(0);
		printf("Flux Ratio Fit result: %f +- %f\n", AverageRatioFit->GetParameter(0), AverageRatioFit->GetParError(0));
	} else {
		printf("ERROR: Fit did not converge.\n");
	}
	double ScaleFactor = 1/AverageRatio;
	hFluxRatio->Scale(ScaleFactor);

	if (DebugOptionAllChannelsRatioEqual) {
		printf("WARNING: Debug Option active: Flux Ratio is set to 1 for channels.\n");
		for (int i=1;i<=(hFluxRatio->GetNbinsX());i++) {
			hFluxRatio->SetBinContent(i,1);
			hFluxRatio->SetBinError(i,0);
		}
	}

	//Now Rescale the H-Results individually
	Scale2D("MissingMassCombinedSignal", hFluxRatio);
	CopyElement("CountNumberOfHistos");
	CopyElement("hDroppedEvents");
	Scale1D("TaggerScalerAccum", hFluxRatio);
	Scale2D("hTaggerTime", hFluxRatio);
	CopyElement("LiveTimeAccum");
	Scale2D("MissingMassCombinedSignalLTCorrected", hFluxRatio);
	Scale1D("TaggerScalerAccumLTCorrected", hFluxRatio);
	Scale1D("PhotonFluxLTCorrectedWOTaggEff", hFluxRatio);
	Scale1D("PhotonFluxLTCorrected", hFluxRatio);
	CopyElement("TaggEffAbsAll");

	RootFileHHistograms_Rescaled->Write();
	RootFileButHistograms->Close();
	RootFileHHistograms->Close();
	RootFileHHistograms_Rescaled->Close();

	printf("Finished.\n");
}
예제 #5
0
void Painter::Scale(double scale)
{
	Transform(Scale2D(scale));
}
예제 #6
0
void Painter::Scale(double scalex, double scaley)
{
	Transform(Scale2D(scalex, scaley));
}