CMS 3D CMS Logo

 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Properties Friends Macros Pages
modGains.cc
Go to the documentation of this file.
1 #include <stdlib.h>
2 #include <iostream>
3 #include <fstream>
4 #include <vector>
5 #include <cstring>
6 #include <string>
7 
9 //#include "CondFormats/HcalObjects/interface/AllObjects.h"
13 
14 
15 
16 
17 
18 int main (int argn, char* argv []) {
19  if (argn < 4) {
20  std::cerr << "Use: " << argv[0] << " operation <gains(.txt)> <operand> <result(.txt)>" << std::endl;
21  std::cerr << " where operation: sadd,ssub,smult,sdiv = +-*/ of a scalar value \n";
22  std::cerr << " add,sub,mult,div = +-*/ of vector values (in RespCorr-format)\n";
23  return 1;
24  }
26 
27  // get base conditions
28  std::cerr << argv[2] << std::endl;
29  std::ifstream inStream (argv[2]);
30  HcalGains gainsIn(&topo);;
31  HcalDbASCIIIO::getObject (inStream, &gainsIn);
32 
33  // where to write the result
34  std::ofstream outStream (argv[4]);
35 
36  // operation and operand
37  float val = 1.0;
38  std::string s_operation;
39  s_operation = argv[1];
40  bool vectorop = false;
41 
42  HcalRespCorrs corrsIn(&topo);;
43 
44  if ( (std::strcmp(s_operation.c_str(),"add")==0) ||
45  (std::strcmp(s_operation.c_str(),"sub")==0) ||
46  (std::strcmp(s_operation.c_str(),"mult")==0) ||
47  (std::strcmp(s_operation.c_str(),"div")==0) ) // vector operation
48  {
49  vectorop = true;
50  std::ifstream inCorr (argv[3]);
51  HcalDbASCIIIO::getObject (inCorr, &corrsIn);
52  }
53  else if ((std::strcmp(s_operation.c_str(),"sadd")==0) ||
54  (std::strcmp(s_operation.c_str(),"ssub")==0) ||
55  (std::strcmp(s_operation.c_str(),"smult")==0) ||
56  (std::strcmp(s_operation.c_str(),"sdiv")==0)) // scalar operation
57  {
58  val = atof (argv[3]);
59  std::cerr << "Scalar operation: using val=" << val << std::endl;
60  }
61  else
62  {
63  std::cerr << "Unknown operator. Stopping. \n";
64  return 1;
65  }
66 
67  HcalGains gainsOut(&topo);;
68  std::vector<DetId> channels = gainsIn.getAllChannels ();
69  std::cerr << "size = " << channels.size() << std::endl;
70  for (unsigned i = 0; i < channels.size(); i++) {
71  DetId id = channels[i];
72 
73  if (vectorop) // vector operation
74  {
75  if ((std::strcmp(s_operation.c_str(),"mult")==0)||(std::strcmp(s_operation.c_str(),"div")==0)) val = 1.0; // mult,div
76  if ((std::strcmp(s_operation.c_str(),"add")==0)||(std::strcmp(s_operation.c_str(),"sub")==0)) val = 0.0; // add,sub
77  if (corrsIn.exists(id))
78  {
79  val = corrsIn.getValues(id)->getValue();
80  }
81  if (i%100 == 0)
82  std::cerr << "Vector operation, " << i << "th channel: using val=" << val << std::endl;
83  }
84 
85  // std::cerr << "val=" << val << std::endl;
86  HcalGain* p_item = 0;
87  if ((std::strcmp(s_operation.c_str(),"add")==0) || (std::strcmp(s_operation.c_str(),"sadd")==0))
88  p_item = new HcalGain(id, gainsIn.getValues(id)->getValue(0) + val, gainsIn.getValues(id)->getValue(1) + val,
89  gainsIn.getValues(id)->getValue(2) + val, gainsIn.getValues(id)->getValue(3) + val);
90 
91  if ((std::strcmp(s_operation.c_str(),"sub")==0) || (std::strcmp(s_operation.c_str(),"ssub")==0))
92  p_item = new HcalGain(id, gainsIn.getValues(id)->getValue(0) - val, gainsIn.getValues(id)->getValue(1) - val,
93  gainsIn.getValues(id)->getValue(2) - val, gainsIn.getValues(id)->getValue(3) - val);
94 
95  if ((std::strcmp(s_operation.c_str(),"mult")==0) || (std::strcmp(s_operation.c_str(),"smult")==0))
96  p_item = new HcalGain(id, gainsIn.getValues(id)->getValue(0) * val, gainsIn.getValues(id)->getValue(1) * val,
97  gainsIn.getValues(id)->getValue(2) * val, gainsIn.getValues(id)->getValue(3) * val);
98 
99  if ((std::strcmp(s_operation.c_str(),"div")==0) || (std::strcmp(s_operation.c_str(),"sdiv")==0))
100  p_item = new HcalGain(id, gainsIn.getValues(id)->getValue(0) / val, gainsIn.getValues(id)->getValue(1) / val,
101  gainsIn.getValues(id)->getValue(2) / val, gainsIn.getValues(id)->getValue(3) / val);
102 
103 
104  // for all
105  if (p_item)
106  gainsOut.addValues(*p_item);
107  // std::cerr << i << std::endl;
108  }
109  // write out
110  HcalDbASCIIIO::dumpObject (outStream, gainsOut);
111  return 0;
112 }
113 
int i
Definition: DBlmapReader.cc:9
const Item * getValues(DetId fId, bool throwOnFail=true) const
float getValue(int fCapId) const
get value for capId = 0..3
Definition: HcalGain.h:22
const bool exists(DetId fId) const
std::vector< DetId > getAllChannels() const
Definition: DetId.h:18
bool getObject(std::istream &fInput, HcalPedestals *fObject)
bool dumpObject(std::ostream &fOutput, const HcalPedestals &fObject)
float getValue() const
Definition: HcalRespCorr.h:20
bool addValues(const Item &myItem)