00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014 struct HIT
00015 {
00016 Float_t x,y,z;
00017 Float_t rad,phi;
00018 Float_t raderror,phierror;
00019 };
00020
00021 struct CLUSTER
00022 {
00023 Float_t timepos,padpos,timesigma,padsigma;
00024 Float_t peakheight, charge;
00025 Int_t timebin,pad;
00026 Int_t padlength,timelength;
00027 Int_t row,sec;
00028 Int_t flag;
00029 Int_t numpeaks;
00030 };
00031
00032 struct EVENT
00033 {
00034 Float_t run;
00035 Int_t nevent;
00036 };
00037
00038
00039 void hits2cluster_laser(TString eingabe,int evt,int laser_sec)
00040 {
00041
00042 CLUSTER cluster;
00043 HIT hit;
00044 EVENT event;
00045
00046
00047 gROOT->Reset();
00048 gStyle->SetTitleOffset(1.25);
00049 gStyle->SetCanvasBorderMode(0);
00050 gStyle->SetPadBorderMode(0);
00051 gStyle->SetPadColor(0);
00052 gStyle->SetCanvasColor(0);
00053 gStyle->SetTitleColor(0);
00054 gStyle->SetStatColor(0);
00055 gStyle->SetPalette(1);
00056 gStyle->SetOptStat(11);
00057 gStyle->SetOptFit();
00058
00059 Float_t fpad,ftime,fflag,frow, fsec;
00060 Int_t maxentries;
00061
00062 TString histoname;
00063
00064 TCanvas *c1 = new TCanvas("c1","ps",200,10,700,500);
00065 c1->Divide(2,1);
00066
00067 cout<<"Macro cluster_hits..."<<endl;
00068 TFile *f = new TFile(eingabe+".root");
00069
00070 eingabe +="_evt_";
00071 eingabe +=evt;
00072 eingabe +="_lsec_";
00073 eingabe +=laser_sec;
00074 eingabe +=".ps";
00075
00076
00077 TPostScript *fps=new TPostScript(eingabe,112);
00078
00079
00080
00081 dtree=(TTree*) f->Get("cl");
00082 bhit=dtree->GetBranch("hit");
00083 bhit->SetAddress(&hit);
00084 bcluster=dtree->GetBranch("cluster");
00085 bcluster->SetAddress(&cluster);
00086 bevent=dtree->GetBranch("event");
00087 bevent->SetAddress(&event);
00088
00089 topdir=(TDirectory*) f->Get("histograms");
00090
00091 TString dirname="evt_";
00092 dirname +=evt;
00093 dirname +="_gain";
00094
00095
00096
00097
00098 histdir=(TDirectory*) topdir->Get(dirname);
00099
00100
00101
00102
00103 int maxentries = (int) bcluster->GetEntries();
00104
00105 for (int i=1;i<=60;i++)
00106 {
00107 if (laser_sector(1,laser_sec,i))
00108 {
00109 fps->NewPage();
00110 for(int j=1;j<=2;j++)
00111 {
00112 histoname="hsec";
00113 histoname +=i;
00114 histoname +="_hrow";
00115 histoname +=j;
00116 histoname +="_gain";
00117 TH1F *histo=(TH1F*) histdir->Get(histoname);
00118 c1->cd(j);
00119
00120
00121 histo->DrawCopy("colz");
00122 TH2F *flag0=new TH2F("flag0","flag0",160,0,160,255,0,255);
00123 flag0->SetMarkerStyle(20);flag0->SetMarkerSize(0.5);flag0->SetMarkerColor(1);
00124 TH2F *flag1=new TH2F("flag1","flag1",160,0,160,255,0,255);
00125 flag1->SetMarkerStyle(29);flag1->SetMarkerSize(0.5);flag1->SetMarkerColor(7);
00126 TH2F *flag2=new TH2F("flag2","flag2",160,0,160,255,0,255);
00127 flag2->SetMarkerStyle(21);flag2->SetMarkerSize(0.5);flag2->SetMarkerColor(3);
00128 TH2F *flag3=new TH2F("flag3","flag3",160,0,160,255,0,255);
00129 flag3->SetMarkerStyle(23);flag3->SetMarkerSize(0.5);flag3->SetMarkerColor(5);
00130 TH2F *flag4=new TH2F("flag4","flag4",160,0,160,255,0,255);
00131 flag4->SetMarkerStyle(29);flag4->SetMarkerSize(0.5);flag4->SetMarkerColor(3);
00132 TH2F *flag5=new TH2F("flag5","flag5",160,0,160,255,0,255);
00133 flag5->SetMarkerStyle(22);flag5->SetMarkerSize(0.5);flag5->SetMarkerColor(6);
00134 TH2F *flag10=new TH2F("flag10","flag10",160,0,160,255,0,255);
00135 flag10->SetMarkerStyle(20);flag10->SetMarkerSize(0.5);flag10->SetMarkerColor(2);
00136 TH2F *flag11=new TH2F("flag11","flag11",160,0,160,255,0,255);
00137 flag11->SetMarkerStyle(29);flag11->SetMarkerSize(0.5);flag11->SetMarkerColor(7);
00138 TH2F *flag12=new TH2F("flag12","flag12",160,0,160,255,0,255);
00139 flag12->SetMarkerStyle(29);flag12->SetMarkerSize(0.5);flag12->SetMarkerColor(3);
00140 TH2F *flag13=new TH2F("flag13","flag13",160,0,160,255,0,255);
00141 flag13->SetMarkerStyle(23);flag13->SetMarkerSize(0.5);flag13->SetMarkerColor(5);
00142 TH2F *flag14=new TH2F("flag14","flag14",160,0,160,255,0,255);
00143 flag14->SetMarkerStyle(29);flag14->SetMarkerSize(0.5);flag14->SetMarkerColor(3);
00144 TH2F *flag15=new TH2F("flag15","flag15",160,0,160,255,0,255);
00145 flag15->SetMarkerStyle(22);flag15->SetMarkerSize(0.5);flag15->SetMarkerColor(6);
00146 TH2F *flag16=new TH2F("flag16","flag16",160,0,160,255,0,255);
00147 flag16->SetMarkerStyle(28);flag16->SetMarkerSize(0.5);flag16->SetMarkerColor(8);
00148
00149 for (int k=0;k<=maxentries;k++)
00150 {
00151 bevent->GetEntry(k);
00152 bcluster->GetEntry(k);
00153
00154 if (event.nevent==evt)
00155 {
00156
00157
00158 if (cluster.sec==i && cluster.row==j)
00159 {
00160
00161
00162
00163
00164 if (cluster.flag==0) {flag0->Fill(cluster.padpos,cluster.timepos);}
00165
00166 if (cluster.flag==1) {flag1->Fill(cluster.padpos,cluster.timepos);}
00167
00168 if (cluster.flag==2) {flag2->Fill(cluster.padpos,cluster.timepos);}
00169
00170 if (cluster.flag==3) {flag3->Fill(cluster.padpos,cluster.timepos);}
00171
00172 if (cluster.flag==4) {flag4->Fill(cluster.padpos,cluster.timepos);}
00173
00174 if (cluster.flag==5) {flag5->Fill(cluster.padpos,cluster.timepos);}
00175
00176 if (cluster.flag==10) {flag10->Fill(cluster.padpos,cluster.timepos);}
00177
00178 if (cluster.flag==11) {flag11->Fill(cluster.padpos,cluster.timepos);}
00179
00180 if (cluster.flag==12) {flag12->Fill(cluster.padpos,cluster.timepos);}
00181
00182 if (cluster.flag==13) {flag13->Fill(cluster.padpos,cluster.timepos);}
00183
00184 if (cluster.flag==14) {flag14->Fill(cluster.padpos,cluster.timepos);}
00185
00186 if (cluster.flag==15) {flag15->Fill(cluster.padpos,cluster.timepos);}
00187
00188 if (cluster.flag>=16) {flag16->Fill(cluster.padpos,cluster.timepos);}
00189
00190
00191 }
00192 }
00193 }
00194
00195 flag0->DrawCopy("same");
00196 flag1->DrawCopy("same");
00197 flag2->DrawCopy("same");
00198 flag3->DrawCopy("same");
00199 flag4->DrawCopy("same");
00200 flag5->DrawCopy("same");
00201
00202 flag10->DrawCopy("same");
00203 flag11->DrawCopy("same");
00204 flag12->DrawCopy("same");
00205 flag13->DrawCopy("same");
00206 flag14->DrawCopy("same");
00207 flag15->DrawCopy("same");
00208 flag16->DrawCopy("same");
00209 TLegend *leg = new TLegend(0.46,0.72,0.80,0.86);
00210 leg->SetFillColor(10);
00211 leg->SetTextSize(0.03);
00212 leg->AddEntry(flag0,"flag=0","P");
00213 leg->AddEntry(flag10,"flag=10","P");
00214 leg->AddEntry(flag11,"flag=1 & flag=11","P");
00215 leg->AddEntry(flag3,"flag=3 & flag=13","P");
00216 leg->AddEntry(flag4,"flag=4 & flag=14","P");
00217 leg->AddEntry(flag15,"flag=5 & flag=15","P");
00218 leg->AddEntry(flag16,"flag=6 & flag=16","P");
00219
00220
00221
00222
00223 leg->Draw();
00224 c1->Update();
00225 flag0->Delete();
00226 flag1->Delete();
00227 flag2->Delete();
00228 flag3->Delete();
00229 flag4->Delete();
00230 flag5->Delete();
00231
00232 flag10->Delete();
00233 flag11->Delete();
00234 flag12->Delete();
00235 flag13->Delete();
00236 flag14->Delete();
00237 flag15->Delete();
00238 flag16->Delete();
00239
00240
00241 }
00242 }
00243 else break
00244 }
00245
00246 cout<<"Ps-file created !"<<endl;
00247
00248
00249
00250 f->Close();
00251 leg->Delete();
00252 c1->Delete();
00253 }
00254
00255
00256
00257 bool laser_sector(int whichftpc,int whichsec,int sec)
00258 {
00259 if (whichftpc==2)
00260 {
00261 switch(whichsec)
00262 {
00263
00264 case 0:
00265
00266 if (sec>30)
00267 return kTRUE;
00268 break;
00269 case 1:
00270 if (sec==32 || sec==38 || sec==44 || sec==50 || sec==56)
00271 return kTRUE;
00272 else
00273 return kFALSE;
00274 break;
00275 case 2:
00276 if (sec==34 || sec==40 || sec==46 || sec==52 || sec==58)
00277 return kTRUE;
00278 else
00279 return kFALSE;
00280 break;
00281 case 3:
00282 if (sec==36 || sec==42 || sec==48 || sec==54 || sec==60)
00283 return kTRUE;
00284 else
00285 return kFALSE;
00286 break;
00287 default :
00288 {
00289 cout<<"ERROR : Kein gueltiger Lasersector !"<<endl;
00290 return kFALSE;
00291 }
00292 }
00293 }
00294 else if (whichftpc==1)
00295 {
00296 switch(whichsec)
00297 {
00298 case 0:
00299
00300 if (sec<31)
00301 return kTRUE;
00302 break;
00303 case 1:
00304 if (sec==2 || sec==8 || sec==14 || sec==20 || sec==26)
00305 return kTRUE;
00306 else
00307 return kFALSE;
00308 break;
00309 case 2:
00310 if (sec==4 || sec==10 || sec==16 || sec==22 || sec==28)
00311 return kTRUE;
00312 else
00313 return kFALSE;
00314 break;
00315 case 3:
00316 if (sec==6 || sec==12 || sec==18 || sec==24 || sec==30)
00317 return kTRUE;
00318 else
00319 return kFALSE;
00320 break;
00321 default :
00322 {
00323 cout<<"ERROR : Kein gueltiger Lasersector !"<<endl;
00324 return kFALSE;
00325 }
00326 }
00327 }
00328 else {
00329 cout<<"ERROR : Keine FTPC gewaehlt !"<<endl;
00330 return kFALSE;
00331 }
00332 }