void frameViewer(char* arg) { //Take the arguments and save them into respective strings std::string infileName; std::string inF; std::string inPrefix; std::string runs, layers; std::string runCount; std::istringstream stm(arg); inPrefix = "/home/p180f/Do_Jo_Ol_Ma/Analysis/MainProcedure/testMain/rawRoot/"; while (true) { if (std::getline(stm, layers, ' ')) { //load the input root files TChain *chain = new TChain("fourChamTree"); for (int i=0; ; i++) { runCount = std::to_string(i); inF = "run" + runCount + "_" + layers + "layers.root"; infileName = inPrefix + inF; ifstream fin; fin.open(infileName.c_str()); if (!fin.fail()) { fin.close(); chain->Add(infileName.c_str()); std::cout << "Got " << inF << std::endl; } else break; } const int width=480; //width of the raw image const int height=640; //height of the raw image int x=-10; //x from file int y=-10; //y from file int intensity=-10; //pixle intensity from file int pNum=0;//a counter of the order in which the frame was processed //the 2d array which will store each frame of image data. int frame[480][640]={0}; //variables int UNIXtime=0; float tdc[2]={-10,-10}; //TTree *T = new TTree("T","TTree of muplus data"); //add the 'branches' to the tree we will now read in chain->SetBranchAddress("pNum",&pNum); //branch for the frame number chain->SetBranchAddress("frame",&frame); //branch for frame data TH2I *frameHisto = new TH2I("Single 4 Spark Event","",width,0,width,height,0,height); //histogram for the stacked images TH1I *chamber1 = new TH1I("chamber1","Chamber 1",width,0,width);//histogram for chamber 1 (the top one) TH1I *chamber2 = new TH1I("chamber2","Chamber 2",width,0,width);//histogram for chamber 2 TH1I *chamber3 = new TH1I("chamber3","Chamber 3",width,0,width);//histogram for chamber 3 TH1I *chamber4 = new TH1I("chamber4","Chamber 4",width,0,width);//histogram for chamber 4 (the bottom one) TH1I *chamber1y = new TH1I("chamber1y","Chamber 1",height,0,height);//histogram for chamber 1 (the top one) TH1I *chamber2y = new TH1I("chamber2y","Chamber 2",height,0,height);//histogram for chamber 2 TH1I *chamber3y = new TH1I("chamber3y","Chamber 3",height,0,height);//histogram for chamber 3 TH1I *chamber4y = new TH1I("chamber4y","Chamber 4",height,0,height);//histogram for chamber 4 (the bottom one) //output the plot of the stacked images TCanvas *fH2 = new TCanvas("fH2", "Single 4 Spark Event", 0, 0, 800, 800); fH2->cd(); frameHisto->Draw(); frameHisto->GetXaxis()->SetTitle("X position (px)"); frameHisto->GetXaxis()->CenterTitle(); frameHisto->GetYaxis()->SetTitle("Intensity"); frameHisto->GetYaxis()->SetTitleOffset(1.4); frameHisto->GetYaxis()->CenterTitle(); TCanvas *pc2 = new TCanvas("pc2","Frame",0,0,800,800); pc2->Divide(2,2); pc2->cd(1); chamber1->Draw(); chamber1->GetXaxis()->SetTitle("X position (px)"); chamber1->GetXaxis()->CenterTitle(); chamber1->GetYaxis()->SetTitle("Intensity"); chamber1->GetYaxis()->SetTitleOffset(1.4); chamber1->GetYaxis()->CenterTitle(); pc2->cd(2); chamber2->Draw(); chamber2->GetXaxis()->SetTitle("X position (px)"); chamber2->GetXaxis()->CenterTitle(); chamber2->GetYaxis()->SetTitle("Intensity"); chamber2->GetYaxis()->SetTitleOffset(1.4); chamber2->GetYaxis()->CenterTitle(); pc2->cd(3); chamber3->Draw(); chamber3->GetXaxis()->SetTitle("X position (px)"); chamber3->GetXaxis()->CenterTitle(); chamber3->GetYaxis()->SetTitle("Intensity"); chamber3->GetYaxis()->SetTitleOffset(1.4); chamber3->GetYaxis()->CenterTitle(); pc2->cd(4); chamber4->Draw(); chamber4->GetXaxis()->SetTitle("X position (px)"); chamber4->GetXaxis()->CenterTitle(); chamber4->GetYaxis()->SetTitle("Intensity"); chamber4->GetYaxis()->SetTitleOffset(1.4); chamber4->GetYaxis()->CenterTitle(); //TFile myF("trackTree.root","RECREATE"); //loop over all data in chain Int_t nevent = chain->GetEntries(); //get the number of entries in the TChain for (Int_t i=0;i<nevent;i++) { chain->GetEntry(i); //put the frame data into the histogram for this event for(int x=0;x<width;x++){ for(int y=0;y<height;y++){ if(frame[x][y]>0){ frameHisto->Fill(x,y,frame[x][y]); if(y>580 && y<610){ chamber1->Fill(x,frame[x][y]); chamber1y->Fill(y,frame[x][y]); } else if(y>400 && y<440){ chamber2->Fill(x,frame[x][y]); chamber2y->Fill(y,frame[x][y]); } else if(y>240 && y<280){ chamber3->Fill(x,frame[x][y]); chamber3y->Fill(y,frame[x][y]); } else if(y>50 && y<100){ chamber4->Fill(x,frame[x][y]); chamber4y->Fill(y,frame[x][y]); } } } } double x12[2]; double y12[2]; double x34[2]; double y34[2]; x12[0] = chamber1->GetMean(); y12[0] = chamber1y->GetMean(); //593.3; x12[1] = chamber2->GetMean(); y12[1] = chamber2y->GetMean(); //424.7; x34[0] = chamber3->GetMean(); y34[0] = chamber3y->GetMean(); //262.5; x34[1] = chamber4->GetMean(); y34[1] = chamber4y->GetMean(); //69.33; cout << "Chamber1x: " << chamber1->GetMean() << endl; cout << "Chamber1y: " << chamber1y->GetMean() << endl; cout << "Chamber2x: " << chamber2->GetMean() << endl; cout << "Chamber2y: " << chamber2y->GetMean() << endl; cout << "Chamber3x: " << chamber3->GetMean() << endl; cout << "Chamber3y: " << chamber3y->GetMean() << endl; cout << "Chamber4x: " << chamber4->GetMean() << endl; cout << "Chamber4y: " << chamber4y->GetMean() << endl; pc2->cd(1); chamber1->Draw(); gPad->Update(); pc2->cd(2); chamber2->Draw(); gPad->Update(); pc2->cd(3); chamber3->Draw(); gPad->Update(); pc2->cd(4); chamber4->Draw(); gPad->Update(); fH2->cd(); frameHisto->Draw(); gPad->Update(); //wait for user input to advance to next event cout << "Frame Number=" << pNum<<endl; cout << "Press enter to advance to the next frame" << endl; cin.ignore(); //clear the old frame from the histogram frameHisto->Reset(); chamber1->Reset(); chamber2->Reset(); chamber3->Reset(); chamber4->Reset(); } } else break; } }
void ITSSDDQAMaker(char *iFile, Int_t MaxEvts=1000000, Int_t FirstEvt=0) { //To have Baseline Histos uncomment parts with " // BL!!! " comment cout << "SDD Quality Assurance Prototype Macro" << endl; const Int_t nSDDmodules= 260; const Int_t imodoffset = 240; const Int_t modtotSDD = nSDDmodules*2; const Int_t anode = 256; Float_t xi = -0.5; Float_t xf = xi + nSDDmodules; TH1F *hModulePattern = new TH1F("hModulePattern","Modules pattern",nSDDmodules,xi,xf); xf = xi + modtotSDD; TH1F *hModuleSidePattern = new TH1F("hModuleSidePattern","Modules/Side pattern",modtotSDD,xi,xf); TH2F *hModuleChargeMap[modtotSDD]; //260 dx e 260 sx with A, T, Q TH2F *hModuleCountsMap[modtotSDD]; //260 dx e 260 sx with A, T, Ncounts TH2I *hModuleCarlos = new TH2I("hModuleCarlos","hModuleCarlos",modtotSDD,xi,xf,101,-0.5,100.5); /* TH1F *hModuleSideBL[modtotSDD][anode]; // BL!!! */ //-------histograms definition Char_t *hisnam = new Char_t[50]; Char_t *histit = new Char_t[50]; Char_t *hisnam2 = new Char_t[50]; Char_t *histit2 = new Char_t[50]; Char_t *hisnam3 = new Char_t[50]; for(Int_t imod=0; imod<nSDDmodules;imod++){ for(Int_t isid=0;isid<2;isid++){ Int_t index=2*imod+isid; //260*2 position sprintf(hisnam,"chargeMap%d",index); sprintf(histit,"Total Charge, module number %d",index); hModuleChargeMap[index]=new TH2F(hisnam,histit,256,-0.5,255.5,256,-0.5,255.5); sprintf(hisnam2,"countsMap%d",index); sprintf(histit2,"Number of Counts, module number %d",index); hModuleCountsMap[index] = new TH2F(hisnam2,histit2,256,-0.5,255.5,256,-0.5,255.5); /* for(Int_t ianode=0; ianode<anode; ianode++){ // BL!!! sprintf(hisnam3,"BL_module_%d_%d",index,ianode); //cout<<hisnam3 <<endl; hModuleSideBL[index][ianode] = new TH1F(hisnam3,hisnam3,256,0.,1024.); } */ } } TString strFile = iFile; strFile += "?EventType=7"; AliRawReader *rd = new AliRawReaderDate(strFile.Data(),FirstEvt); // open run Int_t evCounter = 0; do{ // start loop on events if(++evCounter > MaxEvts) { cout << MaxEvts << " events read, stop" << endl; evCounter--; break; } cout << "Read Event: " << evCounter+FirstEvt-1 << endl; rd->RequireHeader(kFALSE); rd->Reset(); // reset the current position to the beginning of the event Int_t nSkip = 0; // number of skipped signals AliITSRawStreamSDD s(rd); //This class provides access to ITS SDD digits in raw data. Int_t iddl; Int_t isddmod; Int_t moduleSDD; gStyle->SetPalette(1); while(s.Next()){ //read the next raw digit; returns kFALSE if there is no digit left if(s.IsCompletedModule()) continue; if(s.IsCompletedDDL()) continue; iddl=rd->GetDDLID()-2; // -2 is temporary for test raw data isddmod=s.GetModuleNumber(iddl,s.GetCarlosId()); //this is the FEE Carlos //cout<<"DDLID= "<<iddl <<"; Module number= " <<isddmod <<endl; if(isddmod >= imodoffset) { hModulePattern->Fill(isddmod-imodoffset); // 0 to 259 so 240 to 499 moduleSDD=2*(isddmod-imodoffset)+s.GetChannel(); hModuleSidePattern->Fill(moduleSDD); // 0 to 519 hModuleCarlos->Fill(isddmod-imodoffset,s.GetCarlosId()); //cout << "anode " << s.GetCoord1() << ", time bin: " << s.GetCoord2() << ", charge: " << s.GetSignal() << endl; Int_t coord1 = s.GetCoord1(); Int_t coord2 = s.GetCoord2(); Int_t signal = s.GetSignal(); hModuleChargeMap[moduleSDD]->Fill(coord2, coord1,signal); hModuleCountsMap[moduleSDD]->Fill(coord2, coord1 ); //hModuleSideBL[moduleSDD][coord1]->Fill(signal); // BL !!! } else { nSkip++; } } cout << "End of Event " << evCounter+FirstEvt-1 << ", " << nSkip << " wrong module numbers" << endl; } while(rd->NextEvent()); // end loop on events delete rd; cout << "end after " << evCounter << " events" << endl; /* TNtuple *Baseline = new TNtuple("Baseline","Baseline","HalfModule:Anode:Mean:RMS"); // BL!!! Float_t meanBL; Float_t rmsBL; */ for(Int_t i=0; i<modtotSDD; i++){ if(hModuleSidePattern->GetBinContent(i+1)){ //check if they're not empty hModuleChargeMap[i]->GetXaxis()->SetTitle("Time Bin"); hModuleChargeMap[i]->GetYaxis()->SetTitle("Anode"); hModuleCountsMap[i]->GetXaxis()->SetTitle("Time Bin"); hModuleCountsMap[i]->GetYaxis()->SetTitle("Anode"); /* for(Int_t ianode=0; ianode<anode; ianode++ ){ // BL!!! hModuleSideBL[i][ianode]->GetXaxis()->SetTitle("ADC counts"); hModuleSideBL[i][ianode]->GetYaxis()->SetTitle("#"); meanBL = hModuleSideBL[i][ianode]->GetMean(); rmsBL = hModuleSideBL[i][ianode]->GetRMS(); gaussfitBL = hModuleSideBL[i][ianode]->Fit("gaus"); Baseline->Fill(i,ianode,meanBL,rmsBL); } */ } } hModuleSidePattern->GetXaxis()->SetTitle("2*(Module Number-1)+Side"); hModuleSidePattern->GetYaxis()->SetTitle("Counts"); hModulePattern->GetXaxis()->SetTitle("Module Number"); hModulePattern->GetYaxis()->SetTitle("Counts"); //-------store Histograms cout << "Store Histograms" << endl; TString oFileName(iFile); oFileName.Append(".root"); TFile *oFile = TFile::Open(oFileName,"recreate"); hModulePattern->Write(); hModuleSidePattern->Write(); hModuleCarlos->Write(); for(Int_t i=0; i<modtotSDD; i++){ if(hModuleSidePattern->GetBinContent(i+1)){ //check if they're not empty hModuleChargeMap[i]->Write(); hModuleCountsMap[i]->Write(); /* for(Int_t ianode=0; ianode<anode; ianode++ ){ // BL!!! hModuleSideBL[i][ianode]->Write(); Baseline->Write(); } */ } } oFile->Close(); cout << "Clear memory" << endl; for(Int_t imod=0; imod<nSDDmodules;imod++){ for(Int_t isid=0;isid<2;isid++){ Int_t index=2*imod+isid; //260*2 position delete hModuleChargeMap[index]; delete hModuleCountsMap[index]; /* for(Int_t ianode=0; ianode<anode; ianode++ ){ // BL!!! delete hModuleSideBL[index][ianode]; delete Baseline; } */ } } delete hModulePattern; delete hModuleSidePattern; delete hModuleCarlos; }
int main (int argc, char** argv) { if (argc < 3) { printHelp() ; exit (1) ; } std::string inputfiles, inputdir ; std::string outputRootName = "histoTPG.root" ; int verbose = 0 ; int occupancyCut = 0 ; std::string l1algo ; bool ok(false) ; for (int i=0 ; i<argc ; i++) { if (argv[i] == std::string("-h") ) { printHelp() ; exit(1); } if (argv[i] == std::string("-i") && argc>i+1) { ok = true ; inputfiles = argv[i+1] ; } if (argv[i] == std::string("-d") && argc>i+1) inputdir = argv[i+1] ; if (argv[i] == std::string("-o") && argc>i+1) outputRootName = argv[i+1] ; if (argv[i] == std::string("-v") && argc>i+1) verbose = atoi(argv[i+1]) ; if (argv[i] == std::string("-l1") && argc>i+1) l1algo = std::string(argv[i+1]) ; if (argv[i] == std::string("--cutTPOccup") && argc>i+1) occupancyCut = atoi(argv[i+1]) ; } if (!ok) { std::cout<<"No input files have been given: nothing to do!"<<std::endl ; printHelp() ; exit(1); } std::vector<int> algobits ; std::vector<std::string> algos = split(l1algo,",") ; for (unsigned int i=0 ; i<algos.size() ; i++) algobits.push_back(atoi(algos[i].c_str())) ; unsigned int ref = 2 ; /////////////////////// // book the histograms /////////////////////// TH2F * occupancyTP = new TH2F("occupancyTP", "Occupancy TP data", 72, 1, 73, 38, -19, 19) ; occupancyTP->GetYaxis()->SetTitle("eta index") ; occupancyTP->GetXaxis()->SetTitle("phi index") ; TH2F * occupancyTPEmul = new TH2F("occupancyTPEmul", "Occupancy TP emulator", 72, 1, 73, 38, -19, 19) ; occupancyTPEmul->GetYaxis()->SetTitle("eta index") ; occupancyTPEmul->GetXaxis()->SetTitle("phi index") ; TH1F * TP = new TH1F("TP", "TP", 256, 0., 256.) ; TP->GetXaxis()->SetTitle("TP (ADC)") ; TH1F * TPEmul = new TH1F("TPEmul", "TP Emulator", 256, 0., 256.) ; TPEmul->GetXaxis()->SetTitle("TP (ADC)") ; TH1F * TPEmulMax = new TH1F("TPEmulMax", "TP Emulator max", 256, 0., 256.) ; TPEmulMax->GetXaxis()->SetTitle("TP (ADC)") ; TH3F * TPspectrumMap3D = new TH3F("TPspectrumMap3D", "TP data spectrum map", 72, 1, 73, 38, -19, 19, 256, 0., 256.) ; TPspectrumMap3D->GetYaxis()->SetTitle("eta index") ; TPspectrumMap3D->GetXaxis()->SetTitle("phi index") ; TH1F * TPMatchEmul = new TH1F("TPMatchEmul", "TP data matching Emulator", 7, -1., 6.) ; TH1F * TPEmulMaxIndex = new TH1F("TPEmulMaxIndex", "Index of the max TP from Emulator", 7, -1., 6.) ; TH3I * TPMatchEmul3D = new TH3I("TPMatchEmul3D", "TP data matching Emulator", 72, 1, 73, 38, -19, 19, 7, -1, 6) ; TPMatchEmul3D->GetYaxis()->SetTitle("eta index") ; TPMatchEmul3D->GetXaxis()->SetTitle("phi index") ; TH2I * ttfMismatch = new TH2I("ttfMismatch", "TTF mismatch map", 72, 1, 73, 38, -19, 19) ; ttfMismatch->GetYaxis()->SetTitle("eta index") ; ttfMismatch->GetXaxis()->SetTitle("phi index") ; /////////////////////// // Chain the trees: /////////////////////// TChain * chain = new TChain ("EcalTPGAnalysis") ; std::vector<std::string> files ; if (inputfiles.find(std::string(",")) != std::string::npos) files = split(inputfiles,",") ; if (inputfiles.find(std::string(":")) != std::string::npos) { std::vector<std::string> filesbase = split(inputfiles,":") ; if (filesbase.size() == 4) { int first = atoi(filesbase[1].c_str()) ; int last = atoi(filesbase[2].c_str()) ; for (int i=first ; i<=last ; i++) { std::stringstream name ; name<<filesbase[0]<<i<<filesbase[3] ; files.push_back(name.str()) ; } } } for (unsigned int i=0 ; i<files.size() ; i++) { files[i] = inputdir+"/"+files[i] ; std::cout<<"Input file: "<<files[i]<<std::endl ; chain->Add (files[i].c_str()) ; } EcalTPGVariables treeVars ; setBranchAddresses (chain, treeVars) ; int nEntries = chain->GetEntries () ; std::cout << "Number of entries: " << nEntries <<std::endl ; /////////////////////// // Main loop over entries /////////////////////// for (int entry = 0 ; entry < nEntries ; ++entry) { chain->GetEntry (entry) ; if (entry%1000==0) std::cout <<"------> "<< entry+1 <<" entries processed" << " <------\n" ; if (verbose>0) std::cout<<"Run="<<treeVars.runNb<<" Evt="<<treeVars.runNb<<std::endl ; // trigger selection if any bool keep(false) ; if (!algobits.size()) keep = true ; // keep all events when no trigger selection for (unsigned int algo = 0 ; algo<algobits.size() ; algo++) for (unsigned int ntrig = 0 ; ntrig < treeVars.nbOfActiveTriggers ; ntrig++) if (algobits[algo] == treeVars.activeTriggers[ntrig]) keep = true ; if (!keep) continue ; // loop on towers for (unsigned int tower = 0 ; tower < treeVars.nbOfTowers ; tower++) { int tp = getEt(treeVars.rawTPData[tower]) ; int emul[5] = {getEt(treeVars.rawTPEmul1[tower]), getEt(treeVars.rawTPEmul2[tower]), getEt(treeVars.rawTPEmul3[tower]), getEt(treeVars.rawTPEmul4[tower]), getEt(treeVars.rawTPEmul5[tower])} ; int maxOfTPEmul = 0 ; int indexOfTPEmulMax = -1 ; for (int i=0 ; i<5 ; i++) if (emul[i]>maxOfTPEmul) { maxOfTPEmul = emul[i] ; indexOfTPEmulMax = i ; } int ieta = treeVars.ieta[tower] ; int iphi = treeVars.iphi[tower] ; int nbXtals = treeVars.nbOfXtals[tower] ; int ttf = getTtf(treeVars.rawTPData[tower]) ; if (verbose>9 && (tp>0 || maxOfTPEmul>0)) { std::cout<<"(phi,eta, Nbxtals)="<<std::dec<<iphi<<" "<<ieta<<" "<<nbXtals<<std::endl ; std::cout<<"Data Et, TTF: "<<tp<<" "<<ttf<<std::endl ; std::cout<<"Emulator: " ; for (int i=0 ; i<5 ; i++) std::cout<<emul[i]<<" " ; std::cout<<std::endl ; } // Fill TP spctrum TP->Fill(tp) ; TPEmul->Fill(emul[ref]) ; TPEmulMax->Fill(maxOfTPEmul) ; TPspectrumMap3D->Fill(iphi, ieta, tp) ; // Fill TP occupancy if (tp>occupancyCut) occupancyTP->Fill(iphi, ieta) ; if (emul[ref]>occupancyCut) occupancyTPEmul->Fill(iphi, ieta) ; // Fill TP-Emulator matching // comparison is meaningful when: if (tp>0 && nbXtals == 25) { bool match(false) ; for (int i=0 ; i<5 ; i++) { if (tp == emul[i]) { TPMatchEmul->Fill(i+1) ; TPMatchEmul3D->Fill(iphi, ieta, i+1) ; match = true ; } } if (!match) { TPMatchEmul->Fill(-1) ; TPMatchEmul3D->Fill(iphi, ieta, -1) ; if (verbose>5) { std::cout<<"MISMATCH"<<std::endl ; std::cout<<"(phi,eta, Nbxtals)="<<std::dec<<iphi<<" "<<ieta<<" "<<nbXtals<<std::endl ; std::cout<<"Data Et, TTF: "<<tp<<" "<<ttf<<std::endl ; std::cout<<"Emulator: " ; for (int i=0 ; i<5 ; i++) std::cout<<emul[i]<<" " ; std::cout<<std::endl ; } } } if (maxOfTPEmul>0) TPEmulMaxIndex->Fill(indexOfTPEmulMax+1) ; // Fill TTF mismatch if ((ttf==1 || ttf==3) && nbXtals != 25) ttfMismatch->Fill(iphi, ieta) ; } // end loop towers } // endloop entries /////////////////////// // Format & write histos /////////////////////// // 1. TP Spectrum TProfile2D * TPspectrumMap = TPspectrumMap3D->Project3DProfile("yx") ; TPspectrumMap->SetName("TPspectrumMap") ; // 2. TP Timing TH2F * TPMatchEmul2D = new TH2F("TPMatchEmul2D", "TP data matching Emulator", 72, 1, 73, 38, -19, 19) ; TH2F * TPMatchFraction2D = new TH2F("TPMatchFraction2D", "TP data: fraction of non-single timing", 72, 1, 73, 38, -19, 19) ; TPMatchEmul2D->GetYaxis()->SetTitle("eta index") ; TPMatchEmul2D->GetXaxis()->SetTitle("phi index") ; TPMatchEmul2D->GetZaxis()->SetRangeUser(-1,6) ; TPMatchFraction2D->GetYaxis()->SetTitle("eta index") ; TPMatchFraction2D->GetXaxis()->SetTitle("phi index") ; for (int binx=1 ; binx<=72 ; binx++) for (int biny=1 ; biny<=38 ; biny++) { int maxBinz = 5 ; double maxCell = TPMatchEmul3D->GetBinContent(binx, biny, maxBinz) ; double totalCell(0) ; for (int binz=1; binz<=7 ; binz++) { double content = TPMatchEmul3D->GetBinContent(binx, biny, binz) ; if (content>maxCell) { maxCell = content ; maxBinz = binz ; } totalCell += content ; } if (maxCell <=0) maxBinz = 2 ; // empty cell TPMatchEmul2D->SetBinContent(binx, biny, float(maxBinz)-2.) ; //z must be in [-1,5] double fraction = 0 ; if (totalCell>0) fraction = 1.- maxCell/totalCell ; TPMatchFraction2D->SetBinContent(binx, biny, fraction) ; if (totalCell > maxCell && verbose>9) { std::cout<<"--->"<<std::endl ; for (int binz=1; binz<=7 ; binz++) { std::cout<< "(phi,eta, z): (" << TPMatchEmul3D->GetXaxis()->GetBinLowEdge(binx) << ", " << TPMatchEmul3D->GetYaxis()->GetBinLowEdge(biny) << ", " << TPMatchEmul3D->GetZaxis()->GetBinLowEdge(binz) << ") Content="<<TPMatchEmul3D->GetBinContent(binx, biny, binz) << ", erro="<<TPMatchEmul3D->GetBinContent(binx, biny, binz) << std::endl ; } } } TFile saving (outputRootName.c_str (),"recreate") ; saving.cd () ; occupancyTP->Write() ; occupancyTPEmul->Write() ; TP->Write() ; TPEmul->Write() ; TPEmulMax->Write() ; TPspectrumMap->Write() ; TPMatchEmul->Write() ; TPMatchEmul3D->Write() ; TPEmulMaxIndex->Write() ; TPMatchEmul2D->Write() ; TPMatchFraction2D->Write() ; ttfMismatch->Write() ; saving.Close () ; delete chain ; return 0 ; }
int frameStack2_Mall(char* arg){ //Take the arguments and save them into respective strings std::string infileName, outfileName0, outAllfileName0, outfileName1, outAllfileName1; std::string inF, outF0, outF1, outAll0, outAll1; std::string inPrefix, outPrefix; std::string runs, layers; std::string runCount; std::istringstream stm(arg); inPrefix = "/home/p180f/Do_Jo_Ol_Ma/Analysis/MainProcedure/testMain/rawRoot/"; outPrefix = "/home/p180f/Do_Jo_Ol_Ma/Analysis/MainProcedure/testMain/images/"; outAll0 = "sliceXCuts_allLayers.png"; outAllfileName0 = outPrefix + outAll0; std::cout << outAll0 << " created\n"; outAll1 = "projYCuts_allLayers.png"; outAllfileName1 = outPrefix + outAll1; std::cout << outAll1 << " created\n"; const int width=480; //width of the raw image const int height=640; //height of the raw image TH2I *frameHistoAll = new TH2I("frameHistoAll","Stacked Frames After Edge Cuts",width/4,0,width,height/4,0,height); //histogram for the stacked images TH1I *chamber1All = new TH1I("chamber1All","Chamber 1 After Edge Cuts",width/4,0,width);//histogram for chamber 1 (the top one) TH1I *chamber2All = new TH1I("chamber2All","Chamber 2 After Edge Cuts",width/4,0,width);//histogram for chamber 2 TH1I *chamber3All = new TH1I("chamber3All","Chamber 3 After Edge Cuts",width/4,0,width);//histogram for chamber 3 TH1I *chamber4All = new TH1I("chamber4All","Chamber 4 After Edge Cuts",width/4,0,width);//histogram for chamber 4 (the bottom one) TCanvas *projCAll = new TCanvas("projCAll","",0,0,800,600); TCanvas *pc2All = new TCanvas("pc2All", "Stack of 4 Layer Runs", 0, 0, 800, 600); while (true) { if (std::getline(stm, layers, ' ')) { //create the output root file outF0 = "sliceXCuts_" + layers + "layers.png"; outfileName0 = outPrefix + outF0; std::cout << outF0 << " created\n"; outF1 = "projYCuts_" + layers + "layers.png"; outfileName1 = outPrefix + outF1; std::cout << outF1 << " created\n"; //load the input root files TChain *chain = new TChain("fourChamTree"); for (int i=0; ; i++) { runCount = std::to_string(i); inF = "run" + runCount + "_" + layers + "layers.root"; infileName = inPrefix + inF; ifstream fin; fin.open(infileName.c_str()); if (!fin.fail()) { fin.close(); chain->Add(infileName.c_str()); std::cout << "Got " << inF << std::endl; } else break; } int x=-10; //x from file int y=-10; //y from file int intensity=-10; //pixle intensity from file int pNum=0;//the order in which the frame was processed //the 2d array which will store each frame of image data. int frame[480][640]={0}; //variables int UNIXtime=0; float tdc[2]={-10,-10}; //TTree *T = new TTree("T","TTree of muplus data"); //add the 'branches' to the tree we will now read in chain->SetBranchAddress("pNum",&pNum); //branch for the frame number chain->SetBranchAddress("frame",&frame); //branch for frame data TH2I *frameHisto = new TH2I("frameHisto","Stacked Frames After Edge Cuts",width/4,0,width,height/4,0,height); //histogram for the stacked images TH1I *chamber1 = new TH1I("chamber1","Chamber 1 After Edge Cuts",width/4,0,width);//histogram for chamber 1 (the top one) TH1I *chamber2 = new TH1I("chamber2","Chamber 2 After Edge Cuts",width/4,0,width);//histogram for chamber 2 TH1I *chamber3 = new TH1I("chamber3","Chamber 3 After Edge Cuts",width/4,0,width);//histogram for chamber 3 TH1I *chamber4 = new TH1I("chamber4","Chamber 4 After Edge Cuts",width/4,0,width);//histogram for chamber 4 (the bottom one) //loop over all data in chain Int_t nevent = chain->GetEntries(); //get the number of entries in the TChain for (Int_t i=0;i<nevent;i++) { chain->GetEntry(i); for(int x=0;x<width;x++){ for(int y=0;y<height;y++){ if(frame[x][y]>0){ frameHisto->Fill(x,y,frame[x][y]); frameHistoAll->Fill(x,y,frame[x][y]); if(y>580 && y<610){ chamber1->Fill(x,frame[x][y]); chamber1All->Fill(x,frame[x][y]); } else if(y>400 && y<440){ chamber2->Fill(x,frame[x][y]); chamber2All->Fill(x,frame[x][y]); } else if(y>240 && y<280){ chamber3->Fill(x,frame[x][y]); chamber3All->Fill(x,frame[x][y]); } else if(y>50 && y<100){ chamber4->Fill(x,frame[x][y]); chamber4All->Fill(x,frame[x][y]); } } } } cout << "Stacking frame number " << pNum << "\r";//this overwrites the line every time } cout << endl; //output the plot of the stacked images TCanvas *pc2 = new TCanvas("pc2","Stacked Frames",0,0,600,800); pc2->cd(); frameHisto->SetStats(false); frameHisto->Draw("colz"); frameHisto->GetXaxis()->SetTitle("X position (px)"); //frameHisto->GetXaxis()->SetTitleSize(0.055); //frameHisto->GetXaxis()->SetTitleOffset(1.0); //frameHisto->GetXaxis()->SetLabelSize(0.055); frameHisto->GetXaxis()->CenterTitle(); frameHisto->GetYaxis()->SetTitle("Y position (px)"); //frameHisto->GetYaxis()->SetTitleSize(0.055); //frameHisto->GetYaxis()->SetTitleOffset(0.9); //frameHisto->GetYaxis()->SetLabelSize(0.055); frameHisto->GetYaxis()->CenterTitle(); gPad->Update(); // pc2->Print("chamberStack.png");//output to a graphics file //plot the projection onto the Y axis (so we can find our cuts in Y to select each chamber) TCanvas *projC = new TCanvas("projC","",0,0,800,600); projC->cd(); TH1D *ydist = frameHisto->ProjectionY("ydist"); ydist->Draw(); ydist->GetYaxis()->SetTitle("Entries"); ydist->GetYaxis()->CenterTitle(); TCanvas *sliceX = new TCanvas("sliceX","",0,0,800,600); sliceX->Divide(2,2); sliceX->cd(1); chamber1->Draw(); chamber1->GetXaxis()->SetTitle("X position (px)"); chamber1->GetXaxis()->CenterTitle(); chamber1->GetYaxis()->SetTitle("Y position (px)"); chamber1->GetYaxis()->CenterTitle(); // chamber1->GetYaxis()->SetMaxDigits(2); sliceX->cd(2); chamber2->Draw(); chamber2->GetXaxis()->SetTitle("X position (px)"); chamber2->GetXaxis()->CenterTitle(); chamber2->GetYaxis()->SetTitle("Y position (px)"); chamber2->GetYaxis()->CenterTitle(); // chamber2->GetYaxis()->SetMaxDigits(2); sliceX->cd(3); chamber3->Draw(); chamber3->GetXaxis()->SetTitle("X position (px)"); chamber3->GetXaxis()->CenterTitle(); chamber3->GetYaxis()->SetTitle("Y position (px)"); chamber3->GetYaxis()->CenterTitle(); // chamber3->GetYaxis()->SetMaxDigits(2); sliceX->cd(4); chamber4->Draw(); chamber4->GetXaxis()->SetTitle("X position (px)"); chamber4->GetXaxis()->CenterTitle(); chamber4->GetYaxis()->SetTitle("Y position (px)"); chamber4->GetYaxis()->CenterTitle(); // chamber4->GetYaxis()->SetMaxDigits(2); gPad->Update(); projC->Print(outfileName1.c_str()); sliceX->Print(outfileName0.c_str()); frameHisto->Reset(); chamber1->Reset(); chamber2->Reset(); chamber3->Reset(); chamber4->Reset(); } else break; } projCAll->cd(); TH1D *ydistAll = frameHistoAll->ProjectionY("ydist"); ydistAll->Draw(); ydistAll->GetYaxis()->SetTitle("Entries"); ydistAll->GetYaxis()->CenterTitle(); TCanvas *sliceXAll = new TCanvas("sliceXAll","",0,0,800,600); sliceXAll->Divide(2,2); sliceXAll->cd(1); chamber1All->Draw(); chamber1All->GetXaxis()->SetTitle("X position (px)"); chamber1All->GetXaxis()->CenterTitle(); chamber1All->GetYaxis()->SetTitle("Y position (px)"); chamber1All->GetYaxis()->CenterTitle(); // chamber1->GetYaxis()->SetMaxDigits(2); sliceXAll->cd(2); chamber2All->Draw(); chamber2All->GetXaxis()->SetTitle("X position (px)"); chamber2All->GetXaxis()->CenterTitle(); chamber2All->GetYaxis()->SetTitle("Y position (px)"); chamber2All->GetYaxis()->CenterTitle(); // chamber2->GetYaxis()->SetMaxDigits(2); sliceXAll->cd(3); chamber3All->Draw(); chamber3All->GetXaxis()->SetTitle("X position (px)"); chamber3All->GetXaxis()->CenterTitle(); chamber3All->GetYaxis()->SetTitle("Y position (px)"); chamber3All->GetYaxis()->CenterTitle(); // chamber3->GetYaxis()->SetMaxDigits(2); sliceXAll->cd(4); chamber4All->Draw(); chamber4All->GetXaxis()->SetTitle("X position (px)"); chamber4All->GetXaxis()->CenterTitle(); chamber4All->GetYaxis()->SetTitle("Y position (px)"); chamber4All->GetYaxis()->CenterTitle(); // chamber4->GetYaxis()->SetMaxDigits(2); gPad->Update(); projCAll->Print(outAllfileName1.c_str()); sliceXAll->Print(outAllfileName0.c_str()); pc2All->cd(); frameHistoAll->SetStats(false); frameHistoAll->Draw("colz"); frameHistoAll->GetXaxis()->SetTitle("X position (px)"); //frameHisto->GetXaxis()->SetTitleSize(0.055); //frameHisto->GetXaxis()->SetTitleOffset(1.0); //frameHisto->GetXaxis()->SetLabelSize(0.055); frameHistoAll->GetXaxis()->CenterTitle(); frameHistoAll->GetYaxis()->SetTitle("Y position (px)"); //frameHisto->GetYaxis()->SetTitleSize(0.055); //frameHisto->GetYaxis()->SetTitleOffset(0.9); //frameHisto->GetYaxis()->SetLabelSize(0.055); frameHistoAll->GetYaxis()->CenterTitle(); gPad->Update(); return 0; }
void makePUM0Table() { const TString l1_input = "/mnt/hadoop/cms/store/user/luck/L1Emulator/minbiasHIanalyzer_withregions.root"; TFile *lFile = TFile::Open(l1_input); TTree *l1Tree = (TTree*)lFile->Get("L1UpgradeAnalyzer/L1UpgradeTree"); Int_t l1_event, l1_run; Int_t l1_num; Int_t region_hwPt[NREG], region_hwEta[NREG], region_hwPhi[NREG], region_tauVeto[NREG]; l1Tree->SetBranchAddress("event",&l1_event); l1Tree->SetBranchAddress("run",&l1_run); l1Tree->SetBranchAddress("nRegions",&l1_num); l1Tree->SetBranchAddress("region_hwPt",region_hwPt); l1Tree->SetBranchAddress("region_hwEta",region_hwEta); l1Tree->SetBranchAddress("region_hwPhi",region_hwPhi); l1Tree->SetBranchAddress("region_tauVeto",region_tauVeto); const TString forest_input = "/mnt/hadoop/cms/store/user/luck/L1Emulator/minbiasForest_merged_v2/HiForest_PbPb_Data_minbias_fromSkim.root"; TFile *fFile = TFile::Open(forest_input); TTree *fEvtTree = (TTree*)fFile->Get("hiEvtAnalyzer/HiTree"); TTree *fSkimTree = (TTree*)fFile->Get("skimanalysis/HltTree"); Int_t f_evt, f_run, f_lumi; Int_t hiBin; fEvtTree->SetBranchAddress("evt",&f_evt); fEvtTree->SetBranchAddress("run",&f_run); fEvtTree->SetBranchAddress("lumi",&f_lumi); fEvtTree->SetBranchAddress("hiBin",&hiBin); Int_t pcollisionEventSelection, pHBHENoiseFilter; fSkimTree->SetBranchAddress("pcollisionEventSelection",&pcollisionEventSelection); fSkimTree->SetBranchAddress("pHBHENoiseFilter",&pHBHENoiseFilter); TFile *outFile = new TFile("HI_PUM0_evtsel_out.root","RECREATE"); std::map<Long64_t, Long64_t> kmap; // choose loop over l1 tree first (smaller) //std::cout << "Begin making map." << std::endl; Long64_t l_entries = l1Tree->GetEntries(); for(Long64_t j = 0; j < l_entries; ++j) { l1Tree->GetEntry(j); Long64_t key = makeKey(l1_run, l1_event); std::pair<Long64_t,Long64_t> p(key,j); kmap.insert(p); } //std::cout << "Finished making map." << std::endl; outFile->cd(); TH1I *hists[22][18]; // [eta][pu bin], arbitrary value of 18 for # bins in pu for(int i = 0; i < 22; ++i) for(int j = 0; j < 18; ++j) { hists[i][j] = new TH1I(Form("hist_%d_%d",i,j),"", 1024,0,1024); } TH2I *centPUM = new TH2I("cenPUM","",200,0,200,396,0,396); int count = 0; Long64_t entries = fEvtTree->GetEntries(); for(Long64_t j = 0; j < entries; ++j) { //if(j % 10000 == 0) // printf("%lld / %lld\n",j,entries); fEvtTree->GetEntry(j); Long64_t key = makeKey(f_run, f_evt); std::map<Long64_t,Long64_t>::const_iterator got = kmap.find(key); if(got == kmap.end() ) { continue; } else { l1Tree->GetEntry(got->second); kmap.erase(key); count++; fSkimTree->GetEntry(j); if((pcollisionEventSelection == 1) && (pHBHENoiseFilter == 1)) { //int pubin = (int) ( (double)hiBin * (18.0/200.0)); int PUM0 = 0; for(int i = 0; i < NREG; ++i) { if(region_hwPt[i] > 0) ++PUM0; } int pubin = PUM0/22; if(pubin == 18) pubin = 17; //special case for every region firing for(int i = 0; i < NREG; ++i) { hists[region_hwEta[i]][pubin]->Fill(region_hwPt[i]); } centPUM->Fill(hiBin,PUM0); } } } std::cout << "cms.vdouble("; TH1D *hists_eta[22]; for(int i = 0; i < 22; ++i) { hists_eta[i] = new TH1D(Form("hists_eta_%d",i),"",18,0,17); for(int j = 0; j < 18; ++j) { double Mean = hists[i][j]->GetMean(); double MeanError = hists[i][j]->GetMeanError(); hists_eta[i]->SetBinContent(j,Mean); hists_eta[i]->SetBinError(j,MeanError); std::cout << Mean*0.5; if(!((i == 21) && (j == 17))) std::cout << ", "; } } std::cout << ")" << std::endl; for(int i = 0; i < 22; ++i) { hists_eta[i]->Write(); for(int j = 0; j < 18; ++j) { hists[i][j]->Write(); } } centPUM->Write(); //std::cout << "Matching entries: " << count << std::endl; lFile->Close(); fFile->Close(); outFile->Close(); }
void Zlumi::Loop() { // In a ROOT session, you can do: // Root > .L Zlumi.C // Root > Zlumi t // Root > t.GetEntry(12); // Fill t data members with entry number 12 // Root > t.Show(); // Show values of entry 12 // Root > t.Show(16); // Read and show values of entry 16 // Root > t.Loop(); // Loop on all entries // // This is the loop skeleton where: // jentry is the global entry number in the chain // ientry is the entry number in the current Tree // Note that the argument to GetEntry must be: // jentry for TChain::GetEntry // ientry for TTree::GetEntry and TBranch::GetEntry // // To read only selected branches, Insert statements like: // METHOD1: // fChain->SetBranchStatus("*",0); // disable all branches // fChain->SetBranchStatus("branchname",1); // activate branchname // METHOD2: replace line // fChain->GetEntry(jentry); //read all branches //by b_branchname->GetEntry(ientry); //read only this branch gROOT->ForceStyle(); tdrStyle(); if (fChain == 0) return; int minRun=0; int maxRun=0; int maxLS=0; bool forminRun=true; //TH2I * LumiSRun = new TH2I("LumiSRun", "LS vs Run", 3000, 0., 3000., 20000, 160000., 180000.); //TH1I * test2 = new TH1I("test2","test2", 3000,0, 3000); Long64_t nentries = fChain->GetEntriesFast(); Long64_t nbytes = 0, nb = 0; for (Long64_t jentry=0; jentry<nentries;jentry++) { Long64_t ientry = LoadTree(jentry); if (ientry < 0) break; nb = fChain->GetEntry(jentry); nbytes += nb; if(forminRun && (Run!=0)){minRun=Run; forminRun=false;} if((Run!=0) && (Run>maxRun)){maxRun=Run;} if((LS!=0) && (LS>maxLS)){maxLS=LS;} //printf("run %i ls %i \n",Run,LS); } cout << nentries << " nentries \n"; TH2I *LumiSRun = new TH2I("LumiSRun", "LS vs Run", maxLS, 0, maxLS, maxRun-minRun+2, minRun-1, maxRun+1); TH1I *Runs = new TH1I("Runs","Run", maxRun-minRun+2, minRun-1, maxRun+1); Runs->Sumw2(); nbytes = 0; nb = 0; for (Long64_t jentry=0; jentry<nentries;jentry++) { Long64_t ientry = LoadTree(jentry); if (ientry < 0) break; nb = fChain->GetEntry(jentry); nbytes += nb; LumiSRun->Fill(LS,Run); //printf("run %i ls %i \n",Run,LS); Runs->Fill(Run); //test2->Fill(LS); } printf("minRun %i maxRun %i \n",minRun,maxRun); LumiSRun->Draw(); for (int h=0;h<Runs->GetNbinsX();h++){ Runs->SetBinError(h+1,sqrt(Runs->GetBinContent(h+1)) ); } Runs->Draw(); //test->Draw(); //test2->Draw(); TH1F *FileRuns = new TH1F("FileRuns","Run from Lumicalc", maxRun-minRun+2, minRun-1, maxRun+1); TH1D *XsecDistro = new TH1D("XsecDistro","X sec distribution", 60, 0., 0.6); //------------- const Int_t mpt = maxRun-minRun; int fileRun[mpt]; double Lumi[mpt]; int npt = 0; // read data file ifstream file; //file.open("./2011-run-lumi.txt"); file.open("./LumiAeB-dav.txt"); while (1) { file >> fileRun[npt] >> Lumi[npt]; if ( ! file.good() ) break; cout << "x = " << fileRun[npt] << " y = " << Lumi[npt] << endl; FileRuns->SetBinContent((fileRun[npt]-minRun+2),0.2); npt++; } file.close(); printf("found %d Runs in file \n", npt); bool flaggg=1; TH1D *LumiRuns = new TH1D("LumiRuns","Zyield vs Run", maxRun-minRun+2, minRun-1, maxRun+1); LumiRuns->Sumw2(); for(int i=0; i<npt;i++){ for(int j=0;j<maxRun;j++){ if(fileRun[i]==(minRun+j)){ cout << fileRun[i]-minRun+1 <<" "<< ((float)Runs->GetBinContent(j+1))/Lumi[i] <<" "<< Lumi[i] << " matched run \n"; if(Lumi[i]>0.&&Runs->GetBinContent(j+2)>0.){ LumiRuns->SetBinContent(fileRun[i]-minRun+2,(((double)Runs->GetBinContent(j+2))/Lumi[i])*1000); LumiRuns->SetBinError(fileRun[i]-minRun+2,((TMath::Sqrt((double)Runs->GetBinContent(j+2)))/Lumi[i])*1000); XsecDistro->Fill((((double)Runs->GetBinContent(j+2))/Lumi[i])*1000); flaggg=false; } } else if(fileRun[i]==(minRun+j) && (Runs->GetBinContent(j+2+1)>0. || Runs->GetBinContent(j+2-1)>0.)) cout << "Son cazzi " << fileRun[i]<<"\n"; } if(flaggg) { //cout << " ---------------- \n"; cout << fileRun[i] << " Run not matched! \n"; //cout << Runs->GetBinContent(i) <<" " << Runs->GetBinContent(i+1) <<" " << Runs->GetBinContent(i+2) <<" "<< Lumi[i] << " probably not empty \n"; //if(Lumi[i]>1.e+06) cout << "ALERT THIS ONE IS GOOD \n"; } flaggg=true; } TCanvas * Canv = (TCanvas*)gDirectory->GetList()->FindObject("Canv"); if (Canv) delete Canv; Canv = new TCanvas("Canv","Canv",0,0,800,600); Canv->cd(); LumiRuns->SetXTitle("Run"); LumiRuns->SetYTitle("#sigma (nb)"); LumiRuns->SetLineColor(kBlack); LumiRuns->Draw("E1"); Runs->SetLineColor(kRed); //Runs->Draw("SAMES"); FileRuns->SetLineColor(kBlue); //FileRuns->Draw("SAMES"); //LumiRuns->Draw("E1 SAMES"); Canv->Print("ratio_zlumi.eps"); TCanvas * Another = (TCanvas*)gDirectory->GetList()->FindObject("Another"); if (Another) delete Another; Another = new TCanvas("Another","Another",0,0,800,600); Another->cd(); XsecDistro->SetXTitle("#sigma (nb)"); XsecDistro->SetLineColor(kBlack); XsecDistro->Draw(); Another->Print("distrib_zsigma.eps"); /* //------------- // per il momento tengo le due sezioni separate... solo per debuggare meglio... //------------- const Int_t rpt = 120000; int lsRun[rpt]; float LuSec[rpt]; npt = 0; // read data file ifstream in; in.open("./2011-LS.txt"); while (1) { in >> lsRun[npt] >> LuSec[npt]; if ( ! in.good() ) break; //cout << "x = " << fileRun[npt] << " y = " << Lumi[npt] << endl; npt++; } in.close(); printf("found %d LS\n", npt); */ }