50 if (plane != NULL )plane->
print();
60 std::cout <<
"Event " <<
nEvents << std::endl;
71 for(UInt_t ndet=0;ndet<2;ndet++) {
75 if ( m == NULL )
continue;
76 for(Int_t i=0;i<
NADC;i++){
77 for(Int_t j=0;j<
NCHAN;j++){
79 if(q <= -1000)
continue;
88 Int_t nElectronsTot = 0;
90 for(Int_t i = 0; i<nIonTr; i++){
93 for(Int_t j = 0; j<nPoints; j++){
95 nElectronsTot += point->
GetNe();
100 Info(
"process",
"%g / %d = %g",qTotEvt,nElectronsTot,qTotEvt/nElectronsTot);
101 hQoverNe->Fill(qTotEvt/nElectronsTot);
138 const Int_t nTr = trArray->GetEntries();
140 Info(
"process",
"nTr = %d",nTr);
142 Int_t nCl = clArray->GetEntries();
146 for(Int_t itr = 0; itr<nTr; itr++){
154 Info(
"process",
"angles = %g %g",angle[0],angle[1]);
155 if(angle[0]==0)
return;
156 if(angle[1]==0)
return;
160 Double_t alpha = TMath::Abs(TMath::Cos(angle[0])*TMath::Cos(angle[1]));
161 Double_t alpha2 = TMath::Abs(TMath::Sin(angle[0])*TMath::Sin(angle[1]));
164 Double_t tmin[2],
tmax[2];
169 const Int_t maxN = 20;
170 Double_t Qx[511][maxN], Qy[511][maxN];
172 Double_t X[511][maxN], Y[511][maxN];
173 Int_t Nx[511], Ny[511];
174 Double_t Qxtot[511], Qytot[511];
175 for(Int_t i = 0; i<511; i++) {
176 for(Int_t j = 0; j<maxN; j++) {
189 Double_t QtotX = 0, QtotY = 0;
190 for(Int_t icl = 0; icl<nCl; icl++){
197 Double_t mean = cluster->
GetMean();
198 Double_t q = cluster->
GetQ();
201 if(!(TMath::Abs(fmod(mean+16.5,33)-11.5)<5))
203 if(alpha<0.05)
continue;
204 if(alpha>0.4)
continue;
205 if(!(TMath::Abs(fmod(index+16.5,33)-11.5)<5))
206 hQclVsT2[plane]->Fill(mean,q*alpha2);
211 if(index<tmin[plane]) tmin[plane] = index;
212 if(index>tmax[plane]) tmax[plane] = index;
213 hMean[plane]->Fill(mean);
218 Qx[index][Nx[index]] = q;
220 X[index][Nx[index]] = mean;
228 Qy[index][Ny[index]] = q;
230 Y[index][Ny[index]] = mean;
234 if(!(TMath::Abs(fmod(mean+16.5,33)-11.5)<5))
239 if(!(TMath::Abs(fmod(mean+16.5,33)-11.5)<5))
241 if(alpha<0.5)
continue;
242 if(alpha>0.95)
continue;
243 if(!(TMath::Abs(fmod(mean+16.5,33)-11.5)<5))
244 hQclVsT[plane]->Fill(index,q*alpha);
245 hQclVsCh[plane]->Fill(mean,q*alpha);
249 for(Int_t i = 0; i<511; i++){
250 for(Int_t j = 0; j<Nx[i]; j++){
251 if(Qx[i][j] == 0)
continue;
254 for(Int_t k = 0; k<Ny[i]; k++){
255 if(Qy[i][k] == 0)
continue;
262 if(Qxtot[i] == 0)
continue;
263 if(Qytot[i] == 0)
continue;
264 hQVsT[0]->Fill(i,Qxtot[i]*alpha);
265 hQVsT[1]->Fill(i,Qytot[i]*alpha);
266 if(i>tmin[0]+10 && i<tmax[0]-10)
267 hQVsTcut[0]->Fill(i,Qxtot[i]*alpha);
268 if(i>tmin[1]+10 && i<tmax[1]-10)
269 hQVsTcut[1]->Fill(i,Qytot[i]*alpha);
271 hQVsAlpha[0]->Fill(alpha,Qxtot[i]*alpha);
272 hQVsAlpha[1]->Fill(alpha,Qytot[i]*alpha);
292 Double_t pz = mcTrack->
GetPz();
297 TH1F* hTmp =
new TH1F(
"hTmp",
"",512,0,512);
298 for(Int_t i = 0; i<nIonTr; i++){
302 for(Int_t j = 0; j<nPoints; j++){
304 hTmp->Fill(point->
GetZ(),point->
GetNe()*pz);
308 for(Int_t i = 0; i<512; i++)
309 hNeVsZSim1->Fill(hTmp->GetXaxis()->GetBinCenter(i+1),400*hTmp->GetBinContent(i+1)/1.);
311 for(Int_t i = 0; i<256; i++)
312 hNeVsZSim2->Fill(hTmp->GetXaxis()->GetBinCenter(i+1),400*hTmp->GetBinContent(i+1)/2.);
314 for(Int_t i = 0; i<128; i++)
315 hNeVsZSim3->Fill(hTmp->GetXaxis()->GetBinCenter(i+1),400*hTmp->GetBinContent(i+1)/4.);
317 for(Int_t i = 0; i<64; i++)
318 hNeVsZSim4->Fill(hTmp->GetXaxis()->GetBinCenter(i+1),400*hTmp->GetBinContent(i+1)/8.);
393 std::cout <<
"Event " <<
nEvents <<
" done" << std::endl;
399 hAlpha =
new TH1F(
"hAlpha",
";track angle",100,0,1);
402 hAngleTrack[0] =
new TH1F(
"hAngleTrackX",
";track angle",100,0,2*TMath::Pi());
403 hAngleTrack[1] =
new TH1F(
"hAngleTrackY",
";track angle",100,0,2*TMath::Pi());
405 hMean[0] =
new TH1F(
"hMeanX",
";X",300,0,300);
406 hMean[1] =
new TH1F(
"hMeanY",
";Y",300,0,300);
407 hMeanCut[0] =
new TH1F(
"hMeanCutX",
";X",300,0,300);
408 hMeanCut[1] =
new TH1F(
"hMeanCutY",
";Y",300,0,300);
410 hRatioVsAngle =
new TH3F(
"hRatioVsAngle",
";t;#alpha;Q_{x}/Q_{y}",512,0,512,100,0,1,500,0,5);
415 hQoverNe =
new TH1F(
"hQoverNe",
"",1000,0,1000);
418 fNtuple =
new TNtuple(
"fNtuple",
"ntuple",
"t:Qx:Qy:Wx:Wy:Nx:Ny:X:Y:alpha:QtotX:QtotY");
421 const Int_t nbinsQ = 500;
423 Double_t xmaxQ = 1e5;
424 Double_t logxminQ = TMath::Log(xminQ);
425 Double_t logxmaxQ = TMath::Log(xmaxQ);
426 Double_t binwidthQ = (logxmaxQ-logxminQ)/nbinsQ;
427 Double_t xbinsQ[nbinsQ+1];
429 for (Int_t i=1;i<=nbinsQ;i++)
430 xbinsQ[i] = TMath::Exp(logxminQ+i*binwidthQ);
431 hQ[0] =
new TH1F(
"hQX",
";Q_{cl}",nbinsQ,xbinsQ);
432 hQ[1] =
new TH1F(
"hQY",
";Q_{cl}",nbinsQ,xbinsQ);
433 hQclVsT[0] =
new TH2F(
"hQclVsTX",
";t;Q_{cl}",512,0,512,nbinsQ,xbinsQ);
434 hQclVsT[1] =
new TH2F(
"hQclVsTY",
";t;Q_{cl}",512,0,512,nbinsQ,xbinsQ);
435 hQclVsCh[0] =
new TH2F(
"hQclVsChX",
";channel;Q_{cl}",304,0,304,nbinsQ,xbinsQ);
436 hQclVsCh[1] =
new TH2F(
"hQclVsChY",
";channel;Q_{cl}",304,0,304,nbinsQ,xbinsQ);
437 hQclVsAlpha[0] =
new TH2F(
"hQclVsAlphaX",
";#alpha;Q",100,0,1,nbinsQ,xbinsQ);
438 hQclVsAlpha[1] =
new TH2F(
"hQclVsAlphaY",
";#alpha;Q",100,0,1,nbinsQ,xbinsQ);
439 hQclVsT2[0] =
new TH2F(
"hQclVsT2X",
";t;Q_{cl}",512,0,512,nbinsQ,xbinsQ);
440 hQclVsT2[1] =
new TH2F(
"hQclVsT2Y",
";t;Q_{cl}",512,0,512,nbinsQ,xbinsQ);
441 hQclVsCh2[0] =
new TH2F(
"hQclVsCh2X",
";channel;Q_{cl}",304,0,304,nbinsQ,xbinsQ);
442 hQclVsCh2[1] =
new TH2F(
"hQclVsCh2Y",
";channel;Q_{cl}",304,0,304,nbinsQ,xbinsQ);
443 hQclVsAlpha2[0] =
new TH2F(
"hQclVsAlpha2X",
";#alpha;Q",100,0,1,nbinsQ,xbinsQ);
444 hQclVsAlpha2[1] =
new TH2F(
"hQclVsAlpha2Y",
";#alpha;Q",100,0,1,nbinsQ,xbinsQ);
446 hNeVsZSim1 =
new TH2F(
"hNeVsZSim1",
";Z [mm];N_{electrons}",512,0,512,nbinsQ,xbinsQ);
447 hNeVsZSim2 =
new TH2F(
"hNeVsZSim2",
";Z [mm];N_{electrons}",256,0,512,nbinsQ,xbinsQ);
448 hNeVsZSim3 =
new TH2F(
"hNeVsZSim3",
";Z [mm];N_{electrons}",128,0,512,nbinsQ,xbinsQ);
449 hNeVsZSim4 =
new TH2F(
"hNeVsZSim4",
";Z [mm];N_{electrons}",64,0,512,nbinsQ,xbinsQ);
450 hNeVsLambda =
new TH2F(
"hNeVsLambda",
";Z [mm];N_{electrons}",1000,0,1000,nbinsQ,xbinsQ);
452 hQVsT[0] =
new TH2F(
"hQVsTX",
";channel;Q_{cl}",512,0,512,nbinsQ,xbinsQ);
453 hQVsT[1] =
new TH2F(
"hQVsTY",
";channel;Q_{cl}",512,0,512,nbinsQ,xbinsQ);
454 hQVsTcut[0] =
new TH2F(
"hQVsTcutX",
";channel;Q_{cl}",512,0,512,nbinsQ,xbinsQ);
455 hQVsTcut[1] =
new TH2F(
"hQVsTcutY",
";channel;Q_{cl}",512,0,512,nbinsQ,xbinsQ);
456 hQVsAlpha[0] =
new TH2F(
"hQVsAlphaX",
";#alpha;Q",100,0,1,nbinsQ,xbinsQ);
457 hQVsAlpha[1] =
new TH2F(
"hQVsAlphaY",
";#alpha;Q",100,0,1,nbinsQ,xbinsQ);
459 hRatioClVsX =
new TH2F(
"hRatioClVsX",
";X;Q",304,0,304,100,0,5);
460 hRatioClVsY =
new TH2F(
"hRatioClVsY",
";Y;Q",304,0,304,100,0,5);
461 hRatioClVsT =
new TH2F(
"hRatioClVsT",
";t;Q",512,0,512,100,0,5);
563 Int_t size = vect->GetSize();
564 Double_t truncMean = 0;
565 Double_t truncSigma = 0;
566 Int_t* index =
new Int_t[size];
567 TMath::Sort(size,vect->GetArray(),index,kFALSE);
568 Int_t t = 0, tLow, tHigh;
571 while(vect->At(index[t])<10&&t<size-1) t++;
572 tLow = TMath::FloorNint(t + (size - t)*tl);
573 tHigh = TMath::FloorNint(t + (size - t)*th);
575 for(Int_t tind = tLow; tind<tHigh; tind++){
576 truncMean += vect->At(index[tind]);
577 truncSigma += vect->At(index[tind])*vect->At(index[tind]);
581 if(tHigh-tLow < 15)
return 0;
583 truncMean /= (tHigh-tLow);
584 truncSigma /= (tHigh-tLow);
585 truncSigma -= truncMean*truncMean;
588 truncS = TMath::Sqrt(truncSigma);
TpcSimIonisationTrack * GetIonisationTrack(Int_t iTr)
HarpoRecoEvent * GetRecoEvent()
Double_t GetData(Int_t i, Int_t j)
Set/Get Data Cell.
Bool_t isExist(ULong_t det)
Detecror date exist //! Number of Real Detectors.
Track object, containing position, angle, charge and quality information.
Object containing the reconstruction information for one event (with array of HarpoRecoClusters Harpo...
TpcSimIonisationPoint * GetPoint(Int_t i)
A class store HARPO row DCC event data and header. End provide access metods to the row data...
Cluster object, containing position, charge and quality information.
TFile * OpenHistFile(const char *ananame)
unpacked dcc data The class contains the data map for DCC or Feminos The data is stored as a 2D TMatr...
HarpoDetEvent * GetDetEvent(Long_t plane=XDCC)
Data from Keller temperuture and pressure sensors.
void Save(char *mode=NULL)
Double_t TruncSigma(TArrayD *vect, Double_t &truncS, Double_t &truncM, Double_t tl, Double_t th)
Redefine empty default.
Analysis of charge distributions from event with single track Requires tracking information.
TpcSimMCTrack * GetTrack(Int_t i)
TpcSimMCEvent * GetMCEvent()
HarpoEventHeader * GetHeader()
const ULong_t gkNDetectors
void print()
Ovreloaded medod whic do all job.
TClonesArray * GetTracksArray()
HarpoDccMap * GetDccMap(Long_t plane=XDCC)
TClonesArray * GetClustersArray()
R__EXTERN HarpoDetSet * gHDetSet