diff --git a/examples/DBASE/test.database b/examples/DBASE/test.database index 577f1a66e1ecfb783d2e8d070499977634c70cd2..d4dae4a85cabfb629f2db613651b56e8804371cb 100644 --- a/examples/DBASE/test.database +++ b/examples/DBASE/test.database @@ -10,6 +10,11 @@ hpartmass = 0.13957 52949 g_ctp_parm_filename="PARAM/52949/general.param" g_decode_map_filename="MAPS/july04.map" +# From DBASE/online04.kinematics_online. +gpbeam = 1.2048 +hpcentral = 0.811 +htheta_lab = 55. +hpartmass = 0.00051099 47000-48000 g_ctp_parm_filename="PARAM/general.param" g_decode_map_filename="MAPS/jan03.map" diff --git a/examples/PARAM/52949/hcana.param b/examples/PARAM/52949/hcana.param deleted file mode 100644 index d49faaa41e6d7cb2de2eae66d474da35c8f4c7d1..0000000000000000000000000000000000000000 --- a/examples/PARAM/52949/hcana.param +++ /dev/null @@ -1,22 +0,0 @@ -; -; Parameters that were built into Fortran analyzer that we want -; to pass as parameters so that the resulting code can be more generic. -; - -hhodo_num_planes = 4 - -hcal_num_layers = 4 - -hcal_fv_delta = 5. - -haero_num_pairs = 8 - -# Names of planes so that parameter names can be constructed -hdc_plane_names = "1x1 1y1 1u1 1v1 1y2 1x2 2x1 2y1 2u1 2v1 2y2 2x2" - -hcal_layer_names = "1pr 2ta 3ta 4ta" - -hhodo_plane_names = "1x 1y 2x 2y" - -hpcentral=0.811 - diff --git a/examples/PARAM/52949/hcana.param b/examples/PARAM/52949/hcana.param new file mode 120000 index 0000000000000000000000000000000000000000..7fd888b6ebf1fb22416f5b98f23bbabf7f0d745c --- /dev/null +++ b/examples/PARAM/52949/hcana.param @@ -0,0 +1 @@ +../hcana.param \ No newline at end of file diff --git a/examples/PARAM/hcana.param b/examples/PARAM/hcana.param index e4c572f1d41d44d467c1eae590fed24e889eff05..1f9e393f0b67fed0ccc4079beadd84ae881bd61b 100644 --- a/examples/PARAM/hcana.param +++ b/examples/PARAM/hcana.param @@ -8,7 +8,13 @@ hhodo_num_planes = 4 hcal_num_layers = 4 # Exclusion band width for the calorimeter's fiducial volume. -hcal_fv_delta = 5.0 +hcal_fv_delta = 5. + +# Constants for the coordiante correction of the calorimeter energy depositions +hcal_a_cor = 200. +hcal_b_cor = 8000. +hcal_c_cor = 64.36 +hcal_d_cor = 1.66 haero_num_pairs = 8 diff --git a/src/THcShower.cxx b/src/THcShower.cxx index 5dec1873d82efd31b45e5edd37b2188b58d6a09b..36fc4a52fe7fd310cd1c6c1757abb049eaa09b35 100644 --- a/src/THcShower.cxx +++ b/src/THcShower.cxx @@ -187,6 +187,23 @@ Int_t THcShower::ReadDatabase( const TDatime& date ) cout << "Cluster debug flag = " << fdbg_clusters_cal << endl; cout << "Tracking debug flag = " << fdbg_tracks_cal << endl; + { + DBRequest list[]={ + {"cal_a_cor", &fAcor, kDouble}, + {"cal_b_cor", &fBcor, kDouble}, + {"cal_c_cor", &fCcor, kDouble}, + {"cal_d_cor", &fDcor, kDouble}, + {0} + }; + gHcParms->LoadParmValues((DBRequest*)&list, prefix); + } + + cout << "HMS Calorimeter coordinate correction constants:" << endl; + cout << " fAcor = " << fAcor << endl; + cout << " fBcor = " << fBcor << endl; + cout << " fCcor = " << fCcor << endl; + cout << " fDcor = " << fDcor << endl; + BlockThick = new Double_t [fNLayers]; fNBlocks = new Int_t [fNLayers]; fNLayerZPos = new Double_t [fNLayers]; @@ -623,9 +640,11 @@ Int_t THcShower::CoarseProcess( TClonesArray& tracks) fPlanes[j]->GetAneg(i) - fPlanes[j]->GetNegPed(i) > fPlanes[j]->GetNegThr(i) - fPlanes[j]->GetNegPed(i)) { //hit Double_t Edep = fPlanes[j]->GetEmean(i); + Double_t Epos = fPlanes[j]->GetEpos(i); + Double_t Eneg = fPlanes[j]->GetEneg(i); Double_t x = XPos[j][i] + BlockThick[j]/2.; //top + thick/2 Double_t z = fNLayerZPos[j] + BlockThick[j]/2.; //front + thick/2 - THcShowerHit* hit = new THcShowerHit(i,j,x,z,Edep); + THcShowerHit* hit = new THcShowerHit(i,j,x,z,Edep,Epos,Eneg); HitList.push_back(hit); @@ -656,7 +675,7 @@ Int_t THcShower::CoarseProcess( TClonesArray& tracks) //Print out the cluster list. // - fNclust = (*ClusterList).NbClusters(); + if (fdbg_clusters_cal) cout << "Cluster_list size: " << fNclust << endl; for (Int_t i=0; i!=fNclust; i++) { diff --git a/src/THcShower.h b/src/THcShower.h index 04a05797d6377f0b5dfe7bc1e4d2840fc98f0b48..28b710c43fe96aa5f28be7a8cf7d55e457f0fcb6 100644 --- a/src/THcShower.h +++ b/src/THcShower.h @@ -84,6 +84,10 @@ public: return fMult; } + Int_t GetNLayers() { + return fNLayers; + } + THcShower(); // for ROOT I/O protected: @@ -141,6 +145,11 @@ protected: Int_t fdbg_clusters_cal; Int_t fdbg_tracks_cal; + Double_t fAcor; // Coordinate correction constants + Double_t fBcor; + Double_t fCcor; + Double_t fDcor; + THcShowerPlane** fPlanes; // [fNLayers] Shower Plane objects TClonesArray* fTrackProj; // projection of track onto plane @@ -152,11 +161,14 @@ protected: void Setup(const char* name, const char* description); + // cluster to track association method. + Int_t MatchCluster(THaTrack*, THcShowerClusterList*, Double_t&, Double_t&); - friend class THcShowerPlane; + friend class THcShowerPlane; //to access debug flags. + // friend class THcShowerCluster; //to access fNLayers - ClassDef(THcShower,0) // Generic class + ClassDef(THcShower,0) // Generic class }; /////////////////////////////////////////////////////////////////////////////// diff --git a/src/THcShowerCluster.h b/src/THcShowerCluster.h index 6516a4092c6f88a075ae86d6c573e45acad743da..9f0ff506d480946f2ddb22f4503f808740073a05 100644 --- a/src/THcShowerCluster.h +++ b/src/THcShowerCluster.h @@ -3,6 +3,7 @@ //HMS calorimeter hit cluster, version 3. +//#include "THcShower.h" #include "THcShowerHit.h" //HMS calorimeter hit cluster @@ -87,17 +88,54 @@ class THcShowerCluster : THcShowerHitList { return Etot; } - //Energy deposition in the Preshower (1st layer) for a cluster + //Energy deposition in the Preshower (1st plane) for a cluster // Double_t clEpr() { Double_t Epr=0.; for (THcShowerHitIt it=THcShowerHitList::begin(); it!=THcShowerHitList::end(); it++) { - if ((*it)->hitColumn() == 0) Epr += (*it)->hitE(); + if ((*it)->hitColumn() == 0) { + Epr += (*it)->hitE(); + } } return Epr; } + //Cluster energy deposition in plane iplane=0,..,3. + // side=0 -- from positive PMTs only + // side=1 -- from negative PMTs only + // side=2 -- from postive and negative PMTs + // + + Double_t clEplane(Int_t iplane, Int_t side) { + + if (side!=0&&side!=1||side!=2) { + cout << "*** Wrong Side in clEplane:" << side << " ***" << endl; + return -1; + } + + Double_t Eplane=0.; + for (THcShowerHitIt it=THcShowerHitList::begin(); + it!=THcShowerHitList::end(); it++) { + + if ((*it)->hitColumn() == iplane) + + switch (side) { + case 0 : Eplane += (*it)->hitEpos(); + break; + case 1 : Eplane += (*it)->hitEneg(); + break; + case 2 : Eplane += (*it)->hitE(); + break; + default : ; + } + + } + + return Eplane; + } + + //Cluster size (number of hits in the cluster). // UInt_t clSize() { diff --git a/src/THcShowerHit.h b/src/THcShowerHit.h index 7d31b060593683f807042eb2bd09ff0775927181..76f70d9082a2242b711907353d440082ce114e49 100644 --- a/src/THcShowerHit.h +++ b/src/THcShowerHit.h @@ -14,7 +14,9 @@ class THcShowerHit { //HMS calorimeter hit class private: UInt_t fCol, fRow; //hit colomn and row Double_t fX, fZ; //hit X (vert.) and Z (along spect.axis) coordinates - Double_t fE; //hit energy deposition + Double_t fE; //hit mean energy deposition + Double_t fEpos; //hit energy deposition from positive PMT + Double_t fEneg; //hit energy deposition from negative PMT public: @@ -22,15 +24,19 @@ public: fCol=fRow=0; fX=fZ=0.; fE=0.; + fEpos=0.; + fEneg=0.; } THcShowerHit(UInt_t hRow, UInt_t hCol, Double_t hX, Double_t hZ, - Double_t hE) { + Double_t hE, Double_t hEpos, Double_t hEneg) { fRow=hRow; fCol=hCol; fX=hX; fZ=hZ; fE=hE; + fEpos=hEpos; + fEneg=hEneg; } ~THcShowerHit() { @@ -57,6 +63,14 @@ public: return fE; } + Double_t hitEpos() { + return fEpos; + } + + Double_t hitEneg() { + return fEneg; + } + // Decide if a hit is neighbouring the current hit. // Two hits are neighbours if share a side or a corner. // @@ -69,8 +83,9 @@ public: //Print out hit information // void show() { - cout << "row=" << fRow << " column=" << fCol << - " x=" << fX << " z=" << fZ << " E=" << fE << endl; + cout << "row=" << fRow << " column=" << fCol + << " x=" << fX << " z=" << fZ + << " E=" << fE << " Epos=" << fEpos << " Eneg=" << fEneg << endl; } }; diff --git a/src/THcShowerPlane.cxx b/src/THcShowerPlane.cxx index edafce1319d3be9132c90a425e770bd996f3713a..b90f01d05e3aa9413d07273f9fa33120fb5339fb 100644 --- a/src/THcShowerPlane.cxx +++ b/src/THcShowerPlane.cxx @@ -209,6 +209,8 @@ Int_t THcShowerPlane::DefineVariables( EMode mode ) {"eneg", "Energy Depositions from Negative Side PMTs", "fEneg"}, {"emean", "Mean Energy Depositions", "fEMean"}, {"eplane", "Energy Deposition per plane", "fEplane"}, + {"eplane_pos", "Energy Deposition per plane from pos. PMTs","fEplane_pos"}, + {"eplane_neg", "Energy Deposition per plane from neg. PMTs","fEplane_neg"}, { 0 } }; @@ -296,6 +298,8 @@ Int_t THcShowerPlane::ProcessHits(TClonesArray* rawhits, Int_t nexthit) } fEplane = 0; + fEplane_pos = 0; + fEplane_neg = 0; Int_t nrawhits = rawhits->GetLast()+1; @@ -348,6 +352,8 @@ Int_t THcShowerPlane::ProcessHits(TClonesArray* rawhits, Int_t nexthit) fEmean[hit->fCounter-1] += (fEpos[hit->fCounter-1] + fEneg[hit->fCounter-1]); fEplane += fEmean[hit->fCounter-1]; + fEplane_pos += fEpos[hit->fCounter-1]; + fEplane_neg += fEneg[hit->fCounter-1]; ihit++; } diff --git a/src/THcShowerPlane.h b/src/THcShowerPlane.h index eb684108c7cea8c8f05ac04d2f86042b57715016..8b4de6f8e83fc478b16d116bf85ff1f1011033f4 100644 --- a/src/THcShowerPlane.h +++ b/src/THcShowerPlane.h @@ -54,10 +54,26 @@ public: return fEplane; }; + Double_t GetEplane_pos() { + return fEplane_pos; + }; + + Double_t GetEplane_neg() { + return fEplane_neg; + }; + Double_t GetEmean(Int_t i) { return fEmean[i]; }; + Double_t GetEpos(Int_t i) { + return fEpos[i]; + }; + + Double_t GetEneg(Int_t i) { + return fEneg[i]; + }; + Double_t GetAposP(Int_t i) { return fA_Pos_p[i]; }; @@ -101,6 +117,9 @@ protected: Double_t* fEneg; // [fNelem] energy depositions seen by negative PMTs Double_t* fEmean; // [fNelem] mean energy depositions (pos + neg) Double_t fEplane; // Energy deposition in the plane + Double_t fEplane_pos; // Energy deposition in the plane from positive PMTs + Double_t fEplane_neg; // Energy deposition in the plane from negative PMTs + TClonesArray* fPosADCHits; // List of positive ADC hits TClonesArray* fNegADCHits; // List of negative ADC hits