/[PAMELA software]/PamCut/Collections/EffCollection/EffCollection.cpp
ViewVC logotype

Annotation of /PamCut/Collections/EffCollection/EffCollection.cpp

Parent Directory Parent Directory | Revision Log Revision Log


Revision 1.5 - (hide annotations) (download)
Thu Sep 24 18:17:28 2009 UTC (15 years, 2 months ago) by pam-fi
Branch: MAIN
Changes since 1.4: +18 -8 lines
Error computation for efficiency added, output format modified.

1 pam-fi 1.1 /*
2     * EffCollection.cpp
3     *
4     * Created on: 10/ago/2009
5     * Author: Nicola Mori
6     */
7    
8     /*! @file EffCollection.cpp The EffCollection class implementation file. */
9    
10     #include "EffCollection.h"
11    
12 pam-fi 1.5 extern "C" {
13     bool efficiency_(Int_t*, Int_t*, Double_t*, Double_t*, Double_t*);
14     }
15    
16 pam-fi 1.3 EffCollection::EffCollection(const char *collectionName, TString outFileBase) :
17 pam-fi 1.1 VerboseCollection(collectionName), _selCollection("selCollection"), _detCollection("detCollection"), _outFileBase(
18 pam-fi 1.3 outFileBase), _det(0), _sel(0) {
19 pam-fi 1.1
20     }
21    
22     void EffCollection::AddDetectorCut(PamCut &cut) {
23     _detCollection.AddCut(cut);
24     }
25    
26     void EffCollection::AddSelectionCut(PamCut &cut) {
27     _selCollection.AddCut(cut);
28     }
29    
30     void EffCollection::AddDetectorAction(CollectionAction &action) {
31     _detCollection.AddAction(action);
32     }
33    
34     void EffCollection::AddSelectionAction(CollectionAction &action) {
35     _selCollection.AddAction(action);
36     }
37    
38     int EffCollection::ApplyCut(PamLevel2 *event) {
39    
40 pam-fi 1.3 _nEv++;
41     if (_selCollection.ApplyCut(event) == CUTOK) {
42     _sel++;
43     if (_detCollection.ApplyCut(event) == CUTOK) {
44     _det++;
45     _nGood++;
46     return CUTOK;
47 pam-fi 1.1 }
48     }
49    
50     return 0;
51     }
52    
53     void EffCollection::Finalize() {
54     // Let's add all the cuts to the vector of the collection before calling VerboseCollection::Finalize
55     for (unsigned int i = 0; i < _selCollection.GetSize(); i++)
56     _cuts.push_back(_selCollection.GetCut(i));
57     for (unsigned int i = 0; i < _detCollection.GetSize(); i++)
58     _cuts.push_back(_detCollection.GetCut(i));
59     // Now all the cuts are in place, and VerboseCollection can print its report
60     VerboseCollection::Finalize();
61 pam-fi 1.3
62 pam-fi 1.5 // Compute the error
63     Int_t sel = (Int_t) _sel;
64     Int_t det = (Int_t) _det;
65     Double_t eff, errLow, errHigh;
66     efficiency_(&sel, &det, &eff, &errLow, &errHigh);
67    
68     // Add some info about efficiency to the stdout
69 pam-fi 1.2 cout << " ****** Efficiency informations ******\n";
70     cout << " Detector cuts:\n";
71     for (unsigned int i = 0; i < _detCollection.GetSize(); i++)
72     cout << " - " << _detCollection.GetCut(i)->GetName() << "\n";
73 pam-fi 1.5 cout << " Total detector efficiency: " << eff << " +" << errHigh << "-" << errLow << endl;
74 pam-fi 1.1
75 pam-fi 1.3 // Write the output file
76 pam-fi 1.1 if (_outFileBase != "") {
77 pam-fi 1.5
78 pam-fi 1.3 ofstream outTextFile((_outFileBase + "-eff.txt").Data(), ios_base::out);
79 pam-fi 1.5 streamsize newPrec = 4;
80     outTextFile.precision(newPrec);
81     outTextFile.setf(ios::fixed, ios::floatfield);
82     outTextFile << setw(10) << det << setw(10) << sel << setw(10) << eff << setw(10) << errLow << setw(10) << errHigh
83     << endl;
84 pam-fi 1.1 outTextFile.close();
85     }
86    
87     }

  ViewVC Help
Powered by ViewVC 1.1.23