20 #include "GaudiKernel/SmartDataPtr.h"
21 #include "GaudiKernel/DataSvc.h"
23 #include "GaudiKernel/ITHistSvc.h"
48 m_profile_resolution=0;
54 for (
int i = 0;
i< 6;
i++ ){
55 m_hist_Psi_n_true[
i] = 0;
56 m_hist_Psi_n_reco[
i] = 0;
57 m_hist_Psi_n_ebe[
i] = 0;
58 m_hist_Psi_n_ebe_pt[
i] = 0;
62 for (
int i = 0;
i< 36;
i++ ){
63 m_hist_psi_corr_true[
i] = 0;
64 m_hist_psi_corr_reco[
i] = 0;
77 msg(MSG::INFO) <<
">>> CheckFlow_New from Initialize" <<
endmsg;
79 float pt_binvals[
n_ptbin+1]={0.0,0.25,0.5,1.0,1.5,2.0,2.5,3.0,3.5,4.0,6.0,8.0,12.0,16.0,20.0,30.0,40.0};
80 float eta_bin_max = 4.0;
85 msg(MSG::ERROR) <<
"Could not find StoreGateSvc" <<
endmsg;
90 ITHistSvc *rootHistSvc;
91 if (!service(
"THistSvc", rootHistSvc,
true).isSuccess()) {
92 msg(MSG::ERROR) <<
"Unable to locate THistSvc" <<
endmsg;
93 return StatusCode::FAILURE;
96 std::string StreamAndPath=
"/FlowOutPut/";
97 std::string histPath = StreamAndPath;
99 for (
int ihar=0;ihar<6;ihar++){
102 sprintf(
name,
"hist_Psi_%d_true",ihar+1);
103 sprintf(
name1,
"Truth Psi_{%d} distribution;%dPsi_{%d} Truth;events",ihar+1,ihar+1,ihar+1);
111 sprintf(
name,
"hist_Psi_%d_reco",ihar+1);
112 sprintf(
name1,
"Reconstructed Psi_{%d} distribution;%dPsi_{%d} Reco;events",ihar+1,ihar+1,ihar+1);
121 for (
int ihar2=0;ihar2<6;ihar2++)
123 int ihar_i=ihar*6+ihar2;
125 sprintf(
name,
"hist_Psi_corr_true_%d_%d",ihar+1,ihar2+1);
126 sprintf(
name1,
"true Psi_{%d} -Psi_{%d};%dPsi_{%d} -%dPsi_{%d} ;events",ihar+1,ihar2+1,ihar+1,ihar+1,ihar2+1,ihar2+1);
135 sprintf(
name,
"hist_Psi_corr_reco_%d_%d",ihar+1,ihar2+1);
136 sprintf(
name1,
"reco Psi_{%d} -Psi_{%d};%dPsi_{%d} -%dPsi_{%d} ;events",ihar+1,ihar2+1,ihar+1,ihar+1,ihar2+1,ihar2+1);
148 sprintf(
name,
"hist_v%d_ebe",ihar+1);
149 sprintf(
name1,
"v%d;v%d;events",ihar+1,ihar+1);
157 sprintf(
name ,
"hist_Psi%d_ebe",ihar+1);
158 sprintf(
name1,
"%d#Delta#Psi;%d(#Psi_{reco}-#Psi_{Truth});events",ihar+1,ihar+1);
166 sprintf(
name ,
"hist_Psi%d_ebe_pt",ihar+1);
167 sprintf(
name1,
"%d#Delta#Psi (pT weighted);%d(#Psi_{reco}-#Psi_{Truth});events",ihar+1,ihar+1);
180 for(
int ieta=0;ieta<
n_etabin;ieta++){
181 sprintf(
name ,
"profile_pt_dep_%d_eta%d" ,ihar+1,ieta);
182 sprintf(
name1,
"v%d vs pT (eta%d);pT;v%d",ihar+1,ieta,ihar+1);
191 for(
int ipt=0;ipt<
n_ptbin;ipt++){
192 sprintf(
name ,
"profile_eta_dep_%d_pt%d",ihar+1,ipt);
193 sprintf(
name1,
"v%d vs #eta; (ipt%d)#eta;v%d",ihar+1,ipt,ihar+1);
203 for(
int ieta=0;ieta<
n_etabin;ieta++){
204 sprintf(
name ,
"profile_pt_dep_reco_%d_eta%d",ihar+1,ieta);
205 sprintf(
name1,
"v%d vs pT (eta%d);pT;v%d",ihar+1,ieta,ihar+1);
215 for(
int ipt=0;ipt<
n_ptbin;ipt++){
216 sprintf(
name ,
"profile_eta_dep_reco_%d_pt%d",ihar+1,ipt);
217 sprintf(
name1,
"v%d vs #eta (pt%d);#eta;v%d",ihar+1,ipt,ihar+1);
241 msg(MSG::INFO) <<
">>> CheckFlow_New from execute" <<
endmsg;
243 float pt_binvals[
n_ptbin+1]={0.0,0.25,0.5,1.0,1.5,2.0,2.5,3.0,3.5,4.0,6.0,8.0,12.0,16.0,20.0,30.0,40.0};
244 float eta_bin_max = 4.0;
249 if (
m_sgSvc->
retrieve(hijing_pars,
"Hijing_event_params").isFailure() ) {
250 msg(MSG::ERROR) <<
"Could not retrieve Hijing_event_params"<<
endmsg;
251 return StatusCode::FAILURE;
254 float b = hijing_pars->
get_b();
255 float Psi_n[6],Psi_n_reco[6];
256 float Psi_n_reco_pos[6],Psi_n_reco_neg[6];
257 for(
int ihar=0;ihar<6;ihar++){Psi_n[ihar]=hijing_pars->
get_psi(ihar+1);}
263 if(b<m_bcut_min || b>
m_bcut_max)
return StatusCode::SUCCESS;
266 double ngenerated_pos = 0,ngenerated_pt_pos=0;
267 double cos_n_pos[6],sin_n_pos[6],cos_n_pt_pos[6],sin_n_pt_pos[6];
268 double ngenerated_neg = 0,ngenerated_pt_neg=0;
269 double cos_n_neg[6],sin_n_neg[6],cos_n_pt_neg[6],sin_n_pt_neg[6];
270 for(
int ihar=0;ihar<6;ihar++){cos_n_pos[ihar]=0;sin_n_pos[ihar]=0; cos_n_pt_pos[ihar]=0;sin_n_pt_pos[ihar]=0;
271 cos_n_neg[ihar]=0;sin_n_neg[ihar]=0; cos_n_pt_neg[ihar]=0;sin_n_pt_neg[ihar]=0;}
274 std::vector<HepMC::ConstGenParticlePtr>
particles;
276 if (
stat.isFailure()) {
281 int pid = pitr->pdg_id();
282 double pt = pitr->momentum().perp();
283 double rapid = pitr->momentum().pseudoRapidity();
284 double phi = pitr->momentum().phi();
286 <<
" PID = " <<
pid <<
" Status = " << pitr->status()
287 <<
" Eta = " << rapid <<
" Phi = " <<
phi<<
endmsg;
292 for(
int ihar=0;ihar<6;ihar++){
293 float temp=(ihar+1)*(
phi-Psi_n[ihar]);
295 int ieta= (
int)(std::abs(rapid)*
n_etabin/eta_bin_max);
299 float temp_pt=
pt/1000;
300 for(
int ipt=0;ipt<
n_ptbin;ipt++){
301 if(temp_pt<pt_binvals[ipt+1]){
307 if( rapid >3.2 && rapid< 4.9){
314 ngenerated_pt_pos +=
pt;
316 if( rapid <-3.2 && rapid >-4.9){
323 ngenerated_pt_neg +=
pt;
333 float cos_n[6],sin_n[6],cos_n_pt[6],sin_n_pt[6];
334 for(
int ihar=0;ihar<6;ihar++){
335 cos_n[ihar] = ( cos_n_pos[ihar]+ cos_n_neg[ihar] ) / (ngenerated_pos+ngenerated_neg);
336 sin_n[ihar] = ( sin_n_pos[ihar]+ sin_n_neg[ihar] ) / (ngenerated_pos+ngenerated_neg);
338 float psi_reco=std::atan2(sin_n[ihar],cos_n[ihar])/(ihar+1);
340 m_hist_vn_ebe [ihar]->Fill(std::sqrt(cos_n[ihar]*cos_n[ihar] +sin_n[ihar]*sin_n[ihar] ));
342 Psi_n_reco_pos[ihar]=std::atan2(sin_n_pos[ihar],cos_n_pos[ihar])/ (ihar+1);
343 Psi_n_reco_neg[ihar]=std::atan2(sin_n_neg[ihar],cos_n_neg[ihar])/ (ihar+1);
344 Psi_n_reco [ihar]=psi_reco;
347 cos_n_pt[ihar] = ( cos_n_pt_pos[ihar]+ cos_n_pt_neg[ihar] ) / (ngenerated_pt_pos+ngenerated_pt_neg);
348 sin_n_pt[ihar] = ( sin_n_pt_pos[ihar]+ sin_n_pt_neg[ihar] ) / (ngenerated_pt_pos+ngenerated_pt_neg);
350 psi_reco=std::atan2(sin_n_pt[ihar],cos_n_pt[ihar])/(ihar+1);
356 for(
int ihar=0;ihar<6;ihar++){
361 for(
int ihar2=0;ihar2<6;ihar2++){
362 psi1=(ihar+1)*Psi_n[ihar];psi2=(ihar2+1)*Psi_n[ihar2];
365 psi1=(ihar+1)*Psi_n_reco[ihar];psi2=(ihar2+1)*Psi_n_reco[ihar2];
375 for(
int ihar=0;ihar<6;ihar++){
379 double pt = pitr->momentum().perp();
380 double rapid = pitr->momentum().pseudoRapidity();
381 double phi = pitr->momentum().phi();
385 for(
int ihar=0;ihar<6;ihar++){
386 float temp=(ihar+1)*(
phi-Psi_n_reco_pos[ihar]);
387 if(rapid>0) temp=(ihar+1)*(
phi-Psi_n_reco_neg[ihar]);
390 int ieta= (
int)(std::abs(rapid)*
n_etabin/eta_bin_max);
393 float temp_pt=
pt/1000;
394 for(
int ipt=0;ipt<
n_ptbin;ipt++){
395 if(temp_pt<pt_binvals[ipt+1]){
408 return StatusCode::SUCCESS;
412 msg(MSG::INFO) <<
">>> CheckFlow_New from finalize" <<
endmsg;
414 return StatusCode::SUCCESS;