| 346 |
|
|
| 347 |
/********** Magnetic Field **************/ |
/********** Magnetic Field **************/ |
| 348 |
// Check that all this is correct! |
// Check that all this is correct! |
| 349 |
float dimo = 0.0; // dipole moment (computed from dat files) |
float br, btheta, bphi; |
|
float bnorth, beast, bdown, babs; |
|
|
float xl; // L value |
|
|
float icode; // code value for L accuracy (see fortran code) |
|
|
float bab1; // What's the difference with babs? |
|
|
float stps = 0.005; // step size for field line tracing |
|
|
float bdel = 0.01; // required accuracy |
|
|
float bequ; // equatorial b value (also called b_0) |
|
|
bool value = 0; // false if bequ is not the minimum b value |
|
|
float rr0; // equatorial radius normalized to earth radius |
|
|
|
|
|
// Initialize fortran routines!!! |
|
|
initize_(); |
|
| 350 |
|
|
| 351 |
// I can now compute the magnetic dipole moment at the actual date, |
// I can now compute the magnetic dipole moment at the actual date, |
| 352 |
// using the cJulian date. I don't to recompute it for every event |
// using the cJulian date. I don't to recompute it for every event |
| 356 |
Int_t d = tledate.GetDay(); |
Int_t d = tledate.GetDay(); |
| 357 |
float year = (float) y + (m*31+d)/365; |
float year = (float) y + (m*31+d)/365; |
| 358 |
|
|
| 359 |
// Compute the magnetic dipole moment. |
// Initialize common data for geopack |
| 360 |
feldcof_(&year, &dimo); |
recalc_(y, m*31+d, 0, 0, 0); |
| 361 |
/********** Magnetic Field **************/ |
/********** Magnetic Field **************/ |
| 362 |
|
|
| 363 |
tr = (TTree*)rootFile->Get("Physics"); |
tr = (TTree*)rootFile->Get("Physics"); |
| 457 |
alt = coo.m_Alt; |
alt = coo.m_Alt; |
| 458 |
|
|
| 459 |
/********** Magnetic Field **************/ |
/********** Magnetic Field **************/ |
| 460 |
feldg_(&lat, &lon, &alt, &bnorth, &beast, &bdown, &babs); |
igrf_geo__((coo.m_Alt+6371.2)/6371.2, M_PI/2.-coo.m_Lat, coo.m_Lon, br, btheta, bphi); |
| 461 |
shellg_(&lat, &lon, &alt, &dimo, &xl, &icode, &bab1); |
// cout<<"("<<(coo.m_Alt+6371.2)/6371.2<<", "<<M_PI/2.-coo.m_Lat<<", "<<coo.m_Lon<<")"<<endl; |
|
findb0_(&stps, &bdel, &value, &bequ, &rr0); |
|
| 462 |
/********** Magnetic Field **************/ |
/********** Magnetic Field **************/ |
| 463 |
|
|
| 464 |
// serve fare il controllo deltatime < 1? |
// serve fare il controllo deltatime < 1? |
| 465 |
if (deltaTime > 1) cout << endl << "******** deltaTime<1 ********" << endl; |
if (deltaTime > 1) cout << endl << "******** deltaTime<1 ********" << endl; |
| 466 |
// Does nothing for the first two events or if acquisition time if more |
// Does nothing for the first two events or if acquisition time if more |
| 467 |
// than 1s. |
// than 1s. |
| 468 |
if(!i || (deltaTime > 1)) continue; |
if(i<1 || (deltaTime > 1)) continue; |
| 469 |
|
|
| 470 |
// CAS3 and CAS4 are not rates but only counters. So I fill |
// CAS3 and CAS4 are not rates but only counters. So I fill |
| 471 |
// with the bin with the difference beetween the actual counter |
// with the bin with the difference beetween the actual counter |
| 485 |
// this values but I need to count how many times I fill |
// this values but I need to count how many times I fill |
| 486 |
// each bin. This is done by the histogram event_counter. |
// each bin. This is done by the histogram event_counter. |
| 487 |
// I will normalize later. |
// I will normalize later. |
| 488 |
hbabs_counter->Fill(lon, lat, babs); |
hbabs_counter->Fill(lon, lat, sqrt(br*br+btheta*btheta+bphi*bphi)*1e-5); |
| 489 |
hbnorth_counter->Fill(lon, lat, bnorth); |
hbnorth_counter->Fill(lon, lat, -btheta*1e-5); |
| 490 |
hbdown_counter->Fill(lon, lat, bdown); |
hbdown_counter->Fill(lon, lat, -br*1e-5); |
| 491 |
hbeast_counter->Fill(lon, lat, beast); |
hbeast_counter->Fill(lon, lat, bphi*1e-5); |
|
hb0_counter->Fill(lon, lat, bequ); |
|
|
hl_counter->Fill(lon, lat, xl); |
|
| 492 |
|
|
| 493 |
// This histograms is now filled with the number of entries. |
// This histograms is now filled with the number of entries. |
| 494 |
// Below we will divide with the time (in seconds) to get |
// Below we will divide with the time (in seconds) to get |
| 559 |
TH2F *hbnorth_norm = (TH2F*) hbnorth_counter->Clone("hbnorth_norm"); |
TH2F *hbnorth_norm = (TH2F*) hbnorth_counter->Clone("hbnorth_norm"); |
| 560 |
TH2F *hbdown_norm = (TH2F*) hbabs_counter->Clone("hbdown_norm"); |
TH2F *hbdown_norm = (TH2F*) hbabs_counter->Clone("hbdown_norm"); |
| 561 |
TH2F *hbeast_norm = (TH2F*) hbabs_counter->Clone("hbeast_norm"); |
TH2F *hbeast_norm = (TH2F*) hbabs_counter->Clone("hbeast_norm"); |
|
TH2F *hb0_norm = (TH2F*) hb0_counter->Clone("hb0_norm"); |
|
|
TH2F *hl_norm = (TH2F*) hl_counter->Clone("hl_norm"); |
|
| 562 |
|
|
| 563 |
// Now we divide each histogram _counter with the time histogram |
// Now we divide each histogram _counter with the time histogram |
| 564 |
// obtBinTime to have an histogram _rate. Note that, when a second |
// obtBinTime to have an histogram _rate. Note that, when a second |
| 574 |
trigS111A_rate->Divide(trigS111A_counter, obtBinTime, 1, 1, ""); |
trigS111A_rate->Divide(trigS111A_counter, obtBinTime, 1, 1, ""); |
| 575 |
oss.str(""); |
oss.str(""); |
| 576 |
oss << basename.Data() << "_orbit_trigS111A.png"; |
oss << basename.Data() << "_orbit_trigS111A.png"; |
| 577 |
|
trigS111A_rate->SetMinimum(9); |
| 578 |
printHist(trigS111A_rate, mapFile, outDirectory, oss.str().c_str(), "S111A (Hz)", -width, height, true, 0); |
printHist(trigS111A_rate, mapFile, outDirectory, oss.str().c_str(), "S111A (Hz)", -width, height, true, 0); |
| 579 |
|
|
| 580 |
antiCAS4_rate->Divide(antiCAS4_counter, obtBinTime, 1, 1, ""); |
antiCAS4_rate->Divide(antiCAS4_counter, obtBinTime, 1, 1, ""); |
| 581 |
oss.str(""); |
oss.str(""); |
| 582 |
oss << basename.Data() << "_orbit_CAS4.png"; |
oss << basename.Data() << "_orbit_CAS4.png"; |
| 583 |
|
antiCAS4_rate->SetMinimum(99); |
| 584 |
printHist(antiCAS4_rate, mapFile, outDirectory, oss.str().c_str(), "CAS4 (Hz)", -width, height, true, 0); |
printHist(antiCAS4_rate, mapFile, outDirectory, oss.str().c_str(), "CAS4 (Hz)", -width, height, true, 0); |
| 585 |
|
|
| 586 |
antiCAS3_rate->Divide(antiCAS3_counter, obtBinTime, 1, 1, ""); |
antiCAS3_rate->Divide(antiCAS3_counter, obtBinTime, 1, 1, ""); |
| 587 |
oss.str(""); |
oss.str(""); |
| 588 |
oss << basename.Data() << "_orbit_CAS3.png"; |
oss << basename.Data() << "_orbit_CAS3.png"; |
| 589 |
|
antiCAS3_rate->SetMinimum(99); |
| 590 |
printHist(antiCAS3_rate, mapFile, outDirectory, oss.str().c_str(), "CAS3 (Hz)", -width, height, true, 0); |
printHist(antiCAS3_rate, mapFile, outDirectory, oss.str().c_str(), "CAS3 (Hz)", -width, height, true, 0); |
| 591 |
|
|
| 592 |
event_rate->Divide(event_counter, obtBinTime, 1, 1, ""); |
event_rate->Divide(event_counter, obtBinTime, 1, 1, ""); |
| 597 |
trigS11andS12_rate->Divide(trigS11andS12_counter, obtBinTime, 1, 1, ""); |
trigS11andS12_rate->Divide(trigS11andS12_counter, obtBinTime, 1, 1, ""); |
| 598 |
oss.str(""); |
oss.str(""); |
| 599 |
oss << basename.Data() << "_orbit_trigS11andS12.png"; |
oss << basename.Data() << "_orbit_trigS11andS12.png"; |
| 600 |
|
trigS11andS12_rate->SetMinimum(99); |
| 601 |
printHist(trigS11andS12_rate, mapFile, outDirectory, oss.str().c_str(), "(S11*S12) (Hz)", -width, height, 1, 0); |
printHist(trigS11andS12_rate, mapFile, outDirectory, oss.str().c_str(), "(S11*S12) (Hz)", -width, height, 1, 0); |
| 602 |
|
|
| 603 |
trigS12andS21andS22_rate->Divide(trigS12andS21andS22_counter, obtBinTime, 1, 1, ""); |
trigS12andS21andS22_rate->Divide(trigS12andS21andS22_counter, obtBinTime, 1, 1, ""); |
| 604 |
oss.str(""); |
oss.str(""); |
| 605 |
oss << basename.Data() << "_orbit_trigS12andS21andS22.png"; |
oss << basename.Data() << "_orbit_trigS12andS21andS22.png"; |
| 606 |
|
trigS12andS21andS22_rate->SetMinimum(9); |
| 607 |
printHist(trigS12andS21andS22_rate, mapFile, outDirectory, oss.str().c_str(), "(S12*S12*S21) (Hz)", -width, height, true, 0); |
printHist(trigS12andS21andS22_rate, mapFile, outDirectory, oss.str().c_str(), "(S12*S12*S21) (Hz)", -width, height, true, 0); |
| 608 |
|
|
| 609 |
trigAndOr_rate->Divide(trigAndOr_counter, obtBinTime, 1, 1, ""); |
trigAndOr_rate->Divide(trigAndOr_counter, obtBinTime, 1, 1, ""); |
| 645 |
oss << basename.Data() << "_orbit_Beast.png"; |
oss << basename.Data() << "_orbit_Beast.png"; |
| 646 |
printHist(hbeast_norm, mapFile, outDirectory, oss.str().c_str(), "B east (G)", -width, height, 0, 1); |
printHist(hbeast_norm, mapFile, outDirectory, oss.str().c_str(), "B east (G)", -width, height, 0, 1); |
| 647 |
|
|
|
hb0_norm->Divide(hb0_counter, event_counter, 1, 1, ""); |
|
|
oss.str(""); |
|
|
oss << basename.Data() << "_orbit_B0.png"; |
|
|
printHist(hb0_norm, mapFile, outDirectory, oss.str().c_str(), "B_0 (G)", -width, height, 0, 0); |
|
|
|
|
|
hl_norm->Divide(hl_counter, event_counter, 1, 1, ""); |
|
|
oss.str(""); |
|
|
oss << basename.Data() << "_orbit_L.png"; |
|
|
printHist(hl_norm, mapFile, outDirectory, oss.str().c_str(), "L shell", -width, height, 0, 0); |
|
|
|
|
| 648 |
|
|
| 649 |
delete obtBinTime; |
delete obtBinTime; |
| 650 |
delete event_counter; |
delete event_counter; |
| 672 |
delete hbnorth_counter; |
delete hbnorth_counter; |
| 673 |
delete hbdown_counter; |
delete hbdown_counter; |
| 674 |
delete hbeast_counter; |
delete hbeast_counter; |
|
delete hb0_counter; |
|
|
delete hl_counter; |
|
| 675 |
delete hbabs_norm; |
delete hbabs_norm; |
| 676 |
delete hbnorth_norm; |
delete hbnorth_norm; |
| 677 |
delete hbdown_norm; |
delete hbdown_norm; |
| 678 |
delete hbeast_norm; |
delete hbeast_norm; |
|
delete hb0_norm; |
|
|
delete hl_norm; |
|
| 679 |
|
|
| 680 |
rootFile->Close(); |
rootFile->Close(); |
| 681 |
} |
} |
| 706 |
// Create a canvas and draw the TH2F with a nice colormap for z |
// Create a canvas and draw the TH2F with a nice colormap for z |
| 707 |
// values, using log scale for z values, if requested, and setting |
// values, using log scale for z values, if requested, and setting |
| 708 |
// some title. |
// some title. |
| 709 |
TCanvas *canvas = new TCanvas("h", "passed histogram", width*2, height*2); |
TCanvas *canvas = new TCanvas("h", "h histogram", width*2, height*2); |
| 710 |
|
|
| 711 |
if(use_log) { |
if(use_log) canvas->SetLogz(); |
|
h->SetMinimum(1); |
|
|
canvas->SetLogz(); |
|
|
} |
|
| 712 |
|
|
| 713 |
h->SetTitle(title); |
h->SetTitle(title); |
| 714 |
h->SetXTitle("Longitude (deg)"); |
h->SetXTitle("Longitude (deg)"); |