From fad81adb39c5238f057d99d997d67302be50f7d6 Mon Sep 17 00:00:00 2001 From: hinger_v Date: Tue, 10 May 2022 17:50:22 +0200 Subject: [PATCH] SC analysis compiles but fails at initialization of adc2d vectors --- CuFluo_analysis_sc.cpp | 110 +++++++++++++++++++++++++++-------------- 1 file changed, 73 insertions(+), 37 deletions(-) diff --git a/CuFluo_analysis_sc.cpp b/CuFluo_analysis_sc.cpp index 3e21b33..cf8aa4b 100644 --- a/CuFluo_analysis_sc.cpp +++ b/CuFluo_analysis_sc.cpp @@ -74,8 +74,8 @@ int main(int argc, char* argv[]) { //char savename[128]; char histoname[256]; // VH 210902 char savename[256]; // VH 210902 - int filen = 352; - int pedefilen = 5; + int filen = 16; + int pedefilen = 1; // create necessary directories with permissions drwxrwxr-x // data/Mxxx @@ -119,14 +119,15 @@ int main(int argc, char* argv[]) { jungfrauFile *thisfile = new jungfrauFile(); - vector pedestalObject_SC(NSC); //should call default constructor 16 times + vector pedestalObject_SC; //( NSC, new jungfrauPedestal() ); //should call default constructor 16 times + pedestalObject_SC.reserve(NSC); vector pedestalsG0; pedestalsG0.reserve(NSC); vector pedeRMSG0; pedeRMSG0.reserve(NSC); for (int sci = 0; sci < NSC; ++sci) { - //pedestalObject_SC[sci] = new jungfrauPedestal(); - pedestalObject_SC[sci]->pedestalSetNFrames(100); + pedestalObject_SC.push_back( new jungfrauPedestal() ); + pedestalObject_SC.at(sci)->pedestalSetNFrames(100); Char_t *pedehistoname = new Char_t[50]; snprintf( pedehistoname, 50, "pedestalsG0_sc%d", sci ); @@ -134,8 +135,8 @@ int main(int argc, char* argv[]) { snprintf( pedehistoname, 50, "pedeRMSG0_sc%d", sci ); pedeRMSG0.push_back( new TH2F( pedehistoname, "", NC, -0.5, NC-0.5, NR, -0.5, NR-0.5 ) ); } - static vector< vector > pedestals16_G0_start( NSC, vector(NCH) ); //I suppose, this is to track pedestal shifting over the course of data taking - static vector< vector > pedeRMS16_G0( NSC, vector(NCH) ); + vector< vector > pedestals16_G0_start( NSC, vector(NCH) ); //I suppose, this is to track pedestal shifting over the course of data taking + vector< vector > pedeRMS16_G0( NSC, vector(NCH) ); for (int pedefilei = 0; pedefilei < pedefilen; ++pedefilei) { @@ -155,7 +156,7 @@ int main(int argc, char* argv[]) { // calculate pixel mask pixelMaskObject->maskIfGainNot( 0, thisfile->getFrameDataHandle(), pixel_mask ); // caluclate pedestals - pedestalObject_SC[ thisfile->currentSCnumber() ]->addFrameToPedestalCalculation( thisfile->getFrameDataHandle() ); + pedestalObject_SC.at( thisfile->currentSCnumber() )->addFrameToPedestalCalculation( thisfile->getFrameDataHandle() ); } thisfile->close(); @@ -165,13 +166,13 @@ int main(int argc, char* argv[]) { for (int sci = 0; sci < NSC; ++sci) { for (int i = 0; i < NCH; ++i) { if (pixel_mask[i] == true) { - pedestalsG0[sci]->Fill( i%NC, i/NC, pedestalObject_SC[sci]->pedestalOfChannel(i) ); - pedeRMSG0[sci]->Fill( i%NC, i/NC, pedestalObject_SC[sci]->rmsOfChannel(i) ); + pedestalsG0.at(sci)->Fill( i%NC, i/NC, pedestalObject_SC[sci]->pedestalOfChannel(i) ); + pedeRMSG0.at(sci)->Fill( i%NC, i/NC, pedestalObject_SC[sci]->rmsOfChannel(i) ); } } - pedestalObject_SC[sci]->pedestalData((uint16_t*)(&pedestals16_G0_start[sci])); //this loads the pedestal data into the array pedestals16_G0_start - pedestalObject_SC[sci]->pedestalRMSData(pedeRMS16_G0[sci].data()); //same here - pedestalObject_SC[sci]->pedestalResetUpdates(); + pedestalObject_SC.at(sci)->pedestalData((uint16_t*)(pedestals16_G0_start.at(sci).data())); //this loads the pedestal data into the array pedestals16_G0_start + pedestalObject_SC.at(sci)->pedestalRMSData(pedeRMS16_G0[sci].data()); //same here + pedestalObject_SC.at(sci)->pedestalResetUpdates(); //pedestalObject[sci]->pedestalClear(); //I don't need to clear if I only calculate pedestal once. } @@ -203,7 +204,15 @@ int main(int argc, char* argv[]) { int adc2d_nbin= 1200; if (isJF11) adc2d_nbin= 1600; - vector< vector > adc2d; //(8, vector (16) ); //declare + vector adc2d_1; //(8, vector (16) ); //declare + vector adc2d_2; + vector adc2d_3; + vector adc2d_4; + vector adc2d_5; + vector adc2d_6; + vector adc2d_7; + vector adc2d_8; + //adc2d.reserve(8); /* TH2I *adc2d_2[16]; = new TH2I("adc2d_2","",adc2d_nbin,-200-0.5,adc2d_nbin-200-0.5,65536,(65536*1-0.5),(65536*2-0.5)); TH2I *adc2d_3[16]; = new TH2I("adc2d_3","",adc2d_nbin,-200-0.5,adc2d_nbin-200-0.5,65536,(65536*2-0.5),(65536*3-0.5)); @@ -214,17 +223,35 @@ int main(int argc, char* argv[]) { TH2I *adc2d_8[16]; = new TH2I("adc2d_8","",adc2d_nbin,-200-0.5,adc2d_nbin-200-0.5,65536,(65536*7-0.5),(65536*8-0.5)); */ - //initilaize - for ( int adci = 0; adci < 8; ++adci ) { - vector v; - v.reserve(NSC); + cout << "Initialize vector of vectors..." << endl; + + //initialize + //for ( int adci = 0; adci < 8; ++adci ) { + //vector v; + //v.reserve(NSC); for ( int sci = 0; sci < NSC; ++sci ) { Char_t *_histoname = new Char_t[50]; - snprintf( _histoname, 50, "adc2d_%d_sc%d", (adci+1), sci ); - v.push_back( new TH2I( _histoname, "", adc2d_nbin, -200-0.5, adc2d_nbin-200-0.5, 65536, ( 65536*adci-0.5 ), ( 65536*( adci+1 )-0.5 ) ) ); + snprintf( _histoname, 50, "adc2d_1_sc%d", sci ); + adc2d_1.push_back( new TH2I( _histoname, "", adc2d_nbin, -200-0.5, adc2d_nbin-200-0.5, 65536, ( 65536*0-0.5 ), ( 65536*( 0+1 )-0.5 ) ) ); + snprintf( _histoname, 50, "adc2d_2_sc%d", sci ); + adc2d_2.push_back( new TH2I( _histoname, "", adc2d_nbin, -200-0.5, adc2d_nbin-200-0.5, 65536, ( 65536*1-0.5 ), ( 65536*( 1+1 )-0.5 ) ) ); + snprintf( _histoname, 50, "adc2d_3_sc%d", sci ); + adc2d_3.push_back( new TH2I( _histoname, "", adc2d_nbin, -200-0.5, adc2d_nbin-200-0.5, 65536, ( 65536*2-0.5 ), ( 65536*( 2+1 )-0.5 ) ) ); + snprintf( _histoname, 50, "adc2d_4_sc%d", sci ); + adc2d_4.push_back( new TH2I( _histoname, "", adc2d_nbin, -200-0.5, adc2d_nbin-200-0.5, 65536, ( 65536*3-0.5 ), ( 65536*( 3+1 )-0.5 ) ) ); + snprintf( _histoname, 50, "adc2d_5_sc%d", sci ); + adc2d_5.push_back( new TH2I( _histoname, "", adc2d_nbin, -200-0.5, adc2d_nbin-200-0.5, 65536, ( 65536*4-0.5 ), ( 65536*( 4+1 )-0.5 ) ) ); + snprintf( _histoname, 50, "adc2d_6_sc%d", sci ); + adc2d_6.push_back( new TH2I( _histoname, "", adc2d_nbin, -200-0.5, adc2d_nbin-200-0.5, 65536, ( 65536*5-0.5 ), ( 65536*( 5+1 )-0.5 ) ) ); + snprintf( _histoname, 50, "adc2d_7_sc%d", sci ); + adc2d_7.push_back( new TH2I( _histoname, "", adc2d_nbin, -200-0.5, adc2d_nbin-200-0.5, 65536, ( 65536*6-0.5 ), ( 65536*( 6+1 )-0.5 ) ) ); + snprintf( _histoname, 50, "adc2d_8_sc%d", sci ); + adc2d_8.push_back( new TH2I( _histoname, "", adc2d_nbin, -200-0.5, adc2d_nbin-200-0.5, 65536, ( 65536*7-0.5 ), ( 65536*( 7+1 )-0.5 ) ) ); } - adc2d.push_back(v); - } + //adc2d.push_back(v); + //} + + cout << "Done." << endl; //declare vector adcpc_spec; @@ -233,6 +260,8 @@ int main(int argc, char* argv[]) { pede_updates.reserve(NSC); vector pede_diff; pede_diff.reserve(NSC); + + cout << "Initialize vectors of histograms..." << endl; //initialize for ( int sci = 0; sci < NSC; ++sci ) { @@ -245,7 +274,7 @@ int main(int argc, char* argv[]) { pede_diff.push_back( new TH2F( _histoname, "", NC, -0.5, NC-0.5, NR, -0.5, NR-0.5 ) ); } - //HERE!!!! + cout << "Done." << endl; for (int filei = 0; filei < filen; filei++) { @@ -258,7 +287,7 @@ int main(int argc, char* argv[]) { uint16_t* imagedptr = thisfile->getFrameDataHandle(); uint64_t scnumber = thisfile->currentSCnumber(); - pedestalObject_SC[scnumber]->addG0FrameToPedestalCalculationWThreshold( imagedptr, pedestalObject_SC[scnumber], pedeRMS16_G0[scnumber].data() ); + pedestalObject_SC.at(scnumber)->addG0FrameToPedestalCalculationWThreshold( imagedptr, pedestalObject_SC.at(scnumber), pedeRMS16_G0.at(scnumber).data() ); for (int i = 0; i < NCH; i++) { @@ -266,25 +295,25 @@ int main(int argc, char* argv[]) { if (gain == 0) { - int adcpc = (imagedptr[i]&0x3fff) - pedestalObject_SC[scnumber]->pedestalOfChannel(i); - adcpc_spec[scnumber]->Fill(adcpc); + int adcpc = (imagedptr[i]&0x3fff) - pedestalObject_SC.at(scnumber)->pedestalOfChannel(i); + adcpc_spec.at(scnumber)->Fill(adcpc); if (i < (65536*1)) { - adc2d[0][scnumber]->Fill(adcpc,i); + adc2d_1[scnumber]->Fill(adcpc,i); } else if (i < (65536*2)) { - adc2d[1][scnumber]->Fill(adcpc,i); + adc2d_2[scnumber]->Fill(adcpc,i); } else if (i < (65536*3)) { - adc2d[2][scnumber]->Fill(adcpc,i); + adc2d_3[scnumber]->Fill(adcpc,i); } else if (i < (65536*4)) { - adc2d[3][scnumber]->Fill(adcpc,i); + adc2d_4[scnumber]->Fill(adcpc,i); } else if (i < (65536*5)) { - adc2d[4][scnumber]->Fill(adcpc,i); + adc2d_5[scnumber]->Fill(adcpc,i); } else if (i < (65536*6)) { - adc2d[5][scnumber]->Fill(adcpc,i); + adc2d_6[scnumber]->Fill(adcpc,i); } else if (i < (65536*7)) { - adc2d[6][scnumber]->Fill(adcpc,i); + adc2d_7[scnumber]->Fill(adcpc,i); } else if (i < (65536*8)) { - adc2d[7][scnumber]->Fill(adcpc,i); + adc2d_8[scnumber]->Fill(adcpc,i); } } } @@ -338,11 +367,18 @@ int main(int argc, char* argv[]) { //sprintf(savename,"/mnt/sls_det_storage/jungfrau_data1/jungfrau_ana_sophie/M%s_CalibAna/CuFluo_%s_file0to%d.root", module_str.c_str(), gain_str.c_str(), filen-1); sprintf(savename,"%s/CuFluo_%s_file0to%d.root", anadata_loc.c_str(), gain_str.c_str(), filen-1); //uncomment for VH 210906 TFile* saved_file = new TFile((const char *)(savename),"RECREATE"); - for ( int adci = 0; adci < 8; ++adci ) { + //for ( int adci = 0; adci < 8; ++adci ) { for ( int sci = 0; sci < 16; ++sci ) { - adc2d[adci][sci]->Write(); + adc2d_1[sci]->Write(); + adc2d_2[sci]->Write(); + adc2d_3[sci]->Write(); + adc2d_4[sci]->Write(); + adc2d_5[sci]->Write(); + adc2d_6[sci]->Write(); + adc2d_7[sci]->Write(); + adc2d_8[sci]->Write(); } - } + //} saved_file->Close(); } // end if i creatHistoFile