lcsim-contrib/src/main/java/org/lcsim/contrib/HansWenzel/DualCorrection
diff -u -r1.4 -r1.5
--- DualCorrection.java 10 Dec 2009 17:21:25 -0000 1.4
+++ DualCorrection.java 14 Dec 2009 21:53:15 -0000 1.5
@@ -3,6 +3,9 @@
/*
* @author wenzel
* @date
+ * This Driver is used to obtain the dualreadout correction of a dual readout calorimeter.
+ * The Determination of the energy scale of the calorimeter response is done in a previous step
+ * using electrons (see: ElectronCalibrationDriver)
*/
import hep.aida.ICloud1D;
import hep.aida.ICloud2D;
@@ -42,7 +45,7 @@
BufferedWriter out;
IFunctionFactory functionFactory;
IFitFactory fitFactory;
- IDataPointSetFactory dpsf;
+ IDataPointSetFactory dpsFactory;
boolean first;
boolean firstEvent;
double E_in;
@@ -53,8 +56,6 @@
ICloud1D Edep;
ICloud1D Eceren;
ICloud1D Edep_cor;
- ICloud1D Edep_dcor;
- ICloud1D Edep_dcor_new;
ICloud1D Eceren_cor;
ICloud1D dlength;
ICloud2D c_efrac_ratio;
@@ -76,27 +77,21 @@
IFitResult jminuitResult;
IFunction E_cor;
IFunction C_cor;
- IFunction D_cor;
- IFunction D_cor_new;
double xval[] = {10.};
double binwidth = 0.04;
int maxbin = (int) Math.rint(1.0 / binwidth);
@Override
protected void startOfData() {
- System.out.println("Start of Data:");
+ System.out.println("DualCorrection:Start of Data");
fitFactory = aida.analysisFactory().createFitFactory();
dps_cerene = new IDataPointSet[Fitters.length];
point_cerene = new int[Fitters.length];
- dpsf = aida.analysisFactory().createDataPointSetFactory(aida.tree());
+ dpsFactory = aida.analysisFactory().createDataPointSetFactory(aida.tree());
functionFactory = aida.analysisFactory().createFunctionFactory(aida.tree());
gauss = functionFactory.createFunctionByName("gauss", "G");
- E_cor = Electron_digisCorrection_ccal02_d15();
- //Electron_digis_QGSP_BERT_Correction();
- C_cor = Cerenkov_digisCorrection_ccal02_d15();
- //Cerenkov_digis_QGSP_BERT_Correction();
- D_cor = Dual_Correction();
- D_cor_new = Dual_Correction_new();
+ E_cor = Electron_digisCorrection();
+ C_cor = Cerenkov_digisCorrection();
aida.profile1D("ratio", 20, 0.4, 1.);
dlength = aida.histogramFactory().createCloud1D("dlength", "decay length combined ", 500000, "autoConvert = false");
prof_combined = aida.histogramFactory().createProfile1D("ratio", "ratio combined", 20, 0.4, 1.);
@@ -139,7 +134,6 @@
{
return;
}
-// Hep3Vector decaylength = end_point.magnitude();
if (particle.getProductionTime() == 0.0) {
Particlename = particle.getType().getName();
@@ -170,8 +164,6 @@
Edep = aida.histogramFactory().createCloud1D("Edep", "Energy Cloud", 100000, "autoConvert = false");
Eceren = aida.histogramFactory().createCloud1D("Eceren", "Cerenkov Cloud", 100000, "autoConvert = false");
Edep_cor = aida.histogramFactory().createCloud1D("Edep_cor", "corrected Energy Cloud", 100000, "autoConvert = false");
- Edep_dcor = aida.histogramFactory().createCloud1D("Edep_dcor", "dual readout corrected Energy Cloud", 100000, "autoConvert = false");
- Edep_dcor_new = aida.histogramFactory().createCloud1D("Edep_dcor_new", "new dual readout corrected Energy Cloud", 100000, "autoConvert = false");
Eceren_cor = aida.histogramFactory().createCloud1D("Eceren_cor", "corrected Cerenkov Cloud", 100000, "autoConvert = false");
c_Ceren_vs_Edep = aida.histogramFactory().createCloud2D("c_Ceren_vs_Edep", "ceren vs Edep", 100000, "autoConvert = false");
slice = new ICloud1D[maxbin + 2];
@@ -183,12 +175,9 @@
System.out.println("DirName: " + DirName);
}
-
-
List<List<SimCalorimeterHit>> simCalorimeterHitCollections = event.get(SimCalorimeterHit.class);
double sumEEdep = 0.0;
double sumECeren = 0.0;
-
aida.profile1D("ratio", 20, 0.4, 1.);
for (List<SimCalorimeterHit> simCalorimeterHits : simCalorimeterHitCollections) {
String CollectionName = event.getMetaData(simCalorimeterHits).getName();
@@ -220,10 +209,6 @@
aida.cloud2D("c_efrac_ratio").fill(ratio, fraction);
aida.profile1D("ratio").fill(ratio, fraction);
xval[0] = ratio;
- double cfac = D_cor.value(xval);
- Edep_dcor.fill(sumEEdep_cor / cfac);
- cfac = D_cor_new.value(xval);
- Edep_dcor_new.fill(sumEEdep_cor / cfac);
prof_combined.fill(ratio, fraction);
c_efrac_ratio.fill(ratio, fraction);
int bin = (int) Math.rint(ratio / binwidth);
@@ -275,10 +260,7 @@
int profbins = profile.axis().bins();
double profxmin = profile.axis().lowerEdge();
double profxmax = profile.axis().upperEdge();
- /* for (int i = 0; i < profbins; i++) {
- System.out.println(profile.binEntries(i));
- }
- */
+
jminuitResult = jminuit.fit(profile, poly);
System.out.println("jminuit Chi2=" + jminuitResult.quality());
result = jminuitResult.fittedParameters();
@@ -307,14 +289,13 @@
for (int i = 0; i < Fitters.length; i++) {
String dpsname = "dps_ratio_" + Fitters[i];
point_cerene[i] = 0;
- dps_cerene[i] = dpsf.create(dpsname, "ratio", 2);
+ dps_cerene[i] = dpsFactory.create(dpsname, "ratio", 2);
}
for (int i = 0; i < slices.length - 3; i++) {
if (slices[i].isConverted()) {
System.out.println("convert and fit already converted");
conv_slices[i] = slices[i].histogram();
} else {
- System.out.println("Converting EDep");
double meanc = slices[i].mean();
double rmsc = slices[i].rms();
nsigmas = 3.;
@@ -432,8 +413,8 @@
IFunction Electron_digisCorrection_ccal02_d15() {
IFunction ECor = functionFactory.createFunctionByName("ECor", "p1");
- ECor.setParameter("p0", 1.1773e-3);
- ECor.setParameter("p1", 1.0033);
+ ECor.setParameter("p0", 0.0011773036183174157);
+ ECor.setParameter("p1", 1.0033318414417314);
return ECor;
}
lcsim-contrib/src/main/java/org/lcsim/contrib/HansWenzel/DualCorrection
diff -u -r1.2 -r1.3
--- Resolution.java 10 Dec 2009 17:21:25 -0000 1.2
+++ Resolution.java 14 Dec 2009 21:53:15 -0000 1.3
@@ -87,7 +87,7 @@
C_cor = Cerenkov_digisCorrection();
//Cerenkov_digis_QGSP_BERT_Correction();
D_cor = Dual_Correction();
- D_cor_digis = Dual_Correction_digis();
+ D_cor_digis = Dual_Correction_digis_ccal02_d15();
//Dual_Correction_digis_QGSP_BERT();
Ein_prev = 0;
firstEvent = true;
@@ -181,21 +181,20 @@
Eceren_cor.fill(sumECeren_cor);
double ratio = sumECeren_cor / sumEEdep_cor;
double fraction = sumEEdep_cor / E_in;
+ if (ratio>1.) {
+ System.out.println(ratio);
+ }
xval[0] = ratio;
// double cfac = D_cor.value(xval);
// Edep_dcor.fill(sumEEdep_cor / cfac);
double cfac = D_cor_digis.value(xval);
Edep_dcor_new.fill(sumEEdep_cor / cfac);
-
-
-
}
@Override
protected void endOfData() {
System.out.println("End of Data:");
convertandfit();
-
try {
aida.saveAs(AIDAFile);
} catch (IOException ex) {
@@ -206,8 +205,7 @@
@Override
protected void resume() {
System.out.println("resume:");
- firstEvent =
- true;
+ firstEvent =true;
aida.cloud1D("c_Edep_energy").reset();
}
@@ -222,16 +220,13 @@
double meanc = Edep_dcor_new.mean();
double rmsc = Edep_dcor_new.rms();
- nsigmas =
- 5.;
- nbins =
- 100;
+ nsigmas = 5.;
+ nbins = 100;
double minx = meanc - nsigmas * rmsc;
double maxx = meanc + nsigmas * rmsc;
Edep_dcor_new.setConversionParameters(nbins, minx, maxx);
Edep_dcor_new.convertToHistogram();
- Edep_dcor_new_conv =
- Edep_dcor_new.histogram();
+ Edep_dcor_new_conv = Edep_dcor_new.histogram();
}
gauss.setParameter("amplitude", Edep_dcor_new_conv.maxBinHeight());
@@ -244,21 +239,16 @@
Logger.getLogger(Resolution.class.getName()).log(Level.SEVERE, null, ex);
}
- for (int i = 0; i <
- Fitters.length; i++) {
+ for (int i = 0; i <Fitters.length; i++) {
System.out.println("Fitter: " + Fitters[i]);
gauss.setParameter("amplitude", Edep_dcor_new_conv.maxBinHeight());
gauss.setParameter("mean", Edep_dcor_new_conv.mean());
gauss.setParameter("sigma", Edep_dcor_new_conv.rms());
- jminuit =
- fitFactory.createFitter(Fitters[i], "jminuit");
- jminuitResult =
- jminuit.fit(Edep_dcor_new_conv, gauss);
+ jminuit = fitFactory.createFitter(Fitters[i], "jminuit");
+ jminuitResult = jminuit.fit(Edep_dcor_new_conv, gauss);
System.out.println("jminuit " + Fitters[i] + ": " + jminuitResult.quality());
- result =
- jminuitResult.fittedParameters();
- errors =
- jminuitResult.errors();
+ result = jminuitResult.fittedParameters();
+ errors = jminuitResult.errors();
String functionname = "Corrected fitted gauss " + Fitters[i];
System.out.println(functionname);
functionFactory.cloneFunction(functionname, jminuitResult.fittedFunction());