| 1 | /////////////////////////////////////////////////////////////////////////// | 
|---|
| 2 | // | 
|---|
| 3 | //    readIPR.C | 
|---|
| 4 | // | 
|---|
| 5 | //   This macro shows how to read the Individual Pixel Rates from | 
|---|
| 6 | //   a CC report file. | 
|---|
| 7 | // | 
|---|
| 8 | //   Input: | 
|---|
| 9 | //     - root file obtained merpping a .rep CC file | 
|---|
| 10 | //       container: MTriggerIPR | 
|---|
| 11 | // | 
|---|
| 12 | //   Output: | 
|---|
| 13 | //     - a camera display showing the IPRs | 
|---|
| 14 | //     - Some histos for checking purposes | 
|---|
| 15 | // | 
|---|
| 16 | //   Note: | 
|---|
| 17 | //     a similar macro can be used to read the following trigger containers: | 
|---|
| 18 | //     - MTriggerIPR        (Individual Pixel Rates) | 
|---|
| 19 | //     - MTriggerCell       (Rate of trigger cells) | 
|---|
| 20 | //     - MTriggerBit        (Output Bits from prescaler (before/after presc.) | 
|---|
| 21 | //     - MTriggerPrescFact  (Prescaling factors for each bit) | 
|---|
| 22 | //     - MTriggerLiveTime   (Values of counters for dead/livetime) | 
|---|
| 23 | // | 
|---|
| 24 | //    Author(s): Antonio Stamerra. 09/04 <antonio.stamerra@pi.infn.it> | 
|---|
| 25 | // | 
|---|
| 26 | //////////////////////////////////////////////////////////////////////////// | 
|---|
| 27 | void readIPR(TString fname) | 
|---|
| 28 | { | 
|---|
| 29 | // | 
|---|
| 30 | // Create a empty Parameter List and an empty Task List | 
|---|
| 31 | // The tasklist is identified in the eventloop by its name | 
|---|
| 32 | // | 
|---|
| 33 | MParList  plist; | 
|---|
| 34 |  | 
|---|
| 35 | MTaskList tlist; | 
|---|
| 36 | plist.AddToList(&tlist); | 
|---|
| 37 |  | 
|---|
| 38 | // | 
|---|
| 39 | // Now setup the tasks and tasklist: | 
|---|
| 40 | // --------------------------------- | 
|---|
| 41 | // | 
|---|
| 42 |  | 
|---|
| 43 | // Create the magic geometry | 
|---|
| 44 | MGeomCamMagic geom; | 
|---|
| 45 | plist.AddToList(&geom); | 
|---|
| 46 |  | 
|---|
| 47 | // First Task: Read ROOT file with Trigger-REPORT data | 
|---|
| 48 | MReadTree read("Trigger", fname); | 
|---|
| 49 | read.DisableAutoScheme(); | 
|---|
| 50 |  | 
|---|
| 51 | tlist.AddToList(&read); | 
|---|
| 52 |  | 
|---|
| 53 | // Create the container for the IPRs | 
|---|
| 54 | MTriggerIPR ipr; | 
|---|
| 55 | plist.AddToList(&ipr); | 
|---|
| 56 |  | 
|---|
| 57 | // Create the histo to display the IPRs | 
|---|
| 58 | MHCamEvent IPRhist("IPRhist","IPRs"); | 
|---|
| 59 | plist.AddToList(&IPRhist); | 
|---|
| 60 |  | 
|---|
| 61 | // create a task to fill a histogram from the container | 
|---|
| 62 | MFillH fillIPR(&IPRhist, "MTriggerIPR"); | 
|---|
| 63 | tlist.AddToList(&fillIPR); | 
|---|
| 64 |  | 
|---|
| 65 | // | 
|---|
| 66 | // Create and setup the eventloop | 
|---|
| 67 | // | 
|---|
| 68 | MEvtLoop evtloop; | 
|---|
| 69 | evtloop.SetParList(&plist); | 
|---|
| 70 |  | 
|---|
| 71 | // | 
|---|
| 72 | // Execute the analysis | 
|---|
| 73 | // | 
|---|
| 74 | if (!evtloop.PreProcess()) | 
|---|
| 75 | return; | 
|---|
| 76 |  | 
|---|
| 77 | if (!evtloop.Eventloop()) | 
|---|
| 78 | return; | 
|---|
| 79 |  | 
|---|
| 80 | tlist.PrintStatistics(); | 
|---|
| 81 |  | 
|---|
| 82 | //----------------------------------- | 
|---|
| 83 | // Now display the result of the loop | 
|---|
| 84 | // | 
|---|
| 85 |  | 
|---|
| 86 | // create a MHCamera histo where the sum off all events is filled | 
|---|
| 87 | MHCamera &h = *(MHCamera*)IPRhist.GetHistByName("sum"); | 
|---|
| 88 |  | 
|---|
| 89 | TCanvas *c = MH::MakeDefCanvas(); | 
|---|
| 90 | c->Divide(2, 2); | 
|---|
| 91 |  | 
|---|
| 92 | MHCamera *disp1=h.Clone(); | 
|---|
| 93 | MHCamera *disp2=h.Clone(); | 
|---|
| 94 | //MHCamera *disp3=h.Clone(); | 
|---|
| 95 | disp2->SetCamContent(h, 1); | 
|---|
| 96 | //disp3->SetCamContent(h, 2); | 
|---|
| 97 |  | 
|---|
| 98 | disp1->SetYTitle("Rate [Hz]"); | 
|---|
| 99 | disp2->SetYTitle("\\sigma_{Rate} [Hz]"); | 
|---|
| 100 | //disp3->SetYTitle("\\sigma_{Rate} [%]"); | 
|---|
| 101 | disp1->SetName("IPRs;avg"); | 
|---|
| 102 | disp2->SetName("IPRs;err"); | 
|---|
| 103 | //disp3->SetName("IPRs;rel"); | 
|---|
| 104 | disp1->SetTitle("IPRs Average"); | 
|---|
| 105 | disp2->SetTitle("IPRs error"); | 
|---|
| 106 | //disp3->SetTitle("IPRs relative error"); | 
|---|
| 107 |  | 
|---|
| 108 | c->cd(1); | 
|---|
| 109 | TText text(0.1, 0.95, &fname[fname.Last('/')+1]); | 
|---|
| 110 | text.SetTextSize(0.03); | 
|---|
| 111 | text.DrawClone(); | 
|---|
| 112 | gPad->SetBorderMode(0); | 
|---|
| 113 | gPad->Divide(1,1); | 
|---|
| 114 | gPad->cd(1); | 
|---|
| 115 | gPad->SetLogy(); | 
|---|
| 116 | disp1->Draw(); | 
|---|
| 117 | disp1->SetBit(kCanDelete); | 
|---|
| 118 | c->cd(2); | 
|---|
| 119 | gPad->SetBorderMode(0); | 
|---|
| 120 | gPad->Divide(1,1); | 
|---|
| 121 | gPad->cd(1); | 
|---|
| 122 | gPad->SetLogy(); | 
|---|
| 123 | disp2->Draw(); | 
|---|
| 124 | disp2->SetBit(kCanDelete); | 
|---|
| 125 | //c->cd(3); | 
|---|
| 126 | //gPad->SetBorderMode(0); | 
|---|
| 127 | //gPad->Divide(1,1); | 
|---|
| 128 | //gPad->cd(1); | 
|---|
| 129 | //gPad->SetLogy(); | 
|---|
| 130 | //disp3->Draw(); | 
|---|
| 131 | //disp3->SetBit(kCanDelete); | 
|---|
| 132 | c->cd(3); | 
|---|
| 133 | gPad->SetBorderMode(0); | 
|---|
| 134 | disp1->Draw("EPhist"); | 
|---|
| 135 | c->cd(4); | 
|---|
| 136 | gPad->SetBorderMode(0); | 
|---|
| 137 | gPad->SetLogy(); | 
|---|
| 138 | disp2->Draw("Phist"); | 
|---|
| 139 | //c->cd(6); | 
|---|
| 140 | //gPad->SetBorderMode(0); | 
|---|
| 141 | //gPad->SetLogy(); | 
|---|
| 142 | //disp3->Draw("Phist"); | 
|---|
| 143 |  | 
|---|
| 144 | c->SaveAs(fname(0, fname.Last('.')+1) + "ps"); | 
|---|
| 145 | //c->SaveAs(fname(0, fname.Last('.')+1) + "root"); | 
|---|
| 146 | } | 
|---|
| 147 |  | 
|---|