void mergeNoise(string input_file = "mergeNoise.txt", const int kNMerge=788, const char *output_file="mergeNoise.root") { const int kNChan = 32; // help variables char dummy[20], infostr[50]; // variables to be stored in tree int iChip = 0; int nChan = 0; int iNent[kNChan]; float hMean[kNChan]; float hRMS[kNChan]; float gMean[kNChan]; float gSigma[kNChan]; // all in ADC float avehRMS; float convFactor; // to electrons char desc[20], filename[200]; // root stuff TFile *f = new TFile(output_file,"RECREATE"); TTree* tree = new TTree("tree", "noise info"); tree->Branch("iChip",&iChip,"iChip/I"); tree->Branch("desc",&desc,"desc/C"); tree->Branch("filename",&filename,"filename/C"); tree->Branch("nChan",&nChan,"nChan/I"); sprintf(infostr,"iNent[%d]/I", kNChan); tree->Branch("iNent", iNent, infostr); sprintf(infostr,"hMean[%d]/F", kNChan); tree->Branch("hMean", hMean, infostr); sprintf(infostr,"hRMS[%d]/F", kNChan); tree->Branch("hRMS", hRMS, infostr); sprintf(infostr,"gMean[%d]/F", kNChan); tree->Branch("gMean", gMean, infostr); sprintf(infostr,"gSigma[%d]/F", kNChan); tree->Branch("gSigma", gSigma, infostr); tree->Branch("avehRMS",&avehRMS,"avehRMS/F"); tree->Branch("convFactor",&convFactor,"convFactor/F"); ifstream input; input.open(input_file); int imV = 20; // same for all files in standard calib/mass testing int nfiles = 0; for (int i = 0; i < kNMerge; i++) { input >> desc >> iChip >> filename; convFactor = 2.14 * 6241.5 / imV; // 6241.5 is approx # of electrons per fC, 2.14 mV / ADC ifstream in; in.open( filename); // skip header line in >> dummy >> dummy >> dummy >> dummy >> dummy >> dummy; avehRMS = 0; int iChan = 0; for (iChan=0; iChan> iChan; if (!in.good() && iChan> iNent[iChan] >> hMean[iChan] >> hRMS[iChan] >> gMean[iChan] >> gSigma[iChan]; avehRMS += hRMS[iChan]; nChan++; } if (nChan > 0) { avehRMS /= nChan; tree->Fill(); } in.close(); nfiles++; } input.close(); cout << " merged " << nfiles << " files " << endl; // Save root file also f->Write(); }